0Pricing
AI Agents · レッスン

マルチベクトル検索(ColBERT)

ドキュメントごとに複数のベクトル(トークンごと、またはチャンクごと)をインデックス化し、きめ細かなマッチングを実現します。

「マルチベクトル検索(ColBERT)」はCoddyKit上の無料AI Agentsレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはAI Agents学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 AI Agentsコースには全4レッスンが含まれています。

このレッスンの一部はまだ翻訳されておらず、英語で表示されています。

1つのベクトルでは不十分

標準的なRAGでは、各チャンクを1つのベクトルに埋め込みます。そのベクトルにはチャンク内のすべての情報が平均化されるため、細かなシグナルが失われます。

マルチベクトル検索では、ドキュメントごとに複数のベクトルを保存し、より正確に照合します。

ColBERTの考え方

ColBERT(Khattab & Zaharia, 2020)は、ドキュメントの各TOKENとクエリの各トークンを埋め込み、その後、最大類似度を計算します。

score(q, d) = sum over q_token in q: max over d_token in d: cos(q_token, d_token)

ColBERTが単一ベクトルを上回る理由

  • ドキュメントの複数の側面を捉えられる(1つのベクトルでは不可能)
  • 長いドキュメントをより適切に扱える
  • まれな用語に対する再現率が高い

ColBERTのコスト

チャンクごとに1つのベクトルを保存する代わりに、トークンごとに1つのベクトルを保存します。

  • チャンクに500トークンある場合、ストレージは500倍になります
  • 検索のたびに、はるかに多くのペアを比較します

量子化と枝刈りによって10〜50分の1に削減できますが、それでもコストは高くなります。

ColBERTv2

ColBERTv2は残差圧縮を追加しています。トークンをセントロイドにクラスタリングし、各トークンを(セントロイドID、小さな残差)として保存します。ストレージを50分の1に削減できます。

ColBERTの実行

RAGatouilleライブラリを使うと簡単に実行できます。

# pip install ragatouille
from ragatouille import RAGPretrainedModel

rag = RAGPretrainedModel.from_pretrained('colbert-ir/colbertv2.0')
rag.index(collection=documents, index_name='my_corpus')

results = rag.search(query='What is the refund policy?', k=5)

実際のマルチベクトル利用

ColBERT以外にも、マルチベクトルの手法には次のようなものがあります。

  • 親子 — 小さなチャンクを埋め込み、大きな親チャンクを取得する
  • 要約+チャンク — ドキュメントの要約と個々のチャンクの両方を埋め込む
  • 仮想的な質問 — 各ドキュメントから合成したQ&Aペアを埋め込む

Hypothetical Questions Pattern

def index_with_hypos(doc):
    # Generate 5 plausible questions this doc could answer
    questions = llm.invoke(f'Write 5 questions answered by this doc:\n{doc}').content.split('\n')
    for q in questions:
        vector_db.add(embed(q), payload={'doc': doc, 'question': q})
# Now queries that match a stored hypothetical question retrieve the doc.

Parent-Child with LangChain

from langchain.retrievers import ParentDocumentRetriever
from langchain.storage import InMemoryStore

store = InMemoryStore()
retriever = ParentDocumentRetriever(
    vectorstore=child_vectorstore,
    docstore=store,
    child_splitter=child_splitter,    # small
    parent_splitter=parent_splitter   # large
)
retriever.add_documents(documents)
# Indexes small chunks, returns large parents.

ColBERTを使う場合

  • 重要度の高い検索(法律、医療など)
  • 長いドキュメント
  • ストレージコストを許容できる場合

使わない場合

  • 小規模なコーパス
  • レイテンシが重要な処理経路
  • コストに制約のあるプロジェクト

BM25とのハイブリッド

再現率を最大化するには、マルチベクトル検索と従来のBM25キーワード検索を組み合わせます。Reciprocal Rank Fusionを使って結果を統合します。

ColBERTのトレードオフ

ColBERT方式のマルチベクトル検索を使う場合の主なトレードオフは何でしょうか。

まとめ

チャンクごとに1つのベクトルだけを使うと情報が失われます。ColBERTはトークンごとのベクトルを保存し、より高い精度を実現します。RAGatouilleを使えば簡単に導入できます。再現率が重要で、コストを許容できる場合に使います。

よくある質問

「マルチベクトル検索(ColBERT)」レッスンは無料ですか?

はい。「マルチベクトル検索(ColBERT)」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、AI Agentsコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 AI Agentsコースには全4レッスンが含まれています。

「マルチベクトル検索(ColBERT)」で何を学びますか?

ドキュメントごとに複数のベクトル(トークンごと、またはチャンクごと)をインデックス化し、きめ細かなマッチングを実現します。 ブラウザで直接実行するハンズオンコードでAI Agentsを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

AI Agentsを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのAI Agentsは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。

「マルチベクトル検索(ColBERT)」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このAI Agentsレッスンでコードを書いて実行できますか?

はい。すべてのAI Agentsレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

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

  1. Cross-Encoderによる再ランキング
  2. HyDE:仮想ドキュメントEmbedding
  3. マルチベクトル検索(ColBERT)
  4. RAG評価(RAGAS、Recall@K)
← AI Agentsに戻る