TL;DR: RAGで文章の類似度を分析するとき、入力データ(要約)を作るAIモデルが違うと結果まで変わってしまうのかを調べた。2記事だけの予備検証では「変わらない」という安心できる結果が出たが、実は検証していた問いそのものが本番で確かめたいものとズレていた。30記事規模で正しい問いを検証し直すと、結果は大きく違った。
「似ている」をAIがどう判定しているか
普段の「検索」の多くは、キーワードの一致を頼りにしている。「SDGs」と入力すれば、「SDGs」という文字列を含む記事が返ってくる、という仕組みだ。
この記事で扱う「ベクトル検索」は、少し違う道具立てで動いている。AIが文章をひとつずつ読み込み、その意味を数百個の数値の並び(ベクトル)に変換する。似た意味の文章同士は、使われている単語が違っても、この数値空間の中で近い位置に集まってくる。逆に同じ単語を使っていても、意味がずれていれば遠い位置になる。
たとえば「捨てていた海苔に、実は価値があった」という話と「先生の一言をきっかけに、遠い『誰か』が身近な『あの人』に変わった」という話は、単語としての共通点はほとんどない。それでも「誰かの言葉や出来事をきっかけに、見えていなかった価値に気づく」という意味では近い——ベクトル検索は、この種の"意味の近さ"を数値上の距離として捉えてくれる。
以下で「類似度」「近傍」と書いているのは、この数値空間上での距離のことだと思ってほしい。距離が近いほど、AIはその2つの文章を意味的に近いと判定している、ということになる。この記事は、その判定に使う「入力データ」を誰が作るかで、結果が揺れるのかを調べた話だ。感覚としては、キーワード検索が「同じ言葉を探す」道具だとすれば、ベクトル検索は「似た意味を探す」道具だと考えると近いかもしれない。この"意味の近さ"という感覚は、実際のデータでどこまで信用できるのだろうか。
RAG(検索拡張生成)の検索部分——文章群をベクトル化して、似ている記事同士を探す仕組みを作っていたときのことだ。生成まではしていないので、正確には「ベクトル検索」と呼ぶべきだが、本番の30記事分析で使っていたサービス(さくらインターネットのAIエンジンが提供する文書RAG API、内部の埋め込みモデルはmultilingual-e5-large)自体が「RAG」を名乗る製品だったので、ここでも便宜上そう呼ぶ。ただし後述する2記事の予備検証だけは、ローカルの埋め込みモデルintfloat/multilingual-e5-smallを使っており、本番とは経路が異なる。この文章では「RAG」という言葉を文書RAG APIを使った本番分析に限定して使い、予備検証はローカルの「ベクトル検索」と呼び分けることにする。
ふと気になったことがあった。この要約、誰が書いたかによって結果は変わらないのだろうか。
もし要約者のAIが違うだけで「似ている記事」の判定が変わってしまうなら、それはRAGが文章の中身を見ているのではなく、要約者の言葉選びの癖を見ているだけかもしれない。
2記事で試したら、安心できる結果が出た
まず手始めに、2本の記事で試してみた。それぞれを2種類のAI——さくらインターネットのAIエンジン経由で動くKimi-K2.6と、この分析・執筆自体を担当しているClaude Opus 4.8——で独立に要約し、ベクトル化はローカルの埋め込みモデルintfloat/multilingual-e5-small(384次元)で行って比較する。
結果は、同じ記事から作った2つの要約同士が、驚くほど近い位置にベクトル化された。類似度で0.937と0.959(いずれもローカルのmultilingual-e5-smallで算出)。違う記事同士の類似度が0.85前後だったことを考えると、十分すぎるくらいの一致だった。
これで安心して先に進めるはずだった。「要約者が違っても、RAGはちゃんと中身を見ている」——そう結論づけて、30記事の本番分析に取りかかった。
本番でやるべきだったのは、別の問いだった
30記事すべてを2種類のAIでそれぞれ要約し、RAGで相関分析にかけた。ここで初めて気づいた。
2記事の予備検証で確かめていたのは、「同じ記事から作った2つの要約は互いに近いか」という問いだった。これは当然、近くなる。同じ内容を言い換えているだけなのだから。
でも本当に確かめたかったのは違う問いだった。「ある記事にとって"似ている他の記事"は何か、という判定が、要約者AIによって変わるかどうか」——これは全く別の検証だ。
30記事で改めて集計してみると、結果はまるで違っていた。各記事の近傍(似ている記事、上位2件)が、要約者AIによってどれだけ一致するか。
| 一致した近傍記事の数 | 記事数(30記事中) |
|---|---|
| 2件とも一致 | 1本 |
| 1件一致 | 12本 |
| 1件も一致せず | 17本 |
平均一致率はわずか0.47/2、比率にして2割強にとどまった。30記事中17記事は完全に不一致で、2件とも一致したのはたった1本だけだった(候補が29本しかない中での「上位2件」なので、僅差の順位入れ替わりも混じっている可能性はある)。なお、この不一致が「Claude/Kimiというモデルの違い」によるものなのか、「同じモデルでも要約を作り直せば表現は毎回変わる」という、モデルに関係なく起きる揺れなのかは、今回の検証だけでは切り分けられない。同じモデルで要約を複数回作り直して比較する対照実験までは行っていないため、ここでは「入力データが変われば結果も変わりうる」という広めの言い方にとどめておくのが正確だろう。
2記事の予備検証が示していた「安心できる結果」は、本番で確かめたかった問いには直接答えていなかった、というのが正確なところだと思う。「見当違い」というと言い過ぎで、「同じ記事を別のAIが要約したときの表現の近さ」という、それ自体は意味のある問いに答えてはいたのだから。
それでも一致した、稀な例
まったく一致しなかったわけではない。30記事のうち1本だけ、要約者AIが違っても近傍リストが完全に一致した記事があった。
その記事は「捨てていたと思っていたものに、実は価値があった」という、他にも複数の記事が共有していた強いモチーフを持つ作品だった(シリーズの別記事でも、この反転構造のパターンを代表する例のひとつとして紹介している)。テーマ的なまとまりが強い記事群では、要約者の言葉選びが違っても、RAGは同じ相関を検出できた——という仮説が、この1件からは浮かぶ。
裏を返せば、テーマの結びつきが弱い(あるいは表面的には似ているが芯が違う)記事同士では、要約者AIの語彙選択が結果を左右しやすいのかもしれない。ただし、これは事後的に見つかった1組の一致から立てた仮説にすぎず、原因を切り分けられたわけではない。
小さな検証は、何を確かめているのか
この一件から持ち帰った教訓は、「RAGの結果はAIの選択に左右されうる」という結論そのものより、もう一段手前にある。
小規模な予備検証で良い結果が出たとき、それは「うまくいく」ことの証拠なのか、それとも「別の、より簡単な問いに答えている」だけなのか。この見分けがつかないまま、良い数字だけを見て安心してしまうことがある。
同じ規模の検証を、もっとテーマの多様な文章群に対して行ったら、要約者AI依存性はどう変わるのだろうか。
本記事はさくらインターネット「さくらのAI Engine 3,000リクエスト使い切りチャレンジ」への参加作品です。分析対象は文藝春秋×note「#未来のためにできること」エッセイコンテストの公開受賞作。本記事のRAG(文書検索)部分は、さくらのAI Engineの文書RAG API(キャンペーン詳細)を利用しています。
気になった方は、リンク先の元記事もあわせて読んでみると面白いかもしれない。







