Embedding(エンベディング)とは?読み方・仕組み・ベクトル表現の使い方を徹底解説

Embedding (エンベディング)

Embedding(エンベディング)とは

Embedding(エンベディング、埋め込み表現)とは、テキスト・画像・音声などの離散的なデータを、意味的な近さを保ったまま固定長の数値ベクトル(例:1536次元の浮動小数点配列)に変換する技術のことです。言葉そのものを文字列として扱うのではなく、「意味の座標」に置き換えることで、コンピュータが「犬」と「猫」は近く、「犬」と「政治」は遠い、といった意味的な関係を計算可能にします。2013年のWord2Vec以降の主流技術で、2022〜2026年の生成AIブームでは、RAG(検索拡張生成)・セマンティック検索・推薦システムの中核として欠かせない存在になっています。

身近な例えでいうと、Embeddingは「意味のGPS座標」のようなものです。東京駅の緯度経度が(35.68, 139.77)で表せるように、「朝ごはん」という言葉も(0.12, -0.45, 0.88, …) のような1000次元以上の座標で表せます。緯度経度が近い場所は地理的に近いのと同じように、Embeddingが近い単語は意味的に近いという性質があります。この「距離=意味の近さ」という仕組みこそがEmbeddingの本質です。

Embeddingの読み方

エンベディング

エンベッディング

埋め込み表現(うめこみひょうげん)

Embeddingの仕組み

Embeddingは、ニューラルネットワークを使って「意味を保った次元圧縮」を行うことで生成されます。初期のWord2Vec(2013年)は2層のシンプルなネットワークでしたが、現代の text-embedding-3-large や voyage-3 などはTransformerベースの大規模モデルで、文脈を考慮した動的な埋め込みを生成します。ここが重要なポイントで、同じ「bank」という単語でも「river bank」と「bank account」では異なるベクトルになるのが現代の文脈付きEmbeddingの特徴です。

Embeddingの基本プロセス

① テキスト入力
② トークン化
③ ニューラルネット処理
④ プーリング(平均化)
⑤ 固定長ベクトル

ベクトル空間と意味の距離

生成されたベクトルは「意味空間」上の点として扱います。2つの点の近さを測る代表的な指標がコサイン類似度です。2つのベクトルの角度のコサインを計算し、1.0なら完全一致、0.0なら無関係、-1.0なら反対の意味、というふうに0〜1の範囲で意味の近さを数値化します。実務ではコサイン類似度が0.85以上なら「かなり近い」、0.75以上なら「関連あり」というのが目安です。

次元数とモデルサイズ

Embeddingの次元数はモデルによって異なり、OpenAIのtext-embedding-3-smallは1536次元、text-embedding-3-largeは3072次元、Cohere embed-v3は1024次元、Voyage-3は1024次元などと様々です。次元数が多いほど表現力は上がりますが、ストレージ容量と計算コストが増えます。実務では「精度とコストのバランス」を考えて選ぶのがポイントです。

静的Embeddingと文脈付きEmbedding

Word2VecやGloVeは「単語1つに1つのベクトル」を返す静的Embeddingです。一方、BERTやOpenAIのtext-embeddingモデルは文全体の文脈から動的にベクトルを生成する文脈付きEmbeddingです。2026年現在、実務で使われるのはほぼ文脈付きEmbeddingで、静的Embeddingは学習用や研究用に限定されています。

Embeddingの使い方・実例

以下はOpenAIのPython SDKでEmbeddingを生成し、2つの文の類似度を計算するシンプルな例です。Pythonに不慣れでも、実行するとイメージがつかめます。

from openai import OpenAI
import numpy as np

client = OpenAI()

def embed(text):
    resp = client.embeddings.create(
        model="text-embedding-3-small",
        input=text
    )
    return np.array(resp.data[0].embedding)

# 2つの文を埋め込む
v1 = embed("犬が公園で遊んでいる")
v2 = embed("子犬が広場で走り回る")
v3 = embed("株価が上昇した")

# コサイン類似度
def cosine(a, b):
    return np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))

