HyDEとは?関連ラベルなしで検索精度を上げる仮想文書ベース検索の仕組みと使い道

HyDEは、質問からまず“答えらしき文書”を生成し、その文書をベクトル化して検索することで、学習データなしでも密ベクトル検索を強くする技術です。ゼロショット検索がなぜ難しいのか、HyDEがどう解くのか、RAGや社内検索にどう応用できるのかを解説します。

参考文献

Precise Zero-Shot Dense Retrieval without Relevance Labels

Luyu Gao, Xueguang Ma, Jimmy Lin, Jamie Callan

論文を見る

今回の論文

今回取り上げるのは、Luyu Gao、Xueguang Ma、Jimmy Lin、Jamie Callan による論文「Precise Zero-Shot Dense Retrieval without Relevance Labels」です。公開元は arXiv、研究分野は情報検索、Dense Retrieval、RAG の前段となる検索基盤です。URL は https://doi.org/10.48550/arXiv.2212.10496 です。

この論文を選んだ理由は、検索評価データがない状態でも、かなり実用的な検索改善を実現しているからです。社内検索や RAG では、最初から十分なクリックログや正解ラベルを持っていないことが多いです。HyDE はその「データがない初期状態」を前提にしており、今でもプロダクト開発のヒントが多い技術です。

どんな技術か

HyDE は、ユーザーの質問をそのまま検索ベクトルに変えるのではなく、まず「その質問に答えていそうな仮想文書」を LLM に書かせ、その仮想文書をベクトル化して検索する技術です。

名前の HyDE は Hypothetical Document Embeddings の略です。ポイントは、検索クエリを直接ベクトル化する代わりに、関連文書っぽい文章を一度経由することです。これによって、クエリの短さや曖昧さを補いながら、文書同士の近さに強い dense retriever をうまく使えるようにしています。

RAG 文脈で見ると、HyDE は「何を取ってくるか」を改善する技術です。生成モデルの回答品質を上げるというより、RAG や検索エージェントの入口にある retrieval を、学習なしで強化する発想だと考えるとわかりやすいです。

課題

HyDE が解決しようとしているのは、関連ラベルなしで dense retrieval を強くすることです。

何が難しいのかというと、dense retrieval は本来、質問と文書を同じ埋め込み空間に写し、その内積が「関連性」を表すように学習する必要があるからです。ところが、その関連性を学習するには、どの質問にどの文書が正解かという relevance label が必要になります。実務ではこのラベルが最初から揃っていることは稀です。

既存の方法にも限界があります。BM25 のような語彙ベース検索は強力ですが、言い換えや意味的な近さを拾いにくいです。一方で、学習済み dense retriever をそのままゼロショットで使うと、質問側の表現がタスクやドメインに合わず、文書との対応付けがうまくいかないことがあります。特に短い質問や、専門用語の言い換えが多い環境では不利です。

なぜこの課題を解く必要があるかというと、AI システムの多くは「まず検索が当たること」が前提だからです。RAG、社内ナレッジ検索、FAQ、調査エージェント、業務支援ボットは、どれも検索精度が低いと後段の LLM がうまく働きません。つまり、生成モデルを強くする前に、検索の cold start 問題をどう超えるかが重要になります。

実際の AI システムでは、新規事業の初期プロトタイプ、社内データ検索、専門分野の文書探索、多言語検索などで特に問題になります。正解ログが少ない段階で検索を改善したい場面は多く、HyDE はそのギャップを埋める技術です。

用語解説

Dense Retrieval
質問と文書をベクトル化し、ベクトルの近さで関連文書を探す検索方式です。HyDE はこの dense retrieval 自体を置き換えるのではなく、質問ベクトルの作り方を変えることで性能を押し上げます。
Relevance Label
どの質問にどの文書が正解かを示す教師データです。HyDE の重要性は、このラベルがなくても検索を改善しようとしている点にあります。
Contrastive Encoder
意味が近い文書同士を近いベクトルに写すよう学習されたエンコーダです。HyDE では Contriever や mContriever が使われ、仮想文書を実文書空間へ“接地”する役割を担います。
Instruction-Following LLM
指示文に従って文章生成できる LLM です。HyDE では「この質問に答える文章を書いてください」といった指示で仮想文書を作り、検索のための中間表現として使います。
MIPS(Maximum Inner Product Search)
ベクトルとの内積が大きい文書を高速に探す検索手法です。HyDE は特殊な検索基盤を必要とせず、通常の dense retrieval インデックスにそのまま載せやすい点が実装上の利点です。

