5章 Faiss と Pinecone によるベクトルデータベース
from 生成AIのプロンプトエンジニアリング
概要
ベクトルデータベースとは、テキストデータを保存するツールで、類似性に基づいたクエリー(類似検索)が可能
生成AIモデルが学習していない内容について、ベクトルデータベースのデータを参照して、ハルシネーションを起こさせずに応答の品質を上げる時に使用される
ベクトルデータベースの活用例は以下
ドキュメントの読み取り
類似製品のレコメンド
過去の会話の保持
ベクトルは、テキストや画像を数値のリストで表したもの。座標に近いイメージ。
ベクトル検索する時は、検索対象のテキストのベクトルを取得し、データベース内部で近い k 件のレコードを取得する
以下の画像は、「MacBook」というテキストで検索した時に、k=3 の場合は「iPhone」「iMac」「MacBook Pro」の三件を取得することになる
https://scrapbox.io/files/69d9378d3caed06dfe731486.png
上記のように、類似性の高いレコードが取得できる技術はAIの機能を支えるのに重要な機能で強力
ドキュメントの読み取り:正確な回答を提供するために、関連するテキストを見つける
レコメンドシステム:提案するために類似性の高い商品を見つける
長期記憶:チャットボットのように、関連するチャット履歴の一部を検索する
RAG: Retrival-Augmented Generation(検索拡張生成)
ベクトルデータベースから関連性の高い情報だけを抜き取り、生成AIへのプロンプトに含める手法のことを RAGという
関連性の高い情報をプロンプトに含めることができるので、コンテキストウィンドウを削減でき、無関係なテキストを除外できるようになる
Retrival(リトリーバル)は、プロンプトに関連する情報を抜き出す意味を指す
RAGは通常、AIが学習していない情報に対して問い合わせをするときに、ハルシネーションを起こさせないために使用するもの
チャットにファイルを添付する時には、RAG は基本不要だが以下の場合は検討する
ファイルが大きすぎてコンテキストウィンドウに収まらない時
RAGで取得して、必要な部分だけをコンテキストとして使用する
複数ファイルを横断して取得したいとき
複数ファイルを添付した場合も、コンテキストウィンドウの課題から非現実的
他のユーザーがベクトルデータベースを参照する要件があるとき
ファイル情報をベクトルデータベースに格納することで、他のユーザーが参照して RAG として使用することがある時
一言でいうとコンテキストウィンドウの治るか収まらないかがポイント
RAG をアプリケーションに組み込むと以下の流れで処理が行われる
1. テキストをチャンクに分割する
2. チャンクをデータベースに保存する
3. ベクトルが類似するレコードを検索する
4. レコードをコンテキストとしてプロンプトに挿入する
最も類似したテキストを見つけるベクトル検索能力は、ベクトル生成に利用するモデルに完全依存する。
埋め込み(Embedding)
単語の埋め込みとは、事前学習されたモデルから返されるテキストのベクトル表現を意味する
上記のイラストで作成したのは、2次元だったが実際はもっと多い次元で表現される(text-embedding-ada-002の場合は、1536次元)
次元が多いほどモデルはテキスト同士の関係性を捉えやすくなる