VectorChord-BM25#
VectorChord-BM25は、VectorChordと同じ高性能フレームワークを使用して、ベストマッチング25BM25キーワード検索をPostgresにもたらします。 VectorChordはAI埋め込みの密なセマンティック検索を処理しますが、 VectorChord-BM25はスパースキーワード検索を処理します。統計的な関連性によってランク付けされた、適切な単語を含むドキュメントの検索。
インストール、構成、および完全なテクニカルリファレンスについては、 VectorChord-BM25 documentation を参照してください。
VectorChord-BM25を使用する場合#
BM25キーワード検索は、ナレッジベースパイプラインでの高密度ベクトル検索を補完します。次の場合にVectorChord-BM25を使用します。
ユーザーは、セマンティックモデルでは高くランクされない可能性がある正確な用語、製品名、または技術識別子で検索します。
キーワードの関連性と意味的類似性を組み合わせたハイブリッド取得パイプラインを構築したい。
コーパスが大規模であり、シークエンシャルなテキストスキャンではなく、高速なインデックス付きキーワードルックアップが必要です。
その仕組み#
VectorChord-BM25は、 bm25vector データタイプとbm25
インデックスを導入しました。テキストは、トークナイザーBERTなどを使用してスパースベクトル表現にトークン化され、bm25vector
として保存され、BM25インデックスでインデックス付けされ、<&>
距離演算子を使用して照会されます。
クエリー時に埋め込みモデルを必要とする高密度ベクトル検索とは異なり、BM25スコアリングは完全に統計的です。取得時にモデル推論は必要ありません。
パイプラインとともにVectorChord-BM25を使用する#
VectorChord-BM25は、自分自身がパイプラインステップオペレーションではありません。代わりに、密な知識ベースと並んで 並列検索レイヤー として動作します。典型的なパターンは次のとおりです。
パイプラインは、
KnowledgeBaseステップを介して高密度のナレッジベース埋め込みインデックステーブルを設定します。別のBM25インデックステーブルには、
tokenize()でトークン化された同じまたは関連するコンテンツが保存されます。クエリー時に、両方のインデックスの結果がマージされ、再ランク付けされます。
ステップ1トークナイザーを設定する#
BM25テーブルを作成する前にトークナイザーを初期化します。 BERTが最も一般的な選択です。
SELECT create_tokenizer(bert, $$
model = "bert_base_uncased"
$$);
ステップ2BM25テーブルを作成する#
パイプラインのソースまたは宛先テーブルの横にbm25vector
列を含むテーブルを作成します。
CREATE TABLE documents_bm25 (
id serial PRIMARY KEY,
source_id bigint, -- references the pipeline source key
passage text,
embedding bm25vector
);
ステップ3入力とインデックス付け#
コンテンツをロードし、トークン化して、BM25インデックスを構築します。
- - Tokenize text into bm25vector
UPDATE documents_bm25
SET embedding = tokenize(passage, bert);
- - Create the BM25 index
CREATE INDEX documents_embedding_bm25
ON documents_bm25
USING bm25 (embedding bm25_ops);
ステップ4BM25で照会する#
<&> 演算子とto_bm25query()
を使用して、キーワードランク付けの結果を取得します。
SELECT
id,
source_id,
passage,
embedding <&> to_bm25query(
documents_embedding_bm25,
tokenize(PostgreSQL full-text search, bert)
) AS bm25_score
FROM documents_bm25
ORDER BY bm25_score
LIMIT 10;
BM25と緻密な知識ベースの組み合わせ#
最も効果的な取得パターンはハイブリッド検索です。密なセマンティッククエリーとBM25キーワードクエリーの両方を実行し、結果セットをマージします。この例では、検索とユニオンの両方を実行して、ダウンストリームの再ランキングの上位結果を実行します。
- - Dense semantic results from the pipeline knowledge base
WITH dense_results AS (
SELECT key, distance AS score, dense AS source
FROM aidb.retrieve_key(my_knowledge_base, PostgreSQL full-text search, 10)
),
- - BM25 keyword results from the BM25 table
bm25_results AS (
SELECT source_id::text AS key,
embedding <&> to_bm25query(
documents_embedding_bm25,
tokenize(PostgreSQL full-text search, bert)
) AS score,
bm25 AS source
FROM documents_bm25
ORDER BY score
LIMIT 10
)
SELECT key, score, source
FROM dense_results
UNION ALL
SELECT key, score, source
FROM bm25_results
ORDER BY score;
マージされた結果は、最終的な関連性の高い応答のために再ランキングモデルaidb.rerank_text()
経由で渡すことができます。
ハイブリッド検索との関係#
VectorChord-BM25は、 Hybrid search で説明されているハイブリッド検索パターンのビルディングブロックの1つです。 VectorChordを使用した緻密な検索は、セマンティックの幅を提供します。 BM25はキーワードの精度を提供します。一緒に、偽陽性トピック外の意味的一致と偽陰性完全一致結果の見逃しの両方を削減します。
さらに読む#
VectorChord-BM25 documentation — インストール、トークナイザー構成、リファレンス、およびリリースノート
VectorChordを有効にするオプショナル — パイプラインを使用した密ベクトルインデックス
Hybrid search — デンス検索とスパース検索の組み合わせ
パイプラインステップ構成ヘルパー —
KnowledgeBaseステップ構成リファレンス