![azblob://2024/06/25/eyecatch/2024-06-25-rag-improvement-how-to-000_0.jpg](https://prtechblogfd-crhzb5g6hkhqafdm.z01.azurefd.net/drupalimages/2024/06/25/eyecatch/2024-06-25-rag-improvement-how-to-000_0.jpg)
はじめに
6月20日に開催されたAWS Summit Japanに参加してきました。
そこで、TIS株式会社様がRAGの精度改善方法について紹介しているセッションがあったので、それについて執筆したいと思います。
※権利の都合上、写真は載せられません。ご了承ください。
RAGの精度改善方法①ドキュメントの品質改善
一つ目はドキュメントの品質を改善することです。
RAGを活用する場合、インプットとなるドキュメントの品質を上げたり、不要な情報を整理することで回答の精度も改善されます。
例えば、社内規定等のドキュメントで古いバージョンと新しいバージョンの資料が混在している場合、LLMはどちらが正しい情報か判断できないので、ハルシネーションが起こりやすくなるそう。
こちらの件に関しては、新しいドキュメントと古いドキュメントを整理することで解決します。
コールセンター等のFAQ履歴の場合は、そのままLLMが適切に処理できないので、回答の品質が落ちてしまいます。
こちらは正しいFAQとして校正してからRAGにアップロードすればよいでしょう。
一つ目の改善方法については、ドキュメントの量が多ければ多いほど難しくなるのではと思いました。
RAGの精度改善方法②ドキュメント構造化
二つ目はドキュメントを構造化することです。
RAGのシステムでは、ドキュメントをベクトルに変換し、その類似度で計算することで、「意味が近い文書」を検索することができるベクトルデータベースが使われることが多いです。
この、ドキュメントを適切な単位でチャンキング(ドキュメントを分割してベクトル化する単位)することが重要なのです。
簡易なRAGシステムでは、チャンキングが500文字単位で区切るなど、不十分な状態でのベクトル化が行われていることが多い。
目安としては、200~500文字程度が良いとされています。
RAGの精度改善方法③検索方法の改善
三つめは検索方法を改善することです。
ベクトルデータベースの検索は、質問文と「意味が近い」文書を探す(類似しているベクトルを探す)のが基本だが、実業務ではそれ以外の観点での検索絞り込みが必要です。
単純な文書の類似度だけではなく、その他の条件で適切にフィルタリングや検索結果の精度を向上させ、LLMの出力の品質を上げることができます。
「人事」関係の質問であれば、人事関係のドキュメントから、
「経理」関係の質問であれば、経理関係のドキュメントから、
のようにフィルタリングすれば検索精度も上がります。
また、専門用語が多い文章ではベクトル検索が効きにくいので、従来のキーワード検索(全文検索)を組み合わせた「ハイブリット検索」が扱えるデータベースを選択することも重要です。
RAGの精度改善方法➃コンテキストの改善
検索結果からコンテキストを作成する際にも、いくつかの工夫が可能です。
Parent Document Retriverと呼ばれる手法で、検索用ベクトルと、コンテキスト用ベクトルを分けることで精度が改善することがある。
検索用ベクトルは質問文にヒットしやすいに、小さいチャンキングの単位で、
コンテキスト用ベクトルは、LLMに渡したときに一貫性のある情報を与えるためにより大きいチャンキングの単位で分割すると良いでしょう。
終わり
すごい貴重なお話だったので真っ先にテックブログに載せました。
少しでもお役に立つと幸いです。