print(f"犬の文同士: {cosine(v1, v2):.3f}")  # 0.85くらい
print(f"犬 vs 株価: {cosine(v1, v3):.3f}")  # 0.20くらい

このように、テキストを数値ベクトルに変換することで、「意味の近さ」を四則演算で扱えるようになります。実務ではここから、FAISS / Pinecone / pgvectorなどのベクトルDBに保存して、高速な類似検索を実現します。

主要Embeddingモデルの比較

モデル 次元 最大トークン 料金($/1M tokens) 特徴
text-embedding-3-small 1536 8191 $0.02 安価・高性能・多言語対応
text-embedding-3-large 3072 8191 $0.13 最高精度。多次元で表現力が高い
Cohere embed-v3 1024 512 $0.10 検索用途に特化。100言語対応
Voyage-3 1024 32000 $0.06 コード・法務・医療で高精度
BGE-M3 (OSS) 1024 8192 無料(自前運用) 中国語・日本語に強い。多言語OSS

Embeddingのメリット・デメリット

メリット

  • 意味的検索が可能:「犬」で検索して「ワンちゃん」がヒットするなど、キーワード一致を超えた検索ができる
  • 多言語対応:日本語で検索して英語の文書がヒットするクロスリンガル検索が可能
  • 高速:一度ベクトル化しておけば、近似最近傍探索(ANN)で数百万件を数ミリ秒で検索できる
  • 汎用性:検索・推薦・分類・クラスタリング・異常検知など、同じ埋め込みを多用途に使える
  • RAGの中核:LLMに最新情報を与える仕組みの基盤技術として標準化している

デメリット

  • ブラックボックス性:なぜそのベクトルが近いのか直感的に説明しづらい
  • ドメイン依存:汎用モデルは専門用語(医療・法務・コードなど)で精度が落ちる場合がある
  • ストレージコスト:3072次元×float32なら1ベクトル12KB。1億件で約1.2TBになる
  • バージョン互換性:モデルをアップデートすると、過去のベクトルと互換性がなくなり再計算が必要

EmbeddingとOne-Hot Encodingの違い

初心者が混同しやすい「One-Hot Encoding」との違いを押さえておきましょう。One-Hotは「犬=[0,1,0,0]」のように1箇所だけ1にする表現で、単語同士の意味的な近さを表現できません。Embeddingはこれを「密な低次元ベクトル」に変換し、意味の近さを保持します。

項目 Embedding One-Hot TF-IDF
次元数 数百〜数千 語彙数(数万〜数百万) 語彙数
密(float) 疎(0と1のみ) 疎(浮動小数点)
意味の保持 ○(近さで表現) ×(全て直交) △(頻度のみ)
文脈考慮 ○(文脈付きモデル) × ×

よくある誤解

誤解1:「Embeddingは単語単位の技術」

Word2Vec時代はそうでしたが、2026年現在は文単位・段落単位の文脈付きEmbeddingが主流です。OpenAI text-embedding-3は最大8191トークンまで一括で埋め込めます。長文を丸ごと1つのベクトルで表現できます。

誤解2:「次元数が多いほど精度が高い」

必ずしもそうではありません。3072次元のモデルは1536次元より概ね高性能ですが、差は数%程度で、次元を減らす(Matryoshka Embeddings)テクニックも実用化されています。実務ではコストと精度のトレードオフで選ぶのが賢明です。

誤解3:「Embeddingだけで検索システムは作れる」

Embeddingは「意味の近さ」しか見ないため、「正確な品番検索」「日付指定」「最新情報優先」などには弱いです。実務では BM25などのキーワード検索と組み合わせたハイブリッド検索が推奨されます。意味と完全一致の両方を取るのが鉄則です。

実務での活用シーン

