LlamaIndex(旧称GPT Index)における「インデックスの構築」は、文書を処理し、検索や生成の基盤として機能するデータ構造を生成するプロセスです。LlamaIndexには複数のインデックスタイプが用意されており、代表的なものに以下の4つがあります:
1. VectorStoreIndex(ベクトルストアインデックス)
特徴:
-
意味ベースの検索に特化。
-
文書を埋め込みベクトル(embedding)に変換して格納。
-
検索時にはクエリもベクトル化し、コサイン類似度などを用いて類似度の高いノードを返す。
用途:
-
セマンティック検索
-
Retrieval-Augmented Generation(RAG)
使用技術例:
-
OpenAI Embeddings、HuggingFace Transformers など
-
ベクトルデータベース(例:FAISS、Pinecone、Weaviate)との連携
2. ListIndex(リストインデックス)
特徴:
-
文書をシーケンシャルに格納する単純な構造。
-
検索時には全文を走査して関連箇所を抽出。
-
メモリ上に小さなデータセットを持つ場合に有効。
用途:
-
小規模なデータセットの質問応答
-
チュートリアルや開発初期の簡易検証
長所と短所:
-
構造がシンプルで高速に構築できるが、スケーラビリティに劣る。
3. TreeIndex(ツリーインデックス)
特徴:
-
文書ノードを階層的な**木構造(階層サマリツリー)**にまとめる。
-
各内部ノードに要約があり、クエリのルーティングを助ける。
-
質問に対し、トップダウンでノードを探索する。
用途:
-
ドキュメントの階層的な要約やナビゲーション
-
長大な文書構造におけるセクション単位の検索
利点:
-
効率的なルーティングと部分検索が可能
4. KeywordTableIndex(キーワードテーブルインデックス)
特徴:
-
文書から抽出したキーワードをインデックス化し、テーブルに保存。
-
クエリ中のキーワードと一致する文書ノードを検索。
用途:
-
精度の高いキーワードベースの検索
-
FAQや辞書、構造化された文書に有効
技術的詳細:
-
keyword_extractorを指定することでカスタムのキーワード抽出が可能
まとめ比較表
| インデックスタイプ | 検索方式 | 適した用途 | 特徴 |
|---|---|---|---|
| VectorStoreIndex | 意味ベース(ベクトル) | セマンティック検索、RAG | 埋め込み + 類似度検索 |
| ListIndex | 全文走査 | 小規模データ、単純なQA | 単純構造、順次処理 |
| TreeIndex | 階層探索 | 長文の要約、ドキュメント構造化 | サマリーツリーによる探索 |
| KeywordTableIndex | キーワード一致 | 辞書・FAQのような明確な語彙検索 | 抽出キーワードによるインデックス化 |
それぞれのインデックスは、データの性質や求める検索精度・速度によって使い分けることが推奨されます。例えば、大規模で意味的な検索が必要な場合は VectorStoreIndex、文書の構造を生かしたルート探索が必要な場合は TreeIndex が適しています。
ChatGPT4o 生成日:2025/06/14