ハイブリッド検索とは?

ハイブリッド検索は、複数の検索アルゴリズムを組み合わせることで、検索結果の精度や関連性を向上させる技術です。一般的に、ハイブリッド検索とはキーワード検索とベクトル検索を組み合わせた方法を指します。これら二つのアルゴリズムの強みを活用することで、ユーザーに効果的な検索体験を提供します。
Weaviateベクトルデータベースにおけるハイブリッド検索では、スパースベクトルとデンスベクトルの両方が利用されます。
スパースベクトルにはトークナイザーが必要ですが、Weaviate v1.28 では日本語テキスト向けに新しいトークナイザーKAGOME_JAが導入されました。
このブログ記事では、ハイブリッド検索の基本を学び、日本語テキストでKAGOME_JAトーク ナイザーを使ったWeaviateのハイブリッド検索の方法を解説します。
ハイブリッド検索の説明
Weaviateのハイブリッド検索は、デンスベクトルとスパースベクトルを統合して、それぞれの検索手法の利点を活かします。 これら二つのベクトルは異なるアルゴリズムによって計算されます。

キーワード検索
キーワード検索にはスパースベクトルを使用します。 スパースベクトルは、主にゼロ値が多く一部に非ゼロ値を持つ構造をしており、デンスベクトルは主に非ゼロ値で構成されています。 スパース埋め込みは、BM25 や SPLADE のようなアルゴリズムから生成されます。 Weaviateにおける現在のハイブリッド検索実装では、BM25/BM25Fが使用されています。
スパース埋め込みを生成するためには、トークナイザーが必要です。 Weaviateでは、日本語テキスト向けに以下の3つのトークナイザーが利用可能です。
| トークナイザー | TRIGAM | GSE | KAGOME_JA(Weaviate v1.28で導入) |
|---|---|---|---|
| メリット | 辞書不要 部分一致する | 辞書にある単語をできるだけ 部分一致する | 辞書にある単語 不要な結果が出ない |
| デメリット | 不自然な単語がある 出てくる単語が多数 | 英単語は1文字ずつに分割 不自然な単語がある 辞書が必要 | 単語中の部分一致はしない 辞書が必要 |
| Source: Jun Ohtani |
ベクトル検索
ベクトル検索にはデンスベクトルを使用します。 デンス埋め込みは、GloVeやTransformersといった機械学習モデルから生成されます。これらのベクトルは情報が密に詰まっており 、ほとんどが非ゼロ値で構成されています。ベクトルデータベースはこれらの埋め込みを保存し、二つのベクトル間の距離を計算します。この距離メトリクスにより、二つのベクトル埋め込みがどれほど類似しているか、または異なるかがわかります。検索クエリもデータベクトルと同様にベクトルに変換され、その距離値によってベクトルの近さが決まります。
融合アルゴリズム
キーワード検索とベクトル検索の結果を単一のランキングリストに統合する方法はいくつかあります。Weaviate v1.20以降では、以下の2つのアルゴリズムが利用可能です:
rankedFusionrelativeScoreFusion
これらの融合アルゴリズムについての詳細は、こちらの記事で解説されています。
さらに、alphaパラメータを用いてキーワード検索とベクトル検索の結果の重み付けを調整できます:
alpha = 0:キーワード検索のみalpha = 1:ベクトル検索のみalpha = 0.5:スパースとデンスのベクトルを均等に重み付け