技術の仕組み

HyDE の面白さは、検索モデルを追加学習せずに、検索の入口だけを作り替えているところです。クエリ理解を LLM に寄せ、近傍探索は contrastive encoder に任せる分業が中核になります。

基本アイデア

通常の dense retrieval では、質問を query encoder でベクトル化し、文書ベクトルとの類似度を計算します。しかしゼロショットでは、この query encoder が新しいタスクや文脈にうまく適応できないことがあります。

HyDE はここで発想を変えます。質問を直接ベクトル化する代わりに、まず LLM に「この質問に答える段落を書いてください」と指示し、関連文書らしい仮想テキストを生成します。次に、その仮想テキストを文書用 encoder でベクトル化し、そのベクトルを使って実文書を検索します。

要するに、質問をいきなり検索空間へ入れるのではなく、一度「文書っぽい形」に変換してから検索するわけです。

なぜ仮想文書を経由すると効くのか

論文の見方では、関連性のモデリングを dense retriever に全部背負わせるのが難しいなら、その一部を生成モデルに肩代わりさせればよい、という考え方です。

LLM は質問を見て、それに答えていそうな語彙、説明の流れ、話題の周辺文脈を含む文章を生成できます。生成された内容には事実誤りが混ざる可能性がありますが、HyDE はその文章をそのまま答えとして使いません。あくまで検索ベクトルを作るための中間素材として使います。

ここで contrastive encoder が重要です。論文では、エンコーダが一種の lossy compressor として働き、仮想文書に含まれる余計な細部や hallucination をベクトル化の過程で落としつつ、関連性の方向だけを残せると考えています。これが、仮想文書を実際の文書検索に使える理由です。

モデル構成

HyDE の構成要素は大きく 2 つです。

1. Instruction-following LLM

論文では InstructGPT 系の text-davinci-003 を使い、質問ごとに仮想文書を生成しています。データセットごとに指示文も少し変えており、たとえば通常の質問なら「質問に答える文章を書いてください」、科学文献検索なら「質問に答える scientific paper passage を書いてください」といった形です。

この工夫は地味ですが重要です。HyDE は単に長文化しているのではなく、「検索対象の文書らしい文体」に寄せています。RAG でも、FAQ を探すのか、規約を探すのか、論文を探すのかでクエリ変換の書き方を変える価値があるとわかります。

2. Contrastive Document Encoder

論文では英語タスクに Contriever、多言語タスクに mContriever を使っています。どちらも教師あり relevance label に依存しない contrastive learning ベースの encoder です。

ポイントは、HyDE が query encoder と document encoder の両方を学習し直さないことです。文書側の意味空間は既存の unsupervised encoder に任せ、質問側だけを「仮想文書」という文書形式へ変換して同じ空間に入れています。

学習方法

HyDE 自体は追加学習を必要としません。論文でも、HyDE のために新しくモデルを訓練したり fine-tune したりしていません。使うのは、既存の instruction-following LLM と、既存の contrastive encoder です。

この性質は実務でかなり大きいです。検索評価データの収集や hard negative mining をしなくても、とりあえず試せるからです。特に PoC 段階では、学習パイプラインを持ち込まずに retrieval を改善できる可能性があります。

推論方法

推論時の流れは比較的シンプルです。

  1. ユーザーの質問を受け取る
  2. LLM に質問を渡し、関連文書らしい仮想文書を生成する
  3. その仮想文書を document encoder でベクトル化する
  4. 事前に埋め込んでおいた文書コーパスに対して近傍探索する
  5. 類似度の高い実文書を返す

