Re Reference AI

モデル

埋め込みモデルとは

Embedding Model

テキストや画像などを埋め込みベクトルへ変換する専用のニューラルネットワークモデル

埋め込みRAG

ひとことで言うと

文章や画像を、意味の近さを表す数値の並びに変換するAIモデル。

概要

埋め込みモデルとは、テキスト・画像・音声等の入力を、意味的な特徴を反映した固定長のベクトル(埋め込み)へ変換することに特化したニューラルネットワークモデル。 文章生成を目的とするLLMとは異なり、入力を1つのベクトルへ圧縮して出力することに最適化されており、検索・分類・クラスタリングなど下流タスクでの類似度計算に使いやすい表現を学習する。 OpenAIのtext-embeddingシリーズ、Google・Cohere埋め込みAPI、オープンウェイトのBGE・E5・GTE等多様な選択肢があり、RAGにおける文書・クエリのベクトル化に広く使われている。 埋め込みモデルの性能はMTEB(Massive Text Embedding Benchmark)のような標準ベンチマークで比較されることが多く、検索精度と計算コストのバランスを見てモデルを選定する。

背景

検索やRAGでは、文書とクエリの意味的な類似度を測るための質の高いベクトル表現が求められる。 LLMのように多目的に学習された汎用モデルの中間表現を流用するより、類似度計算に特化した目的関数(対照学習等)で専用に学習したモデルの方が高い検索性能を得やすいことから、埋め込みモデルという専用のモデルカテゴリが発展した。

歴史

2019年: Reimers・GurevychがSentence-BERT(SentenceTransformers)を発表し、文単位の埋め込みを効率的に計算する手法を確立。 2022年: OpenAIがtext-embedding-adaシリーズを公開しAPI経由での埋め込み利用を普及。 2023年以降: BGE・E5・GTE等オープンウェイトの高性能な埋め込みモデルが多数公開され、MTEB(Massive Text Embedding Benchmark)による性能比較が一般化。

アーキテクチャ

多くの埋め込みモデルはBERT等のTransformerエンコーダをベースとし、対照学習(似た意味のペアを近く、異なる意味のペアを遠くへ配置するよう学習する手法)によって学習される。 入力トークン列に対するエンコーダの出力を平均化・プーリングして、固定長の1つのベクトルに集約する。

ワークフロー

テキスト等を埋め込みモデルへ入力 → エンコーダトークン列を処理 → 出力を平均化・プーリングして固定長のベクトルへ集約 → 得られたベクトルをコサイン類似度等で比較、またはベクトルデータベースへ格納。

コード例

sentence-transformersでテキストを埋め込みベクトル化する

from sentence_transformers import SentenceTransformer

model = SentenceTransformer("all-MiniLM-L6-v2")

sentences = ["猫が窓辺で眠っている", "犬が公園で走っている"]
embeddings = model.encode(sentences)

print(embeddings.shape)  # (2, 384)

利点

  • 検索・類似度計算に特化しており、汎用LLMの中間表現より高い検索性能を得やすい
  • 比較的小規模なモデルでも高い性能を発揮でき、推論コストを抑えやすい
  • APIまたはオープンウェイトのモデルとして提供され、用途に応じて選択できる

欠点

  • モデルによって出力ベクトルの次元数や学習データが異なり、異なるモデルで生成したベクトル同士は比較できない
  • 専門用語が多い文書等ドメインに特化したテキストでは、汎用埋め込みモデルの精度が低下しやすい
  • モデルを変更すると、既存の埋め込みベクトルを再生成する必要がある

比較

  • Embedding埋め込みモデルは、埋め込みベクトルを生成するためのモデルそのものを指す
  • ベクトルデータベース埋め込みモデルが生成したベクトルは、ベクトルデータベースに格納・検索される
  • BERT多くの埋め込みモデルは、BERT等のエンコーダ型Transformerをベースに学習される
  • Sentence-BERTSentence-BERTは、文単位の埋め込みを効率的に計算できるようBERTを改良した代表的な埋め込みモデル
  • MTEBMTEBは、埋め込みモデルの性能を複数タスクにわたって横断的に評価する代表的なベンチマーク

関連用語

EmbeddingベクトルデータベースBERTRAGWord2VecFaissコサイン類似度Sentence-BERTMTEB

よくある質問

埋め込みモデルはどう選べばいい?

MTEB等のベンチマークでの性能に加え、対応言語、ベクトルの次元数、推論コスト、ライセンス等を踏まえて選定するのが一般的。

LLMの中間層を埋め込みとして使ってはいけない?

使うこと自体は可能だが、汎用LLMは類似度計算を目的として学習されていないため、対照学習で専用に学習された埋め込みモデルの方が検索精度は高くなりやすい。

参考文献

関連Zenn記事