nikkie-ftnextの日記

イベントレポートや読書メモを発信

RAGの手法の中で気になったHyDE(Hypothetical Document Embeddings)を調べたログ

はじめに

大スター宮いちごまつりならぬ、コールスローまつり😋 nikkieです。

OpenAI DevDayのセッションで

聞いた「HyDE retrieval」について、どんなものか調べました。

目次

StudyCoさんの勉強会アーカイブより概要を掴む

10月のStudyCoさんの勉強会にてHyDEが取り上げられていました1

LLMに質問したとき、LLMは知識がなくて回答できない(見当違いなことを言う)ことがあります。
これに対処するために、プロンプトに質問に関連する文書を追加2し、その文書を使ってLLMに回答させます(Retrieval Augmented Generation: RAG3)。
RAGの拡張という文脈でHyDEが紹介されています

アーカイブ(36:38〜)
デモもあります!

コードはこちら

提案論文「Precise Zero-Shot Dense Retrieval without Relevance Labels」

元論文も確認します。

HyDEのイメージ図はこちら4

質問(緑)に対して、指示(黄色)を加えます。
指示を元にGPTがドキュメント(仮説。オレンジ)を生成。
生成したドキュメントを元に実際のドキュメント(青)を取得します

AppendixにHyDEのプロンプト例があります。
例えばWeb Search5のプロンプトだと

Please write a passage to answer the question
Question: [QUESTION]
Passage:

LangChainに実装あり

v0.0.44で入っていました。

langchain.chains.HypotheticalDocumentEmbedder
https://github.com/langchain-ai/langchain/blob/v0.0.336/libs/langchain/langchain/chains/hyde/base.py

プロンプトはこちらです。
https://github.com/langchain-ai/langchain/blob/v0.0.336/libs/langchain/langchain/chains/hyde/prompts.py

web_search_template = """Please write a passage to answer the question 
Question: {QUESTION}
Passage:"""
web_search = PromptTemplate(template=web_search_template, input_variables=["QUESTION"])

論文のAppendixのプロンプトが実装されているわけです。

終わりに

RAGの拡張手法の1つ、HyDEについてどんな手法かを掴みました。
質問に対して、回答に必要なコンテキストがないLLMに回答させ(=仮説)、回答と類似度の高い文書を取得してプロンプトに加える!

LLM(例:GPT)は膨大なテキストで訓練した結果、世界についての知識を持った(と認識している)ので、仮説的な回答を生成させるというのはアイデアとして筋がいいな〜と思いました。
特に質問が短い場合では、HyDEで生成した仮説に含まれる単語が、ベクターストアから文書を取得する上で有用なこともありそうですよね。
このあたり提案論文で議論されてそうなので(GPTの力を借りつつ)確認しようかな。

P.S. 手を動かす際に参照予定


  1. 取り上げられていることを知ったのは、LayerXさん社内勉強会の公開資料がきっかけです
  2. 追加した文書は「コンテキスト」と呼ばれます
  3. RAGの一例です
  4. https://github.com/texttron/hyde/blob/74101c5157e04f7b57559e7da8ef4a4e5b6da82b/approach.png
  5. Web Searchってどういう意味かは論文を未確認です