ベクトルストア:ChromaとFAISS
ベクトルストアの作成と永続化、類似度検索、MMR検索、ハイブリッド検索について学習します。
「ベクトルストア:ChromaとFAISS」はCoddyKit上の無料Learn AI with Pythonレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはLearn AI with Python学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Learn AI with Pythonコースには全4レッスンが含まれています。
ベクトルストアとは
ベクトルストアは、埋め込みに変換したチャンクを保持し、クエリベクトルに最も類似するチャンクを見つけます。RAGの中心となる検索エンジンです。代表的な選択肢としてChromaとFAISSがあります。
pip install langchain-chroma faiss-cpuChromaストアの作成
Chroma.from_documentsを使うと、チャンクの埋め込みとインデックス作成を1回の呼び出しで行えます。ドキュメントと埋め込みオブジェクトを渡すと、Chromaはすぐに検索できるストアを返します。
from langchain_chroma import Chroma
from langchain_openai import OpenAIEmbeddings
embeddings = OpenAIEmbeddings(model="text-embedding-3-small")
db = Chroma.from_documents(chunks, embeddings)Chromaのディスクへの永続化
persist_directoryを渡すと、インデックスをディスクに保存でき、再起動後も利用できます。後で同じディレクトリと埋め込みを指定してChromaを構築すれば再読み込みでき、再度埋め込みを作成するコストを避けられます。
db = Chroma.from_documents(
chunks, embeddings,
persist_directory="./chroma_db"
)
# Reload later
db = Chroma(persist_directory="./chroma_db", embedding_function=embeddings)類似度検索
similarity_search(query, k=4)で検索します。クエリを埋め込みに変換し、最も近いk個のチャンクを見つけて、Documentとして返します。kは取得する箇所の数を指定します。
results = db.similarity_search("How do I reset my password?", k=4)
for doc in results:
print(doc.page_content[:80])検索スコアの取得
similarity_search_with_scoreを使うと、各結果の距離スコアも取得できます。距離が小さいほど類似度が高いことを示します。スコアを使えば、LLMに渡す前に関連性の低い結果を除外できます。
pairs = db.similarity_search_with_score("password reset", k=4)
for doc, score in pairs:
print(round(score, 3), doc.page_content[:60])FAISSの紹介
FAISS(Facebook AI Similarity Search)は、ベクトル検索用の高性能ライブラリです。非常に高速でメモリ効率も高く、別のサーバーを用意せずに大規模なローカルインデックスを扱うのに適しています。
FAISSストアの作成
APIはChromaとよく似ています。FAISS.from_documentsでインデックスを構築します。FAISSはインデックスをメモリ上に保持するため、プロセス内で読み取りの多い検索に適しています。
from langchain_community.vectorstores import FAISS
db = FAISS.from_documents(chunks, embeddings)
results = db.similarity_search("refund policy", k=3)FAISSの保存と読み込み
save_localでFAISSインデックスを永続化し、load_localで再読み込みします。インデックスではpickleを使用するため、再読み込みにはallow_dangerous_deserialization=Trueが必要です。
db.save_local("faiss_index")
db = FAISS.load_local(
"faiss_index", embeddings,
allow_dangerous_deserialization=True
)関連性と多様性
通常の類似度検索では、ほぼ同じ内容のチャンクが4つ返されることがあります。回答の異なる側面をカバーする多様な結果が必要な場合もあります。そのようなときに役立つのがMMRです。
MMR検索
Maximal Marginal Relevance(MMR)は、関連性と多様性のバランスを取り、関連性がありながら重複しないチャンクを選びます。リトリーバーのインターフェースを通じてsearch_type="mmr"を指定します。
retriever = db.as_retriever(
search_type="mmr",
search_kwargs={"k": 4, "fetch_k": 20}
)
docs = retriever.invoke("password reset")ChromaとFAISSの選択
Chromaは扱いやすく永続化にも対応しており、プロトタイプや小規模なアプリに適しています。FAISSは大規模な用途でより高速で、メモリ上での検索に適しています。どちらもsimilarity_searchとas_retrieverを提供しているため、簡単に切り替えられます。
理解度チェック
ベクトルストアの理解度を確認しましょう。
振り返り:ChromaとFAISS
persist_directoryを使ったChroma.from_documentsとFAISS.from_documentsでベクトルストアを構築し、similarity_search(query, k=4)で検索し、どちらも保存と読み込みを行いました。MMRを指定したas_retrieverで多様な結果を取得し、それぞれのストアを選ぶべき場面も学びました。
よくある質問
「ベクトルストア:ChromaとFAISS」レッスンは無料ですか?
はい。「ベクトルストア:ChromaとFAISS」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Learn AI with Pythonコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Learn AI with Pythonコースには全4レッスンが含まれています。
「ベクトルストア:ChromaとFAISS」で何を学びますか?
ベクトルストアの作成と永続化、類似度検索、MMR検索、ハイブリッド検索について学習します。 ブラウザで直接実行するハンズオンコードでLearn AI with Pythonを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Learn AI with Pythonを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのLearn AI with Pythonは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「ベクトルストア:ChromaとFAISS」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このLearn AI with Pythonレッスンでコードを書いて実行できますか?
はい。すべてのLearn AI with Pythonレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- LangChainのアーキテクチャとLCEL
- ドキュメントの読み込み、分割、埋め込み
- ベクトルストア:ChromaとFAISS
- RAG Q&Aシステムをエンドツーエンドで構築する