「コンピューターはテキストを直接理解できない」——AIがテキストを数値に変換して処理できるようにする技術が「Embedding(埋め込み)」です。RAG・セマンティック検索・類似度計算の根幹を支えるこの技術を、わかりやすく解説します。
Embeddingとは?
Embedding(エンベディング・埋め込み)とは、単語・文章・画像などのデータを、意味を保持したまま数値のベクトル(配列)に変換する技術です。コンピューターは文字列をそのまま計算できませんが、数値に変換することで「意味の近さ」を計算できるようになります。
たとえば「犬」「ワンちゃん」「Dog」という3つの単語は、文字として全く違いますが、意味は非常に近いです。Embeddingでは、これらを高次元ベクトル空間の近い位置に配置します。一方「犬」と「自動車」は意味が遠いため、ベクトル空間上でも遠い位置に配置されます。
Word EmbeddingとSentence Embeddingの違い
| 種類 | 概要 | 代表的なモデル | 主な用途 |
|---|---|---|---|
| Word Embedding | 単語単位をベクトル化。同じ単語は常に同じベクトルになる(文脈を考慮しない)。 | Word2Vec・GloVe・fastText | 類似単語の検索・単語の意味関係の分析 |
| Contextual Embedding | 文脈に応じて同じ単語でも異なるベクトルになる。「bank(銀行)」と「bank(河岸)」を区別できる。 | BERT・RoBERTa | 感情分析・テキスト分類 |
| Sentence Embedding | 文章全体をひとつのベクトルにまとめる。文章の意味全体を表現できる。 | Sentence-BERT・OpenAI text-embedding | セマンティック検索・RAG・文書検索 |
| Multimodal Embedding | テキストと画像を同じベクトル空間に埋め込む。テキストで画像検索が可能になる。 | CLIP・ALIGN | 画像検索・マルチモーダルAI |
コサイン類似度:Embeddingで類似性を計算する
Embeddingベクトルの「近さ」を測る最も一般的な方法が「コサイン類似度」です。2つのベクトルがなす角度のコサインを計算します。同じ方向(類似度1.0)なら意味が近く、直角(類似度0.0)なら無関係、逆方向(類似度-1.0)なら対義語的な関係を意味します。RAGシステムではユーザーの質問をEmbeddingに変換し、コサイン類似度で最も関連する文書を検索します。
OpenAI Embedding APIの使い方
from openai import OpenAI
client = OpenAI()
# テキストをEmbeddingに変換(1536次元のベクトル)
response = client.embeddings.create(
model="text-embedding-3-small",
input="AIとは何ですか?"
)
embedding = response.data[0].embedding
print(f"ベクトルの次元数: {len(embedding)}")
print(f"最初の5要素: {embedding[:5]}")
よくある質問
Embeddingの次元数はどれくらい?
モデルによって異なります。OpenAIのtext-embedding-3-smallは1536次元、text-embedding-3-largeは3072次元です。次元数が多いほど細かい意味の差異を表現できますが、計算コストも増加します。ベクトルデータベースへの格納容量も次元数に比例して増えます。
日本語のEmbeddingは精度が高い?
OpenAIやCohereなど大手のEmbeddingモデルは多言語対応しており、日本語も比較的高精度です。ただし英語が学習データの大部分を占めるため、英語より精度が若干落ちることがあります。日本語特化のEmbeddingモデル(cl-tohoku/bert-base-japaneseなど)を使うとさらに高精度になります。


コメント