RAG・検索基盤

クエリ拡張とは|言い換えの問いでは40.0%が53.3%に、元の語の問いでは1ポイントも動かなかった

クエリ拡張とは何をする処理なのか広げると必ず良くなるのかどの問いに効くのか

検索が当たらないとき、問いのほうに語を足して広げるという手があります。「ホテル代」と聞かれたら「宿泊費」も足して検索する形です。

実際に測ったところ、言い換えで聞いた問いでは40.0%が53.3%に上がりました。ところが元の語で聞いた問いでは1ポイントも動きません

この記事の要点

  • 言い換えの問いでは適合率が40.0%から53.3%
  • 元の語の問いでは46.7%のまま変わらない
  • 再現率は70.0%から90.0%と大きく動く
  • 効くのは語が一致していない問いだけ

言い換えの問いでは40.0%が53.3%に、元の語の問いでは1ポイントも動かなかった

2種類の問いで実際に測りました。言い換えの問いでは13.3ポイント上がり、元の語の問いでは変わりません。

クエリ拡張がどの問いに効くのかを、実際に広げて測りました。用意したのは元の語で聞いた問い5件と、言い換えで聞いた問い5件です。

広げる処理も検索も本当に実行しています。足す語は同義語の辞書から取っており、そこを変えれば結果も変わります。

javascript
const widen = (qs) => {
  let out = qs;
  for (const [base, alts] of Object.entries(SYNONYM)) {
    if (qs.includes(base)) out += alts.join('');
    for (const a of alts) if (qs.includes(a)) out += base + alts.filter((x) => x !== a).join('');
  }
  return out;
};
text
元の語で聞いた場合(問い 5件)

問い                    そのまま  広げてから  広げた語数
宿泊費の上限は                      67%         67%          11文字
日帰りの日当                       67%         67%           4文字
前払の申請期限                      33%         33%           6文字
備品の購入                        33%         33%           5文字
報告書の提出期限                     33%         33%           7文字

  適合率@3 46.7% → 46.7%   再現率@3 90.0% → 90.0%

言い換えで聞いた場合(問い 5件)

問い                    そのまま  広げてから  広げた語数
ホテル代の限度額                     33%         67%           9文字
出張手当は日帰りだと                   67%         67%           2文字
仮払の申請                        67%         67%           6文字
消耗品の購入                       33%         33%           4文字
レポートの提出期限                     0%         33%           6文字

  適合率@3 40.0% → 53.3%   再現率@3 70.0% → 90.0%

上の表は全行が同じです。語を11文字ぶん足しても、67%が67%のまま。効果がありません。

すでに当たっている問いには効かない

理由は単純で、もともと語が一致しているからです。「宿泊費の上限は」という問いは、文書中の「宿泊費」にそのまま当たります。

そこに「ホテル代」「宿代」を足しても、文書側にその語はありません。足した語は空振りするだけで、順位は変わりません。

当たっていない問いで効く

下の表では2行が動きました。「ホテル代の限度額」が33%から67%、「レポートの提出期限」が0%から33%です。

どちらも、文書中の語と違う言葉で聞かれていた問いです。「レポート」に「報告書」を足したことで、初めて当たるようになりました

再現率のほうが大きく動く

指標によって動き方が違う点も見ておいてください。適合率は13.3ポイント、再現率は20.0ポイント動いています。

広げると当たる文書が増えるので、取りこぼしはまず減ります。ところが上位3件の枠は限られているので、適合率のほうは伸びが小さくなります。指標の違いはnDCGの記事で扱っています。

すでに当たっている問いに語を足しても、空振りするだけ。

単位: %元の語・そのまま46.7%元の語・広げてから46.7%言い換え・そのまま40%言い換え・広げてから53.3%問い5件ずつでの実測。再現率は言い換えの問いで70.0%から90.0%まで動いた。
図1 ── 問いの種類ごとの、広げる前後の適合率
出典Docs by LangChain「Retrieval」2026-08-18 確認
Retrieval allows LLMs to access relevant context at runtime.
原文Docs by LangChain「Retrieval」 この内容の有効期限2027-02-18

クエリ拡張とは何をする処理なのか

検索する前に、問いへ語を足して広げます。文書を変えずに、当たる範囲を広げる手立てです。

クエリ拡張は、検索する前に問いのほうへ語を足す処理です。文書側には手を入れません。

手を入れる場所

同じ問題を解く手立ては複数あります。文書側を広げるか、問い側を広げるか、当たり方そのものを変えるかです。

クエリ拡張は真ん中です。文書を作り直さずに済むので、すでに大量の文書を入れてある構成でも後から足せます。

