Taste of Tech Topics

Acroquest Technology株式会社のエンジニアが書く技術ブログ

精度を保ちつつコストを大きく削減!~Elasticsesearchのベクトル検索オプションと効果~

こんにちは。
Acroquestのデータサイエンスチーム「YAMALEX」に所属する@shin0higuchiです😊
YAMALEXチームでは、コンペティションへの参加や自社製品開発、技術研究などに日々取り組んでいます。

はじめに

近年、RAG(Retrieval-Augmented Generation)の台頭などを背景に、ベクトル検索の重要性が増しています。
ベクトル検索は、テキストや画像などの高次元データをベクトル空間に埋め込み、類似度に基づいて検索を行う技術です。
これにより、従来のキーワード検索では捉えきれなかった、意味的な類似性に基づいた検索が可能になります。

(RAGでElasticsearchのベクトル検索を利用するやり方については、こちらの記事で紹介していますので是非ご覧ください)
acro-engineer.hatenablog.com

一方で、ベクトル検索を扱うためのプロダクトやサービスも増えており、選択肢に迷う方も多いのではないでしょうか。ベクトル検索時のオプションなどもサービスによって異なります。
特に最近ではベクトル検索のパフォーマンスやリソース効率を向上させるための様々なオプションが登場しており、その中でも「ベクトル量子化」や「バイナリベクトル」は、リソース使用量削減や検索速度向上に寄与する技術として注目されています。

本記事では、ベクトル検索に利用する検索エンジンとして有力な選択肢の一つであるElasticsearchに焦点を当て、ベクトル量子化やバイナリベクトルといったオプションとその効果について、具体的な設定方法を交えながら解説します。

Elasticsearchにおけるベクトル検索

Elasticsearchは、全文検索エンジンとして広く知られていますが、バージョン7.x以降、Dense Vector型をサポートし、ベクトル検索機能を強化しています。
Dense Vectorは、高次元のベクトルデータを格納するためのデータ型です。

Elasticsearch Dense Vector ドキュメント: Elasticsearch Dense Vector ドキュメント

ベクトル検索のアルゴリズム

ElasticsearchでDense Vectorを扱う際には、近似最近傍(ANN)検索アルゴリズムを利用します。現在はHNSWと呼ばれるアルゴリズムを利用可能です。
HNSW (Hierarchical Navigable Small World)は高速な近似最近傍探索アルゴリズムの一つです。グラフベースのデータ構造を用いて、効率的に類似ベクトルを検索します。

リソース削減のためのオプション:ベクトル量子化とバイナリベクトル

ベクトル検索のパフォーマンスとリソース効率はトレードオフの関係にあります。Elasticsearchでは、このトレードオフを調整するためのオプションとして、ベクトル量子化とバイナリベクトルを提供しています。

オプション 説明 メリット デメリット 推奨されるユースケース
ベクトル量子化 ベクトルの各次元をより少ないビット数で表現する手法。Elasticsearchでは、float (32ビット) の代わりに 8bit, 4bit, 1bit の量子化をおこなうことができます。 ストレージサイズとメモリ使用量を大幅に削減。クエリ性能も向上する可能性があります。 精度が低下する可能性があります。 ストレージコストとメモリ使用量を削減したい場合、ある程度の精度と性能のバランスを求める場合。
バイナリベクトル ベクトルの各次元を0または1の値で表現する手法。ハミング距離などを用いて高速な類似度計算が可能です。 計算時間および、ディスク・メモリ使用量を大きく削減。ハミング距離など、バイナリベクトルに特化した高速な距離計算が可能。 floatを利用する場合に比べて精度が低下する。また、バイナリベクトルを生成するための専用のEmbeddingモデルが必要になる。 精度を多少犠牲にしてもストレージやメモリの使用量を大幅に抑えたい場合、高速な検索が必要な場合。

バイナリベクトルの詳細

バイナリベクトル(Bit ベクトル)は、ベクトル検索の効率を大幅に向上させる可能性を秘めた技術です。
www.elastic.co

  • 仕組み: バイナリベクトルは、元のベクトル(通常は浮動小数点数のベクトル)の各次元を、閾値に基づいて0または1に変換します。
  • 距離計算: バイナリベクトル間の類似度計算には、ハミング距離(ビットが異なる箇所の数)が用いられます。これらは、浮動小数点数ベクトル間のコサイン類似度やユークリッド距離の計算よりもはるかに高速です。
