提问人:Bruno Vaz 提问时间:11/15/2023 最后编辑:Bruno Vaz 更新时间:11/20/2023 访问量:29
如何在大型数据库中进行文档检索以增强LLM的提示?
How to perform document retrieval in large database to augment prompt of LLM?
问:
我有一个庞大的文档数据库(这些“文档”本质上是网页,它们都是 HTML 格式)。他们拥有有关业务本身的信息,并且可以包含许多类似的信息。我想做的是在这个数据库之上创建一个聊天机器人,它可以回答有关其文档内容的任何问题。
现在,如果我将正确的信息传递给 GPT,它可以轻松回答问题。主要困难是如何获取相关信息,以便将其提供给 GPT。现在,我正在对文档进行分块,嵌入这些块,将它们存储在向量数据库中,当被问到问题时,我从这个向量数据库中获取 k 最近的嵌入(顺便说一句,我正在使用 text-embedding-ada-002 来创建嵌入)。
所以,我的问题是:
- 如何以最佳方式创建嵌入,使信息检索步骤具有高性能?(我假设 OpenAI、Google 等在抓取和抓取网络以获取相关信息时做了这样的事情,但我似乎在网上😅找不到任何感兴趣的东西)
- 这是一个小小的话题,但是有没有经验法则可以直观地理解为什么一个嵌入在k-最近的嵌入搜索中得分高于另一个?根据我的经验,我看到非常小的嵌入往往会被选择得更高。例如,如果问题是“我怎样才能做爆米花?”,那么从包含 10 个单词的句子中嵌入的分数将高于从包含 1000 个单词的文本块中嵌入的分数(即使该块实际上回答了问题)
(我在这篇 OpenAI 的社区论坛帖子中也提出了同样的问题)
答:
正如您已经知道构建检索增强生成 (RAG) 系统的技术方法。我将分享一些我的经验。
如果数据尽可能干净,RAG 效果最佳。这很糟糕,因为这是很多工作。如果你有很多 html 标签,这将增加你的嵌入噪音。此外,如果您的文档包含大量相似的数据,则会给您的猎犬带来困难,因为一切都是相似的。
有一篇论文指出,RAG 与具有大上下文窗口的 LLM 相结合效果最好。因此,您可以发送更多的块,让 LLM 完成剩下的工作。 GPT4-turbo 的上下文大小为 128k 个令牌。与 GPT3.5 的 4k 相比,这要多得多。还有具有 200k 代币的开源模型。
纸张:https://arxiv.org/abs/2310.03025
GPT4-turbo:https://help.openai.com/en/articles/8555510-gpt-4-turbo
具有 200k 上下文窗口的开源模型:https://huggingface.co/01-ai/Yi-34B
评论