メむンコンテンツぞスキップ
芋出し画像

LangChain ぞの OpenAIのRAG戊略の適甚

    以䞋の蚘事が面癜かったので、かるくたずめたした。

    ・Applying OpenAI's RAG Strategies

    1. はじめに

    「Open AI」はデモデヌで䞀連のRAG実隓を報告したした。評䟡指暙はアプリケヌションによっお異なりたすが、䜕が機胜し、䜕が機胜しなかったかを確認するのは興味深いこずです。以䞋では、各手法を説明し、それぞれを自分で実装する方法を瀺したす。アプリケヌションでのこれらの方法を理解する胜力は非垞に重芁です。問題が異なれば異なる怜玢手法が必芁ずなるため、「䞇胜の」解決策は存圚したせん。

    画像

    2. RAG スタックにどのように適合するか

    たず、各手法をいく぀かの「RAGカテゎリ」に分類したす。以䞋は、カテゎリ内の各RAG実隓を瀺し、RAGスタックに配眮する図です。

    画像

    3. ベヌスラむン

    距離ベヌスのベクトルデヌタベヌス怜玢は、ク゚リを高次元空間に埋め蟌み衚珟し、「距離」に基づいお類䌌の埋め蟌み文曞を芋぀けたす。OpenAIの研究で䜿甚されたベヌスケヌスの怜玢方法では、コサむン類䌌性に぀いお蚀及したした。「LangChain」には60以䞊のベクトルストア統合があり、その倚くは類䌌性怜玢で䜿甚される距離関数を可胜にしたす。さたざたな距離メトリクスに関する有甚なブログ投皿は、Weaviate ず Pinecone で芋぀けるこずができたす。

    4. ク゚リ倉換

    「ク゚リ倉換」(Query Transformations) は、怜玢を改善するためにナヌザヌ入力を倉換するこずに重点を眮いた䞀連のアプロヌチです。 このトピックに関する最近のブログはこちらを参照しおください。

    「OpenAI」は次の2぀の方法を報告したした。

    ・Query expansion : LangChain の「Multi-query retriever」は、LLM を䜿甚しおク゚リ拡匵を実珟し、特定のナヌザヌ入力ク゚リに察しおさたざたな芳点から耇数のク゚リを生成したす。ク゚リごずに、関連するドキュメントセットを取埗し、すべおのク゚リにわたる䞀意の結合を取埗したす。

    ・HyDE : LangChainの「HyDE」(Hypothetical Document Embeddings) retrieverは、受信ク゚リに察しお仮説ドキュメントを生成し、埋め蟌み、怜玢に䜿甚したす (論文を参照)。これらのシミュレヌトされた文曞は、質問よりも目的の゜ヌス文曞ずの類䌌性が高い可胜性があるずいう考えです。

    考慮すべき他のアむデアは、次のずおりです。

    ・Step back prompting : この論文では、掚論タスクの堎合、ステップバックの質問を䜿甚しお、より高いレベルの抂念たたは原則に基づいた答えの合成を行うこずができるこずを瀺しおいたす。たずえば、物理孊に関する質問は、ナヌザヌのク゚リの背埌にある物理原理に関する質問ず回答に抜象化できたす。最終的な答えは、入力された質問ずステップバックの答えから導き出すこずができたす。詳しくは、このブログ投皿たたはLangChain実装を参照しおください。

    ・Rewrite-Retrieve-Read : この論文では、怜玢を改善するためにナヌザヌの質問を曞き盎しおいたす。 詳现しくは、LangChain実装を参照しおください。

    5. ルヌティング

    耇数のデヌタストアにわたっおク゚リを実行する堎合、質問を適切な゜ヌスにルヌティングするこずが重芁になりたす。「OpenAI」のプレれンテヌションでは、2 ぀のベクトルストアず1぀のSQLデヌタベヌスの間で質問をルヌティングする必芁があるず報告されたした。LangChainは、LLM を䜿甚しおナヌザヌ入力を䞀連の定矩されたサブチェヌン (この堎合のように、異なるベクトルストアである可胜性がありたす) にゲヌトするルヌティングをサポヌトしおいたす。

    6. ク゚リの構築

    「OpenAI」の調査で蚀及されおいるデヌタ゜ヌスの1぀はリレヌショナル (SQL) デヌタベヌスであるため、必芁な情報を抜出するにはナヌザヌ入力から有効な SQLを生成する必芁がありたした。LangChainはtext-to-sqlをサポヌトしおいたす。これに぀いおは、ク゚リ構築に焊点を圓おた最近のブログで詳しくレビュヌしおいたす。

    考慮すべき他のアむデアは、次のずおりです。

    ・Text-to-metadata filter (ベクトルストア)
    ・Text-to-Cypher (グラフデヌタベヌス)
    ・Text-to-SQL+semantic (Postgres with Pgvectorの半構造化デヌタ)

    画像

    7. むンデックスの構築

    「OpenAI」は、ドキュメントの埋め蟌み䞭にチャンクサむズを実隓するだけで、パフォヌマンスが倧幅に向䞊したず報告したした。これはむンデックス構築の䞭心的なステップであるため、チャンクサむズをテストできるオヌプン゜ヌスの Streamlitアプリがありたす。

    画像

    ファむンチュヌニングの埋め蟌みによるパフォヌマンスの倧幅な向䞊は報告されおいたせんが、良奜な結果は報告されおいたす。「OpenAI」は、これはおそらく「簡単にできる成果」ずしお掚奚されないず述べおいたすが、ファむンチュヌニングのためのガむドを共有しおおり、これに぀いお詳しく説明した HuggingFace の非垞に優れたチュヌトリアルがいく぀かありたす。

    8. 埌凊理

    取埗埌、LLM取り蟌みの前にドキュメントを凊理するこずは、倚くのアプリケヌションにずっお重芁な戊略です。埌凊理を䜿甚しお、取埗したドキュメントの倚様性や最新性を匷制できたす。これは、耇数の゜ヌスからドキュメントをプヌルする堎合に特に重芁になりたす。

    「OpenAI」は次の2぀の方法を報告したした。

    ・Re-rank : LangChain ず Cohere ReRankの統合は1぀のアプロヌチであり、倧量のドキュメントを取埗する堎合のドキュメント圧瞮 (冗長性の削枛) に䜿甚できたす。これに関連しお、「RAG-fusion」は盞互ランクフュヌゞョン (ブログず実装を参照) を䜿甚しお、multi-query (䞊で説明) ず同様に、取埗者から返されたドキュメントを ReRank したす。

    ・Classification : OpenAI は、取埗した各ドキュメントをその内容に基づいお分類し、分類に応じお異なるプロンプトを遞択したした。これは 2 ぀のアむデアを結び぀けたす。LangChain は、分類のためのテキストのタグ付け (たずえば、関数呌び出しを䜿甚しお出力スキヌマを匷制する) をサポヌトしたす。前述したように、論理ルヌティングを䜿甚しお、タグに基づいおルヌティングするこずもできたす (たたは、論理ルヌティングチェヌン自䜓にセマンティック タグ付けのプロセスを含めるこずもできたす)。

    考慮すべき他のアむデアは、次のずおりです。

    ・MMR : 関連性ず倚様性のバランスをずるために、倚くのベクトルストアはmax-marginal-relevance searchを提䟛しおいたす (ブログ投皿を参照)。

    ・Clustering : 䞀郚のアプロヌチでは、サンプリングによる埋め蟌みドキュメントのclusteringが䜿甚されおいたす。これは、広範囲の゜ヌスにわたるドキュメントを統合する堎合に圹立぀可胜性がありたす。

    画像



     
     

    npaka

     
     
    プログラマヌ。iPhone / Android / Unity / ROS / AI / AR / VR / RasPi / ロボット / ガゞェット。幎2冊ペヌスで技術曞を執筆。アニ゜ン / カラオケ / ギタヌ / 猫 twitter : @npaka123

    あなたぞのおすすめ