🐨

Azure OpenAI Serviceの埋め込みモデルをそれぞれ比較

2024/11/16に公開

プロジェクトでは必須レベルで使用しているものの、自分自身でちゃんと調査することがなかったのでまとめました。

Embedding(埋め込み)とは

データ(文章・画像・音声)といった非数値データを高次元の数値ベクトルに変換すること。
数値化することでロジックを使って処理できるようになったり、そのデータの特徴、データ同士の類似性やパターンを抽出することができます。

生成AI・RAGの分野では主に類似度検索で使用されますが、それ以外にも感情分析、機械翻訳、クラスタリング、画像分類、物体検出、レコメンデーションなど様々な用途で活用されています。

次元数は固定されてなくて、それぞれの用途に応じて次元数の調整が必要です。

次元数が増減するとどうなる

大きく4つの面でメリット・デメリットが発生します。

1. 速度

基本的に次元数が少なければ少ないほど計算速度が速くなります。
逆に次元数が増えれば増えるほど計算する量も増えるため、処理速度が遅くなります。

2. 精度

次元数が多いほど、より詳細な情報・複雑な情報までベクトル化することができて、その分精度が良くなります。
次元数が少ないとベクトル化のタイミングで情報が抜け落ちる可能性が高くなるの精度が落ちやすいです。

3. データ量

次元数が増える分データ容量も肥大します。
またそれに合わせてメモリも大量に使用すすることになります。
データ量を削減したい場合は精度を多少犠牲にしつつも次元数を落とすしかないです。

現在提供されているモデル

モデル 料金(1000トークンあたり) 最大次元数 多言語での平均スコア
text-embedding-ada-002 $0.0001 1536 31.4
text-embedding-3-small $0.00002 1536 44.0
text-embedding-3-large $0.00013 3072 54.9

https://openai.com/index/new-embedding-models-and-api-updates/

どのモデルを使うべきか

第一候補としてはtext-embedding-3-largeが良いかと思いました。
最大3072次元まで対応しているし、データ量が気になる場合は最小256次元まで次元数を削減することが可能です。
さらに256次元まで削減してもtext-embedding-ada-002より平均スコアは高いとのこと。
1024次元にしたらtext-embedding-3-smallの1536次元より平均スコアが高いので、次元数を削減しつつ精度を上げることができます。

あと次元数を変更できるので、保存するデータベースの仕様に合わせた次元数にできるのはかなりメリットだなと思いました。

とはいえ、料金は前モデルのada-002より高いのでコスパ重視ならtext-embedding-3-smallですかね。
smallモデルとlargeモデルで7倍違うのでベクトル化するデータ数が増えれば増えるほど料金の差が開きそうです。

text-embedding-ada002モデルは廃止されてないだけであって、コスト面・精度面どれをとってもtext-embedding-3-smallの方が優れています。
ですので、基本的には採用することはないかなと。
3モデルが登場する前に実装したところは一旦3のsmallモデルに変えた方が良いかと思います。

ヘッドウォータース

Discussion