埋め込みベクトル
テキストや画像を数値ベクトルに変換し、意味的な類似度を計算可能にする技術
機械学習AI
埋め込みベクトルとは
埋め込みベクトル (Embedding) は、テキスト、画像、音声などのデータを固定長の数値ベクトルに変換する技術である。意味的に近いデータは近いベクトルになるため、類似検索、レコメンデーション、RAG (Retrieval-Augmented Generation) に使われる。
仕組み
"TypeScript 入門" → [0.12, -0.34, 0.56, ..., 0.78] (1536次元)
"JavaScript 基礎" → [0.11, -0.33, 0.55, ..., 0.77] ← 近いベクトル (類似)
"料理のレシピ" → [0.89, 0.12, -0.67, ..., -0.45] ← 遠いベクトル (非類似)
ユースケース
| ユースケース | 説明 |
|---|---|
| セマンティック検索 | キーワードではなく意味で検索 |
| RAG | 関連ドキュメントを検索して LLM に渡す |
| レコメンデーション | 類似商品、類似記事の推薦 |
| 重複検出 | 類似コンテンツの検出 |
| クラスタリング | データの自動分類 |
Bedrock での埋め込み生成
const response = await bedrock.invokeModel({
modelId: 'amazon.titan-embed-text-v2:0',
body: JSON.stringify({ inputText: 'TypeScript 入門' }),
});
const { embedding } = JSON.parse(new TextDecoder().decode(response.body));
// embedding: [0.12, -0.34, 0.56, ...] (1024次元)
ベクトル検索
1. ドキュメントを埋め込みベクトルに変換して保存
2. クエリを埋め込みベクトルに変換
3. コサイン類似度で最も近いベクトルを検索
ベクトルストア
| ストア | 特徴 |
|---|---|
| OpenSearch (k-NN) | AWS マネージド、全文検索と併用 |
| Pinecone | ベクトル検索専用 SaaS |
| pgvector | PostgreSQL 拡張 |
| DynamoDB + Lambda | 小規模なら自前実装も可能 |
RAG (Retrieval-Augmented Generation)
ユーザーの質問 → 埋め込みベクトルに変換
→ ベクトルストアで関連ドキュメントを検索
→ 関連ドキュメント + 質問を LLM に渡す
→ LLM が回答を生成
LLM の知識にない情報 (社内ドキュメント) を検索して回答に含める。
コサイン類似度
function cosineSimilarity(a: number[], b: number[]): number {
const dot = a.reduce((sum, ai, i) => sum + ai * b[i], 0);
const normA = Math.sqrt(a.reduce((sum, ai) => sum + ai * ai, 0));
const normB = Math.sqrt(b.reduce((sum, bi) => sum + bi * bi, 0));
return dot / (normA * normB); // -1 ~ 1 (1 が最も類似)
}
より深く学ぶには関連書籍が役立つ。