生成方法
  • 専用のEmbeddingモデル: バイナリベクトルを直接出力するEmbeddingモデルを使用する。
  • 既存のEmbeddingモデル + 二値化: 既存のEmbeddingモデルで得られた浮動小数点数ベクトルを、閾値処理などを用いて二値化する。
量子化/バイナリ化によるメリットと注意点

ベクトル量子化およびバイナリ化は、Dense Vectorのストレージ効率とクエリ性能を向上させる強力な手段ですが、導入にあたっては以下のメリットと注意点を理解しておく必要があります。

メリット:

  • ストレージコストの削減: インデックスサイズを大幅に削減し、ディスクストレージのコストを低減できます。
  • メモリ使用量の削減: ベクトルデータがメモリに乗りやすくなるため、メモリ使用量を削減し、Elasticsearchクラスタの安定性を向上させます。
  • クエリ性能の向上: 量子化/バイナリ化されたベクトルに対する演算は高速になるため、クエリ性能の向上が期待できます。

注意点:

  • 精度のトレードオフ: 量子化/バイナリ化は一般的に精度とトレードオフの関係にあります。情報を圧縮するほど、検索精度が低下する可能性があります。
  • 適切な手法の選択: ビジネス要件で許容される精度損失と、ストレージ効率のバランスを考慮し、適切な量子化レベル、またはバイナリベクトル化の手法を選択する必要があります。

JMTEBデータによる測定

JMTEB (Japanese Massive Text Embedding Benchmark)と呼ばれる、Embeddingの精度を評価するベンチマークが存在します。
github.com

JMTEBでは日本語の各種オープンデータを利用した5つのタスクを通してEmbeddingモデルを評価します。
今回は、一部のデータセットを利用して、量子化オプションを変更した場合にどの程度ディスク使用量や精度に影響が出るのかを見てみましょう。

Cohereが提供するEmbedding APIを利用すると、一般的なFloatのEmbeddingの他、バイナリEmbeddingも利用することができます。
検証では、CohereのEmbeddingモデルを利用して、以下の3パターンのベクトルをElasticsearchに登録し、比較をしてみます。

参考:
www.elastic.co


インデックスサイズ/正解率

以下に、各オプションを付けてElasticsearchに取り込んだ際のインデックスサイズと、
データセットで事前に定義された正答をどれだけの率で当てられたかを示します
今回利用したデータセットでは検索クエリ404件に対して、正解ドキュメントが1件ずつ定義されています。正解率の指標としてはprecsionとnDCGの2つ計測しています。

  • precision@1: 正解すべきドキュメントが1位としてヒットした率
  • nDCG@10: 10位までの中に、正解すべきドキュメントがどの程度ランクインしたかの指標。正解すべきドキュメントが上位に来るほどスコアが高くなる。
種別 インデックスサイズ 正解率(precision@1) nDCG@10
float 9.1mb 84.41% 0.9108
量子化(bbq) 8.7mb 83.66% 0.9024
バイナリベクトル 2.6mb 81.19% 0.8889

やはり、floatでそのまま扱う方が精度は良いのですが、他の手法ではインデックスサイズを小さくしつつ、精度も1~3%程度の低下にとどまっており、そこまで著しく低下していないことが分かります。
近年ではリランクとの組み合わせなどで精度を担保する戦略もあるので、本稿で紹介したオプションは実用に値するものだと思います。
当然、データセットによって精度の低下幅などは異なるので事前の検証を推奨しますが、是非積極的に活用してみてください。


今回の記事はここまでとなります。
最後までお読みいただきありがとうございました。


Acroquest Technologyでは、キャリア採用を行っています。

  • Azure OpenAI/Amazon Bedrock等を使った生成AIソリューションの開発
  • ディープラーニング等を使った自然言語/画像/音声/動画解析の研究開発
  • マイクロサービス、DevOps、最新のOSSクラウドサービスを利用する開発プロジェクト
  • 書籍・雑誌等の執筆や、社内外での技術の発信・共有によるエンジニアとしての成長

少しでも上記に興味を持たれた方は、是非以下のページをご覧ください。

www.wantedly.com