本文へスキップ
BecomeCoder

RAGコース · 第1章 RAGとは何か · レッスン3

なぜ「意味」で探すのか ― キーワード検索の限界とベクトル

ローカル実施

導入

ふつうのキーワード検索は、文字が一致するかどうかしか見ていません。「車」で検索しても「自動車」や「クルマ」を含む文書がヒットしない、という経験はないでしょうか。表記ゆれ・同義語・言い換えに弱いのが、キーワード検索の弱点です。

説明

これを解決するのが**埋め込み(embedding)**という技術です。文章をただの文字列としてではなく、意味を表す数値のベクトル(数字の列)に変換します。すると、意味が近い文はベクトルとしても近い場所に配置されます。「犬」と「子犬」は文字としては違いますが、意味が近いのでベクトル空間上でも近くなります。

flowchart LR
  subgraph space["意味のベクトル空間(イメージ)"]
    a["犬"] --- b["子犬"]
    c["自動車"] --- e["車"]
    a -.遠い.- c
  end
  q["質問: 車について"] --> near["近いベクトル<br/>『自動車』『クルマ』もヒット"]

キーワード検索では「文字が一致するか」だけを見ていたのに対し、埋め込みを使った検索では「意味が近いか」で探せるようになります。だからこそ、言い換えや表記ゆれがあっても、関連する文書を見つけ出せるのです。

ただし、本物の埋め込みモデル(OpenAIのAPIなど)はサーバー側の計算やAPI利用が前提で、ブラウザの中だけでは動かせません。そこでこのコースでは、まず第3章で TF-IDF という軽量な手法を使い、「意味に近いもので検索する」感覚をブラウザの中で実際に体験します。TF-IDFは本物の埋め込みほど賢くはありませんが、キーワードの出現パターンから文書どうしの近さを計算でき、ブラウザだけで動かせるという利点があります。本物の埋め込みモデルを使ったコードは、第3章後半の読み物で紹介します。

まとめ

  • キーワード検索は文字の一致しか見ないので、表記ゆれ・同義語・言い換えに弱い。
  • 埋め込み(embedding)は文章を「意味を表すベクトル」に変換し、意味が近い文どうしを近くに配置する。
  • 本物の埋め込みモデルはブラウザで動かせないため、第3章ではまずTF-IDFで検索を体験し、本物の埋め込みは読み物として紹介する。