当前,我们的自然语言处理和对话系统都深度依赖于基于嵌入的向量搜索技术。OpenAI在这方面已取得了显著的成就,他们的“Cookbook”项目(可在github.com/openai/openai-cookbook浏览)提供了丰富的案例。近期,该项目对其文档进行了一些更新。

GPT在回答问题方面表现卓越,但它的回答范围限定在先前训练过的问题。那么,如果涉及未经训练的数据,例如一些私有数据或最新的数据,我们应如何应对?

通常,我们有两种解决方法:一种是微调(fine-tuning),另一种是嵌入(embedding)。

微调是在大规模模型的数据基础上进行二次训练,我们需要事先准备一批prompt-completion(类似于问答Q&A)的数据,生成新的模型,这个模型会包含微调后的数据。

而嵌入的方法则是在每次向ChatGPT发送消息(prompt)时,附带你自己的数据结果。

王建硕教授对微调和嵌入的比喻相当生动:ChatGPT就像一个已经受过训练的家政阿姨,她懂中文,会做家务,但对你家的具体情况并不了解。

微调就像你在阿姨首次来家里工作时,花一个小时时间告诉她家里的情况,例如物品的摆放、哪些地方不能触碰,哪些地方需要特别注意。

而嵌入则像是在家里贴满便签,省去了二次培训阿姨的时间,阿姨看到便签就能知道应该怎么做。

OpenAI的Cookbook也给出了类似的比喻:

微调就像通过学习来准备考试,这是一种长期记忆。然而,一周后的考试来临时,模型可能会忘记学过的内容,或者记错从未接触过的事实。

嵌入则像记笔记,这是一种短期记忆。考试时,你可以带上笔记,随时查看,对笔记上的内容可以给出准确的答案。

需要注意的是,相较于微调,嵌入的搜索提问方式存在一定的局限性,因为它每次附带的文本数量有限。除了原始的问题,它还需要带上搜索出来的问题。在GPT-3.5中,这个限制是4K(大约5页),而在GPT-4中,最大限制是32K(大约40页)。这就像你有一整书架的教科书可以参考,但每次却只能查看其中的几页笔记。

如果你想构建一个能处理大量文本问答的系统,OpenAI建议使用“搜索-问”(Search-Ask)的方法。先在本地文档库中进行搜索,获取本地数据结果,然后再进行提问,将搜索结果和问题一起提交给GPT。这样,GPT可以根据你提供的内容以及它模型中的数据,一起返回结果。

至于如何进行搜索,并不一定要采用基于向量的搜索,还有多种搜索方式可供选择:

  • 基于关键词的搜索
  • 基于图形的搜索
  • 基于向量的搜索

关于技术实现的细节,OpenAI的Cookbook也提供了详细的介绍。

更多的细节和案例,可参考以下链接:https://github.com/openai/openai-cookbook/blob/main/examples/Question_answering_using_embeddings.ipynb

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注