EmotionTechテックブログ

株式会社エモーションテックのProduct Teamのメンバーが、日々の取り組みや技術的なことを発信していくブログです。

埋め込みモデルを利用して2文の類似度を判定する 〜Azure OpenAI・Vertex AIのモデルを比較

エモーションテックで事業開発・データ分析(時々エンジニア)をしているイケガメです。

生成AIの登場によって、テキスト分析の常識は急速に変化しています。

その一方で、自然言語処理における基本的な考え方は、現在も変わっていません。 例えば、テキストの分類や検索において核となる「単語や文章のベクトル化(埋め込み)」は、今後も重要な基盤技術として位置づけられるでしょう。

この技術を利用することで、「2つのテキストの類似度」を判定することが可能になります。

今回は、Azure OpenAIとVertex AIのEmbedding(埋め込み)モデルを利用して、2つの文章の類似度を判定する実験を行いました。 これらのモデルは、2つの文章の類似度をどの程度正確に判定できるでしょうか。

実験概要

対象のモデル

  • text-embedding-3-large (Azure OpenAIの最新モデル。3072次元)
  • text-embedding-3-small (Azure OpenAIの最新モデル。1536次元)
  • text-embedding-ada—002 (Azure OpenAIの旧モデル。1536次元)
  • text-multilingual-embedding-preview–0409 (Vertex AIの最新モデル。768次元)

*注1

Vertex AIでは、text-embedding-preview-0409も提供されていますが、今回は日本語を対象とするため、多言語対応モデルを利用しています。 (Azure OpenAIの埋め込みモデルには、分析言語の区別はありません)

*注2

一般的に、次元数が大きいほど、モデルの表現力が高くなりますが、計算コストも高くなります。 モデルによっては出力時の次元数を調整することも可能ですが、今回の実験では、各モデルのデフォルト(最大)の次元数を利用しています。

*参考:

Azure OpenAI Service models - Azure OpenAI | Microsoft Learn

テキスト エンベディングを取得する  |  Vertex AI の生成 AI  |  Google Cloud

類似度の指標

ごく一般的な類似度指標であるcosine類似度を用います。0〜1の値を取り、1に近いほど、類似度が高いことを意味します。

分析に使用した文章

以下の7つを用意しました。 1の文章をベースとして、2〜7の文章を生成しています。 各文章の生成意図はタグで補足しています。

  1. テーブルの上にコップがある
  2. テーブルの上に時計とコップがある  # 追加
  3. コップがテーブルの上にある  # 倒置
  4. テーブルの上に時計がある  # 置換_物体
  5. テーブルの下にコップがある  # 置換_上下
  6. 部屋の中にコップがある  # 置換_環境
  7. テーブルの上にコップはない   # 否定

さて、2〜7の文章は、1に対して、どの程度の類似度として判定されるでしょうか。 人間の感覚では、3(# 倒置)が最も類似度が高く、7(# 否定)が最も低い結果となることが期待されます。

実験結果

まず、text-embedding-3-largeの結果から見ていきます。 1(ベース文章)との類似度が重要であるため、一番上の行に着目してください。

類似度判定結果 text-embedding-3-large

*注 色が濃いほど、類似度が高いことを示しています。 また、矢印マークは、類似度が高いほど、上向きになるようにしています。 なお、数値の絶対値は、モデルによってその目安が異なるため、比較する際には注意が必要です。

1との類似度に注目すると、5(# 置換_上下)が最も高く、次いで3(# 倒置)が高い結果となりました。 できれば、意味の変わっていない3(# 倒置)が最も高い結果となることが望ましいところですが、実際には、「上下」が置換された5が最も高い結果となりました。

また、7(# 否定)との類似度もやや高い結果になっています。

一方、4(# 置換_物体)と6(# 置換_環境)は、1との類似度が低い結果となりました。 「コップ」や「テーブル」といった文章内の主体が変わると、類似度が低くなる傾向が見られます。(こちらには納得がいきますね。)

次に、text-embedding-3-smallの結果です。

類似度判定結果 text-embedding-3-small

text-embedding-3-largeとほぼ同様の結果となりました。

ただし、5(# 置換_上下)との類似度は相対的に高くなっています。 埋め込みモデルにおいて、位置関係の違いは、あまり重視されないのでしょうか。

さて、次はtext-embedding-ada-002text-multilingual-embedding-preview–0409の結果を見ていきます。

類似度判定結果 text-embedding-ada-002 / text-multilingual-embedding-preview-0409

これらのモデルは、数値の絶対値が大きいため、このままだと比較が難しいです。 よって、各モデルの結果を正規化して、比較しやすいようにします。

まず、text-embedding-ada-002の正規化後の結果を見ていきます。

類似度判定結果 text-embedding-ada-002

やはり、5(# 置換_上下)が最も高く、次いで3(# 倒置)が高い結果となりました。

興味深いのは、7(# 否定)との類似度が、他のモデルより相対的に低い結果となっていることです。 旧モデルであるtext-embedding-ada-002ですが、否定の判別については、他のモデルよりも若干上手くできているかもしれません。

最後に、text-multilingual-embedding-preview–0409の正規化後の結果です。

類似度判定結果 text-multilingual-embedding-preview-0409

3(# 倒置)が最も高く、ほぼ同水準で5(# 置換_上下)と7(# 否定)が高い結果となりました。 これらは全て、1(ベース)との判別がほぼできていないようです。

また、6(# 置換_環境)との類似度が、他のモデルより相対的に高い結果になっています。

「テーブルの上」と「部屋の中」は、若干似ていると判定されたようです。 これは間違いとも言えませんが、やや推論が入っているようにも見えます。

まとめ

今回の実験では、Azure OpenAIとVertex AIの埋め込みモデルを利用して、2つの文章の類似度を判定しました。

結果としては、モデルごとに大きく変わる結果は見られませんでした。

主観的には、text-embedding-3-largeが、他のモデルより安定した結果を出力しているように見えましたが、差はそれほど大きくありません。 どのモデルも総じて、「位置関係の違い」や「否定」については、類似度を高く判定してしまう傾向があるようです。

人間が類似度を判別する際に重視する要素と、各モデルが重視する要素は、想像以上に異なるのかもしれません。

また、実は、今回利用した埋め込みモデルは、文章の言語によって精度が大きく変わります(学習データ量の差と思われます)。 今回の実験では、日本語を対象としていますが、英語や他の言語を対象とする場合、結果が大きく変わることには注意が必要です。

英語での実験結果も、機会があれば報告したいと思います。

エモーションテックでは、顧客体験・従業員体験の改善をサポートし世の中の体験を変えるプロダクトを開発しております。 もし興味を持っていただけましたら、ぜひ採用ページからご応募をお願いいたします。

hrmos.co