見出し画像

LlamaIndexの性能向上のためのテクニックガイド

以下の記事が面白かったので、かるくまとめました。

Building Performant RAG Applications for Production


1. はじめに

「LlamaIndex」によるRAG (検索拡張生成) のプロトタイプを作成するのは簡単ですが、それを本番用に性能と堅牢性を備えた大規模な知識コーパスに拡張するのは困難です。

この記事では、「LlamaIndex」によるRAGの性能を向上させるためのさまざまなヒントを紹介します。最終的な目標は、検索 (retrieval) と生成 (generation) の性能を最適化し、より複雑なデータセットに対するより多くのクエリに幻覚なしに正確に答えることです。

2. 本番用のRAGを構築するための考慮事項

本番用のRAGを構築するための考慮事項は、次のとおりです。

・検索用のチャンクと合成用のチャンクの分離
・より大きな文書セットでの構造化検索
・タスクに応じてチャンクを動的に取得
・コンテキストの埋め込みの最適化

3. 検索用のチャンクと合成用のチャンクの分離

より適切な検索を行うための重要な手法は、検索用のチャンクと合成用のチャンクを分離することです。

3-1. モチベーション

検索に最適なチャンク表現は、合成に最適なチャンク表現とは異なる場合があります。たとえば、生のテキストチャンクには、LLMがクエリに対してより詳細な回答を合成するために必要な情報が含まれている場合があります。ただし、埋め込み表現に偏りをもたらす可能性のあるフィラーワードが含まれている場合や、グローバルコンテキストが欠如しており、関連するクエリに対してまったく取得されない場合があります。

3-2. 主要なテクニック

このアイデアを活用するには、次の2つの方法があります。

(1) 要約の埋め込みで検索し、合成用のチャンクにリンク
チャンクを直接取得する場合と比較して、チャンクを取得する前に、関連する文書を高レベルで取得するのに役立ちます。

・リソース

Recursive Retriever + Query Engine Demo
Document Summary Index

(2) 文を埋め込みで検索し、拡張ウィンドウにリンク
関連するコンテキストをよりきめ細かく取得できるようになり、合成に十分なコンテキストも確保できます。

・リソース

Metadata Replacement + Node Sentence Window

4. より大きな文書セットでの構造化検索

4-1. モチベーション

標準のRAG (top-kの取得 + 基本的なテキスト分割) の大きな問題は、ドキュメントの数が増えると (100個の異なるPDFがある場合など) うまく機能しなくなることです。この手法では、より正確な検索をサポートするために構造化情報を使用できます。たとえば、2つのPDFにのみ関連する質問をした場合、構造化情報を使用して、チャンクとの生の埋め込み類似性を超えて、これら2つのPDFが返されるようにします。

4-2. 主要なテクニック

本番用のRAGでより構造化された タグ付け / 検索 を実行するにはいくつかの方法がありますが、それぞれに長所と短所があります。

(1) Metadata Filters + Auto Retrieval
各文書にメタデータをタグ付けして、ベクトルデータベースに保存します。推論中に、LLMを使用して適切な「メタデータフィルター」を推論し、クエリ文字列に追加してベクトルデータベースを検索します。

・長所 : 主要なベクターデータベースでサポートされている。複数の次元でドキュメントをフィルタリングできる。
・短所 : 適切なタグを定義するのが難しい場合がある。タグには、より正確に検索するのに十分な関連情報が含まれていない可能性がある。また、タグは文書レベルでのキーワード検索を表すが、意味的な検索はできない。

・リソース

Auto-Retrieval from a Vector Database
Comparing Methods for Structured Retrieval (Auto-Retrieval vs. Recursive Retrieval)

(2) Store Document Hierarchies (summaries -> raw chunks) + Recursive Retrieval
要約の埋め込みで検索し、文書ごとのチャンクにマッピングします。チャンクレベルの前に、まず文書レベルでフェッチします。

・長所 : 文書レベルでのセマンティック検索が可能。
・短所 : 構造化タグによるキーワード検索は許可されない (セマンティック検索よりも正確な可能性がある)。また、要約の自動生成にはコストがかかる場合がある。

・リソース

Document Summary Index
Comparing Methods for Structured Retrieval (Auto-Retrieval vs. Recursive Retrieval)

5. タスクに応じてチャンクを動的に取得

5-1. モチベーション

RAGは、top-k類似度が最適化される特定の事実についての質問に答えるだけではありません。ユーザーが尋ねる可能性のあるクエリは多岐にわたります。単純なRAGによって処理されるクエリには、特定の事実について尋ねるクエリが含まれます (「2023 年のこの会社の D&I の取り組みについて教えてください」「ナレーターは Google在籍中に何をしていましたか」など)。ただし、クエリには要約を含めることもできます (「この文書の要約を教えてください」、または比較については「XとYを比較してください」など)。これらの使用例はすべて、異なる取得手法を必要とする場合があります。

5-2. 主要なテクニック

「LlamaIndex」は、タスク固有の検索をサポートするためのいくつかのコアモジュールを提供します。

Query Engine
Routers
Data Agents

これらのモジュールを使用して、共同の質問応答や要約を行ったり、構造化クエリと非構造化クエリを組み合わせたりすることもできます。

・リソース

Sub Question Query Engine
Joint QA Summary Query Engine
Recursive Retriever + Document Agents
Router Query Engine
OpenAI Agent + Query Engine Experimental Cookbook
OpenAI Agent Query Planning

6. コンテキストの埋め込みの最適化

6-1. モチベーション

これは、上記の「検索と合成に使用されるチャンクの分離」で説明した動機に関連しています。特定のデータコーパスをより適切に取得できるように埋め込みが最適化されていることを確認したいと考えています。事前学習されたモデルは、ユースケースに関連するデータの顕著な特性を捉えていない可能性があります。

6-2. 主要なテクニック

上記のテクニックの他に、埋め込みモデルのファインチューニングを試すこともできます。 非構造化テキストコーパスに対して、ラベルを使用しない方法でこれを行うことができます。

・リソース

Embedding Fine-tuning Guide

関連



この記事が気に入ったらサポートをしてみませんか?