検索エンジンにキーワードを入力しても、検索結果が自分の求めているものとは違うものになってしまうという状況に陥ったことはないだろうか。あるいは、何かを検索したいが、どのような言葉を使えば最も的確に表現できるのかわからないということはないだろうか。ご心配なく、「クエリ拡張」技術がこのような問題の解決に役立ちます。
最近、クエリー拡張のテクニックが再び注目を集めている。かつては検索エンジンの標準的な機能だったが、その後、さまざまな理由からしばらく鳴りを潜めていた。しかし今、「エージェント検索」(Agentic Search)と呼ばれる新しいテクニックの台頭により、クエリ拡張が再び脚光を浴びている。
なぜクエリ拡張機能が必要なのですか?
私たちが普段検索エンジンを使うとき、入力する検索語は短くて口語的なものになりがちだ。これは2つの問題につながる:
- 検索用語が一般的すぎる例えば、「人工知能」の最新の進歩を知りたいのに、「人工知能」としか入力しない場合、検索エンジンはあなたがどの側面を知りたいのかを判断するのは難しい。
- 検索語が特殊すぎる例えば、ある病気に関する情報を検索したいが、どの専門用語が最も正確なのかわからない。
これらの問題はすべて、検索結果の品質に影響する。エージェント検索など、より高度な検索技術も同じ課題に直面している。
エージェント検索とは?
理由検索は、よりスマートな検索方法です。あなたが入力したキーワードを理解するだけでなく、文脈やあなたの意図に基づいて、より正確で包括的な情報を見つける手助けをしてくれるスマートアシスタントと考えることができます。
例えば、「ケーキの作り方」と検索すると、従来の検索エンジンでは「作る」と「ケーキ」という単語を含むページしか返されないかもしれない。しかし推論型検索は、あなたの意図がケーキの作り方を学ぶことだと理解しているので、より詳細なチュートリアルやビデオ、あるいはさまざまな種類のケーキのレシピを返すかもしれない。
推論検索はより賢くなったとはいえ、検索語が短すぎたり曖昧すぎたりすると、検索意図を正確に把握するのに苦労する。この問題を解決するには、検索語を「拡張」または「書き換える」ことで、検索意図をより正確かつ包括的に表現するテクニックが必要です。これを「クエリ拡張」と呼ぶ。
クエリー・エキスパンションとは?
クエリエキスパンションは、検索結果を最適化するためのテクニックです。その核となる考え方はシンプルで、検索エンジンが望む検索結果を見つけやすくするために、元の検索キーワードに関連する単語を追加するというものです。
例えば、" を検索したい場合。豚の角煮の作り方"を追加すると、クエリ拡張モジュールは自動的に"レシピ","練習","家族の日常生活","ストリーキーポーク"これらの単語。こうすることで、検索結果には、タイトルや本文に「豚の角煮」が含まれるコンテンツだけでなく、豚の角煮の作り方を教えてくれるレシピや家庭療法、さらにはパンチェッタを使った豚の角煮の作り方のチュートリアルまで含まれるようになり、より包括的でニーズに合った検索結果となる。
-
図1:類義語辞書を用いたクエリ展開のフローチャート
クエリ拡張は、従来のキーワード検索エンジンやより高度な推測型検索エンジンを含む、あらゆるタイプの検索エンジンで使用することができる。推論型検索では、クエリ拡張はユーザーの検索意図をよりよく理解し、より関連性の高い結果を提供するのに役立つ。
従来の検索エンジンでは、クエリ拡張は主に次の2つの問題を解決するために使われていた:
- 形態論同じ単語の異なる形(例えば "run "と "running")は異なる単語とみなされるため、不完全な検索結果となる。
- 類義語と関連語を検索してください。やせる"を含む検索エンジンを見つけることができないかもしれない。ダイエットする","脂肪減少「または体重管理"のページだが、現実にはこれらの言葉は大いに関係がある。
クエリの拡張を実現するために、次のような多くのことが考えられてきた:
- 類義語辞書の手動開発どの単語が似たような意味を持っているかを教えてくれる辞書のようなものだ。
- 多数の記事から関連語を自動検索どの単語がよく一緒に出てくるかを分析して、関連性があるかどうかを判断する。
- 検索記録の分析同じようなコンテンツを検索する際に、人々がどのようなキーワードを使っているかを見る。
- ユーザーからのフィードバックに基づくどの単語が関連性があるか、ユーザーに検索エンジンに伝えさせる。
意味ベクトルモデルとクエリ拡張
近年、人工知能の発達に伴い、「セマンティック・ベクトル・モデリング」という新しい技術が登場した。これは、各単語を数字の羅列(私たちはこれを「ベクトル」と呼んでいる)に変換する「単語翻訳機」だと考えてほしい。これらの数値は単語の意味を表し、単語の意味が近ければ近いほど、対応する数値列(ベクトル)も近くなる。
セマンティック・ベクター・モデルを使えば、理論的には検索エンジンはもっと賢くなるはずで、クエリの拡張は不要に思える。例えば、"豚の角煮の作り方"、意味ベクトルモデルは"レシピ","練習「これらの単語は "豚の角煮 "の意味に近いので、入力しなくても検索エンジンはレシピを見つけることができるはずだ。
しかし現実には、意味ベクトルモデルは完璧ではない。生成される「数字の羅列」(ベクトル)には曖昧な情報が含まれている可能性があり、検索結果の精度が低くなってしまうのだ。
例えば、"ざくろ"と検索エンジンが返すかもしれない。アップル・フォン"の結果に関する情報を返すこともある。フルーツ"を返すこともある。アップル社"で株式情報を得ることができる。しかし、本当に探しているのが"リンゴ栽培技術"の記事で溢れかえっているかもしれない。検索語に"農園"であれば、検索エンジンが私たちの意図をより正確に理解し、より私たちのニーズに沿った結果を見つけることができる。
AIラージモデル(LLM)によるクエリ拡張
今、私たちはクエリ拡張を行うより強力なツールを手に入れた。
AIラージモデル(LLM)とは? 膨大な量のテキストデータで訓練され、豊富な知識と言語スキルを身につけた、超知識豊富な「言語学者」と考えることができる。
LLMによるクエリ展開には、従来のクエリ展開方法と比較していくつかの大きな利点がある:
- 膨大な語彙: LLM たくさんの単語を見て、適切な類義語や関連語を見つける心配はない。
- 判断力を持つ: LLMは、従来の方法ではできなかった、検索トピックに関連する単語を最初に決定することができます。関連性のない拡張子をフィルタリングするのに役立ちます。
- 柔軟でカスタマイズ可能特定の検索タスクに基づいて、LLMにどのような拡張機能が欲しいかを指示することができます。LLMに「コマンド」を与えるようなものです。
LLMを使って拡張子を生成したら、プロセスは従来のクエリ拡張と同様である。元の検索語にこれらの単語を追加し、意味ベクトルモデルを使って「クエリベクトル」を生成し、このベクトルを使って検索を行う。
図2:LLMによるベクトル・クエリの拡張
実験:クエリ拡張の効果を見る
LLMによるクエリ展開が機能するかどうかを検証するために、いくつかの実験を行った。
実験環境
- LLMグーグルの ジェミニ 2.0フラッシュモデル。
- ベクトルモデルjina-embeddings-v3とall-MiniLM-L6-v2です。
- データセット一般に公開されている検索テストデータセットを使用した。
実験的方法
2種類のプロンプトが、LLMが延長を生成する際のガイドとして設計されています。プロンプトとは、どのような結果が欲しいかをLLMに伝えるための指示のようなものです。
- 共通の手がかり様々な検索タスクに適用される。
- タスク固有のプロンプト特定の検索タスク(例:医療検索)のためにデザインされたキューワード。
また、100、150、250という異なる数のエクステンションをテストした。
一般的な手がかりの効果
私たちは、次のような一般的なキューワードが効果的であることを発見した:
以下のクエリについて、検索キーワードとフレーズを追加してください。
以下のクエリの各キーポイントについて、関連文書の検索を容易にする検索キーワードを追加してください。
関連文書の検索が容易になります。
クエリーあたり): {query}
{クエリ}
以下のJSONスキーマで応答してください。
Expansion = {"qid": str, "additional_info": str}.
戻り値:リスト [Expansion]
このプロンプトは複数の検索語を一度に処理し、各検索語に対して拡張語のリストを生成することができる。
まず、jina-embeddings-v3モデルでテストしたところ、次のような結果が得られた:
テストセット | 非拡張語 | 100の拡張語 | 150の拡張ワード | 250の拡張ワード |
---|---|---|---|---|
サイファクト(ファクトチェック義務化) | 72.74 | 73.39 | 74.16 | 74.33 |
トレコビッド(医療検索タスク) | 77.55 | 76.74 | 77.12 | 79.28 |
フィクア(金融オプション検索) | 47.34 | 47.76 | 46.03 | 47.34 |
NFCコーパス(医療情報検索) | 36.46 | 40.62 | 39.63 | 39.20 |
トウシュ2020(引数検索タスク) | 26.24 | 26.91 | 27.15 | 27.54 |
結果からわかるように、クエリの拡張はほとんどのケースで検索を改善する。
異なるモデルでのクエリ展開の有効性を検証するため、all-MiniLM-L6-v2モデルで同じテストを繰り返したところ、以下のような結果が得られた:
テストセット | 非拡張語 | 100の拡張語 | 150の拡張ワード | 250の拡張ワード |
---|---|---|---|---|
サイファクト(ファクトチェック義務化) | 64.51 | 68.72 | 66.27 | 68.50 |
トレコビッド(医療検索タスク) | 47.25 | 67.90 | 70.18 | 69.60 |
フィクア(金融オプション検索) | 36.87 | 33.96 | 32.60 | 31.84 |
NFCコーパス(医療情報検索) | 31.59 | 33.76 | 33.76 | 33.35 |
トウシュ2020(引数検索タスク) | 16.90 | 25.31 | 23.52 | 23.23 |
結果から、クエリ拡張は、特にall-MiniLM-L6-v2のような小さなモデルの検索結果を大幅に改善することがわかります。
下の表は、各モデルの全作業における平均リフト量をまとめたものです:
モデリング | 100の拡張ワード | 150 拡張ワード | 250の拡張ワード |
---|---|---|---|
ジーナ・エンベディングス-V3 | +1.02 | +0.75 | +1.48 |
オールミニLM-L6-v2 | +6.51 | +5.84 | +5.88 |
オールミニLM-L6-v2 リフトは ジーナ・エンベディングス-V3 はるかに大きい。 オールミニLM-L6-v2 モデルの初期性能は低い。ジーナ・エンベディングス-V3 モデル自身は検索語の意味をよりよく理解できるため、クエリ拡張が提供できる追加的な支援はより限定的なものになる。
しかし、この結果は、クエリ拡張が平均的なパフォーマンスを持ついくつかのモデルの検索結果を大幅に改善し、状況によっては優れたパフォーマンスを発揮できることも示している。
タスク固有のプロンプト
我々は、一般的な手がかり語は概して効果的であるが、無関係な語を導入してしまい、かえって検索効果を低下させる可能性があることを発見した。そこで、2つの特定の検索タスク(事実確認と金融オプション検索)に対して、より具体的な手がかり語を設計した:
以下のクエリについて、検索キーワードとフレーズを追加してください。
以下のクエリの重要な側面について、それぞれ追加の検索キーワードを記入してください。
クエリの科学的事実を支持または否定するもの
そのクエリの科学的事実を支持または否定するもの
フィールド(クエリごとに{size}語程度):クエリごとに{query}語:クエリごとに{query}語:クエリごとに{query}語:クエリごとに{query}語:クエリごとに{query}語
{クエリ}
以下のJSONスキーマで応答してください。
Expansion = {"qid": str, "additional_info": str}.
戻り値:リスト [Expansion]
実験結果によれば、より具体的な手がかりとなるこの単語は、ほとんどすべてのケースで検索結果を改善する:
テストセット | モデリング | 非拡張語 | 100の拡張ワード | 150 拡張ワード | 250の拡張ワード |
---|---|---|---|---|---|
サイファクト | ジーナ・エンベディングス-V3 | 72.74 | 75.85 (+2.46) | 75.07 (+0.91) | 75.13 (+0.80) |
サイファクト | オールミニLM-L6-v2 | 64.51 | 69.12 (+0.40) | 68.10 (+1.83) | 67.83 (-0.67) |
フィクア | ジーナ・エンベディングス-V3 | 47.34 | 47.77 (+0.01) | 48.20 (+1.99) | 47.75 (+0.41) |
フィクア | オールミニLM-L6-v2 | 36.87 | 34.71 (+0.75) | 34.68 (+2.08) | 34.50 (+2.66) |
上の表からわかるように、SciFactで全MiniLM-L6-v2モデルを使用し、250の拡張機能を追加した場合を除き、すべての設定で検索結果が向上した。
に関して ジーナ・エンベディングス-V3 のモデルを使用した場合、100 または 150 の拡張子を追加すると最良の結果が得られ、250 の拡張子を追加すると結果が低下することがわかる。このことは、拡張子は多ければ多いほど良いというわけではなく、用語を追加しすぎると検索結果が悪くなる可能性があることを示唆している。
クエリ拡大の利点と課題
バンテージ
- 検索結果を改善できるクエリ拡張機能により、検索エンジンはあなたの意図をよりよく理解し、より関連性の高い包括的な情報を見つけることができます。
- 平均的なパフォーマンスを持つモデルにより効果的クエリ拡張機能は、平均的なパフォーマンスを持ついくつかのモデルの検索結果を適切にするのに役立ちます。
挑戦
- コスト問題LLMを使用すると、検索にかかる時間と計算コストが増加します。有料のLLMサービスを利用した場合、追加コストが発生します。
- キューのデザイン良い手がかり語を設計するのは容易ではなく、多くの実験とチューニングが必要である。さらに、異なるLLM、異なるベクトルモデル、異なる検索タスクは、すべて異なるキューワードを必要とする可能性がある。
- その他の最適化手法ベクターモデルのパフォーマンスが低いのであれば、クエリスケーリングに時間をかけるよりも、より優れたモデルに切り替えた方がコスト効率がよいでしょう。
今後の方向性
クエリの拡張にはまだ課題があるが、検索技術の将来において重要な役割を果たすと信じている。私たちは次のような方向性を模索しています:
- 文書のベクトル表現を改善するためにクエリ拡張が使用できるかどうかを確認する。
- 並べ替えのような他のAI検索技術におけるクエリ拡張の利用を探る。
- LLMが生成した拡張機能と、従来の方法(類義語辞書など)による拡張機能の比較。
- クエリ展開タスクに特化したLLMを訓練する。
- 拡張子の数を最適化し、一度に多くの単語を追加しないようにする。
- 良いエクステンションと悪いエクステンションの見分け方を研究する。
すべてのコードと実験結果はオープンソース化されており、囲い込みや複製が歓迎されている:
llm-query-expansion: https://github.com/jina-ai/llm-query-expansion/