2023-10-26 ML勉強会
Query Transformations
- NaiveなRAGは文書をチャンクに分割し、それらをembedして、ユーザーの質問と高い意味的類似性を持つチャンクをretrieveする
- これにはいくつか課題がある
- ドキュメントのチャンクには関連しない内容が含まれており、検索品質が低下する
- ユーザーの質問の表現が検索に適さない場合がある
- ユーザーの質問から構造化されたクエリを生成する必要がある。
- LangChainには以下のようにいくつかソリューションがある
- Multi representation indexing:検索に適した文書表現(例えば要約)の作成
- Query transformation:人間の質問を変換して検索を改善する方法
- Query construction:人間の質問を特定のクエリ構文や言語に変換する方法

- Query transformationは、ユーザーの質問をembedding modelに渡す前に行われる質問の変換処理を指す
- クエリ拡張自体は検索分野で以前から使用されてきましたが、今回の新規性は大規模言語モデル(LLMs)を使ってこれを実行できる点
- 以下、LLMを活用してQuery transformationの手法を紹介
Rewrite-Retrieve-Read
Query Rewriting for Retrieval-Augmented Large Language Models
Xinbei Ma1,2,∗, Yeyun Gong3, #, †, Pengcheng He4, #, Hai Zhao1,2,†, Nan Duan3
GPT4要約
- 背景: 大規模言語モデル(LLMs)は人間の言語処理において卓越した能力を示し、少数ショットまたはゼロショットの設定での顕著なスケーラビリティと適応性を持つが、高品質なコーパスに依存するトレーニングプロセスがあり、実世界の認識が欠けているため、幻覚や時代錯誤の問題がある。
- 既存のアプローチ: 既存の研究では、外部知識(非パラメトリック知識)と内部知識(パラメトリック知識)を組み合わせることで幻覚を軽減できることが示されている。特に、retrieve-then-readフレームワークを採用した検索拡張LLMは、LLM生成における事実性の問題を軽減する標準的な解決策とみなされている。
- 提案された新しいフレームワーク: この論文では、「Rewrite-Retrieve-Read」という新しい検索拡張フレームワークを提案している。検索エンジンをリトリーバーとして使用し、入力テキストと検索ニーズとの間のギャップを埋めるために、リトリーバーの前で入力の書き換えステップを追加する。さらに、検索クエリを改善するために、LLMのパフォーマンスを報酬として使用する強化学習によって訓練された小さな訓練可能な言語モデル(リライター)を適用する。
- 評価と結果: 提案手法は、オープンドメインQAや複数選択肢QAなどの知識集約型下流タスクで評価され、クエリの書き換えが一貫して検索拡張LLMのパフォーマンスを改善することが示された。また、小さな言語モデルがクエリ書き換えに有効であることも示された。

- この論文では、生のユーザークエリを直接使用するのではなく、大規模言語モデル(LLM)を使用してユーザークエリを書き換えている
- 実際にユーザーから投げられるクエリは常にLLMの検索に最適とは限らないため、まずLLMにクエリの書き換えを促し、その後で検索強化読解を行います。
- シンプルなクエリだと以下のようになる

Step back prompting
TAKE A STEP BACK: EVOKING REASONING VIA ABSTRACTION IN LARGE LANGUAGE MODELS
Huaixiu Steven Zheng∗ Swaroop Mishra∗ Xinyun Chen Heng-Tze Cheng
Ed H. Chi Quoc V Le Denny Zhou
Google DeepMind
GPT4要約
- 背景:大規模言語モデル(LLM)はトランスフォーマーベースのアーキテクチャとプレトレーニングコーパスの拡大により、能力が大きく向上。しかし、複雑な多段階推論は依然としてLLMにとっての大きな挑戦である。
- 既存のアプローチ:LLMにおける複雑な推論タスクの解決には、中間推論ステップを明確に示すChain-of-Thoughtプロンプトなどの技術が用いられている。これらの技術は、途中の推論ステップの正確さを向上させ、解決策への正しい経路を辿るのに役立つ。
- 提案された新しいフレームワーク:STEP-BACK PROMPTINGは、LLMが具体的な例から高レベルの概念や原則を抽出し、これらをガイドにして推論を進める新しい手法。このアプローチは、複雑なタスクを処理する際の中間推論ステップの誤りを減らすことを目指す。
- 評価と結果:STEP-BACK PROMPTINGは、STEM、知識ベースのQA、マルチホップ推論タスクなど、幅広い課題において有効性を示した。例えば、MMLUの物理と化学で7%、11%、TimeQAで27%のパフォーマンス向上を実現し、複雑なタスクにおけるLLMの効果を明確に示した。