ここで重要なのは、最終的に返すのは仮想文書ではなく実文書だという点です。仮想文書は検索の足場にすぎません。RAG で使うなら、その後は通常どおり取得文書を LLM に渡して回答生成へ進めます。

データの扱い方と実装上の工夫

論文では、データセットごとにプロンプトを少し変えています。たとえば TREC-COVID では科学論文風、FiQA では金融記事風、Mr.TyDi では対象言語で詳細に書かせるようにしています。これは、検索対象の文書分布に合わせて仮想文書の形を寄せる工夫です。

この設計から得られる実装上の示唆は明確です。クエリ変換は一律でなく、検索対象の文書タイプに合わせるべきです。社内仕様書を探すなら仕様書っぽく、サポート記事を探すならヘルプ記事っぽく、コード断片を探すなら API 説明っぽく生成させたほうがよい可能性があります。

実験と結果

論文では、HyDE が本当にゼロショット検索を改善するのかを、Web 検索、低リソース検索、多言語検索で検証しています。単一ベンチマークだけではなく、かなり広い条件で見ているのが特徴です。

何を検証したのか

主な検証ポイントは 3 つです。1 つ目は、関連ラベルなしの検索で baseline より良くなるかです。2 つ目は、BM25 や Contriever と比べてどれだけ改善するかです。3 つ目は、巨大 LLM を使う意義や、fine-tuned encoder と組み合わせたときの挙動です。

どんなデータセットや評価指標を使ったのか

Web 検索では TREC DL19 と DL20 を使い、mapnDCG@10recall@1k を見ています。低リソース検索では BEIR の SciFact、ArguAna、TREC-COVID、FiQA、DBPedia、TREC-NEWS を使い、nDCG@10Recall@100 を評価しています。多言語検索では Mr.Tydi の Swahili、Korean、Japanese、Bengali を使い、MRR@100 を比較しています。

この構成は実務的にも意味があります。単なる QA ではなく、Web、論文、金融、ニュース、多言語まで含むので、HyDE が「特定タスク専用の裏技」ではないことが見えます。

Web 検索での結果

TREC DL19 では、関連ラベルなしの条件で HyDE は map 41.8nDCG@10 61.3recall@1k 88.0 でした。Contriever はそれぞれ 24.044.574.6 なので、大きく改善しています。BM25 の map 30.1nDCG@10 50.6 も上回っています。

DL20 でも同様で、HyDE は map 38.2nDCG@10 57.9recall@1k 84.4 を出し、Contriever の 24.042.175.4 を大きく超えています。

ここから言えるのは、HyDE は「教師なし dense retrieval を少し改善する」程度ではなく、ゼロショット条件で lexical search や素の dense retriever をかなり押し上げることです。

BEIR の低リソース検索での結果

BEIR の 6 タスクでも HyDE は一貫して強く、たとえば SciFact では nDCG@10 が Contriever の 64.9 から 69.1 に、ArguAna では 37.9 から 46.6 に、DBPedia では 29.2 から 36.8 に上がっています。TREC-NEWS でも 34.8 から 44.0 に改善しています。

TREC-COVID では BM25 にわずかに届かないものの、Contriever 単体の 27.3 から HyDE は 59.3 まで伸びています。つまり、専門分野で dense retriever が素直に弱いケースでも、仮想文書を挟むことでかなり改善できることがわかります。

多言語検索での結果

Mr.Tydi では、mContriever に対して HyDE が多くの言語で改善しています。たとえば日本語では MRR@10019.5 から 30.7 に上がっています。韓国語でも 22.3 から 30.6 へ改善しています。

一方で、MS MARCO で fine-tune された多言語 mContriever には届かないケースもあります。つまり、HyDE は多言語でも有効ですが、事前学習や instruction tuning が弱い言語では限界が残る、というのが論文の結論です。

追加分析からわかること

論文では、仮想文書を生成する LLM を変えた比較も行っています。FLAN-T5 XXL や Cohere の command 系でも改善は出ますが、より大きく強い instruction-following LLM のほうが HyDE の性能は上がる傾向がありました。

