VectorChord-BM25
================

VectorChord-BM25は、VectorChordと同じ高性能フレームワークを使用して、ベストマッチング25BM25キーワード検索をPostgresにもたらします。
VectorChordはAI埋め込みの密なセマンティック検索を処理しますが、
VectorChord-BM25はスパースキーワード検索を処理します。統計的な関連性によってランク付けされた、適切な単語を含むドキュメントの検索。

インストール、構成、および完全なテクニカルリファレンスについては、
:ref:`VectorChord-BM25  documentation </pg_extensions/vectorchord_bm25/>` を参照してください。

VectorChord-BM25を使用する場合
------------------------------

BM25キーワード検索は、ナレッジベースパイプラインでの高密度ベクトル検索を補完します。次の場合にVectorChord-BM25を使用します。

- ユーザーは、セマンティックモデルでは高くランクされない可能性がある正確な用語、製品名、または技術識別子で検索します。

- キーワードの関連性と意味的類似性を組み合わせたハイブリッド取得パイプラインを構築したい。

- コーパスが大規模であり、シークエンシャルなテキストスキャンではなく、高速なインデックス付きキーワードルックアップが必要です。

その仕組み
----------

VectorChord-BM25は、 ``bm25vector`` データタイプと\ ``bm25``
インデックスを導入しました。テキストは、トークナイザーBERTなどを使用してスパースベクトル表現にトークン化され、\ ``bm25vector``
として保存され、BM25インデックスでインデックス付けされ、\ ``<&>``
距離演算子を使用して照会されます。

クエリー時に埋め込みモデルを必要とする高密度ベクトル検索とは異なり、BM25スコアリングは完全に統計的です。取得時にモデル推論は必要ありません。

パイプラインとともにVectorChord-BM25を使用する
----------------------------------------------

VectorChord-BM25は、自分自身がパイプラインステップオペレーションではありません。代わりに、密な知識ベースと並んで
**並列検索レイヤー**
として動作します。典型的なパターンは次のとおりです。

1. パイプラインは、 ``KnowledgeBase``
   ステップを介して高密度のナレッジベース埋め込みインデックステーブルを設定します。

2. 別のBM25インデックステーブルには、\ ``tokenize()``
   でトークン化された同じまたは関連するコンテンツが保存されます。

3. クエリー時に、両方のインデックスの結果がマージされ、再ランク付けされます。

ステップ1トークナイザーを設定する
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

BM25テーブルを作成する前にトークナイザーを初期化します。
BERTが最も一般的な選択です。

.. code:: sql

   SELECT create_tokenizer(bert, $$
   model = "bert_base_uncased"
   $$);

ステップ2BM25テーブルを作成する
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

パイプラインのソースまたは宛先テーブルの横に\ ``bm25vector``
列を含むテーブルを作成します。

.. code:: sql

   CREATE TABLE documents_bm25 (
       id     serial PRIMARY KEY,
       source_id bigint,         -- references the pipeline source key
       passage   text,
       embedding bm25vector
   );

ステップ3入力とインデックス付け
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

コンテンツをロードし、トークン化して、BM25インデックスを構築します。

.. code:: sql

   - - 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()``
を使用して、キーワードランク付けの結果を取得します。

.. code:: sql

   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キーワードクエリーの両方を実行し、結果セットをマージします。この例では、検索とユニオンの両方を実行して、ダウンストリームの再ランキングの上位結果を実行します。

.. code:: sql

   - - 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は、
:ref:`Hybrid search <Hybrid search>` で説明されているハイブリッド検索パターンのビルディングブロックの1つです。
VectorChordを使用した緻密な検索は、セマンティックの幅を提供します。
BM25はキーワードの精度を提供します。一緒に、偽陽性トピック外の意味的一致と偽陰性完全一致結果の見逃しの両方を削減します。

さらに読む
----------

- :ref:`VectorChord-BM25 documentation </pg_extensions/vectorchord_bm25/>`  —
  インストール、トークナイザー構成、リファレンス、およびリリースノート

- :ref:`VectorChordを有効にするオプショナル <VectorChordを有効にするオプショナル>`  — パイプラインを使用した密ベクトルインデックス

- :ref:`Hybrid search <Hybrid search>`  — デンス検索とスパース検索の組み合わせ

- :ref:`パイプラインステップ構成ヘルパー <パイプラインステップ構成ヘルパー>`  — ``KnowledgeBase`` ステップ構成リファレンス
