はじめに
大スター宮いちごまつりならぬ、コールスローまつり😋 nikkieです。
OpenAI DevDayのセッションで
聞いた「HyDE retrieval」について、どんなものか調べました。
目次
- はじめに
- 目次
- StudyCoさんの勉強会アーカイブより概要を掴む
- 提案論文「Precise Zero-Shot Dense Retrieval without Relevance Labels」
- LangChainに実装あり
- 終わりに
- P.S. 手を動かす際に参照予定
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」
元論文も確認します。
質問(緑)に対して、指示(黄色)を加えます。
指示を元にGPTがドキュメント(仮説。オレンジ)を生成。
生成したドキュメントを元に実際のドキュメント(青)を取得します
AppendixにHyDEのプロンプト例があります。
例えばWeb Search5のプロンプトだと
Please write a passage to answer the question Question: [QUESTION] Passage:
LangChainに実装あり
v0.0.44で入っていました。
🦜🔗v0.0.44
— LangChain (@LangChainAI) 2022年12月22日
⏲️ Timeout argument for OpenAI LLM - Sam Bean, @YouSearchEngine
💙 Azure OpenAI LLM integration - @gojira
👿 Hypothetical Document Embeddings, based on https://t.co/f3RGBsc4DR - h/t @luyu_gao
For docs on Azure OpenAI, see https://t.co/NaxP5PJDaY
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. 手を動かす際に参照予定
- LangChain Cookbook「Improve document indexing with HyDE」
- npakaさんによる LangChainで HyDE による質問応答を試す