埋め込み(Embedding)とは何か
計算するには数値化が必要 — すべてのAIの出発点
コンピュータは「猫」と「犬」が似ていることを知らない。文字列が違うから。埋め込みはこの問題を解く — 意味が似ているものは近い数値に、違うものは遠い数値に変換する。
「猫」 → [0.82, -0.15, 0.41, ...]
「犬」 → [0.79, -0.12, 0.38, ...]
「車」 → [-0.33, 0.67, -0.21, ...]
猫と犬のベクトルは近く、車は遠い。埋め込みとはこれだけのことだ。
埋め込みは目的、方法はいろいろ
「単語をベクトルに変換したい」 — これが埋め込みという目的だ。その方法が時代ごとに変わる。
統計ベース(埋め込み以前):
TF-IDF: 単語頻度でベクトル生成。意味は反映されない
LSA: 行列分解で次元削減。わずかに意味を反映
ニューラルネットベース(2013〜):
Word2Vec: 2層ニューラルネット。「king - man + woman = queen」を可能にした出発点
GloVe: 共起統計 + 行列分解のハイブリッド
FastText: 文字単位分解でタイポ・新語に強い
Transformerベース(2018〜):
BERT: 文脈を反映した埋め込み。同じ「bank」でも金融/川岸で違うベクトル
GPT系列: 大規模事前学習モデル
OpenAI text-embedding-3-small: 1536次元、多言語対応、APIですぐ使える
推薦システムで埋め込みが重要な理由
推薦の核心的な問いは「このユーザーはこのアイテムを好むか?」だ。
ユーザーとアイテムを同じベクトル空間に入れれば、距離がそのまま好みになる。近ければ好む可能性が高く、遠ければ低い。
このアイデアはMatrix FactorizationからTwo-Towerモデルまで、推薦システムの大半が共有している。
自前学習 vs 事前学習済みモデル
自前学習は自分のデータからベクトルを作る。ドメインに最適化されるが、数万件以上のデータが必要。
事前学習済みモデル(OpenAIなど)は学習済みモデルにテキストを送ってベクトルを受け取る。データが少なくても使え、多言語も自動対応。ほとんどのプロジェクトはここから始めればいい。
動作原理
非構造データ(テキスト、画像など)を入力
埋め込みモデルが固定サイズの数値ベクトルに変換
ベクトル間距離(コサイン類似度など)で類似性を測定
近いベクトル = 意味的に似ているもの
メリット
- ✓ 非構造データを数学的に比較可能にする
- ✓ 多言語・マルチモーダル統合がベクトル空間で自然にできる
デメリット
- ✗ ベクトルだけでは「なぜ似ているか」の説明ができない(解釈不能)
- ✗ 埋め込みの品質は学習データに大きく依存 — 偏ったデータは偏ったベクトルを生む