- ブラウザURL入力
- DNS名前→IP
- ルータ経路選択
- ロードバランサ振り分け
- Nginx受け口
- アプリ処理今ここ
- DB保存
確率で答える部品の確かさは、部品の外側にしか書けません。今回は検索の土台になる「近さ」が、部品の中のどこで決まったのかを読みます。
まず結論
文の埋め込み(embedding)ベクトルは、意味の近い文ほど近くに置かれるよう訓練されます。ただし逆向きの「近いから同じ意味」は約束されていません。
手元で測ったモデルでは、「成功した」に対して否定文が 0.798、言い換えが 0.329 でした。このモデルのカードが書く訓練目的は、データセットで対になっていた文を当てることです。「近い」が何を指すかは、訓練が何を対にしたかで決まります。
英語の文埋め込みモデル all-MiniLM-L6-v2 で `The deployment succeeded.` と比べたとき、コサイン類似度はどうなったでしょうか。
当てることが目的ではありません。外した予測ほど記憶に残るので、直感で選んでください。
近さは、訓練の目的から出てくる
文の埋め込み(embedding)ベクトルは、文を固定長の数値の並びに写したものです。今回測った all-MiniLM-L6-v2 のカードは It maps sentences & paragraphs to a 384 dimensional dense vector space と書きます。このモデルは訓練でもベクトルの向きの近さ(コサイン類似度)を使っており、今回もそれで測ります。
では、その近さは何が決めているのか。SBERT 論文は、手を加えない BERT について結論でこう書きます。
We showed that BERT out-of-the-box maps sentences to a vector space that is rather unsuitable to be used with common similarity measures like cosine-similarity.
同じ網の構造でも、訓練を加えなければ近さに使えない、という主張です。同じ論文は Hill らの結果として the task on which sentence embeddings are trained significantly impacts their quality とも紹介しています。
all-MiniLM-L6-v2 の訓練目的は、カードにこう書かれています。
We use a contrastive learning objective: given a sentence from the pair, the model should predict which out of a set of randomly sampled other sentences, was actually paired with it in our dataset.
このモデルが学んだ「近い」は、データセットで対になっていたことです。 対の相手を、無作為に選んだ他の文より近くに置くように学びます。カードによれば、訓練データは複数のデータセットを合わせて10億組を超え、行数では Reddit のコメント(2015〜2018年)が最大です。ただし各データセットは重みを付けて抽出されており、カードが示す設定ファイルでは Reddit の重みは全体の約7%です。
- ・意味の近い文を近くに置く、は訓練の狙い。近いから同じ意味、はその逆向き
- ・何を対にしたかが変われば、近さの中身も変わる
否定文が、言い換えより近い
sentence-transformers 6.1.0・torch 2.14.0+cpu を Docker(python:3.12-slim、Apple Silicon の CPU)で動かし、上記リビジョンのモデルで6組を測りました(2026-09-24)。
0.798 'The deployment succeeded.' vs 'The deployment did not succeed.'0.329 'The deployment succeeded.' vs 'The release went out without problems.'0.946 'Set the timeout to 30 seconds.' vs 'Set the timeout to 300 seconds.'0.852 'Error E1234 occurs when the disk is full.' vs 'Error E5678 occurs when the disk is full.'0.530 'How do I reset my password?' vs 'How do I reset my router?'0.686 'How do I reset my password?' vs 'I forgot my login credentials, what should I do?'
1行目と2行目では、主張が逆の文(0.798)が、同じ主張の言い換え(0.329)より近く出ました。3行目の 30秒と300秒は 0.946、4行目のエラーコード違いは 0.852 です。設定値やコードが違えば、運用では別物です。
一方で5行目と6行目では、語の似た router の文(0.530)より、言い換えの credentials の文(0.686)が近く出ています。このモデルが言い換えを常に取りこぼす、とも言えません。
否定文 0.798・言い換え 0.329 という実測から言えることとして、最も適切なのはどれですか。
狙いは片向き、逆向きは測るまで分からない
埋め込みはよく「意味が近いものほど近くに配置されるよう学習される」と説明されます。これは訓練の狙いとして正しい記述です。今回の実測が示すのは、その逆向きの「近いから同じ意味」が約束されていないことです。
なぜ否定文が近いのか。カードは否定や数値の区別を訓練目的として書いていません。質問と回答、タイトルと本文のように、話題が同じでも主張が同じとは限らない組を対にしている、という読みはできます。ただしこれは教材側の解釈で、原因として確かめたものではありません。
近さの中身が訓練で変わる例は、ほかにもあります。DPR 論文は検索用の埋め込みを learned from a small number of questions and passages と書きます。そこでの「近い」は、この文章がこの質問に答える、という組です。
和文でも1組測りました。多言語モデル paraphrase-multilingual-MiniLM-L12-v2 の結果です。
0.524 デプロイは成功した。 / デプロイは成功しなかった。0.425 デプロイは成功した。 / リリースは問題なく終わった。0.917 タイムアウトを30秒にする。 / タイムアウトを300秒にする。0.914 エラーE1234はディスクが満杯のときに出る。 / エラーE5678はディスクが満杯のときに出る。
このモデルでも、この組では否定文が言い換えより近く出ました。ただし 0.524 と 0.798 を並べて「多言語モデルは否定に強い」とは読めません。値の尺度は各モデルの訓練が決めたもので、比べてよいのは同じモデルの中の大小だけです。 このカードには訓練データの記述が無く、理由も分かりません。
散らすための関数、寄せるための関数
別コース『データ構造とアルゴリズムの土台』の「平均O(1)が置いている仮定」で見たハッシュ表を思い出してください。ハッシュ表は鍵をハッシュ値でバケットに振り分け、平均 O(1) は鍵がバケットによく散らばるという仮定の上に立ちます。バケットより鍵の種類が多いので衝突は必ず起き、表はバケットの中を順に見ます。ここまでが同レッスンの要点です。
この回で1つ補足します。バケットの中を順に見るとき、ハッシュ表は鍵そのものを比べて一致を確かめます。
ハッシュの目的は散らすこと、埋め込みの目的は対を寄せることで、向きは逆です。共通点は、置かれた位置が語るのは関数の目的だけだという点です。同じバケットにあっても同じ鍵とは限らず、近くにあっても同じ意味とは限りません。
違いは、確かめる段がどこにあるかです。ハッシュ表は衝突を前提に、鍵の比較を表の中に持っています。類似度検索そのものは近い順に返すだけで、意味が同じかを比べ直す段を中に持ちません。その段は、呼ぶ側が外に書くしかありません。
ハッシュ表のバケットと、埋め込みの近さを比べたとき、違いとして適切なのはどれですか。
文の埋め込み(寄せる)
訓練で対になった文を近くに置くよう学ぶ。否定文が 0.798、言い換えが 0.329 と出ても、モデルとしては正常に動いている。意味が同じかを比べ直す段は検索の中に無い。
組 類似度成功した / 成功しなかった 0.798成功した / 問題なく出た 0.32930秒 / 300秒 0.946
ハッシュ表のハッシュ(散らす)
鍵をバケットに散らすのが目的で、衝突は必ず起きる。同じバケットに入った鍵を同じとは扱わず、バケットの中で鍵そのものを比べ直す。
片方は散らすため、片方は寄せるために作られています。それでも2つに共通する読み方の注意は何でしょうか。
「同じ場所にある」「近くにある」から、利用者が何を推論しがちかを考えてください。
この章のまとめ
- 文の埋め込みの近さは訓練が決めたもの。all-MiniLM-L6-v2 のカードは、対になっていた相手を当てる対照学習だと書く。
- 「意味が近いほど近い」は訓練の狙い。逆向きの「近いから同じ意味」は約束されていない。
- 実測(2026-09-24、1モデル・6組)では否定文 0.798・言い換え 0.329。一方で言い換えが勝つ組もあり、「否定を扱えない」とも一般化できない。
- コサイン類似度の値は同じモデルの中でだけ比べる。
- ハッシュは散らし、埋め込みは寄せる。どちらも位置は目的しか語らない。ハッシュ表は鍵を比べ直すが、類似度検索では比べ直す段を呼ぶ側が書く。
自分の現場で確かめる
読んだだけでは身につきません。手元の環境で実際に見てみてください。
理解度チェック
読んだ直後は「分かった」と感じやすいものです。実際に解いて確かめてください。
all-MiniLM-L6-v2 のモデルカードが書く訓練目的はどれですか。
用語集(3語)
- 埋め込み(embedding)ベクトル
- 文などを固定長の数値の並びに写したもの。all-MiniLM-L6-v2 は384次元。本レッスンは検索に使う文の埋め込みだけを扱う。
- コサイン類似度
- 2つのベクトルの向きの近さ。1 に近いほど同じ向き。値がどの程度の近さを表すかはモデルの訓練で決まる。
- 対照学習
- 対になった組を、無作為に選んだ他の例と区別できるように学ぶ訓練の仕方。何を対にするかで、学ばれる「近さ」が決まる。
出典(一次ソース)
- Reimers & Gurevych, Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks, arXiv:1908.10084 v1 (EMNLP 2019) ↗
- Karpukhin et al., Dense Passage Retrieval for Open-Domain Question Answering, arXiv:2004.04906 v3 (EMNLP 2020) ↗
- sentence-transformers/all-MiniLM-L6-v2 モデルカード(リビジョン 1110a243fdf4706b3f48f1d95db1a4f5529b4d41、2026-09-24 取得) ↗
- sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2 モデルカード(リビジョン e8f8c211226b894fcb81acc59f3b34ba3efd5f42、2026-09-24 取得) ↗