- この論文では、大規模言語モデル(LLM)を使用して「一歩引いた(step backした)」質問を生成するSTEP-BACK PROMPTINGを提案している
- STEP-BACK PROMPTINGは以下の2つのステップで構成される
- Abstraction:質問に直接対応する代わりに、まずLLMにより高次概念または原則についての一般的なステップバック質問を行い、関連する事実を取得します。
- Reasoning:高次概念または原則に関する事実に基づいて、LLMが元の質問の解決策について推論します。これを「Abstraction-grounded Reasoning」と呼びます。
- 図の例
- 上
- Original Question(理想気体の圧力は温度が2倍、体積が8倍になる場合の変化に関する物理の質問)に対して、そのまま応答を作成すると1/16という答えを返す(がこれは間違っている
- chain-of-thoughtを利用したpromptでも、2P’(8V)=nR(2T)という誤った物理法則を利用しており、これによって1/8という誤った答えを導出している
- Abstractionによって物理法則そのものについてを問うstep back questionを用意する
- この問いに対する応答によってPV=nRTという法則が導かれる
- Abstractionの結果を行いReasoningを行うことで、P=nR(2T)/8Vという計算から1/4と導くことができている
- 下
- エステラ・レオポルドという人物が特定期間の間に通った学校を問いており、「エステラ・レオポルドの学歴は何か」問いうstep back questionを用意することで正しい応答を導いている
- STEP-BACK PROMPTINGは検索を伴っても伴わなくても使用可能で、検索時に使用する場合、「一歩引いた」質問と元の質問の両方を用いて検索を行い、その結果を両方とも使用して言語モデルの応答が作られる
- promptの例

Follow Up Questions
- query transformationはconversational chainsにおけるfollow up question(追加での質問)で最も利用される
- 以下は、follow up questionを行う際の3つの方法
- follow up questionのみを組み込む:
- 前の会話に基づいたり、参照したりするfollow up questionの場合、文脈が失われる可能性がある。例えば、"what can I do in Italy”の後"what type of food is there”と聞いた場合、"there"のコンテキストを失ってしまう
- 会話全体(または最後のkメッセージ)を組み込む:
- follow up questionが前の会話と無関係な場合、不適切な結果が得られ、生成中に邪魔になる可能性がある。
- LLM(大規模言語モデル)を使用してクエリ変換を行う!
- 追加質問を含む会話全体を大規模言語モデル(LLM)に渡し、検索用語を生成させる
- これはWebLangChainなど多くのchatベースのretrieval applicationで使われている
- ただ、会話全体を検索クエリに変換するためにどのようなプロンプトを使用すべきかという問題が生じる
- これにはかなりのプロンプトエンジニアリングが必要
- WebLangChainの例
- promptの例

Multi Query Retrieval
- LLM(大規模言語モデル)を使用して複数の検索クエリを生成し、これらのクエリを並行して実行して、取得した結果をまとめて渡すことができます。
- これは、1つの質問が複数のsub-questionに依存している場合に特に有用です。
- 例えば以下のような質問があるとする
- Who won a championship more recently, the Red Sox or the Patriots?
- これに応えるには以下の二つのsub-questionに依存している
- "When was the last time the Red Sox won a championship?"
- "When was the last time the Patriots won a championship?"
- promptの例
RAG-Fusion
最近の記事では、Multi-Query Retrievalというアイデアを発展させていますが、すべての文書を渡す代わりに、相互ランク融合(reciprocal rank fusion)を使用して文書の順序を再編成しています。

- RAG(Retrieval-Augmented Generation)は有望な技術ですが問題点も存在する
- 既存の検索技術の制約: RAGは、従来のレキシカル検索やベクトル検索技術と同様の制約に束縛される
- 具体的に何だろう
- 人間の検索の非効率性:
- 人間は検索システムに対して効果的に要求を伝えるのが得意ではない
- 誤字や曖昧なクエリ、限られた語彙などによって、より広範かつ深い情報源にアクセスできないことが多い
- RAGはこの問題に一定の解決策を提供していますが、完全な解決には至ってない
- 検索の過剰な単純化
- 現在の検索パラダイムは、クエリと回答を線形にマッピングする傾向があり、人間のクエリの多次元的な性質を理解するには不十分
- この線形モデルは、より複雑なユーザーの質問のニュアンスや文脈を捉えることがしばしばできず、関連性の低い結果につながることがある
- RAG-Fusionが注目される理由
- ギャップの解決
- RAGの制約に対処するため、RAG-Fusionは複数のユーザークエリを生成し、その結果を再ランク付けすることで、より正確な回答を目指します。
- RAG-Fusionは、ユーザーが明示的に尋ねていることと、実際に意図していることの間のギャップを埋めることを目指し、隠されている情報を明らかに近づいていく
- 検索の強化
- Reciprocal Rank Fusion (RRF): RAG-Fusionでは、Reciprocal Rank Fusionを利用して、複数の検索結果からより精度の高い結果を得るためのランキングを行います。