先週は、言語処理学会の年次大会を聴講していました。数多くの興味深い発表がありましたが、仕事でRAG周りの開発に携わっていることもあって、検索やLLMの生成結果を評価する方法について重点的に聴講しました。
そんな中で、製造業の実データを対象としたRAGの改善に関する研究[1]が共感する部分がありました。この研究では、専門的なドメインにおける4つのRAG改善手法(①テキスト正規化、②ハイブリッド検索、③リランキング、④検索ワード拡張)の有効性を検証しています。その結果、テキスト正規化、ハイブリッド検索、リランキングは効果がある一方で、検索ワード拡張には目立った改善が見られなかったとのこと。
論文でも述べられていますが、この結果の背景には、LLMがドメイン固有の知識を持たないことが原因にあるのかもしれません。オントロジーやナレッジグラフを活用すれば、プロンプトを通じて専門知識を補うことはできますが、構築や更新の手間が大きい。かといって、ファインチューニングするのも大変です。
そこで、2年ほど前に読んだ論文[2]を思い出しました。この論文では、LLMを用いた擬似適合性フィードバックによるクエリ拡張が紹介されており、検索性能の向上が報告されていました。この手法を用いれば、LLMにドメイン固有の知識をある程度付与しながら、クエリ拡張を実現できるのではないかと考え、試してみることにしました。
擬似適合性フィードバックとは
擬似適合性フィードバックとは、情報検索において、ユーザーの明示的なフィードバックなしにクエリ拡張をする手法です。本来の適合性フィードバックでは、ユーザーが検索結果から関連文書を選択し、それを基にクエリを拡張します。一方、擬似適合性フィードバックではユーザーの介入なしに自動で関連文書を仮定し、クエリを拡張するのが特徴です。
擬似適合性フィードバックは、以下のような手順で動作します。
- 初回検索
- ユーザーのクエリをもとに、通常の検索を行う。
- 関連文書の仮定
- 検索結果の上位 ( N ) 件を「関連文書」と仮定する。
- クエリ拡張
- 仮定した関連文書から、頻出する単語や特徴的な単語を抽出する。
- それらを元のクエリに追加し、クエリを拡張する。
- 再検索
- 拡張後のクエリを用いて再検索し、より関連性の高い結果を取得する。
擬似適合性フィードバックのメリットとしては、ユーザーの負担なしに検索性能を向上させられる可能性がある点です。一方で、上位にランクされた文書に関連性がない場合、性能低下を招く可能性があること、文書の解析や検索の手間が増えることによる検索時間の増加といったデメリットがあります。
実験設定
今回の実験では、擬似適合性フィードバックのクエリ拡張段階にLLMを用いることで、検索性能がどのように変化するかを検証します。クエリ生成にはGemini 2.0 Flash Liteを使用し、以下のプロンプトを用いてクエリを書き換えています。[2]に記載されていたプロンプトをベースにしていますが、少し変更しています。コンテキストとしては、元のクエリの検索結果のうち、上位10件を関連文書とみなして与えています。
You are pseudo-relevance feedback specialist. Your task is to rewrite the query based on the context in order to improve the relevance of the search results.
Context:
{context}
Query: {query}
Rewritten Query:
上記のプロンプトを使ってクエリを書き換えた例を以下に示します。
元のクエリ:県外に引っ越しする場合の手続きを教えて下さい。
書き換えたクエリ:尼崎市から県外に引っ越しする場合の手続き、転出届、必要なもの、手続き場所
手法としては以下の3つを比較します。ハイブリッドは、元のクエリに対する検索結果とクエリ拡張した検索結果をランク融合アルゴリズムを用いて結合する手法です。擬似適合性フィードバックのデメリットとして、関連文書が検索されない場合、性能が低下する可能性があるため、その影響を抑えるのに使えるのではないかと考え入れています。
- 擬似適合性フィードバックなし
- 擬似適合性フィードバックあり
- ハイブリッド
評価用のデータセットとしては、尼崎市のQAデータ[3]を使用します。このデータセットには、784の質問に対して対応する回答がAからCの3つのカテゴリでラベル付けされています。Aの場合は正しい情報を含み、Bであれば関連する情報を含み、Cであればトピックが同じであることを意味します。今回はこれらのカテゴリを関連文書として扱うことにします。本来であれば、LLMが学習していない専門ドメインのデータを用いたかったのですが、準備が困難であったため、今回は本データセットを使用しました。
検索器としてはTF-IDFによるキーワード検索を使用します。実装としてはLangChainのTFIDFRetrieverを使用しており、ストップワードのリストとしてelasticsearch-sudachiを与え、トークナイザーにはMeCabを採用しました。また、評価については上位10件のヒット率とMRR、上位50件のヒット率(Hit Rate@10
、MRR@10
、Hit Rate@50
)でします。
実験結果
評価結果を以下に示します。擬似適合性フィードバックを行った場合、すべての評価指標が向上する結果となりました。一方、ハイブリッド手法では、上位50件のヒット率が向上したものの、上位10件のヒット率とMRRは低下しました。上位50件のヒット率が向上しているので、クロスエンコーダーを使ってリランキングをすれば、ほかの手法よりも性能が向上する可能性があります。
手法 | Hit Rate@10 | Hit Rate@50 | MRR@10 |
---|---|---|---|
擬似適合性フィードバックなし | 0.6607 | 0.8138 | 0.4811 |
擬似適合性フィードバックあり | 0.7347 | 0.8622 | 0.5502 |
ハイブリッド | 0.7270 | 0.8750 | 0.4751 |
おわりに
今回は、擬似適合性フィードバックを用いたクエリ拡張による検索性能の変化を検証しました。実験結果から、擬似適合性フィードバックを行うことで、検索性能が向上することが確認できました。Gemini 2.0 Flash Liteを用いた場合、1件のクエリを拡張するのにかかる時間が1秒程度であったため、RAGのように生成部分の時間が支配的な場合には、あまり気にならないかもしれません。とはいえ、あくまでも1つのデータセットに対する結果であり、ほかのデータセットに対しても同様の結果が得られるかは不明です。機会があれば、別のデータセットに対しても検証してみたいと思います。