埋め込みベクトル

テキストや画像を数値ベクトルに変換し、意味的な類似度を計算可能にする技術

機械学習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 が最も類似)
}

より深く学ぶには関連書籍が役立つ。

関連用語