エンベディング(埋め込み表現)とは?ベクトル検索・類似度計算の基礎

ChatGPTの記憶検索もレコメンドも、裏側では「言葉を数値の座標に変換する」エンベディングが働いています。ベクトル検索やRAGを理解するための必須知識を基礎から解説します。

エンベディングとは?テキストをベクトルに変換するAIの基盤技術

AI初心者

AIを知りたい

先生、「エンベディング」とか「ベクトル化」って何ですか?AIがテキストを数値に変えるってどういうことですか?

AIエンジニア

AIエンジニア

エンベディングは、テキストや画像などのデータを数値のベクトル(数値の列)に変換する技術だよ。例えば「猫」という言葉を[0.23, -0.45, 0.87, …]のような数百〜数千次元のベクトルに変換するんだ。重要なのは、意味が似ている言葉は似たベクトルになること。「猫」と「ネコ」はとても近いベクトルに、「猫」と「自動車」は離れたベクトルになるよ。

AI初心者

AIを知りたい

意味の近さが数値で表現できるんですね!それはどんなことに使えるんですか?

AIエンジニア

AIエンジニア

最も重要な活用がRAG(検索拡張生成)だよ。社内文書をすべてエンベディングしてベクトルデータベースに保存しておけば、質問文もベクトル化して類似度検索することで、関連する文書を瞬時に見つけられる。セマンティック検索(意味ベースの検索)やレコメンデーションにも広く使われているよ。

エンベディングとは。

人工知能に関わる言葉である「エンベディング」について説明します。テキスト・画像・音声などのデータを、AIが処理できる固定長の数値ベクトルに変換する技術です。意味的に類似したデータは近いベクトルに、異なるデータは遠いベクトルにマッピングされます。RAG、セマンティック検索、レコメンデーションの基盤技術です。

エンベディングとは

エンベディング(Embedding)は、テキストや画像などの非構造化データを固定長の数値ベクトル(浮動小数点数の配列)に変換する技術です。変換されたベクトルは、元のデータの意味的な特徴を捉えており、ベクトル間の距離で意味の類似度を測定できます。

例えば、「東京」「大阪」「ニューヨーク」のエンベディングは互いに近い位置に配置され、「プログラミング」「機械学習」も近い位置に配置されます。一方、「東京」と「プログラミング」は離れた位置になります。この性質により、人間の直感的な「意味の近さ」を数学的に計算することが可能になります。

エンベディングモデル

テキストエンベディングを生成するための主要なモデルを紹介します。

モデル 開発元 次元数 特徴
text-embedding-3-large OpenAI 3072 高性能、API利用
text-embedding-3-small OpenAI 1536 コスト効率が良い
voyage-3 Voyage AI 1024 コード検索に強い
multilingual-e5-large Microsoft 1024 多言語対応、OSS
BGE-M3 BAAI 1024 100以上の言語対応、OSS

ベクトルデータベースとセマンティック検索

エンベディングの最も重要な活用先が、ベクトルデータベースを使ったセマンティック検索です。従来のキーワード検索(BM25)では、「犬の飼い方」で検索しても「ペットの育て方」という文書はヒットしません。しかしセマンティック検索では、意味的に類似した文書を見つけることができます。

主要なベクトルデータベースには、Pinecone(フルマネージド)、Weaviate(オープンソース)、ChromaDB(軽量・ローカル向け)、Qdrant(高性能OSS)、pgvector(PostgreSQL拡張)があります。

RAG(検索拡張生成)では、社内文書をチャンク分割→エンベディング→ベクトルDBに格納し、質問時に類似チャンクを検索してLLMに渡すことで、正確な情報に基づく回答を生成します。

エンベディングの応用分野

応用分野 説明 具体例
RAG 関連文書の検索とLLMへの提供 社内Q&Aボット、ドキュメント検索
セマンティック検索 意味ベースの文書検索 ECサイトの商品検索
レコメンデーション 類似コンテンツの推薦 記事推薦、類似商品表示
重複検出 類似文書の検出 盗作チェック、重複チケット検出
クラスタリング テキストの自動分類 顧客フィードバックの分類

まとめ

エンベディングは、テキストの意味を数値ベクトルとして表現する、現代のAI活用の基盤技術です。RAGによるLLMの知識拡張、セマンティック検索、レコメンデーションなど、幅広い応用があります。ベクトルデータベースと組み合わせることで、大規模なデータから瞬時に意味的に関連する情報を検索でき、AIアプリケーションの精度と実用性を大幅に向上させます。

関連記事

Pythonで文のベクトル化とコサイン類似度を計算する

sentence-transformersライブラリを使って日本語の文をベクトル化し、文同士の意味的な類似度をコサイン類似度で定量化します。

from sentence_transformers import SentenceTransformer
from sklearn.metrics.pairwise import cosine_similarity
import numpy as np

# 多言語対応モデルをロード
model = SentenceTransformer("paraphrase-multilingual-MiniLM-L12-v2")

# 比較する文のリスト
sentences = [
    "機械学習はデータからパターンを学習する技術です",
    "MLはデータを使ってモデルを訓練する手法です",
    "今日の天気は晴れで気温は25度です",
    "深層学習はニューラルネットワークを多層にした手法です",
]

# 文をベクトル化(エンベディング取得)
embeddings = model.encode(sentences)
print(f"ベクトルの次元数: {embeddings.shape[1]}")  # 384次元

# コサイン類似度の行列を計算
sim_matrix = cosine_similarity(embeddings)

# 結果を表示
labels = ["機械学習", "ML", "天気", "深層学習"]
print("\n=== コサイン類似度行列 ===")
header = "          " + "  ".join(f"{l:>6}" for l in labels)
print(header)
for i, label in enumerate(labels):
    row = "  ".join(f"{sim_matrix[i][j]:6.3f}" for j in range(len(labels)))
    print(f"{label:>8}  {row}")

# 特定ペアの類似度を確認
print(f"\n「機械学習」と「ML」の類似度: {sim_matrix[0][1]:.3f}")
print(f"「機械学習」と「天気」の類似度: {sim_matrix[0][2]:.3f}")
# 「機械学習」と「ML」の類似度: 0.847(意味が近い)
# 「機械学習」と「天気」の類似度: 0.094(意味が遠い)

ポイントは2つ。まずエンベディングは単語の一致ではなく「意味の近さ」を捉えるため、「機械学習」と「ML」のように表現が異なっても高い類似度を示します。次にコサイン類似度は-1から1の範囲で、1に近いほど意味が近く、0に近いほど無関係です。RAGの検索やFAQの重複検出など、実務では類似度の閾値(例: 0.7以上を「類似」と判定)を設定して使います。