Skip to content

Commit

Permalink
add review changes
Browse files Browse the repository at this point in the history
  • Loading branch information
Leonie authored and Leonie committed Dec 6, 2024
1 parent 21861c0 commit 739884f
Show file tree
Hide file tree
Showing 3 changed files with 17 additions and 9 deletions.
Binary file modified blog/2024-12-11-hybrid-search-ja/img/hero.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified blog/2024-12-11-hybrid-search-ja/img/hybrid-search.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
26 changes: 17 additions & 9 deletions blog/2024-12-11-hybrid-search-ja/index.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -12,21 +12,27 @@ image: ./img/hero.png

ハイブリッド検索は、複数の検索アルゴリズムを組み合わせることで、検索結果の精度や関連性を向上させる技術です。一般的に、ハイブリッド検索とはキーワード検索とベクトル検索を組み合わせた方法を指します。これら二つのアルゴリズムの強みを活用することで、ユーザーに効果的な検索体験を提供します。

Weaviate[ベクトルデータベース](/blog/what-is-a-vector-database)におけるハイブリッド検索では、スパースベクトルとデンスベクトルの両方が利用されます。スパースベクトルにはトークナイザーが必要ですが、Weaviate `v1.28` では日本語テキスト向けに新しいトークナイザー`KAGOME_JA`が導入されました。
Weaviate[ベクトルデータベース](/blog/what-is-a-vector-database)におけるハイブリッド検索では、スパースベクトルとデンスベクトルの両方が利用されます。
スパースベクトルにはトークナイザーが必要ですが、Weaviate `v1.28` では日本語テキスト向けに新しいトークナイザー`KAGOME_JA`が導入されました。

このブログ記事では、ハイブリッド検索の基本を学び、日本語テキストで`KAGOME_JA`トークナイザーを使ったWeaviateのハイブリッド検索の方法を解説します。

## ハイブリッド検索の説明

Weaviateのハイブリッド検索は、デンスベクトルとスパースベクトルを統合して、それぞれの検索手法の利点を活かします。これら二つのベクトルは異なるアルゴリズムによって計算されます。
Weaviateのハイブリッド検索は、デンスベクトルとスパースベクトルを統合して、それぞれの検索手法の利点を活かします。
これら二つのベクトルは異なるアルゴリズムによって計算されます。

![ハイブリッド検索](./img/hybrid-search.jpg)

### キーワード検索

