セマンティック検索Semantic Search

文字ではなく意味が近いものを探す検索

ポイント
  • セマンティック検索は文字が重なるものではなく意味が近いものを探してくれます。
  • 文書と質問をそれぞれ意味を含んだ数字の束に変えておき、その位置がどれだけ近いかを測ります。
  • 文書側の計算はあらかじめ済ませておきます。 検索時は質問だけを変えて比べるので速く動きます。
  • 表現が違っても見つけてくれる代わりに、品番・人名・数字のように正確に一致する必要があるものには弱いです。
  • そのため実務では文字検索と意味検索を一緒に動かして結果を合わせます。
目次

1たとえで理解する

引き出しに名刺入れが一つあります。五十音順に差しておけば、名前を知っているときしか探せません。去年屋根を直してくれた社長を探したいのに名前を思い出せなければ、最初からめくらないといけません。

そこで名刺を差すとき裏に何をしてくれる人かを書いておき、似た仕事どうしを同じ枠にまとめておくことにします。防水と雨漏りと屋上工事は一つの枠に、電気と配線は別の枠にです。これで「天井から水が漏れています」を持って引き出しを開ければ、名前を知らなくても手がその枠へ向かいます。

名刺に「雨漏り」という文字が一度も書かれていなくても構いません。この方式は書かれた文字ではなく、していることがどれだけ近いかで枠を決めるからです。

2くわしく

文字ではなく意味で探します

以前の検索は文字が重なるかを見ていました。「雨漏り修理」と打ち込んで初めて、その文字が入った文書が出てきました。同じことを「水が漏れる」と書いた文書は文字が一つも重ならず、後ろへ回されました。

セマンティック検索は質問と文書をそれぞれ意味を含んだ数字の束に変えたあと、その束どうしを見比べます。同じ意味を別の言葉で書いた文書、誤字がある文書、さらには違う言語で書かれた文書まで同じ枠に集まってきます。

質問を長く投げても構わないという点も違います。「先月買った洗濯機が排水のときだけ音がします」という文をそのまま入れてもよい理由は、検索語を単語に割って数えるわけではないからです。

位置はあらかじめ決めておきます

検索のたびに文書を全部読んでいたら遅すぎます。そこで文書側はあらかじめ数字の束に変えて保存しておきます。 文書を入れたり直したりするときに一度だけ計算すればよいのです。

検索が来たとき、そのつど計算するのは質問一つだけです。その質問の位置に近い文書を、保存しておいたものの中から選べば終わりです。全部と一つずつ見比べるのではなく、近い候補だけを素早く絞る方法も一緒に使います。

あらかじめ計算しておいた値は変換に使ったモデルと組です。文書を変換するモデルを新しいものに替えると、以前保存しておいた値は使えなくなり、全部計算し直すことになります。

近さは方向で測ります

二つの位置がどれだけ近いかはどう決めるのでしょうか。よく使われる方法は、距離を測る代わりに同じ側を向いているかを見ることです。二本の矢印が並んでいれば近く、互いに違う側を向いていれば遠いのです。

長さを抜いて方向だけを見るのには理由があります。同じ内容を短く書いた文章と長く書いた文章では矢印の長さが変わります。長さをそのまま数えると長い文書ばかりが上に来てしまいます。方向だけを見れば、長さに関係なく内容が似ているほうが上に来ます。

この方式をコサイン類似度と呼びます。セマンティック検索が出す順位は結局、この物差しで測った結果です。

得意なことと不得意なこと

意味で探すことがいつも勝つわけではありません。意味が似ているということはぴったり一致するという意味ではないからです。部品番号や口座番号、人名のように一文字違うだけで別物になる検索では、意味検索のほうがかえって迷います。

否定条件も弱いところです。「猫がいない写真」と「猫の写真」は意味の位置がとても近くなります。出てくる結果が反対なのに上位に上がってきます。

新しくできた言葉や社内だけで使う略語も苦手です。モデルが学習で見たことのない言葉はどの枠に入れればよいか曖昧で、見当違いの隣と一緒に扱われます。

二つの方式を一緒に動かします

そのため実務では一つだけを使いません。文字で探す検索と意味で探す検索を一緒に動かし、二つの結果を合わせて順位を付け直します。品番を入れれば文字側が正確に捉え、崩して書いた質問には意味側が力を発揮します。

合わせたあとにもう一度絞り込むこともあります。上位候補数十件だけを取り出し、より丁寧なモデルで並べ直す方式です。最初から全部を丁寧に見るより、ずっと安く精度を上げられます。

AIが資料を探して読んで答える仕組みでも、この検索が前段に置かれます。前段で見当違いの文書を持ってくると、後段でどれだけ上手に読んでも答えがずれます。

3もう少し正確に

文書と質問を数字の束に変える作業を埋め込みと呼び、そうして作った束を集めておき近いものを素早く探してくれる保管庫をベクトルデータベースと呼びます。候補を絞るときは全部と見比べる代わりに、近いものだけを近似で拾い出す方法を使います。精度を少し譲って速さを大きく得る取引です。

たとえがずれる点もあります。名刺入れの枠は人が名前を付けて分けたものですが、セマンティック検索には名前の付いた枠がありません。あるのは座標と距離だけで、枠のように見えるものは近いものが集まっている状態にすぎません。だからこの文書がなぜ上に来たのかを説明するのは難しいのです。文字検索はどの単語が重なったかを示せますが、意味検索は数字が近かったとしか言えません。また名刺入れは一人を一つの枠に入れますが、長い文書は丸ごと一か所には収まらないので、段落単位で切ってそれぞれ位置を決めておきます。どこで切るかが検索結果をかなり大きく変えます。

4やってみる

5よくある誤解

  • セマンティック検索が質問を理解していると思われがちですが、実際には質問と文書の位置がどれだけ近いかを測っているだけです。

  • 意味で探すので文字検索より常に優れていると考えられがちですが、実際には品番や人名のように正確に一致する必要がある検索ではかえって迷います。

  • 文書を入れておけば自動で最新に保たれると思われがちですが、実際には文書を直したりモデルを替えたりすると保存しておいた値を計算し直す必要があります。

7ひとこと要約

つまりセマンティック検索は文字が重なる文書の代わりに、意味の位置が近い文書を探してくれる検索です。

誤りや、もっと良いたとえがありますか? 修正を提案する · 最終更新2026-09-02