本ブログはグローバルで公開された「Choosing the right vector embedding model for your generative AI use case」の抄訳版です。
RAG(検索拡張生成)のユースケースにおけるベクトルデータベースの選定基準に加え、RAG アプリケーションを構築する際、もう一つ避けては通れない重要な意思決定があります。それが、多くの生成 AI アプリケーションの心臓部となるベクトル埋め込みモデル(Vector Embedding Model)の選択です。
ベクトル埋め込みモデルは、テキスト、画像、音声、ビデオなどの非構造化データを、データ間の意味的な類似性を捉えた「数値のベクトル」へと変換する役割を担っています。このモデルは RAG だけでなく、レコメンデーションシステム、検索エンジン、データベースなど、幅広いデータ処理システムで活用されているものです。
本記事では、埋め込みモデルの目的や内部構造、メリット・デメリットについて詳しく解説します。今回はテキスト埋め込みモデルに焦点を当てますが、他の非構造化データ向けモデルも基本的な仕組みは同様であると考えて差し支えありません。
埋め込みモデルとは何か?
機械学習モデルはテキストを直接処理することはできず、入力として数値を必要とします。テキストデータはあらゆる場所に存在するため、これまで機械学習コミュニティは、テキストを数値に変換するためのさまざまなソリューションを開発してきました。そのアプローチは多岐にわたりますが、代表的なものをいくつか見ていきましょう。
シンプルな例として挙げられるのが One-hot Encoding です。これはテキスト内の単語をカテゴリ変数として扱い、各単語を「0」の羅列と一つの「1」からなるベクトルにマッピングする手法です。

しかし、この手法は実用的とは言えません。語彙が増えるほどカテゴリー数が膨大になり、出力ベクトルの次元数が管理不能なほど大きくなってしまうからです。また、One-hot Encoding では、意味が似ている単語同士をベクトル空間上の近い位置に配置することもできません。
こうした課題を解決するために考案されたのが「埋め込みモデル」です。One-hot Encoding と同様にテキストを入力して数値ベクトルを出力しますが、ニューラルネットワークを用いた教師あり学習によって、より複雑な処理を行います。例えば、製品レビューの感情スコアを予測するタスクで学習させた場合、結果として得られるモデルは、似た感情のレビューをベクトル空間上の近い位置に配置するようになります。つまり、どのような教師ありタスクを選択するかが、関連性の高い埋め込みを作成するための鍵となるのです。


上図では単語の埋め込みのみを示していますが、実際の人間言語は単なる単語の羅列よりも複雑なものです。文脈や語順、その他の言語的パラメータを考慮する必要があるため、より高度な「文章埋め込み(Sentence Embedding)モデル」が必要となります。
文章埋め込みは、入力された文章全体を一つの数値ベクトルに関連付けます。文章間の複雑な関係性を捉える必要があるため、その内部構造は単語単位のモデルよりもはるかに高度なものとなっています。

