如何在大型数据库中进行文档检索以增强LLM的提示?

问题描述 投票:0回答:1

我有一个大型文档数据库(这些“文档”本质上是网页,而且都是 HTML 格式)。它们拥有有关业务本身的信息,并且可以包含许多类似的信息。我想做的是在这个数据库之上创建一个聊天机器人,可以回答有关其文档内容的任何问题。

现在,如果我将正确的信息传递给GPT,它就可以轻松回答问题。主要的困难是如何获取相关信息,以便将其提供给GPT。现在,我正在对文档进行分块,嵌入这些块,将它们存储在向量数据库中,当有人提出问题时,我会从该向量数据库中获取 k 最近的嵌入(我正在使用 text-embedding-ada- 002 顺便说一下,创建嵌入)。

所以,我的问题是:

  • 如何以最佳方式创建嵌入,以便信息检索步骤具有高性能? (我假设 OpenAI、Google 等在爬行和抓取网络以获取相关信息时做了类似的事情,但我似乎在网上没有找到任何感兴趣的东西:sweat_smile:)
  • 这是一个小话题,但是是否有一个经验法则可以直观地理解为什么一个嵌入在 k 最近嵌入搜索中比其他嵌入具有更高的分数?根据我的经验,我发现非常小的嵌入往往会被选择以获得更高的分数。例如,如果问题是“如何制作爆米花?”,则包含 10 个单词的句子的嵌入将比包含 1000 个单词的文本块的嵌入得分更高(即使该块实际上回答了问题)

(我也在这个OpenAI社区论坛帖子中提出了同样的问题

embedding information-retrieval large-language-model chunking
1个回答
0
投票

正如您已经了解构建检索增强生成(RAG)系统的技术方法。我将分享一些我的经验。

  1. 如果您的数据尽可能干净,RAG 效果最好。这很糟糕,因为工作量很大。如果您有很多 html 标签,这会给您的嵌入增加噪音。此外,如果您的文档包含大量相似的数据,将会给您的检索器带来困难,因为一切都是相似的。

  2. 有一篇论文指出,RAG 与具有大上下文窗口的 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

© www.soinside.com 2019 - 2024. All rights reserved.