RAG・検索基盤

HyDEとは|仮の答えで探すと0.984、外すと0.139まで落ちた

HyDEとはどういう手法か問いで探すのと何が違うのか仮の答えが外れたらどうなるのか

検索する文字列を、問いから生成AIに書かせた仮の答えに置き換える手法があります。答えの中身が正しいかは問いません。

実際に測ったところ、nDCGは0.542から0.984に上がりました。ただし仮の答えを外した場合は0.139まで落ちます。

この記事の要点

  • 仮の答えで探すと nDCG が0.542から0.984
  • 再現率@3は1.000で全問正解を拾えた
  • 仮の答えを外すと0.139まで落ちる
  • 検索に使う文字数は7.6字から35.0字

仮の答えで探すと0.984、外すと0.139まで落ちた

問いをそのまま使う場合と、仮の答えに置き換える場合を測りました。当たれば大きく上がり、外すと大きく落ちます。

HyDEで検索する文字列を差し替えると成績がどう動くのかを、実際に走らせて測りました。使ったのは社内規程を模した文書13件と、語が食い違う問い5件です。

仮の答えは文書の中身を見ずに、その分野で書かれていそうな文章として用意しました。生成AIに書かせる部分を手で置いた形です。外した場合の比較用も別に用意しています。

javascript
const modes = [
  ['問いをそのまま', (q) => q],
  ['仮の答え', (q) => HYPO[q]],
  ['問い+仮の答え', (q) => `${q}${HYPO[q]}`],
  ['外した仮の答え', (q) => WRONG[q]],
];
for (const [label, make] of modes) {
  for (const { q, rel } of ALT_QUERIES) {
    const ids = bm25(make(q)).map((x) => x.i);
    p += precisionAt(ids, rel, K); r += recallAt(ids, rel, K); g += ndcgAt(ids, rel, K);
  }
}
text
探すのに使った文字列        適合率@3  再現率@3   nDCG@3
問いをそのまま                      0.400     0.700    0.542
仮の答え                         0.600     1.000    0.984
問い+仮の答え                      0.600     1.000    0.984
外した仮の答え                      0.133     0.200    0.139

問い                        問いのまま  仮の答え  外した仮の答え
ホテル代の限度額                         1 / 2     2 / 2          0 / 2
出張手当は日帰りだと                       2 / 2     2 / 2          0 / 2
仮払の申請                            2 / 2     2 / 2          1 / 2
消耗品の購入                           1 / 1     1 / 1          0 / 1
レポートの提出期限                        0 / 2     2 / 2          1 / 2

上の表を見てください。仮の答えに置き換えるとnDCGが0.542から0.984になりました。再現率@3は1.000で、正解をすべて上位3件に拾えています。

問いを足しても変わらない

3行目は問いと仮の答えを繋げたものです。結果は仮の答えだけと同じ0.984でした。

問いの部分は7.6文字、仮の答えは35.0文字です。長いほうの語が結果を決めています。この題材では、問いを残す意味はありませんでした。

外すと問いのままより悪い

最後の行が、仮の答えを取り違えた場合です。nDCGは0.139で、問いをそのまま使った0.542を大きく下回ります。

問いごとの内訳では、5件のうち3件が0件になりました。関係のない条文に引っ張られた結果です。

当たれば0.984、外せば0.139。振れ幅が大きい。

単位: %仮の答え98.4%問い+仮の答え98.4%問いをそのまま54.2%外した仮の答え13.9%問い5件・文書13件での実測。0.542などのnDCG値を百分率で示している。
図1 ── 検索に使った文字列と nDCG@3
出典Gao et al.「Precise Zero-Shot Dense Retrieval without Relevance Labels」2026-08-18 確認
The document captures relevance patterns but is unreal and may contain false details.
原文Gao et al.「Precise Zero-Shot Dense Retrieval without Relevance Labels」 この内容の有効期限2027-02-18

HyDEとはどういう手法なのか

問いに対する仮の答えを生成AIに書かせ、その文章で検索します。仮の答えが事実として正しいかは問いません。

HyDEは、問いではなく、問いに対する仮の答えで検索する手法です。仮想的な文書という意味の頭文字を取った呼び名です。

問いと文書は形が違う

問いは「ホテル代の限度額」という短い語句です。文書は「宿泊費の上限は1泊12000円とする」という文です。形が違うので語が噛み合いません

仮の答えを書かせると、出てくるのは文書に近い形の文章になります。検索の相手と同じ形にそろえるのが狙いです。

やっていること

  1. 仮の答えを書かせる。文書を渡さずに、問いだけで書かせる
  2. その文章で検索する。問いは使わなくてよい
  3. 見つかった文書を渡す。仮の答えはここで捨てる
  4. 本物の文書で答えさせる。仮の答えを答えに混ぜない

