OpenAI官方教程:如何使用基于embeddings的检索解决GPT无法处理长文本和最新数据的问题
OpenAI官方cookbook最新更新的技术博客解释了为什么我们需要使用embeddings-based搜索技术完成问答任务。
虽然GPT很强大,但OpenAI认为基于embeddings的搜索仍然非常重要。甚至这个方法比造型精细的tuning还要好。本博客将简单介绍为什么OpenAI认为当前基于embeddings的搜索是GPT最强的附加功能!
1。 GPT 的缺点
虽然目前 GPT-4 或 ChatGPT 的能力已经非常强大,但它仍然存在重大缺点:
- 训练数据基于 2021 年 9 月之前的数据,缺失。最新数据
- 无法访问我们无法发布的文档
- 基于历史会话获取的信息
因此,OpenAI发布了一份文档解释如何使用两步搜索响应增强 GPT 的功能: 搜索:在文本库中搜索相关文本。 2。为什么搜索比tuning更好?
GPT 可以通过两种方式学习知识:
- 通过模型权重(即在训练集上微调模型)
- 通过模型输入(即在输入消息中插入知识) ♸-❝ 调整可以感觉更自然 - 尽管一切都是基于数据进行训练,GPT 如何学习所有其他知识 - 但 OpenAI 通常不鼓励将其作为教授模型知识的方式。 Nudge 更适合教授专门任务或风格,但对于实际回忆来说不太可靠。
注意,我们这里说的是事实召回,也就是说,如果你有自己的数据,只是想获取知识或者从数据中获取相关内容,那么搜索可能比微调更好。例如,如果你有大量的历史数据,你只想找到你需要的那部分数据,包括某些概念出现在哪里,为什么使用它们等等。这些都是事实记忆。
但是如果你希望模型根据某种模式生成一些东西。例如,如果你希望模型能够根据XX风格生成某些工作日志甚至宣传内容,微调可能会更好。
类似地,模型权重就像长期记忆。微调模型就像一周内准备考试一样。当考试到来时,模型可能会忘记细节或记错它从未读过的事实。
相比之下,消息输入就像短期记忆。当您将知识融入到信息中时,就像参加开卷考试一样。有了注释,模型更有可能得到正确答案。
与微调相比,文本搜索的一个缺点是每个模型一次只能读取有限数量的文本。以OpenAI为例,一次输入的内容限制如下:
型号名称 最长文本输入 gpt-3.5-turbo 4096个token(g页) - 4 8192 个 token(约 10 页) gpt-4-32k 32768 个 token(~40 页) 继续只能看到模型的比喻,你可以像学生一样思考一些尽管可能有很多百科全书可供参考,但关于时间的笔记页数页。
因此,为了构建一个可以使用大量文本回答问题的系统,OpenAI 建议使用“搜索-询问”的方法。
3. 文本检索
文本搜索的方式有很多种,包括:
- 基于词汇的搜索(Lexical-based) ❙基于图的搜索(Graph-based❀Graph-Basd)搜索 ( Embedding-based)
OpenAI 推荐的词嵌入方法。嵌入很容易实现,并且对于问题特别有效,这些问题通常不会与答案在词汇上重叠。
考虑仅搜索嵌入作为起点更好的搜索系统除了流行度、新近度、用户历史、与之前搜索结果的冗余度、点击率数据等特征之外,还可以结合多种搜索方法。
像 HyDE 这样首先转换的技术将问题放入假设的答案中,然后嵌入它们也可以提高问答检索的性能。类似地,GPT 还可以通过自动将问题转换为一组关键字或搜索词来改善搜索结果。
4。如何构建一个基于embeddings的搜索系统来解决问题
一般来说,这样的系统包括3个步骤:准备要检索的知识、搜索和提问:
- 准备搜索数据(仅一次)
- 收集:即获取你想要使用的数据,例如OpenAI的案例是下载数百篇有关2022年奥运会的维基百科文章
- 剪切:将文档分割成简短的、大部分独立的部分用于嵌入♼嵌入:使用 OpenAI API 获取每个子数据的 embeddings 结果
- 存储:存储嵌入(对于大型数据集,您可以使用矢量数据库)
- 搜索(每个请求一次)
- 给出用户问题,生成查询来自 OpenAI API
- 使用 embeddings,按与搜索的相关性对文本部分进行排序
- 提出一个问题(每个查询一个)
- 使用最相关的部分对问题进行排序 插入到发送到 GPT 的消息中
- 返回 GPT回答
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。