見出し画像

RAGの精度をあげる「Contextual Retrieval(文脈検索)」について

この記事では、
RAG(Retrieval-Augmented Generation)の精度をあげる手法
Contextual Retrieval(文脈検索)
についてご紹介します。

内容については、
Anthropic社が公表したこちらの記事を参考にしています。

図などを用いながら分かりやすく解説していきます



従来のRAGの仕組み

通常、RAGは、
大きな文書コーパス(ドキュメント)を細かいテキストに分割し、
(これをチャンクと呼びます)
さらに、分割したテキストをエンべディングモデルによって
数値に変換する(ベクトル化)のが一般的です。

ユーザーのクエリ(質問)に対して、
ベクトル化されたデータベースから意味が近いテキストをいくつか抽出し、
これらのテキストをプロンプトに与えることで、
LLMがユーザーからのクエリに答えることができる仕組みとなっています。


従来のRAGの課題

従来のRAGでは、
以下にあげる2つの要因で、
ユーザーからのクエリに対して正しく検索できない
という課題がありました。

❶文脈の損失

RAGの仕組みでご覧いただいたように、
RAGのもとになる文書コーパスについては、
通常、チャンクと呼ばれるテキスト分割を行います。

その結果として、元の文脈が失われてしまうことがあります。

例えば、ユーザーからのクエリに近い文書として、
長いコーパスの一部であるテキストを取得しても、
その前後の文脈が生成モデルに渡されないため、
回答が不正確になりやすいのです。
これにより、文脈を理解しなければならないクエリに対しては、適切に応答できないリスクが高まります。

以下のように、
A社の説明がチャンク1〜3、
B社の説明がチャンク4〜6、
C社の説明がチャンク7〜9だった場合、
チャンクだけを見に行っても、それがA社の話なのか、B社の話なのか、C社の話なのか、分からない場合があるということです。


❷語句の正確な一致に対する弱さ

従来のRAGは、
クエリと文書コーパス内の特定の語句が一致するかどうかの
「正確な一致」を意識していません。

RAGは通常、ベクトルエンコーディング(埋め込み)
に基づく検索を使用し、
意味的な類似性を重視するため、
特定の語句やフレーズがそのまま含まれているかが
重要となる場合に精度が落ちることがあります。

例えば、技術的なクエリやエラーコードのように、
正確な用語の一致が必要な場合、
RAGは関連性の低い結果を返しやすくなります。



Contextual Retrievalとは?

Anthropic社が提案するContextual Retrievalは、
上記の課題を解決するための新しいアプローチです。

この手法は、
Contextual Embeddings
Contextual BM25 という
2つの既存の技術を組み合わせています。

❶Contextual Embeddings(文脈エンべディング)

分割されたテキストが置かれている文脈(コンテキスト)を理解し、
それに基づいてベクトルを生成します。

つまり、各チャンクに対して、前後の文脈を付与してからベクトルを作成するのです。

従来のRAGのように表面的なキーワードに依存するのではなく、
意味や文脈を踏まえた検索が可能になるため、
ユーザーの意図や質問内容を
より的確に反映した情報を検索することが可能になります。

なお、各チャンクに手作業で文脈を与えるのは現実的ではありません。
ここもLLMの出番です。
LLMに対し、文書全体を読んで各チャンクに文脈を提供するよう、プロンプトで指示します。

LLMが文書全体と各チャンクを読んで、各チャンクに対し文脈を与える

以下がLLMに与えるプロンプト例です。

<document> 
{{WHOLE_DOCUMENT}} 
</document> 
Here is the chunk we want to situate within the whole document 
<chunk> 
{{CHUNK_CONTENT}} 
</chunk> 
Please give a short succinct context to situate this chunk within 
the overall document for the purposes of improving search retrieval 
of the chunk. Answer only with the succinct context and nothing else. 


 ❷Contextual BM25:

Contextual BM25は、
BM25(Best Matching 25)という検索手法に
「文脈情報」を組み合わせた新たな検索手法になります。

まず、BM25ですが、
これは、情報検索におけるスコアリング手法で、
クエリ内の単語と文書内の単語の一致度に基づいて関連性を評価します。
具体的には、
文書内での単語の出現頻度(TF)や、
単語がどれだけ希少か(IDF)を利用して、クエリとの関連度をスコア化します。また、文書の長さも考慮し、長すぎる文書が不当に高いスコアにならないよう調整されています。

TF-IDFと極めて近い概念です。

Contextual BM25は、
このBM25に「文脈情報(コンテキスト)」を加えた手法です。
BM25の強みである正確な単語の一致や希少性の評価に加えて、
エンベディング技術を用いて、
クエリや文書の意味的な類似性や文脈も考慮しています。
これによって、
特定の語句の正確な一致を確保しつつ、
意味的に関連性のある情報も適切に評価できるため、
より柔軟で精度の高い検索が可能となります。


Contextual Retrievalの全体像



Contextual RetrievalでRAGの精度はどれぐらい向上するのか?


Anthropicによれば、
RAGの検索失敗率が、通常5.7%のところ、
Contextual Retrievalを導入すると、2.9%まで下がるとのことです。

改善幅は2.8%、改善率は51%になりますね。

自分の肌感覚としては、
通常のRAGの検索失敗率は、もっと高いイメージです。


まとめ

いかがでしたでしょうか。
この記事では、
RAGの精度向上を目指す
新しいアプローチ「Contextual Retrieval」について解説しました。

従来のRAGが抱える課題として、
文脈の損失と語句の正確な一致に対する弱さが挙げられましたが、Contextual Retrievalはそれらを解消するために、
文脈を考慮した埋め込みと、BM25に文脈情報を組み合わせることで、
精度の高い検索を実現しています。

Contextual Retrievalの活用によって、
ユーザーの質問の意図をより的確に反映した回答が可能となり、
RAGの利用価値が一層高まることが期待されますね。

いいなと思ったら応援しよう!

Non
よろしければサポートお願いします! いただいたサポートはクリエイターとしての活動費に使わせていただきます!