キーワード認識型セマンティック検索は、キーワード一致と意味理解を単一の DashVector クエリに組み合わせます。疎ベクトル (ターム頻度用) と密ベクトル (意味理解用) の両方を単一のコレクションに保存することで、2つの個別の検索システムを実行することなく、より強力な再現率を実現します。
基本概念
疎ベクトルは、キーワードとターム頻度を表します。これらは、ほとんどがゼロ値で、いくつかの非ゼロ値を含み、ドキュメント内の各キーワードに1つずつ対応します。DashVector では、疎ベクトル {1:0.4, 10000:0.6, 222222:0.8} は3つのキーワード (要素 1、10000、222222) を持ち、その値は重みです。
密ベクトルは、コンテンツの意味理解を表します。埋め込みモデルは、テキストを固定長の浮動小数点数配列に変換し、キーワード一致では捉えられない概念的な関係をキャプチャします。
| 疎ベクトル | 密ベクトル | |
|---|---|---|
| 表現するもの | キーワードとターム頻度 | 意味情報 |
| 構造 | ほとんどがゼロ、少数の非ゼロ値 | ほとんどが非ゼロ値 |
| 使用技術 | 転置インデックス、TF-IDF、BM25 | 埋め込みモデル |
| 強み | 正確なターム一致 | 概念的類似性 |
| ギャップの例 | 「激しい雨」と「土砂降りの雨」を一致させることができない | トレーニングされていない場合、"rice irrigating" を "irrigating rice" にマッチできません |
キーワード認識型セマンティック検索は、両方のギャップを同時に解消します。各結果の最終スコアは、クエリベクトルとドキュメントベクトルの内積であり、密ベクトルと疎ベクトルのスコアが合計されます。
キーワード認識型セマンティック検索を使用するタイミング
キーワード認識型セマンティック検索は、次の場合に使用します。
クエリが自然言語と特定のターム (製品名、エラーコード、ID) を組み合わせる場合
ユーザーがイディオム、同義語、または言い換えられた概念を検索する場合
コーパスが正確なキーワード再現率とコンテキスト理解の両方を必要とする場合
前提条件
開始する前に、以下があることを確認してください。
DashVector クラスター (クラスターの作成)
API キー (API キーの管理)
最新の DashVector SDK がインストールされていること (DashVector SDK のインストール)
キーワード認識型セマンティック検索の実行
以下の手順では、コレクションを作成し、両方のベクトルタイプを持つドキュメントを挿入し、ハイブリッドクエリを実行します。
metric='dotproduct' を使用するコレクションのみが疎ベクトルをサポートします。
ステップ 1: コレクションの作成
import dashvector
# Replace YOUR_API_KEY with your API key (see Manage API keys).
# Replace YOUR_CLUSTER_ENDPOINT with your cluster endpoint (see the cluster details page).
client = dashvector.Client(
api_key='YOUR_API_KEY',
endpoint='YOUR_CLUSTER_ENDPOINT'
)
# dimension=4 is used here for simplicity.
# Set this to match your actual embedding model's output dimension.
ret = client.create('hybrid_collection', dimension=4, metric='dotproduct')
collection = client.get('hybrid_collection')
assert collectionステップ 2: 疎ベクトルを持つドキュメントの挿入
from dashvector import Doc
collection.insert(Doc(
id='A',
vector=[0.1, 0.2, 0.3, 0.4],
sparse_vector={1: 0.3, 10: 0.4, 100: 0.3}
))sparse_vector フィールドは、キーワード ID をその重みにマッピングします。DashText のような疎エンコーダーを使用して、生テキストからこれらを生成します。詳細については、「疎ベクトルエンコーダー」をご参照ください。
ステップ 3: 両方のベクトルタイプでのクエリ
同じクエリで vector と sparse_vector の両方を渡します。DashVector は、両方のベクトルタイプからの内積を合計して、各結果をスコアリングします。
docs = collection.query(
vector=[0.1, 0.1, 0.1, 0.1],
sparse_vector={1: 0.3, 20: 0.7}
)結果は、結合された内積スコアによってランク付けされます。スコアが高いほど関連性が高くなります。
疎ベクトルエンコーダー
DashText は、DashVector に推奨される疎ベクトルエンコーダーです。生テキストを上記の sparse_vector 形式に変換します。セットアップ手順については、「DashText クイックスタート」をご参照ください。
次のステップ
DashText クイックスタート — テキストから疎ベクトルを生成します
クラスターの作成 — DashVector クラスターをセットアップします
API キーの管理 — 認証を管理します