スパースベクトルは、主にゼロ値が多く一部に非ゼロ値を持つ構造をしており、デンスベクトルは主に非ゼロ値で構成されています。スパース埋め込みは、[BM25](https://en.wikipedia.org/wiki/Okapi_BM25)[SPLADE](https://arxiv.org/abs/2107.05720). のようなアルゴリズムから生成されます。Weaviateにおける現在のハイブリッド検索実装では、BM25/BM25Fとベクトル検索が使用されています。
キーワード検索にはスパースベクトルを使用します。
スパースベクトルは、主にゼロ値が多く一部に非ゼロ値を持つ構造をしており、デンスベクトルは主に非ゼロ値で構成されています。
スパース埋め込みは、[BM25](https://en.wikipedia.org/wiki/Okapi_BM25)[SPLADE](https://arxiv.org/abs/2107.05720) のようなアルゴリズムから生成されます。
Weaviateにおける現在のハイブリッド検索実装では、BM25/BM25Fが使用されています。

スパース埋め込みを生成するためには、トークナイザーが必要です。Weaviateでは、日本語テキスト向けに以下の[3つのトークナイザーが利用可能](/developers/academy/py/tokenization/options)です:
スパース埋め込みを生成するためには、トークナイザーが必要です。
Weaviateでは、日本語テキスト向けに以下の[3つのトークナイザーが利用可能](/developers/academy/py/tokenization/options)です:

* `TRIGAM`
* `GSE`
Expand All @@ -41,6 +47,7 @@ Weaviateのハイブリッド検索は、デンスベクトルとスパースベ

### ベクトル検索

ベクトル検索にはデンスベクトルを使用します。
デンス埋め込みは、[GloVe](https://text2vec.org/glove.html)[Transformers](https://huggingface.co/docs/transformers/index)といった機械学習モデルから生成されます。これらのベクトルは情報が密に詰まっており、ほとんどが非ゼロ値で構成されています。ベクトルデータベースはこれらの埋め込みを保存し、二つのベクトル間の距離を計算します。この[距離メトリクス](/blog/distance-metrics-in-vector-search)により、二つのベクトル埋め込みがどれほど類似しているか、または異なるかがわかります。検索クエリもデータベクトルと同様にベクトルに変換され、その距離値によってベクトルの近さが決まります。

### 融合アルゴリズム
Expand All @@ -60,9 +67,10 @@ Weaviateのハイブリッド検索は、デンスベクトルとスパースベ

## ハイブリット検索のメリット

ハイブリッド検索は、セマンティック検索の機能を活用しつつ、正確なキーワード一致も必要とする検索システムに理想的です。
ハイブリッド検索は、ベクトル検索の機能を活用しつつ、正確なキーワード一致も必要とする検索システムに理想的です。

例えば、「春のドレス」というクエリを考えてみましょう。通常のキーワード検索やセマンティック検索に比べて、ハイブリッド検索を使用する方がより良い結果を得られます。デンスベクトル表現では「春」が花柄や軽い素材を意味すると解釈され、スパースベクトル検索では「ドレス」という単語に正確に一致します。このように、ハイブリッド検索はスパースベクトルとデンスベクトルの両方の利点を活かします。
例えば、「春のドレス」というクエリを考えてみましょう。通常のキーワード検索やベクトル検索に比べて、ハイブリッド検索を使用する方がより良い結果を得られます。デンスベクトル表現では「春」が花柄や軽い素材を意味すると解釈され、キーワード検索では「ドレス」という単語に正確に一致します。
このように、ハイブリッド検索はスパースベクトルとデンスベクトルの両方の利点を活かします。

一般的に、デンスベクトルはクエリの文脈を理解するのに優れており、スパースベクトルはキーワード一致に優れています。

Expand Down Expand Up @@ -99,7 +107,7 @@ data = [
日本語のKAGOMEトークナイザーを使用したハイブリッド検索をWeaviateで利用するには、Weaviate`v1.28`以降のバージョンを使用していることを確認する必要があります。以下の手順で、[Dockerを使用してWeaviateベクトルデータベースのインスタンスをローカル環境にセットアップ](/developers/weaviate/installation/docker-compose)できます:

```
docker run -p 8080:8080 -p 50051:50051 cr.weaviate.io/semitechnologies/weaviate:1.28.1
docker run -p 8080:8080 -p 50051:50051 -e ENABLE_TOKENIZER_KAGOME_JA='true' -e ENABLE_MODULES='text2vec-cohere' cr.weaviate.io/semitechnologies/weaviate:1.28.1
```

次は[Weaviate ClientのPythonライブラリ](/developers/weaviate/client-libraries)を準備します。バージョン4.9.6以上が必要です。
Expand All @@ -125,7 +133,7 @@ client = weaviate.connect_to_local(

### 3. データコレクションの定義

次に、ラスを作成して[Schema](developers/weaviate/config-refs/schema)を定義します。クラスは、オブジェクトを格納するデータコレクションです。クラスのSchemaには、Cohereの多言語(日本語対応)埋め込みモデル `embed-multilingual-v3.0` を定義します。また、`KAGOME_JA`トークナイザーを有効化します。
次に、クラスを作成して[Schema](developers/weaviate/config-refs/schema)を定義します。クラスは、オブジェクトを格納するデータコレクションです。クラスのSchemaには、Cohereの多言語(日本語対応)埋め込みモデル `embed-multilingual-v3.0` を定義します。また、`KAGOME_JA`トークナイザーを有効化します。

```py
import weaviate.classes.config as wc
Expand Down Expand Up @@ -215,7 +223,7 @@ for item in response.objects:

## まとめ

この記事では、ハイブリッド検索の概念について説明しました。Weaviateベクトルデータベースにおけるハイブリッド検索は、キーワード検索とセマンティック検索を組み合わせたものです。これら二つの検索を統合することで、セマンティック検索の強力な機能を活用しながら、製品名やブランド名など特定のキーワードの正確な一致も必要とするユースケースで、より関連性の高い結果を得ることができます。
この記事では、ハイブリッド検索の概念について説明しました。Weaviateベクトルデータベースにおけるハイブリッド検索は、キーワード検索とベクトル検索を組み合わせたものです。これら二つの検索を統合することで、ベクトル検索の強力な機能を活用しながら、製品名やブランド名など特定のキーワードの正確な一致も必要とするユースケースで、より関連性の高い結果を得ることができます。

日本語テキストに対して、Weaviateではキーワード検索およびハイブリッド検索のために3つの異なるトークナイザーを選択できるようになりました。上記のKAGOME\_JAトークナイザーを使用したハイブリッド検索の例について、コードは[このノートブック](https://github.com/weaviate/recipes/blob/main/weaviate-features/hybrid-search/hybrid_search_cohere_japanese.ipynb)で確認できます。

Expand Down

0 comments on commit 739884f

Please sign in to comment.