Weaviateでハイブリッド検索を試してみる(旧)
2024/10/14追記
この記事はもう古いので、Weaviateのハイブリッド検索については以下の記事を参照(その記事ももはや古いのだが・・・)
あと、Weaviateについては、個人的な印象・経験則だと、一般的なベクトルデータベースとは異なる設計思想になっているので、やや学習コストが高い、というか、発想の転換が必要だと思う(Pineconeとか他のベクトルDBの経験があるほど、それに引きずられそう、自分はそうだった)。
以下に、複数のWeaviate試してみた記事のインデックスを用意したので、そちらを参考にしたほうがいいかもしれない。
追記ここまで
経緯はここ
Pineconeのハイブリッド検索、ちょっとまだ頭の生理ができてないので、一旦Weaviateも試してみる。以下の記事をざっと見た感じ、実装は比較的シンプルに思えるし、日本語で試されているというのもちょっと期待できる気がしたので。
前提
- Weaviate Cloud Serviceのアカウント登録を行っておく
- 無料のSandboxインスタンスを使う
- データは以下のQAデータを使う
- 作業はColaboratoy上で行う
- OpenAIのAPIキーも用意しておく
まずは公式のQuickstartに従って進めてみたのだけど、ちょっとピンとこなかった。
何が難しいかというと、
- WeaviateではベクトルDBに登録するデータのスキーマをまず作成する。スキーマを作ることはわかるんだけど、これがベクトル検索においてどう活用されるのか?がよくわからない
- 一般的なベクトルDBではベクトル変換「後」の埋め込みをベクトルDBに追加するが、Weaviateではモジュールを使うと、データを追加すればWeaviate側でベクトル変換してくれる。これ自体はすごいなと思うんだけど、まずはシンプルにやりたい。
- これらを踏まえて、チュートリアルの実例を見てみたけどもどうもピンとこない
という感じで、難しーなー、みたいなことを呟いてみた。
そしたらweaviateの中の人がコメントくれたので、もう少し今どきのLLMで実装するようなシンプルなRAGの例が欲しいということを伝えたら、まだ公開前のチュートリアルのリンクを教えてくれた。
ということで、Quickstartも踏まえつつ、こちらのチュートリアルを進めてみる。
全然気づいてなかったけど、こんな記事が。
Weaviateを英語以外の言語で使用する際の現在の制限事項
ご覧いただいたように、Weaviate ベクターデータベースは、英語以外の言語でもセマンティック検索やジェネレーティブ検索のアプリケーションに使用することができます。しかし、現在のところ、英語以外の言語に対する公式なサポート/ポリシーがないため、いくつかの制限があります。
この制限は主にWeaviateのキーワードベース検索機能BM25に影響します。つまり、英語以外の言語、特に Unicode エンコーディングを必要とする言語では、BM25 検索はエラーを返します。
この制限はWeaviateのハイブリッド検索機能にも影響します。ハイブリッド検索クエリを実行してもエラーは発生しませんが、
alpha != 0
のハイブリッド検索クエリはすべて、純粋なセマンティック検索と同じ結果を返します。alpha = 0
のハイブリッド検索(純粋なキーワードベース検索)は、空の結果リストを返します。
そう、トークナイザーが対応してなかったので、ハイブリッドは動かなかったはずなんだよね。
お分かりのように、Weaviateは現在、英語以外の言語を完全にサポートしていません。しかし、将来的には他の言語もサポートしたいと考えています。現在、日本語と中国語のトークナイザーの実装を試しています。英語以外の言語サポートの追加に貢献することに興味がある方は、Slackでご連絡ください。
なんと!で、リンクされているGitHubのPRを見てみるとすでにマージされている。
PR見てると、日本語の場合は、
- トリグラム
- gse (Go製のトークナイザーっぽい)
が使える様子。で使い方がわからないなと思って探してみたけど、上記のPRはv1.24.0でマージされていて、同じ対応でDockerイメージを修正するPRの方を見ると、"USE_GSE=True"を環境変数で設定すれば有効になるってことなのかしら?
ちょっと後で試してみたい。
ハイブリッド検索についてはこちらでまとめている。ちょっとキーワード検索時のスコアのバグを見つけてしまったけども、日本語に対応したトークナイザーを使ったキーワード検索およびハイブリッド検索自体はおそらく問題なく動作していると思われる。
それ以外に、Weaviateの基本的な機能について全10回に分けてまとめている。他のベクトルDBを触ったことがあると、少し思想が違う感を受けると思うのでわかりにくさを感じるかもしれない(自分もその一人)が、それを踏まえて記載しているので、参考になれば。