最新技術動向調査
2024.5.27
今回は、社内でAIシステム開発業務をしている岩永・平良・伊佐の3名で行った「AI動向調査会」イベントについて共有いたします!
目次
イベントの趣旨と概要
最新のAI技術について知識を共有し、それらをどのように業務に活用できるか考えたり、気になる点を一緒に調べてインプットを促すためのイベント。60分間のセッションで、各参加者が興味を持っている技術についてのプレゼンテーションを行い、その後のディスカッションで意見交換を深めました。
※本イベントの内容は、以下の知識があると理解しやすいです。
- RAG
参考:https://www.elastic.co/jp/what-is/retrieval-augmented-generation - GPTs
参考:https://meet.acesinc.co.jp/blog/ai_chatgpt_gpts/
岩永の気になる技術: GPTsの新機能
岩永は、GPTsの新機能に注目しました!
個人が自分なりにカスタマイズしたGPTを公開して、ユーザーに公開できるGPTsに、
ブロックとステートの概念が公開予定とのことで、以下の投稿がXで共有されています。
このツイート以外にこの機能について触れているツイートはあまり探せませんでしたが、先ほどの情報源はChatGPT研究所という、大手生成AI情報サイトの代表の方のツイートなので、信憑性はあるかと思います。
さて、このブロックとステートという概念なのですが
以下のような説明がされています。
【Block】
- Blockを使用すると、GPTの指示を小さなセクションに分割し、どのシナリオでどれを読み込むかをGPTに判断させることができる
- 指示Blockは、GPTがそれらを使用することを決定した時に、GPTの指示の末尾に追加される
- GPTはこれらのBlockを名前でしか認識できず、初期のGPT指示には、これらのBlockの少なくとも1つを使用する方法を説明する必要がある
【State】
- Stateは、新しい会話の開始時に提供され、ユーザーごとのデータストレージをGPTに与える。
- GPTはこれらのStateに書き込むことも、そこから読み取ることもできる。
- ユーザーはこのデータを見ることができる。
※先ほどのツイート引用
簡単に説明すると、BlockはGPTに対する指示のシナリオ(プロンプトで指示するタスクの処理フロー?)をあらかじめ定義しておき、それをタスクによって、GPT自身が呼び出せるようになる機能
Stateは、GPTに行わせた処理や応答のデータをストレージに保存して、GPTに書き込ませたり読み取らせたりできる機能
と言ったところですかね。
平良の気になる技術: MindGraphとナレッジグラフ
平良さんが紹介したのは「Mindgraph」という技術です。
https://github.com/yoheinakajima/mindgraph
これは、ナレッジグラフを用いて関連情報を効率よく検索できるシステムです。
近年人気のRetrieval Augmented Generation(RAG)というChatGPTを使用した質問応答システムに、適応できる技術で、ビーンズラボでも3ヶ月くらい前に検証しようとしていたが、頓挫していた技術になります。
通常のDBでは、チャンクごとに保存されているので、チャンク間の関係性はわかりません。
それに対しナレッジグラフでは、データ全体を対象として、関連性をまとめられます。
例えば、ハリーポッターの内容をチャンク分けしたデータベースを構築したとします。
そのデータベースに対して、「ハリーポッターに2本目の箒を渡した人物の変身できる動物はなんですか?」(答え:犬)
という質問をベクトル検索で検索しても、答えに辿り着くようなチャンクを持って来れる可能性が低そうです。ベクトル検索では、文章と文章の意味的な近さは求められても、物と物の関係性は理解できていませんからね。
しかし、ナレッジグラフを構築すれば物と物の関係性を、「エンティティ」と「ノード」という概念で管理することができます。
エンティティは物、ノードはその関係性を表しています。
先ほどの例で言うと「ハリーポッター」や「箒」はエンティティ。「渡す」や「変身」はノードとして扱えますね。
なので、このナレッジグラフを使えば、先ほどの質問に対しても、エンティティからノードを繋いで、最終的に犬という回答を示すチャンクまで辿り着けるということです。
また、このMindGraphという実装では、ナレッジグラフの実装が簡単にできたり、質問文から最初にアクセスするエンティティを選ぶためにベクトル検索を使用しているのが特徴となっています。
伊佐の気になる技術: RAGとデータノイズ
伊佐さんは、Retrieval Augmented Generation(RAG)のデータノイズに関する論文を共有しました。論文を紹介しているツイートは以下です。
論文では、QAデータを対象にしたRAGで、検索したデータをプロンプトに挿入する際に、
関連度の高いドキュメントだけでなくノイズとなるランダムなQAデータを入れることによって、生成する文章の精度が上がるという結果が示されています。
例は以下のようになっています。
ベースライン
##ドキュメント##
[ドキュメント1] ※関連するデータ
(タイトル:ハン・ソロ) 映画の出来事の前に、彼とチューバッカは「ミレニアム・ファルコン」を盗賊に奪われましたが、それが...の後で船を取り戻します。
[ドキュメント2] ※関連するデータ
(タイトル:ミレニアム・ファルコン) 「ファルコン」はフランチャイズで何度も描かれ、所有権が何度も変わっています...
[ドキュメント3] ※回答の含まれるデータ
ハン・ソロはカードゲームのサバックでランド・カルリジアンからミレニアム・ファルコンを手に入れました...
質問:ハン・ソロの前にミレニアム・ファルコンを所有していたのは誰ですか
回答:ハン・ソロ (不正解)
ノイズを加えた例
質問が与えられ、提供されたドキュメントの中から答えを抽出して回答する必要があります(最大5トークン)。
もしドキュメントに答えが含まれていない場合は、NO-RESと回答してください。
##ドキュメント##
[ドキュメント140] ※ノイズデータ
イェーツの作品は生涯に渡ってほぼ全てが批評家からの称賛を受けていましたが、彼の本の売上が12,000部を超えたことは一度もありませんでした...
[ドキュメント242] ※ノイズデータ
(タイトル:Android バージョン履歴) コード名 バージョン番号 初回リリース日 API レベル セキュリティパッチ(コード名なし) 1.0 9月23日...
[ドキュメント3] ※回答の含まれるデータ
ハン・ソロはカードゲームのサバックでランド・カルリジアンからミレニアム・ファルコンを手に入れました...
質問:ハン・ソロの前にミレニアム・ファルコンを所有していたのは誰ですか
回答:ランド・カルリジアン (正解)
ノイズを加えたプロンプトの方が、正しく回答できたということですね!
それぞれの技術共有に対してのディスカッション
ディスカッション内容を以下にまとめます。
岩永の技術共有:GPTs
- 使用ユーザーの多いGPTsを作ったクリエイターに収益を提供するという情報も出てきているので、ビジネスとしてトライしてみるのも面白そう。
- wordpressについて答えてくれるものを自分で作ってみたことがある(平良)
- 簡単に作って、リリースできるので個人開発向き。
- 日報作成GPTを作りたい。
- プライベート公開もできそうなので社内活用もあり。
- 論文要約GPTが便利だった。→ 実際にイベント中に論文の内容を読ませて、内容の質疑応答を試してみたがうまく動いてとても使いやすかった。
平良の技術共有:Mind Graph
- 医療や経済など、いろんなデータに使えそう。
- 社内システムや、社内の規約で、具体的なケースの対応を知りたい時の文書検索なども良さそう。マニュアルだけでは難しそうなところも、内容の関係性を辿って検索結果を得られそう。
- ナレッジグラフは、既存の技術だとLangchainで作るのが一番楽そう。
- ナレッジグラフの検索エンジンって、特殊なものを使っているの? → ナレッジグラフ専用の検索エンジンのようなものがある。
- ベクトルベースでもキーワードベースでも最初のエンティティ検索はできる。
- 周辺情報でなく、シンプルな関係性の情報を得られるので精度も上がりやすそう。
- ただ、実行速度は遅くなるらしいのでその部分で制約のあるタスクだと厳しそう
伊佐の技術共有:RAGとデータノイズ
- 簡単に試せそうで良い。
- プロンプトのどこに負例を入れるのか、順番や挿入箇所も関係してきそう。
- 最初や最後に指示情報を入れると、真ん中に入れるより指示を理解させやすそう。
- 正解の文書1と、3~5の負例を入れることで最も効果的だったと論文に書いてあるが、実際のRAGだと、正解の文書一つのみをとってこれるわけではないため、いくつ入れればいいか難しそう。
まとめ
今回のイベントでは、参加メンバーの技術インプットも兼ねて最新技術動向の調査と発表、ディスカッションをしました。イベントの開催時だけでなく、普段から自分で最新動向を追って調べる癖をつけたり、みんなとディスカッションして理解を深めたいと思います!
システム開発・保守、導入支援など、
お気軽にご相談ください