「単語の意味を数字で表す」——初めてEmbedding(埋め込み)の概念を知ったとき、頭の中で何かがカチッとはまる感覚があった。文章を1024次元とか4096次元のベクトル(数字の羅列)に変換する技術。これが現代の自然言語処理の土台なんだ。
Embeddingの美しいところは「意味が近いものはベクトル空間上でも近くに配置される」こと。「王様 – 男性 + 女性 = 女王」みたいな計算が実際に成立する。「東京」と「日本」の関係性が「パリ」と「フランス」の関係性と同じ方向のベクトルとして現れる。
Embeddingがどんな場所で使われてるか:
- 検索エンジン — キーワードが一致しなくても、「意味が近い」文書を見つけられる。Google検索は2010年代からこれ。
- レコメンド — 「この商品を見た人はこんな商品も」の裏側。
- RAG — 質問と文書をそれぞれEmbeddingして、近いものを探す。
- クラスタリング — 大量の文書を意味で自動分類。カスタマーレビューの分析とか。
- 異常検知 — 「いつもと違うパターン」をEmbeddingの距離で検出。
有名なEmbeddingモデル:
- OpenAI text-embedding-3 — 256〜3072次元。API経由でお手軽。有料だけど安い。
- Cohere Embed — 多言語に強い。日本語も結構イケる。
- BGE(BAAI General Embedding) — オープンソースで今一番評価が高い。HuggingFaceで公開されててローカル運用も可能。
- multilingual-e5 — Microsoft製の多言語モデル。日本語もカバー。
Embedding次元の選び方。Matryoshka Embedding(マトリョーシカ埋め込み)で、3072次元のモデルを256次元に縮めても精度が大きく落ちない。ストレージも速度も節約できるから、実運用ではかなりありがたい。