この結果は実務でも重要です。HyDE は「どの LLM でも同じ」ではなく、クエリをどれだけ自然に関連文書らしい形へ展開できるかに依存します。つまり、クエリ変換の質が retrieval を左右します。

何に使える?

HyDE は、検索ラベルがない状態で retrieval を強化したい場面に広く使えます。特に、RAG や検索エージェントの初期精度を早く底上げしたいときに相性がよいです。

社内検索やナレッジ検索の立ち上げ

社内文書検索は、最初から十分なクリックログがあるとは限りません。HyDE を使えば、fine-tuning 用の教師データがなくても、質問を仕様書や手順書らしい文に変換して検索できます。これにより、初期段階の「検索が全然当たらない」を軽減しやすいです。

RAG の retrieval 強化

RAG の失敗は、生成より前の retrieval miss に起因することが多いです。HyDE はまさにその前段を改善する技術なので、既存の RAG パイプラインに query transformation として差し込みやすいです。とくに、質問が短い、曖昧、言い換えが多い業務ドメインで効きやすいです。

多言語 FAQ やグローバル検索

論文では日本語や韓国語、Swahili でも改善が出ています。多言語のヘルプセンターや海外向けドキュメント検索では、言語ごとの学習データが揃わないことが多いので、HyDE のようなゼロショット手法は導入しやすいです。

検索エージェントのクエリ拡張

エージェントが検索ツールを使う場合、最初の検索クエリが短すぎて外すことがよくあります。HyDE 的に「先に関連文書風の下書きを作る」処理を挟めば、検索 API に投げるクエリや埋め込み検索の入力をより情報量の多いものへ変えられます。これは論文の仕組みをエージェント設計へ引き寄せた応用案です。

開発や事業へのヒント

HyDE の価値は、検索改善を「学習データが揃ってからやること」にしない点です。AI プロダクトの初期段階でも試せる改善手段として見ておくと、かなり使い道があります。

冷スタートの RAG を改善する発想

自分で AI アプリを作るなら、最初から retrieval 学習基盤を持てるとは限りません。HyDE は、クエリを文書っぽく変換するだけで改善が見込めるので、PoC や初期版の品質向上策として現実的です。特に、問い合わせ検索、社内規程検索、調査アシスタントで試しやすいです。

クエリを“検索対象に合う文体”へ変換する

論文で効いているのは、単なる長文化ではなく、文書タイプに合わせた生成です。これは既存サービスの改善にも使えます。たとえば API ドキュメント検索なら API リファレンス風、法務文書検索なら規約風にクエリを展開する、といった設計が考えられます。

小規模プロダクトでも導入しやすい

HyDE は retriever 自体の再学習を前提にしないので、小規模チームでも導入しやすいです。既存の埋め込み基盤があれば、前段に LLM ベースの query transformation を足すだけで比較実験できます。これは開発コストに対してリターンが大きい部分です。

将来の差別化は“検索制御”に出やすい

今後は、単純な埋め込み検索だけで差がつきにくくなります。そのときに効いてくるのが、HyDE のような query transformation、再検索、再ランキング、文書圧縮といった検索制御の層です。RAG SaaS や社内検索製品では、この周辺ロジックが実際の競争力になりやすいです。

限界

HyDE にも注意点はあります。まず、推論時に LLM で仮想文書を生成するので、通常の dense retrieval よりレイテンシとコストが増えます。高頻度検索や低遅延が必須の環境では、そのまま入れると重い可能性があります。

また、生成プロンプトへの依存も大きいです。論文でも、FiQA や DBPedia で fine-tuned な手法に届かない場面があり、指示文の作り方が性能差の一因だと示唆されています。つまり、HyDE は万能ではなく、検索対象に合った instruction 設計が必要です。

曖昧な質問にも限界があります。論文では、質問がほぼ単峰的であることを前提に期待値的な扱いをしていますが、複数意図を持つクエリでは仮想文書が一方向に寄りすぎるかもしれません。多義語や複数条件を含む問い合わせでは追加工夫が必要そうです。ここは論文の前提から見た推測です。

