LlamaIndexのIndexの仕組み
大規模言語モデル(LLM)を利用する上でLangChainと合わせて重要なLlamaIndexについて,LlamaIndexのドキュメントembedding方法や回答の合成方法がイマイチ不思議(理解できてなかった)だったので,読んで整理しました.
LlamaIndexとは
LlamaIndexはLLMを利用する際,①外部ドキュメントをLLMに効率的に渡すための構造化データの作成や,②構造化データを踏まえて質問解答するようにLLMに要求しする処理を実現してくれます.
①LlamaIndexはドキュメントを取り込み,Nodeと呼ばれるオブジェクトにテキストをパース・チャンクします.
②レスポンスの合成:取得したNodeをもとにレスポンス文書を合成する.(複数のレスポンス・モードが存在)
今回は①の際のIndex方法について整理します.
Indexの種類(4種類)
リスト,ベクトル,キーワードテーブル,ツリーの4種類が存在.
リスト Index
ベクトルストアIndex
各Nodeと対応するembeddingをベクトルストアに格納
クエリの際は最も類似した上位k個のノードを取得し、それをレスポンス合成モジュールに渡す.
ツリーIndex
Nodeの階層的なツリーを構築
ルート・ノードからリーフ・ノードに至るまで辿る. デフォルトでは(child_branch_factor=1)、クエリは親ノードから1つの子ノードを選ぶ.child_branch_factor=2の場合、クエリは親ノード1つにつき2つの子ノードを選ぶ.
キーワードテーブルIndex
各Nodeからキーワードを抽出し、各キーワードから対応するNodeへのマッピングを構築
クエリから関連するキーワードを抽出し、それらをノードに対応するキーワードと照合して、ノードを取得する。