エンベディングとは?AIが言葉を数値ベクトルに変換する仕組み

エンベディングとは?AIが言葉を数値ベクトルに変換する仕組み

「意味が近い文章を探して」とAIに頼むと、なぜか的確に拾ってくれます。

この「意味の近さ」を裏で支えているのが、エンベディング(embedding)という仕組みです。

言葉を数値のベクトルに変換し、近い意味ほど近い場所へ並べる——それがエンベディングの正体。

この記事では、エンベディングが何をしていて、どこで役立つのかを、コードのイメージまで含めて整理します。

エンベディングとは(ざっくり言うと)

エンベディングは、文章や単語を「意味を映した数値の並び」に変換する処理です。

その数値の並びをベクトルと呼びます。

たとえば「犬」と「猫」は近い場所に、「犬」と「株価」は遠い場所に置かれる、というイメージ。

人間が見ても意味は読み取れませんが、コンピュータにとっては「距離を測れる」形になっている点が肝心なのです。

なぜわざわざベクトルにするのか

理由はシンプルで、コンピュータは「意味」を直接は比べられないからです。

文字列のままでは、「医者」と「医師」がほぼ同じ意味だと機械には伝わりません。

ところがベクトルに直すと、2つの点がどれだけ近いかを計算で出せるようになるのです。

この近さの指標としてよく使われるのがコサイン類似度で、値が1に近いほど意味が近いと判断します。

つまりエンベディングは、「意味の比較」を「距離の計算」に翻訳する変換だと言えるわけです。

何に使われているか

エンベディングは、いまのAIサービスの裏側で幅広く動いています。

  • 意味で探す検索(キーワードが一致しなくても、意味が近い文書を拾う)
  • RAG(AIに関連文書を渡す前段で、質問に近いチャンクを選ぶ)
  • 推薦(似た商品・似た記事を並べる)
  • 分類・クラスタリング(近いベクトルどうしをグループにまとめる)

特に最近は、社内文書をAIに答えさせるRAGの入口として、エンベディングを目にする機会が増えました。

触ってみるイメージ

具体的なコードにすると、やっていることは驚くほど短いです。

import numpy as np

# embed() は文章をベクトル(数百〜数千次元)に変換する関数のイメージ
a = embed("猫がソファで寝ている")
b = embed("ネコがソファーで眠っている")

# コサイン類似度=2つのベクトルの近さ(1に近いほど意味が近い)
cos = np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))
print(cos)  # 例: 0.94 のように高い値が返る

大事なのは、embed の中身がどんなモデルでも、出てくるのは「固定長のベクトル」だという点です。

あとは距離を測るだけなので、検索も推薦も同じ道具で組めてしまいます。

使うときの注意点

便利な一方で、前提を外すと精度は簡単に落ちるのです。

まず、モデルが違うベクトルは互いに比較できないので、検索対象と質問は同じモデルで揃えるのが前提。

長い文章をまるごと1ベクトルにすると情報が薄まるため、RAGでは適度な長さに分割してから変換するのが定番です。

そして「意味が近い」は「事実として正しい」を保証しません。

エンベディングはあくまで近い候補を選ぶところまでで、最終的な正しさは別の仕組みで担保する必要があります。

関連して、AIが一度に読める量の話も整理しています。あわせてどうぞ。

コンテキストウィンドウとは?AIが指示を忘れる仕組みを整理

最後に

エンベディングは、AIが「意味を分かっているように見える」動きを支える土台です。

仕組みは言葉→ベクトル→距離の計算の3ステップだけ、と押さえておけば十分。

ここが腑に落ちると、検索やRAGのニュースもぐっと読みやすくなります。

参考: OpenAI Vector embeddings ガイド

以上です。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA