「ハイブリッド検索を用いたRAGパイプラインでの検索パフォーマンスの向上」
「ハイブリッド検索によるRAGパイプラインの検索パフォーマンス向上」
伝統的なキーワードベースの検索とモダンなベクトル検索を組み合わせることで、より関連性の高い検索結果を見つける方法
最近の< ahref=”https://www.voagi.com/discovering-retrievalaugmented-generation-in-llm.html”>検索強化生成(RAG)パイプラインへの関心の高まりに伴い、開発者たちは本番運用に適したパフォーマンスを持つRAGパイプラインの構築の課題について議論し始めています。人生の多くの側面と同様に、パレートの法則はRAGパイプラインでも適用され、初期の80%を達成することは比較的簡単ですが、残りの20%を本番用に準備するのは困難です。
一般的に繰り返されるテーマのひとつは、ハイブリッド検索を使用してRAGパイプラインの検索コンポーネントを改善することです。
RAGパイプラインの構築に関する経験を既に積んだ開発者たちは、自分たちの知見を共有し始めています。一般的に繰り返されるテーマのひとつは、ハイブリッド検索を使用してRAGパイプラインの検索コンポーネントを改善することです。
本記事では、ハイブリッド検索の概念について紹介し、より関連性の高い結果を取得するためにRAGパイプラインのパフォーマンスを改善する方法、および使用するタイミングについて説明します。
- 「データ管理におけるデータレイクの実装」
- リアルタイムで命を救うビッグデータ:IoVデータ分析が事故を予防するのを助ける
- パーセプトロンからアダラインまで – From the Perceptron to Adaline
- ハイブリッド検索とは何ですか
- ハイブリッド検索はどのように機能しますか
- ハイブリッド検索はどのようにRAGパイプラインのパフォーマンスを改善できますか
- いつハイブリッド検索を使用するべきですか
- まとめ
ハイブリッド検索とは何ですか
ハイブリッド検索は、複数の検索アルゴリズムを組み合わせることによって検索結果の関連性を向上させる検索技術です。どのアルゴリズムが組み合わされるかは明示されていませんが、ハイブリッド検索は通常、伝統的なキーワードベースの検索とモダンなベクトル検索の組み合わせを指します。
伝統的には、キーワードベースの検索が検索エンジンの明らかな選択肢でした。しかし、機械学習(ML)アルゴリズムの登場により、ベクトル埋め込みを利用したベクトルまたはセマンティック検索と呼ばれる新しい検索技術が可能となり、データをセマンティックに検索することができるようになりました。ただし、両方の検索技術には考慮すべき重要なトレードオフがあります:
- キーワードベースの検索:特定の用語(製品名や業界の専門用語など)に対して正確なキーワードマッチング機能がありますが、タイポや類義語に対しては敏感で重要な文脈を見逃してしまうことがあります。
- ベクトルまたはセマンティック検索:セマンティック検索の機能により、データのセマンティックな意味に基づいた多言語およびマルチモーダルな検索が可能となり、タイポに強くなりますが、重要なキーワードを見落とすことがあります。さらに、生成されたベクトル埋め込みの品質に依存し、ドメイン外の用語に敏感です。
キーワードベースとベクトル検索をハイブリッド検索として組み合わせることで、特にテキスト検索のユースケースにおいて検索結果の関連性を向上させることができます。
例えば、検索クエリ「Pandas DataFramesを.concat()
でマージする方法」を考えてみましょう。キーワード検索はメソッド.concat()
に関連する結果を見つけるのに役立ちますが、単語「マージ」には「結合」、「連結」、「結合」などの類義語があるため、セマンティック検索の文脈認識を活用できると便利です(詳細はいつハイブリッド検索を使用するべきですかを参照してください)。
興味があれば、このライブ�デモで異なるキーワードベース、意味ベース、 ハイブリッド検索クエリを試して映画を検索することができます(その実装は この記事 で詳しく説明されています)。
ハイブリッド検索はどのように機能するのですか?
ハイブリッド検索は、キーワードベースとベクトル検索の技術を組み合わせて、それらの検索結果を統合し再ランキングします。
キーワードベースの検索
ハイブリッド検索の文脈でのキーワードベースの検索は、スパースエンベッディングと呼ばれる表現をよく使用します。そのため、スパースベクトル検索とも呼ばれます。スパースエンベッディングは、ほとんどがゼロの値で構成され、ごくわずかな非ゼロの値を持つベクトルです。
[0, 0, 0, 0, 0, 1, 0, 0, 0, 24, 3, 0, 0, 0, 0, ...]
スパースエンベッディングは、さまざまなアルゴリズムで生成することができます。スパースエンベッディングの最も一般的なアルゴリズムはBM25(Best Match 25)で、TF-IDF(Term Frequency-Inverse Document Frequency)アプローチに基づいており、これを改良しています。簡単に言えば、BM25は、ドキュメント内での用語の頻度を、すべてのドキュメント内での頻度に対して相対的に重要視します。
ベクトル検索
ベクトル検索は、MLの進歩とともに登場した近代的な検索技術です。近代的なMLアルゴリズム(例:トランスフォーマー)は、テキスト、画像などのさまざまなモダリティのデータオブジェクトの数値表現であるベクトルエンベッディングを生成することができます。
これらのベクトルエンベッディングは通常、情報が詰まっており、非ゼロ値が主な構成要素となっています(デンスベクトル)。以下に示すように、ベクトル検索はデンスベクトル検索とも呼ばれています。
[0.634、0.234、0.867、0.042、0.249、0.093、0.029、0.123、0.234、...]
検索クエリはデータオブジェクトと同じベクトル空間に埋め込まれます。その後、ベクトルエンベッディングを使用して、特定の類似性メトリック(例:コサイン距離)に基づいて最も近いデータオブジェクトを計算します。検索結果は、検索クエリに対する類似性に基づいてランク付けされた最も近いデータオブジェクトのリストです。
キーワードベースとベクトル検索結果の統合
キーワードベースの検索とベクトル検索の両方は、通常、計算された関連性に基づいて別々の結果セットを返します。これらの別々の検索結果セットを結合する必要があります。
2つのリストのランキング結果を単一のランキングに組み合わせるためのさまざまな戦略があります。例えば、Benham and Culpepper の論文で説明されています。
一般的に、検索結果はまずスコアリングされます。これらのスコアは、コサイン距離などの指定されたメトリックに基づいて計算することができます。または、単に検索結果リストでのランクです。
次に、計算されたスコアはパラメータalpha
で重み付けされ、各アルゴリズムの重み付けと結果に対する再ランキングに影響を与えます。
hybrid_score = (1 - alpha) * sparse_score + alpha * dense_score
通常、alpha
は0から1の値を取ります。以下は、ランキングに基づいてキーワードとベクトル検索の融合の最小限の例であり、alpha = 0.5
としてスコアリングされています。
ハイブリッドサーチはRAGパイプラインのパフォーマンスを向上させる方法は?
RAGパイプラインは、そのパフォーマンスを向上させるために調整できるパラメータが多くあります。これらのパラメータの1つは、取得したコンテキストの関連性を向上させることです。なぜなら、与えられた質問に対する関連性のない取得されたコンテキストは、LLMも関連する回答を生成することができないからです。
コンテキストの種類とクエリに応じて、RAGアプリケーションにとって最も有益な3つの検索手法を決定する必要があります。したがって、キーワードベースの検索と意味ベースの検索の間の重み付けを制御するalphaパラメータは、調整が必要なハイパーパラメータと見なすことができます。
LangChainを使用した一般的なRAGパイプラインでは、リトリーバーコンポーネントを以下のように使用して、使用するvectorstore
コンポーネントをリトリーバーとして定義します:
# Define and populate vector store# See details here https://towardsdatascience.com/retrieval-augmented-generation-rag-from-theory-to-langchain-implementation-4e9bd5f6a4f2vectorstore = ...# Set vectorstore as retrieverretriever = vectorstore.as_retriever()
ただし、この方法では意味ベースの検索のみが可能です。LangChainでハイブリッドサーチを有効にしたい場合は、特定のハイブリッド検索機能を持つWeaviateHybridSearchRetriever
などの特定のretriever
コンポーネントを定義する必要があります:
from langchain.retrievers.weaviate_hybrid_search import WeaviateHybridSearchRetrieverretriever = WeaviateHybridSearchRetriever( alpha = 0.5, # デフォルトは0.5で、キーワード検索と意味検索の均等な重み付け client = client, # Weaviateクライアントに渡すキーワード引数 index_name = "LangChain", # 使用するインデックスの名前 text_key = "text", # 使用するテキストキーの名前 attributes = [], # 結果に返す属性)
その他のバニラのRAGパイプラインは同じままです。
この小さなコードの変更により、キーワードベースの検索とベクトル検索の間の異なる重み付けを試すことができます。注意点として、alpha = 1
を設定すると、完全な意味ベースの検索と同等であり、vectorstore
コンポーネントからリトリーバーを定義することと同等です(retriever = vectorstore.as_retriever()
)。
ハイブリッドサーチを使用する場合(ハイブリッドサーチのユースケース)
ハイブリッドサーチは、製品名やシリアル番号などの特定の用語の正確なフレーズマッチングを必要とする場合に、より人間らしい検索体験のための意味ベースの検索機能を有効にしたいユースケースに最適です。
優れた例としては、最近ハイブリッドサーチを使用して検索機能を拡張したプラットフォームStack Overflowがあります。
ヒトのように質問する:Stack Overflowにおける意味ベースの検索の実装
意味ベースの検索により、キーワードの操作の剛体な構文ではなく、自然言語を使用して検索することができます。検索…
stackoverflow.blog
最初は、Stack Overflowはキーワードを文書にマッチさせるためにTF-IDFを使用していました[2]。しかし、解決しようとしているコーディング問題を記述することは困難です。問題を説明するために使用する単語によって異なる結果をもたらすことがあります(例えば、2つのPandasのDataFrameをマージ、結合、連結するなどの異なる方法があります)。そのため、意味ベースの検索のようなより文脈に応じた検索手法が、これらの場合にはより有益です。
しかしながら、Stack Overflowの一般的な使用例は、エラーメッセージをコピー&ペーストすることです。その場合、正確なキーワード一致が好ましい検索方法です。また、メソッドや引数の名前(例:.read_csv()
in Pandas)に対しても、正確なキーワード一致の機能が必要です。
実際のユースケースでは、コンテキストに意識したセマンティック検索が有効な場合も多いですが、それでも正確なキーワード一致に頼ることがあります。このようなユースケースは、ハイブリッド検索リトリーバーコンポーネントの実装によって大きな恩恵を受けることができます。
概要
本記事では、キーワードベースとベクトル検索の組み合わせであるハイブリッド検索の文脈を紹介しました。ハイブリッド検索は、別々の検索アルゴリズムの検索結果を統合し、それに応じて検索結果を再ランク付けします。
ハイブリッド検索では、パラメータalpha
を使用してキーワードベースとセマンティック検索の重み付けを制御します。このパラメータalpha
は、RAGパイプラインで検索結果の正確性を向上させるためのハイパーパラメータとして調整することができます。
Stack Overflow [2] のケーススタディを使用して、セマンティック検索が検索体験を向上させることができるユースケースにおいて、ハイブリッド検索がどれほど有用であるかを紹介しました。ただし、特定の用語が頻出する場合には、正確なキーワード一致も重要です。
この記事を楽しんでいただけましたか?
無料で登録すると、新しい記事が公開された際に通知を受け取ることができます。
Leonie Monigattiが記事を公開するたびにメールを受け取る。
Leonie Monigattiが記事を公開するたびにメールを受け取る。すでにVoAGIアカウントをお持ちでない場合は、登録されます…
VoAGI.com
LinkedIn、Twitter、およびKaggleで私を見つけてください。
免責事項
本執筆時点で、私はオープンソースのベクトルデータベースであるWeaviateのDeveloper Advocateです。
参考文献
文献
[1] Benham, R., & Culpepper, J. S. (2017). Risk-reward trade-offs in rank fusion. In Proceedings of the 22nd Australasian Document Computing Symposium (pp. 1–8).
[2] Haney, D. & Gibson, D. in Stack Overflow Blog. Ask like a human: Implementing semantic search on Stack Overflow(アクセス日:2023年11月24日)。
画像
特別に明示されていない場合、すべての画像は著者によって作成されています。
We will continue to update VoAGI; if you have any questions or suggestions, please contact us!
Was this article helpful?
93 out of 132 found this helpful
Related articles
- このAI論文は『プライバシー保護MAE-Alignと呼ばれる新しい事前トレーニング戦略を提案し、合成データと人間除去された実データを効果的に組み合わせる』というものです
- ‘製品およびエンジニアリングリーダーのための実践的なGenAI’
- 「仕事の未来を形作る:メタのアーピット・アガルワールからの洞察」
- 「リテラルを使ったPythonの型ヒント」
- 「PythonによるLong Short-Term Memoryのマスタリング:NLPでのLSTMの力を解き放つ」
- クラウドファーストデータサイエンス:データの分析とモデリングのための現代的なアプローチ
- 「Amazon SageMaker Canvasを使用したノーコードでSalesforce Data CloudでのMLの民主化」