Code前端首页关于Code前端联系我们

OpenAI官方教程:如何使用基于embeddings的检索解决GPT无法处理长文本和最新数据的问题

terry 2年前 (2023-09-23) 阅读数 69 #AI人工智能
作者:数据学习

OpenAI官方cookbook最新更新的技术博客解释了为什么我们需要使用embeddings-based搜索技术完成问答任务。 OpenAI官方教程:如何使用基于embeddings检索来解决GPT无法处理长文本和最新数据的问题

虽然GPT很强大,但OpenAI认为基于embeddings的搜索仍然非常重要。甚至这个方法比造型精细的tuning还要好。本博客将简单介绍为什么OpenAI认为当前基于embeddings的搜索是GPT最强的附加功能!

1。 GPT 的缺点

虽然目前 GPT-4 或 ChatGPT 的能力已经非常强大,但它仍然存在重大缺点:

  • 训练数据基于 2021 年 9 月之前的数据,缺失。最新数据
  • 无法访问我们无法发布的文档
  • 基于历史会话获取的信息

因此,OpenAI发布了一份文档解释如何使用两步搜索响应增强 GPT 的功能: 搜索:在文本库中搜索相关文本。

  • 请求:将获取的文本部分插入发送到 GPT 的消息中并询问问题。
  • 2。为什么搜索比tuning更好?

    GPT 可以通过两种方式学习知识:

    • 通过模型权重(即在训练集上微调模型)
    • 通过模型输入(即在输入消息中插入知识) ♸-❝ 调整可以感觉更自然 - 尽管一切都是基于数据进行训练,GPT 如何学习所有其他知识 - 但 OpenAI 通常不鼓励将其作为教授模型知识的方式。 Nudge 更适合教授专门任务或风格,但对于实际回忆来说不太可靠。

      注意,我们这里说的是事实召回,也就是说,如果你有自己的数据,只是想获取知识或者从数据中获取相关内容,那么搜索可能比微调更好。例如,如果你有大量的历史数据,你只想找到你需要的那部分数据,包括某些概念出现在哪里,为什么使用它们等等。这些都是事实记忆。

      但是如果你希望模型根据某种模式生成一些东西。例如,如果你希望模型能够根据XX风格生成某些工作日志甚至宣传内容,微调可能会更好。

      类似地,模型权重就像长期记忆。微调模型就像一周内准备考试一样。当考试到来时,模型可能会忘记细节或记错它从未读过的事实。

      相比之下,消息输入就像短期记忆。当您将知识融入到信息中时,就像参加开卷考试一样。有了注释,模型更有可能得到正确答案。

      与微调相比,文本搜索的一个缺点是每个模型一次只能读取有限数量的文本。以OpenAI为例,一次输入的内容限制如下:

      型号名称最长文本输入
      gpt-3.5-turbo4096个token(g页) - 48192 个 token(约 10 页)
      gpt-4-32k32768 个 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前端网发表,如需转载,请注明页面地址。

    发表评论:

    ◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

    热门