langchainのVectorStoreで効果的な検索:as_retriever()メソッドを理解する
langchainのVectorStoreで効果的な検索:as_retriever()メソッドを理解する
langchainのVectorStoreは、高度な検索機能を提供するための強力なツールです。その中でも、as_retriever()メソッドは異なる検索方法やパラメータを活用して、効果的な検索を実現するための鍵となります。この記事では、as_retriever()メソッドを詳しく解説し、検索方法とパラメータの使い方を理解する手助けをします。
as_retriever()で設定できるsearch_type
as_retriever()メソッドを使用する際に設定できるsearch_typeは、以下の3つの検索方法を選択できます。
1. similarity
デフォルトで設定されている検索方法で、類似検索が行われます。この方法では、類似する上位4件のDocumentsオブジェクトが返されます。必要に応じて、後述するsearch_kwargsのtop_kで返す件数を調整できます。
# similarityの使用例
retriver = vector_store.as_retriever()
docs = retriever.get_relevant_documents("検索query")
# top_kを指定する場合
retriver = vector_store.as_retriever(search_kwargs={"k": 4})
docs = retriever.get_relevant_documents("検索query")
2. similarity_score_threshold
この方法は、類似度のスコアと閾値を設定して、閾値以上の類似度を持つDocumentsオブジェクトを返します。
# similarity_score_thresholdの使用例
retriver = vector_store.as_retriever(search_type="similarity_score_threshold", search_kwargs={"score_threshold": 0.8})
docs = retriever.get_relevant_documents("検索query")
3. mmr
mmrは、Maximum Marginal Relevanceという手法を使用した検索方法です。Vector Storeがサポートしている場合に使用できます。
Copy code
# mmrの使用例
retriver = vector_store.as_retriever(search_type="mmr")
docs = retriever.get_relevant_documents("検索query")
Maximum Marginal Relevanceの詳細については、こちらのブログで原論文を翻訳されていますので、参考にしてください。
as_retriver()で設定できるsearch_kwargs
search_kwargsは、Vector Storeに応じて検索方法に関するパラメータを辞書型で設定するためのものです。以下、その詳細を見ていきましょう。
1. top_kの調整
top_k
パラメータは、類似検索時に返すDocumentsオブジェクトの数を制御します。デフォルトでは4件が設定されていますが、検索結果の質や量に応じて調整しましょう。
# top_kの設定方法
retriver = vector_store.as_retriever(search_kwargs={"k": 4})
2. メタデータでのフィルタリング
filter
パラメータを使用して、metadataの条件に基づいて結果をフィルタリングできます。例えば、特定の言語の結果のみを抽出することが可能です。
# metadataのlangが'en'のDocumentsオブジェクトのみを抽出
retriever = vector_store.as_retriever(search_kwargs={"filter": {"lang": "en"}})
3. 類似度スコアの閾値設定
類似検索にsimilarity_score_thresholdモデルを使用する場合には、類似度の閾値をscore_thresholdパラメータで設定します。
# 類似度スコアの閾値を0.8に設定
retriver = vector_store.as_retriever(search_type="similarity_score_threshold", search_kwargs={"score_threshold": 0.8})
4. namespaceの設定
pineconeなどのVector Storeでは、Index内のVectorの集合をnamespace(名前空間)で分けて管理することができます。
namespaceを指定することで、特定のnamespace内のVectorのみを検索対象とすることができます。
# namespaceの設定方法
retriver = vector_store.as_retriever(search_kwargs={"namespace": "namespace_name"})
Vector storeによって、設定できるsearch_kwargsは変わってくるため、なにが設定できるかVector storeのドキュメントを参照してみてください。
まとめ
VectorStoreのas_retriever()メソッドを使いこなすことで、langchainユーザーは豊富な検索オプションを活用し、効率的な情報発見を実現できます。必要な情報を正確に取得するために、さまざまな検索方法とパラメータの活用を検討しましょう。
株式会社piponでは定期的に技術勉強会を開催しています。
ChatGPT・AI・データサイエンスについてご興味がある方は是非、ご参加ください。
株式会社piponではChatGPT・AI・データサイエンスについて業界ごとの事例を紹介しています。ご興味ある方はこちらのオウンドメディアをご覧ください。
参考
株式会社piponのテックブログです。 ChatGPTやAzureをメインに情報発信していきます! お問い合わせはフォームへお願いします。 会社HP pipon.co.jp/ フォーム share.hsforms.com/19XNce4U5TZuPebGH_BB9Igegfgt
Discussion