Shikata Ga Nai

Private? There is no such things.

第52回:質問分解とクエリ拡張の使い分け

Hello there, ('ω')ノ

「質問したのに、うまく答えてくれない…」そんな時こそ!

RAG(検索拡張型生成)を使っていて、よくあるのがこんな状況です:

  • 質問に対して、検索結果がズレている
  • 必要な情報が検索されていない
  • AIがちゃんと答えられない…

この多くは、「質問のまま検索に使うと精度が落ちる」ことが原因です。

そんなときに威力を発揮するのが、「質問分解」と「クエリ拡張」という2つのテクニックです!


💡 そもそもこの2つ、何が違うの?

項目 質問分解 クエリ拡張
主な目的 複雑な質問を分けて理解する シンプルな質問を広げて理解する
向いている質問 複数の要素が含まれる質問 抽象的・あいまいな質問
「勤怠・休暇・出張のルールを教えて」 → 3つに分ける 「福利厚生って何がある?」→ 保険・手当・制度名などを追加
使い方 質問を細分化し、それぞれに対して検索&生成 キーワードを増やして意味的に関連した情報を引き出す

🔍 ① 質問分解:複雑な問いを“ばらして”解決!


✅ こんな質問に向いています:

  • 「〇〇と△△の違いは何ですか?」
  • 「A・B・Cについて教えてください」
  • 「〇〇の手順と注意点をまとめてください」

➡ これらは一問多答型の質問。検索時には情報がばらけて命中しにくくなります。


✏️ 分解テクニック(例)

元の質問:「有給・特別休暇・育児休暇の違いを教えてください」
分解:
- 「有給休暇とは?」
- 「特別休暇とは?」
- 「育児休暇とは?」
- 「それぞれの違いを比較する」

➡ こうすると検索ヒット率が上がり、生成結果もブレにくくなります。


🧠 ② クエリ拡張:あいまいな質問を“ふくらませて”検索!


✅ こんな質問に向いています:

  • 「〇〇について詳しく知りたい」
  • 「△△の事例はある?」
  • 「××ってどうなってるの?」

➡ 抽象的で検索エンジンやベクトルDBではうまくヒットしない場合、関連語や具体語を足して補強する必要があります。


✏️ 拡張テクニック(例)

元の質問:「福利厚生って何がある?」
拡張キーワード:「保険」「住宅手当」「時短勤務」「健康診断」「社内制度」

➡ 拡張後は、それらを含む情報をより広く・深く検索できるように!


🛠 実装の工夫(自動化する方法も!)


✅ LangChainなどでの実装ヒント

  • 質問分解ツール(Question Decomposition Tool)
    → LLMを使って質問を要素に分解 → 各要素に対して個別にRAG処理

  • クエリ拡張ツール(Query Expander Tool)
    → もとの質問に類語・関連語を追加してベクトル検索強化
    → 例:「FAQ補完語リスト」などを用意してもOK


✅ 自然に組み込むには?

  • ユーザーが1回質問したら裏で分解・拡張して複数クエリを実行する
  • 最終的な回答は統合して返す(まとめ・比較・一覧形式)

🎯 使い分けのポイントまとめ

状況 使うべき技術
複数要素が含まれる 質問分解
抽象的・ふんわりした質問 クエリ拡張
両方の傾向がある ハイブリッドで実装(分解+拡張)

✅ RAGの検索精度を“劇的に”上げたいなら…

  • 質問をどう変換して検索に使うかは、RAGの成功可否を分けるポイント
  • ユーザーの質問をそのまま突っ込むだけでは精度に限界あり
  • 質問分解とクエリ拡張を併用することで、「答えやすい質問」に再設計できる!

Best regards, (^^ゞ