足すもの

  1. 同義語や言い換え。辞書から取る。この記事の方法
  2. AIに作らせた言い換え。辞書に無い語も出せる
  3. 関連する語。文書の中で近くに出る語
  4. 問いと関係のない語。当たる範囲が広がりすぎる

2番目は辞書を書かずに済みますが、1回の検索ごとにAIの呼び出しが増えます。応答時間と費用に効きます。

検索の先にあるもの

この処理が効いてくるのは、検索の結果をAIに渡す構成です。LangChainも、実際の用途の多くは検索と生成を組み合わせ、根拠のある文脈に沿った答えを作る方向に進むとしています。

検索が当たらなければ、渡す文書もありません。答えの質は、その手前で決まっています

余談 0件だった問いから始める

測ってみて実際的だったのは、検索して0件だった問いを集めて、そこだけで測ることでした。前の節でも、動いたのは0%だった問いです。全体の平均で測ると、効いた分が薄まって見えます。

出典Docs by LangChain「Retrieval」2026-08-18 確認
But most real-world applications go one step further: they integrate retrieval with generation to produce grounded, context-aware answers.
原文Docs by LangChain「Retrieval」 この内容の有効期限2027-02-18

クエリ拡張でやりすぎたときに起きること

関係のない文書が上位に来ます。足した語が別の文脈で使われていると、そちらに引っ張られます。

クエリ拡張は語を足す処理なので、足しすぎれば当たる範囲も広がりすぎます

足した語が別の文脈で当たる

「精算」に「清算」を足すと、会社の清算について書かれた文書も当たります。同じ字でも意味が違う場面です。

前の節の計測でも、広げた語数と効果は比例していません。11文字足しても効果0、6文字足して0%から33%という結果でした。

検索そのものも重くなる

問いが長くなると、照合する語も増えます。語の数だけ索引を引くことになるので、応答時間に効きます。

AIに言い換えを作らせる方式では、さらに1回の呼び出しが加わります。検索の前段が重くなるという形です。

使うかどうかの判断

判断は前の節の表から出ます。元の語で聞かれているなら、広げても得るものがありません

実際の問いを集めて、文書中の語と一致しているかを見てください。一致していない問いが多いなら効きます。同じ問題への別の手立てはハイブリッド検索の記事で扱っています。

語を足すほど効くわけではない。当たっていない問いにだけ効く。

充足 2 / 4当たっていない問いを特定してある元の語で聞かれている問いでは、11文字足しても1ポイントも動かなかった広げる前後を同じ問いで測ってある言い換えの問いだけで測ると13.3ポイントの差が見えた全部の問いに一律で適用している効かない問いにも語が足され、検索が重くなるだけになる足す語の意味の重なりを見ていない「精算」に「清算」を足すと、会社の清算の文書まで当たる問い5件ずつでの実測にもとづく。言い換えの問いでは再現率も70.0%から90.0%へ動いた。
図2 ── クエリ拡張を入れるときの点検項目
出典Docs by LangChain「Retrieval」2026-08-18 確認
A knowledge base is a repository of documents or structured data used during retrieval.
原文Docs by LangChain「Retrieval」 この内容の有効期限2027-02-18

よくある質問

なぜ元の語では効かないのですか
すでに語が一致しているためです。足した語は文書中の別の語と当たるだけで、順位を変えません。この計測では1ポイントも動きませんでした。
適合率より再現率のほうが動くのはなぜですか
広げると当たる文書が増えるためです。取りこぼしが減るので再現率は上がりますが、上位3件の顔ぶれは全部が入れ替わるわけではありません。
何を足せばよいですか
同義語や言い換えです。この計測では辞書を使いました。AIに言い換えを作らせる方法もあります。
広げすぎるとどうなりますか
関係のない文書まで当たるようになります。足した語が別の文脈で使われている場合、その文書が上位に来ます。

まとめ

  • クエリ拡張は検索の前に問いへ語を足す処理
  • 言い換えの問いでは40.0%から53.3%
  • 元の語の問いでは46.7%のまま
  • 効くかどうかは問いの性質で決まる

今日から始められること

  1. 実際に入力された語を集める
  2. 文書中の語と一致しているものと、していないものに分ける
  3. 一致していない問いだけで、広げる前後を測る
  4. 動かないなら、別の手立てを検討する

実務で組んだクエリ拡張のワークフローには、値段が付きます

同じ課題を持つ会社にとって、動いている設定は「作る時間」を買えるということです。ServiceDockは自作のワークフローやテンプレートを出品できるマーケットプレイスです。手数料や出品の流れは出品者向けページにまとまっています。

出品の仕組みを見る