ディープラーニングの進歩により、現在の最先端の埋め込みモデルはすべて深層ニューラルネットワークで構築されています。優れた埋め込みモデルには、以下の条件が求められます。
- 高速であること: 多くの場合、埋め込みは大規模なアプリケーションの前処理ステップとして機能するため、速度が重要です。
- 管理可能な次元数であること: 出力されるベクトルの長さが適切である必要があります。
- 実用的な類似性を捉えていること: 意味的な類似性を十分に抽出できなければなりません。
では、現代の埋め込みモデルが内部でどのように構成されているかを簡潔に見ていきましょう。
現代のニューラルネットワーク・アーキテクチャ
現在、高いパフォーマンスを発揮している埋め込みモデルの多くは、革新的なアーキテクチャの改良に基づいています。ここでは、特に重要な2つのアーキテクチャ、BERT と GPT について触れておきます。
BERT (Bidirectional Encoder Representations from Transformers) は、2018年に Google の研究者によって発表されました。これは、人気の高いアテンションモデルである「Transformer」を双方向(Bidirectional)で学習させ、言語モデリングに適用したものです。標準的な Transformer には、テキストを読み取る「エンコーダー」と予測を行う「デコーダー」の2つのメカニズムが含まれています。
BERT は、文章全体の単語を一度に読み取るエンコーダーを使用します。これにより、従来の左から右(あるいは右から左)へ順次処理する手法とは異なり、周囲のあらゆる状況(文脈)に基づいて単語の意味を学習できるようになったのです。単語のシーケンスを BERT に入力する前に、一部の単語が [MASK] トークンに置き換えられます。モデルはマスクされていない周囲の単語が提供するコンテキストをもとに、マスクされた単語の元の値を予測するように学習します。BERT は、オープンソースであり、中級クラスの GPU 1枚でもトレーニング可能なほどシステム要件が控えめであることから、非常に普及しました。標準的な BERT は多くのベンチマークでそれほど高い性能を発揮するわけではなく、各タスクに合わせたファインチューニングが必要です。高速かつカスタマイズ可能で、サイズもコンパクトです。例えば、広く使われている all-Mini-LM モデルは、BERT を改良したモデルの一つです。
一方、OpenAI による GPT (Generative Pre-Trained Transformer) は異なります。BERT とは対照的に、テキストを一方向に処理し、Transformer アーキテクチャの「デコーダー」を使用して次の単語を予測することに特化しています。これらのモデルは処理速度が比較的遅く、出力されるベクトルの次元数も非常に高くなりますが、パラメータ数が圧倒的に多く、ファインチューニングなしで多様なタスクに適用できるという強みがあります。なお、GPT はオープンソースではなく、有料 API として提供されています。
コンテキスト長とトレーニングデータ
埋め込みモデルのもう一つの重要なパラメータが「コンテキスト長(Context Length)」です。これは、モデルがテキストを処理する際に「記憶」できるトークンの数を指します。コンテキスト長が長ければ、モデルはより広範なテキストの中から複雑な関係性を理解できるようになり、結果としてセマンティック(意味的)な類似性をより正確に捉えられるようになります。
長いコンテキストを活用するには、書籍や記事など、一貫性のある長い文章を含むトレーニングデータが必要です。しかし、コンテキストウィンドウを広げるとモデルの複雑さが増し、計算リソースやメモリの要件も増大します。近似アテンション(Approximate Attention)などの手法でリソース要件を抑えることも可能ですが、品質とのトレードオフが生じます。この「品質とコストのトレードオフ」を考慮することが、モデル選定における重要なポイントとなります。
また、言うまでもなく、学習データの品質はあらゆるモデルにとって非常に重要です。埋め込みモデルも例外ではありません。
セマンティック検索と情報検索
埋め込みモデルをセマンティック検索に利用する手法は、比較的新しいアプローチです。何十年もの間、検索技術には boolean モデル、LSI(潜在的意味インデックス)、そしてさまざまな確率的モデルが使われてきました。
その中でも代表的なのが、検索順位付け関数の BM25 です。これは、検索クエリとドキュメントの関連性を、インデックス化された単語の出現頻度などに基づいて推定する手法です。最近でこそ埋め込みモデルが BM25 を上回る精度を出し始めていますが、BM25 は依然として広く使われています。その理由は、埋め込みモデルよりもシンプルで計算負荷が低く、何より「なぜその結果が出たのか」という説明性が高い点にあります。
ベンチマークによる評価
幸いなことに、テキスト埋め込みモデルには、モデル選びの指標となる共通のベンチマークスイートが存在します。
- BEIR: 情報検索モデルのゼロショット評価のためのヘテロジニアスなベンチマークです。質問回答、事実確認、エンティティ検索など、19のデータセットで構成されています。
- MTEB (Massive Text Embedding Benchmark): BEIR を含む 58 のデータセットと 112 の言語をカバーする、より大規模なベンチマークです。現在、MTEB の評価結果をまとめた公開リーダーボードは、こちらからご確認いただけます。
これらの公開リーダーボードを確認することで、各モデルが競合他社と比べてどの程度の性能を持っているかを客観的に判断することが可能になります。
本番環境での埋め込みモデルの運用
ベンチマークのスコアは重要ですが、それはあくまで一面に過ぎません。本番環境で埋め込みモデルを検索に利用する場合、モデルは以下の 2 つのタイミングで実行されます。
- 利用可能なデータのオフライン・インデックス作成時
- 検索リクエスト時のユーザークエリの埋め込み時
ここから 2 つの重要な帰結が導き出されます。
第一に、埋め込みモデルを変更またはアップグレードする場合、既存のすべてのデータを再インデックス化しなければならないということです。新しい優れたモデルが次々と登場するため、システムを設計する際には将来のアップグレードをあらかじめ想定しておく必要があります。
第二に、ユーザークエリにモデルを使用するため、ユーザー数が増えるほど推論レイテンシーが極めて重要になるという点です。性能の高いモデルほど、特に GPU を必要とする場合、推論に時間がかかります。10億以上のパラメータを持つモデルでは、短いクエリでも 100ms 以上のレイテンシーが発生することも珍しくありません。高負荷な本番環境では、より軽量でスリムなモデルの価値が依然として高いのです。一般的に、モデルが小さいほど出力ベクトルの長さも短くなります。しかし、小さなモデルでも出力ベクトルが依然として長すぎるケースは珍しくありません。
そのような場合に活用すべきなのが、PCA、t-SNE、UMAP などの次元削減アルゴリズムです。データベースに格納する前に次元を削減することで、ストレージ容量を節約し、検索スピードを向上させることができます。精度とのバーターにはなりますが、システムをより高速かつ効率的に運用するための有効な手段となります。なお、ベクトルデータベースはプライマリストレージとして使われないことが多いため、なお、ベクトルデータベースはプライマリストレージとして使われないことが多いため、元のソースデータからより高精度な埋め込みを再生成することができます。
最適な選択をするために
埋め込みモデルの選定には、考慮すべき要素とトレードオフが数多く存在します。ベンチマークのスコアが高いモデルは魅力的ですが、それらは往々にして大規模であり、推論時間が長く、GPU リソースを必要とします。
低レイテンシーが求められるシナリオでは、まず許容できる速度を定義し、その範囲内で最高のパフォーマンスを発揮するモデルを探すべきでしょう。また、AI の世界は進化が早いため、常に「モデルの入れ替え」を前提とした柔軟なシステム構成を心がけてください。