0Pricing
Learn AI with Python · レッスン

ベクトルストア: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-cpu

Chromaストアの作成

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フィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. LangChainのアーキテクチャとLCEL
  2. ドキュメントの読み込み、分割、埋め込み
  3. ベクトルストア:ChromaとFAISS
  4. RAG Q&Aシステムをエンドツーエンドで構築する
← Learn AI with Pythonに戻る