原論文も、問いを与えると、まず指示に従う言語モデルに対して例示なしで仮の文書を生成させると説明しています。手順としてはこれだけです。

中身は正しくなくてよい

同じ論文は、この文書について関連性のパターンは捉えているが実在せず、誤った細部を含みうると書いています。

金額が間違っていても構いません。語の方向さえ合っていれば検索は当たります。前の節で0.984まで上がったのも、金額ではなく語が合っていたからです。

余談 この計測での注意

仮の答えは私が書いています。その分野の言い回しを知っている状態で書いたので、実際の生成AIより有利になっている可能性があります。逆に言えば、HyDEが賭けているのはこの点です。生成AIが対象分野の言葉を知らなければ、外した場合の0.139のほうに寄ります。

出典Gao et al.「Precise Zero-Shot Dense Retrieval without Relevance Labels」2026-08-18 確認
Given a query, HyDE first zero-shot instructs an instruction-following language model (e.g. InstructGPT) to generate a hypothetical document.
原文Gao et al.「Precise Zero-Shot Dense Retrieval without Relevance Labels」 この内容の有効期限2027-02-18

HyDEを入れるときの落とし穴

仮の答えを利用者に見せてしまうことです。仮の答えは検索のための道具で、答えそのものではありません。

HyDEでいちばん危ないのは、仮の答えが利用者の目に触れることです。中身が正しい保証はありません。

仮の答えは捨てる

仮の答えは検索の入力として使ったら役目が終わります。答えを作る段には渡しません

原論文も、2つ目の段が生成された文書を実在の資料に接地させ、埋め込みの絞り込みが誤った細部を落とすとしています。落とす仕組みが入っている前提の手法です。

分野を知らないと逆効果

前の節の実測では、外した仮の答えでnDCGが0.139まで落ちました。問いをそのまま使うより悪い数字です。

社内固有の呼び名や、業界の外では通じない略語が多い文書では、生成AIが的外れな文章を書きます。その場合はHyDEを入れないほうがましです

毎回1回の呼び出しが要る

検索のたびに生成AIを呼びます。この待ち時間は利用者にそのまま乗ります。検索そのものより長くかかることもあります。

言い換えを複数作る方式との比較はマルチクエリの記事で扱っています。あちらは検索回数が増え、こちらは生成の待ち時間が増えます。

仮の答えは検索の道具。答えに混ぜない。

充足 2 / 4仮の答えを答えの生成に渡していない仮の答えは実在せず、誤った細部を含みうると原論文が明記している入れる前と後を同じ問いで測っている当たれば0.984、外せば0.139。測らないとどちらに振れたか分からない社内固有の呼び名が多い文書で使っている生成AIが語を知らないと、問いをそのまま使うより悪くなる問いと仮の答えを繋げれば安全と考えている実測では0.984で仮の答えだけと同じ。長いほうの語が結果を決めた問い5件・文書13件での実測にもとづく。検索のたびに生成AIの呼び出しが1回入る。
図2 ── HyDEを入れるときの点検項目
出典Gao et al.「Precise Zero-Shot Dense Retrieval without Relevance Labels」2026-08-18 確認
This second step ground the generated document to the actual corpus, with the encoder's dense bottleneck filtering out the incorrect details.
原文Gao et al.「Precise Zero-Shot Dense Retrieval without Relevance Labels」 この内容の有効期限2027-02-18

よくある質問

仮の答えは正しくなくてよいのですか
検索に使うだけなので、書かれている内容が正確である必要はありません。ただし語の方向が外れると成績は落ちます。
どうして問いより効くのですか
検索の相手は文書です。問いの言葉より、答えの形をした文章のほうが文書の書き方に近くなります。
外れたときはどうなりますか
この計測では nDCG が0.139まで落ちました。問いをそのまま使った0.542より下です。
問いと仮の答えを両方使えばよいのでは
測りましたが0.984で、仮の答えだけと同じでした。この題材では問いを足す効果はありませんでした。

まとめ

  • HyDEは仮の答えを書かせて、それで検索する手法
  • 当たると nDCG が0.542から0.984
  • 外すと0.139で、問いのままより悪い
  • 生成AIがその分野の言葉を知っているかに賭けている

今日から始められること

  1. 自分の問い5件で、問いのままの成績を先に測る
  2. 生成AIに仮の答えを書かせて、同じ5件を測り直す
  3. 問いごとの内訳を見て、落ちた問いがないか確認する
  4. 落ちた問いの仮の答えを読んで、語の方向が外れていないか見る

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

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

出品の仕組みを見る