Embeddingとは何か
テキストを数値の配列(ベクトル)に変換することをEmbeddingと呼びます。
単語から文章全体をベクトル化する
Embedding(エンベディング)とは、テキストを高次元の数値ベクトルに変換する処理です。例えば「猫」という単語が [0.23, -0.41, 0.87, …] という1,536次元の数値配列に変換されます。この数値配列(ベクトル)は単なるIDではなく、単語・文章の意味的な特徴を数値として表現しています。
意味的な近さを距離で表現する
Embeddingの最大の特徴は「意味が近いテキストほど、ベクトル空間内で近い位置に配置される」ことです。「犬」と「猫」のベクトルは近く、「犬」と「自動車」のベクトルは遠くなります。「大きい」と「巨大」も近く、「大きい」と「小さい」は反対方向に位置します。この性質により、キーワードの一致ではなく「意味の類似性」で検索が可能になります。
Word2VecからBERTへの進化
Embeddingの歴史は2013年のGoogleのWord2Vecから始まります。Word2Vecは単語単位のベクトル化でしたが、「銀行(金融)」と「銀行(川岸)」を区別できない課題がありました。2018年のGoogleのBERTは文脈全体を考慮して単語をベクトル化することでこの問題を解決し、現在のEmbeddingモデルの基盤となっています。
Embeddingモデルの仕組み
Embeddingモデルは入力テキスト全体の意味を1つのベクトルに圧縮します。
Encoderモデルの役割
テキスト全体を1つのベクトルに変換するEncoderモデルがEmbeddingに使われます。BERTやその派生モデル(RoBERTa・DeBERTaなど)がその代表です。Encoderモデルは入力テキスト全体のトークンを双方向のAttentionで処理し、テキストの意味を凝縮したベクトルを出力します。GPTのようなDecoderモデルとは異なり、次のトークン予測ではなく「テキスト全体の意味表現」に特化しています。
文書Embeddingの学習方法
文書レベルのEmbeddingモデルは、意味が近いテキストペアのベクトルを近づけ、意味が遠いテキストペアのベクトルを遠ざける対照学習(Contrastive Learning)で学習します。「質問文」と「その回答を含む文書」のペアを大量に学習することで、質問に対して関連文書を正確に検索できるモデルが構築されます。
主要なEmbeddingモデルの比較
| モデル名 | 開発元 | 次元数 | 特徴 |
|---|---|---|---|
| OpenAI(軽量系) | OpenAI | 約1,000〜1,500 | 低コストで高速。汎用用途に最適 |
| OpenAI(高精度系) | OpenAI | 約3,000 | 高精度な意味検索やRAGに強い |
| E5系(多言語) | Microsoft | 約1,000 | 多言語対応。日本語含め安定した性能 |
| Gemini系Embedding | 約500〜1,000 | Geminiとの連携が強み。統合しやすい |
ベクトル検索の仕組み
ベクトル検索では「距離が近いベクトル」を高速に探し出します。
コサイン類似度による近傍探索
2つのベクトルの類似度を計算する代表的な指標がコサイン類似度です。ベクトルの向きが同じほど値が1に近く(最大類似)、反対方向ほど-1に近くなります。ベクトル検索では、クエリベクトルとデータベース内の全ベクトルのコサイン類似度を計算し、上位N件を返します。
ANNによる高速検索
ベクトル数が数百万件を超えると、全件との距離計算(全探索)は現実的な速度で処理できません。そこで使われるのがANN(Approximate Nearest Neighbor:近似最近傍探索)です。HNSWやIVFという手法でベクトルをグループ化しておくことで、全件を探索せず精度をわずかに犠牲にして検索速度を大幅に向上させます。PineconeやChromaなどのベクトルDBはANNを内部に実装しています。
ハイブリッド検索
ベクトル検索(意味検索)と従来のキーワード検索(BM25など)を組み合わせるハイブリッド検索が多くのRAGシステムで採用されています。「AI法規制 2024年」のような固有名詞・年号を含むクエリはキーワード検索が得意で、「もっと簡単に言うと?」のような表現ではベクトル検索が有効です。両方を組み合わせることで検索カバレッジが向上します。
ベクトルデータベースの選定
データ規模・更新頻度・既存システムとの相性でベクトルDBを選びます。
主要ベクトルDBの比較
| DB名 | 種別 | 特徴 | 向いているケース |
|---|---|---|---|
| Pinecone | クラウド | マネージド。スケーラブル | 大規模・本番環境 |
| Chroma | OSS | 軽量・ローカル動作 | PoC・小規模開発 |
| Weaviate | OSS/クラウド | GraphQL対応・多機能 | 複雑なフィルタリング |
| pgvector | PostgreSQL拡張 | 既存DBに追加可能 | PostgreSQL利用中の場合 |
本番導入でのポイント
- スケーラビリティ:格納するベクトル数(ドキュメント数×チャンク数)に応じたDB選定
- 更新頻度:頻繁に更新されるデータには差分更新に対応した設計が必要
- メタデータフィルタリング:「部門=営業」「日付=2024年以降」など属性でフィルタリングできるか確認
- コスト:クラウド型は格納ベクトル数と検索回数に比例した課金が一般的
まとめ
この記事では、EmbeddingとベクトルDBを使ったベクトル検索の仕組みを解説しました。
- Embeddingはテキストの意味を高次元ベクトルに変換する技術で、意味が近いテキストほどベクトルが近くなる
- BERTベースのEncoderモデルが対照学習で学習され、文書全体の意味をベクトル化する
- コサイン類似度とANN(近似最近傍探索)を使い、大規模なベクトルDBを高速に検索できる
- Pinecone・Chroma・pgvectorなどのベクトルDBはデータ規模・更新頻度・既存システムに応じて選定する
これらを理解することで、RAGやセマンティック検索の技術的な仕組みを把握し、ベンダーとの技術議論や導入判断に活用できるようになります。


コメント