RAGの精度向上
GPTsが出現し、RAGの重要性がさらに高まっている
一方で、あまりRAGをうまく使いこなせないという声もちらほら出ている
https://scrapbox.io/files/65502a589712fb001bdd493a.png
https://twitter.com/dory111111/status/1723261074018099221
https://scrapbox.io/files/65502aa802cea0001c069ad6.png
https://twitter.com/y_matsuwitter/status/1723258626704564507
Knowledgeのファイル形式について
https://twitter.com/0317_hiroya/status/1749934720132264394
https://scrapbox.io/files/65b04c88d21b270024f785d0.png
https://scrapbox.io/files/65b04ccde4a5c200239967f6.png
mdファイルとして渡し、コードインタープリター経由で読み取らせると、コンテキストオーバーフローを回避できそう
RAGのデータ量について
https://scrapbox.io/files/65ae13cc0ee6fb0024aaa5be.png
GPT-4など多くのモデルでRAGで精度上がるのは周知の通りだけど、
https://scrapbox.io/files/65ae136b1dd61c0024fb7705.png
RAGで読ませるデータ量が一定の閾値を超えないと逆に素のLLMよりも精度が下がり、適切に内部知識での回答と組み合わせることが重要なことが端的によく分かる。
https://www.pinecone.io/blog/rag-study/
OpenAIのプロンプトエンジニアのテクニックでは、
https://platform.openai.com/docs/guides/prompt-engineering/tactic-ask-the-model-if-it-missed-anything-on-previous-passes
プロンプトに埋め込むドキュメントが大きい場合モデルが早く停止する場合がある
モデルに「考える」時間を与える 章では以下の記述があります。
ドキュメントが大きい場合、モデルが早く停止し、関連するすべての抜粋をリストアップしないことがよくあります。
公式で読み込ませるドキュメントが大きい場合、モデルが早く停止する場合がある、と書いています。
たしかに大きいサイズのWebページやPDFなどを読み込ませると、最後まで本文を読んでくれないケースが多々あります。
対策としてPrompt Engineering Guideでは、 前回の回答で何かを見逃していないかモデルに尋ねる テクニックを紹介しています。
しかし、RAGアプリを作るケースでは、そもそも大きいサイズのプロンプトを投げるのが良くないのかもしれません。
筆者はRAGアプリを作る時に、大きめのサイズのドキュメントをプロンプトに埋め込んでいました。
ベンチマークを取ってもモデルの回答精度が不安で、プロンプトに埋め込むドキュメントサイズを無駄に大きくしがちだったのです。
改善策として、ベクターストアに挿入するドキュメントデータをチャンクサイズを小さくしてオーバーラップを大きくしたり、ベクターストアから検索したドキュメントデータを要約して埋め込んであげたり工夫をする良い機会になりました。
Lost in the Middle論文の通り、長すぎる文章を与えてしまうと、推測をさせる
LlamaIndex CEOのポスト
https://twitter.com/jerryjliu0/status/1710300984654663962
チャンク サイズの調整は、RAG アプリを改善する際に最初に取り組むべきことの 1 つですが、必ずしも直感的であるとは限りません。
⚠️チャンクが多いほど≠優れています (Lost in the middle / コンテキスト オーバーフロー)>
⚠️取得したチャンクを再ランキングしても必ずしも結果が改善されるわけではなく、実際には結果が悪化する可能性があります。
どのチャンク サイズが最適であるかを評価するには、評価ベンチマークを定義し、チャンク サイズ/上位 k 値をスイープする必要があります。
を使用してチャンク サイズのスイープを実行し、取得 + Q&A 評価を行う方法を示す包括的なスターター キット (Colab ノートブック + スライド) を考案しました。 RAG パイプラインを反復しようとしている場合は、必ずチェックしてください👇
https://colab.research.google.com/drive/1Siufl13rLI-kII1liaNfvf-NniBdwUpS?usp=sharing
https://docs.google.com/presentation/d/18Z7H3WSncPzLOTHKZAj36w0E7HSGY78VkDooSzvvySE/edit#slide=id.g28684e0c9f6_0_1183
https://scrapbox.io/files/65b03e56e0e7fd002492a401.png
https://twitter.com/ozora_ogino/status/1749826853005873351
https://scrapbox.io/files/65b05700b59aca0024f87129.png
miiboでも、ナレッジデータストアといって、リソースを学習させることができる
https://note.com/makunugi/n/n3cdb3296c291
手動でデータを追加させるときのポイントは
1つのデータ入稿に複数の話題を含めない
全てのデータのフォーマットに統一感をもたせる
GPTsではないが、RAGについての良記事
https://zenn.dev/sompojapan_dx/articles/eb755a18e893ce
ナレッジグラフを用いたRAGの改善
よく使われているRAGでは、外部知識源として検索エンジンにテキストをインデックスしておき、質問に関連するテキストをベクトル検索や全文検索を用いて取得する。しかし、構造化データを扱うことには苦労するため、質問によっては回答が不十分、あるいはまったく回答できないことに繋がる。
これらの問題を克服するために、ナレッジグラフを用いたRAGが構築されることがある。
ナレッジグラフでは、エンティティとその間の関係がグラフ構造で表現されており、単純な検索を用いた場合には回答できないような複雑な質問にも対応できる。
https://hironsan.hatenablog.com/entry/rag-with-knowledge-graph