さらに、多言語では改善しても、十分に学習された supervised モデルに常に勝てるわけではありません。対象言語での instruction tuning や encoder のカバレッジが弱いと、伸び幅に上限があります。

実運用では、生成した仮想文書そのものをユーザーへ見せない設計も大事です。HyDE は検索用の中間表現としては有効ですが、事実誤りを含む可能性があるため、その文章を回答として流用すると危険です。

よくある質問

Q. HyDE は RAG そのものですか?

A. いいえ、HyDE は主に retrieval を改善する技術です。RAG の中では、文書を探す前段に入る部品だと考えるとわかりやすいです。取得した文書を使って回答生成する部分は別です。

Q. なぜ仮想文書が間違っていても検索に役立つのですか?

A. HyDE では、仮想文書をそのまま正解として使わず、contrastive encoder に通して検索ベクトルへ変換します。論文の考え方では、このベクトル化が余計な細部を落とし、関連性の方向だけを残すため、多少の hallucination があっても実文書探索に使えるとされています。

Q. BM25 が強い環境でも HyDE を使う価値はありますか?

A. あります。論文でも一部データセットでは BM25 が強いですが、HyDE は dense retrieval の弱点を補う形で大きな改善を出しています。実務では BM25 と HyDE ベースの dense retrieval をハイブリッドにして、後段で rerank する構成が有力です。

Q. 小さなモデルでも HyDE は使えますか?

A. 使えますが、性能は落ちる可能性があります。論文では、より強い instruction-following LLM のほうが良い結果を出していました。コストを下げるために小型モデルへ置き換える場合は、精度とのトレードオフを評価したほうがよいです。

Q. まずどんなサービスで試すのがよいですか?

A. 正解ラベルが少ないのに検索品質が重要なサービスです。たとえば社内ナレッジ検索、問い合わせ対応の RAG、専門文書検索、エージェントの検索ツール前処理などが試しやすいです。既存の retrieval miss が目立つなら、HyDE の導入効果を測りやすいです。

今日の学び

この論文は、関連ラベルがない状態で dense retrieval をどう強くするか、という課題を扱いました。そこに対して、質問から仮想文書を生成し、その文書を contrastive encoder で埋め込んで実文書を探す HyDE という構成で解こうとしました。

ここから得られるヒントは、検索改善は必ずしも retriever の再学習から始めなくてよいということです。クエリを検索対象に合う文書表現へ変換するだけでも、RAG、社内検索、多言語検索、検索エージェントの精度を押し上げられる可能性があります。

関連記事

RAG・検索

ColPaliとは?PDFを画像のまま検索できる視覚RAGの仕組みと使い道

ColPaliは、PDFをOCRでテキスト化してから検索するのではなく、ページ画像をそのまま埋め込み検索する文書検索技術です。図表やレイアウトを含む文書検索でなぜ強いのか、仕組み、評価結果、RAGへの使い道まで日本語で解説します。

参照論文:ColPali: Efficient Document Retrieval with Vision Language Models

RAG・検索

Late Chunkingとは?RAGの文脈切れを減らす埋め込み分割の仕組みと使い道

Late Chunkingは、文書を先に小さく分割するのではなく、全文を一度エンコードしてからチャンク単位に埋め込みを作る手法です。RAGや検索で起きやすい文脈切れをなぜ減らせるのか、仕組み、評価結果、実務での使い道まで日本語で解説します。

参照論文:Late Chunking: Contextual Chunk Embeddings Using Long-Context Embedding Models

RAG・検索

Matryoshka Representation Learningとは?1つの埋め込みを用途ごとに縮めて使える多粒度表現学習の仕組みと使い道

Matryoshka Representation Learningは、1本の埋め込みベクトルの先頭側に重要情報を詰め込み、短い次元でも長い次元でも使えるようにする学習手法です。なぜ固定長埋め込みが非効率なのか、どうやって多粒度表現を作るのか、検索やRAGでどう活かせるのかを解説します。

参照論文:Matryoshka Representation Learning