埋め込みとベクトル検索とは何ですか。キーワード検索とどう違いますか

文を数の並び (ベクトル) に変え、向きの近さで意味の近い文を探す仕組みと押さえる問い。言い換えに強く固有の名前に弱いベクトル検索と、その逆のキーワード検索を、組み合わせて使う所まで答えます。

答えてみる

面接官に「埋め込みとベクトル検索とは何ですか。キーワード検索とどう違いますか」と聞かれたつもりで、答えを見る前に自分の言葉で答えます。

声に出して答えた人は「書かずに答えを見る」で開けます。

解説を読む

聞かれ方から関連するコースまで、この問いの解説を全部ここに置いています。

こう聞かれます

  • 「埋め込み (エンベディング) とは何ですか」
  • 「ベクトル検索とキーワード検索は、どう違いますか」
  • 「検索の機能を作るなら、どちらを使いますか」

面接官が見ている点

  • 埋め込みを「文の意味を数の並びにした物」と、仕組みで説明できるか
  • 近さをどう測るか (コサイン類似度) を、ことばで説明できるか
  • ベクトル検索を万能とせず、キーワード検索との得意と不得意を比べ、組み合わせを言えるか

短い答え

  • 埋め込みは、文を数の並び (ベクトル) に変えた物で、意味の近い文ほどベクトルも近くなります。ベクトル検索は、質問のベクトルに近い文書を探す仕組みです。
  • キーワード検索は同じ言葉を含むかで探すので、型番や固有の名前に強く、言い換えに弱いです。ベクトル検索はその逆で、言い換えに強く、言葉の正確な一致に弱いことがあります。
  • そのため、実務では 2 つを組み合わせる (ハイブリッド検索) ことが多く、RAG で LLM に渡す文書を探すときにも使います。

少し詳しい答え

埋め込みとは

埋め込みのモデルに文を渡すと、数の並びが返ってきます。これがベクトルです。意味の近い文は、ベクトルどうしも近くなるように作られています。次は、仕組みを見るための架空の小さな例です。本物のベクトルは、ずっと多くの数が並びます。

「パスワードを忘れた」
→ [0.81, 0.12, 0.05]

「ログインできない」
→ [0.77, 0.20, 0.09]

「送料はいくらですか」
→ [0.03, 0.10, 0.92]

上の 2 つは同じ言葉をほとんど含みませんが、困りごとが近いので、ベクトルも近くなります。3 つめは話題が違うので、離れます。

埋め込みのモデルごとに、一度に入れられる文の長さ (トークンの数) に上限があります。長い文書は、前もって小さなかたまりに分けてから、かたまりごとにベクトルにします。

近さの測り方

ベクトルの近さには、コサイン類似度がよく使われます。2 つのベクトルを矢印と見たとき、向きがどれだけそろっているかを測る値で、同じ向きほど大きくなります。文の長さのような大きさの違いより、向き (意味の方向) を比べられるのが良い所です。

TypeScript

function cosineSimilarity(a: number[], b: number[]): number {
  let dot = 0;
  let normA = 0;
  let normB = 0;
  for (let i = 0; i < a.length; i++) {
    dot += a[i] * b[i];
    normA += a[i] * a[i];
    normB += b[i] * b[i];
  }
  return dot / (Math.sqrt(normA) * Math.sqrt(normB));
}

ベクトル検索では、文書のベクトルを前もって保存しておき、質問をベクトルにして、近い順に上から何件かを取ります。文書が多いと全部と比べるのは重いので、ベクトルを保存して近い物を速く探せる DB や DB の拡張を使うことが多いです。

キーワード検索との得意と不得意

問い合わせキーワード検索ベクトル検索
ログインできない (文書は「パスワードを忘れた」)言葉が違うので拾いにくい意味が近いので拾える
型番 AB-1234 の説明書同じ文字があるので拾える似た型番と区別できないことがある
社内の略語や新しい製品の名前同じ文字があれば拾えるモデルが知らない言葉は外しやすい

キーワード検索は、なぜその文書が出たかが分かりやすく、ずれの原因を追いやすいのも良い所です。ベクトル検索は、利用者が文書と違う言い方で聞いても届きますが、なぜ近いと判断したかは見えにくくなります。

組み合わせとトレードオフ

ハイブリッド検索は、キーワード検索とベクトル検索を両方回し、2 つの結果の順位を合わせて並べ直す形が一般的です。言い換えにも固有の名前にも届きやすくなります。

そのかわり、仕組みが 2 つになり、保存する物、更新の手間、待ち時間が増えます。文書を足したり直したりするたびに、ベクトルも作り直す必要があります。型番や名前で引くことがほとんどの検索なら、キーワード検索だけで足ります。利用者が自由な言葉で聞く問い合わせの検索なら、ベクトル検索を足す価値が出ます。どちらが効くかは、実際の質問を集めて試して決めます。

よくある間違い

  • ベクトル検索ならキーワード検索は要らないと言う型番や固有の名前、略語のような言葉の一致には、キーワード検索のほうが強いことがあります
  • 埋め込みのモデルを途中で替えて、古いベクトルと混ぜるモデルが違うとベクトルの意味の空間も違うので、比べられません。替えたら全部作り直します
  • 長い文書を 1 本のベクトルにする入れられる長さに上限があり、大きすぎると中の話題が混ざって近さが測りにくくなります。かたまりに分けます

深掘りの問い

  • 「ベクトルの検索の結果が意図とずれるとき、まず何を見ますか」実際の質問と、出てきてほしい文書の組をいくつか用意し、上位に入っているかを確かめる、と答えます
  • 「ベクトルはどこに保存しますか」今使っている DB にベクトルの機能があればまずそれを使い、量や速さが足りなくなったら専用の仕組みを考える、と答えます
  • 「検索のほかに、埋め込みは何に使えますか」似た問い合わせをまとめる、似た記事を勧める、重なった文書を見つける、などを挙げます

確認日 2026年10月24日

技術面接問題の一覧へ戻る