Embeddingの実務での活用は広範囲です。代表的なシーンを挙げます。

  • セマンティック検索:社内ドキュメント、FAQ、製品マニュアルの意味検索。キーワードではなく「意図」で探せる
  • RAG(検索拡張生成):ユーザーの質問をEmbeddingし、類似文書を取得してLLMに渡す。最新情報や社内データを扱う基本パターン
  • 推薦システム:ユーザーの閲覧履歴と商品説明文をEmbeddingし、類似度で推薦する
  • 重複検出・クラスタリング:問い合わせ内容をクラスタリングして頻出パターンを可視化する
  • 異常検知:通常のログ文と異質なログを検出する
  • 多言語翻訳マッチング:日本語の質問と英語のマニュアルを意味ベースで対応付ける
  • 画像・音声検索:CLIPなどのマルチモーダルEmbeddingで画像とテキストを同じ空間で扱う

Embeddingと関連技術の組み合わせ

Embeddingは単体で使うよりも、他の技術と組み合わせて効果を発揮することが多い技術です。実務では以下のパターンが定番です。覚えておきましょう。

まず、ベクトルデータベース(FAISS、Pinecone、Qdrant、pgvectorなど)と組み合わせて、数百万〜数億件の高速類似検索を実現します。ここが重要なポイントで、ナイーブに全ベクトルとコサイン類似度を計算すると遅すぎるため、HNSWやIVF-PQなどの近似最近傍探索アルゴリズムが必須になります。

次に、Rerankerとの組み合わせです。Embeddingで候補を100件取得し、Cross-Encoder(Cohere Rerank、Voyage Rerankなど)で再順位付けすることで、精度が10〜20%向上します。実務では「Embedding=リコール重視、Reranker=精度重視」の2段構えがベストプラクティスです。

さらに、キーワード検索(BM25)とのハイブリッド検索も標準パターンです。Embeddingが意味的に近いものを取ってきた上で、BM25のキーワードスコアと重み付きで結合することで、「ニワトリは英語でchicken」のような完全一致も「家禽」のような意味的関連も両方取れるようになります。

よくある質問(FAQ)

Q1. Embeddingは日本語に対応していますか?

はい、OpenAI text-embedding-3、Cohere embed-v3、Voyage-3などの主要モデルはすべて多言語対応で、日本語でも高精度に動きます。日本語特化ならBGE-M3やmultilingual-e5-largeといったOSSモデルも選択肢です。

Q2. LLMとEmbeddingモデルは同じですか?

いいえ、別物です。LLMは「次の単語を予測する」生成モデル、Embeddingモデルは「意味をベクトル化する」表現モデルです。ただし内部構造は両方ともTransformerベースで、Embeddingモデルの多くはLLMの隠れ層から派生しています。

Q3. 自前で学習すべきですか、既製品を使うべきですか?

まずは既製品を使うべきです。OpenAIやVoyageの汎用モデルは広範囲で十分な精度を出します。医療・法務・コードなど極端に専門性が高い領域でのみ、ファインチューニングや専用モデル(Voyage-code-3など)を検討します。

Q4. コストを抑えるコツは?

①text-embedding-3-smallなど安価なモデルを選ぶ、②Matryoshka Embeddingで次元を縮小(3072→512等)、③埋め込み結果をキャッシュする、④バッチ処理で一度に複数テキストを送る、が定番テクニックです。

Q5. プライバシーは大丈夫ですか?

Embedding API(OpenAI、Cohere等)は入力データをサーバーに送るため、機密情報の扱いには注意が必要です。完全オンプレで動かしたい場合はBGE-M3やintfloat/e5-large-v2などのOSSモデルをローカルGPUで実行することをおすすめします。

まとめ

  • Embedding(エンベディング、埋め込み表現)はテキスト等を意味を保った固定長ベクトルに変換する技術
  • 仕組みの核は「意味的に近いものはベクトル空間でも近い」という性質
  • Word2Vec(静的)→BERT→OpenAI text-embedding-3(文脈付き)と進化してきた
  • 代表モデルはtext-embedding-3-small/large、Cohere embed-v3、Voyage-3、BGE-M3など
  • コサイン類似度で意味の近さを数値化し、ベクトルDBで高速検索する
  • 用途はセマンティック検索・RAG・推薦・クラスタリング・異常検知・多言語マッチングと広範
  • ハイブリッド検索(Embedding+BM25)とReranker組み合わせが実務の標準

参考文献・出典

コメントを残す

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

CAPTCHA