OpenAI现在允许我们对GPT-3.5模型进行微调。我已经使用自己的数据集测试并微调了模型,但问题是微调后的模型生成的答案是随机的,并非基于我的自定义数据集给出正确答案。
有没有什么方法可以让模型仅从我自己的微调数据集中回答问题呢?
回答:
这完全是一个错误的方法,你已经发现了这一点。
为什么微调后的OpenAI模型不能用微调数据集中的特定答案(即事实)回答特定问题?
正如官方OpenAI文档中所述:
微调可以改善结果的一些常见用例包括:
- 设定风格、语气、格式或其他定性方面
- 提高生成所需输出的可靠性
- 纠正无法遵循复杂提示的失败
- 以特定方式处理许多边缘情况
- 执行难以在提示中表达的新技能或任务
微调并不是为了用微调数据集中的特定答案(即事实)回答特定问题。
那么,正确的方法是什么?
你需要实现向量相似性搜索,正如官方OpenAI文档中所述:
我什么时候应该使用微调与带检索的嵌入?
带检索的嵌入最适合需要有一个包含相关上下文和信息的大型文档数据库的情况。
默认情况下,OpenAI的模型被训练为有帮助的通用助手。微调可以用来制作一个专注于狭窄领域的模型,并展示特定的固有行为模式。检索策略可以通过在生成响应之前为模型提供相关上下文,使新信息可供模型使用。检索策略并不是微调的替代品,实际上可以与之互补。
如果你对AI感兴趣,你很可能已经遇到了一个术语,即RAG(即检索增强生成)。阅读Nvidia的RAG解释以更好地理解RAG是什么:
为了理解生成式AI的最新进展,想象一下法庭。
法官根据他们对法律的一般理解来听取和裁决案件。有时一个案件——比如医疗事故诉讼或劳资纠纷——需要特殊的专业知识,所以法官会派法院书记员去法律图书馆,寻找他们可以引用的先例和具体案件。
就像一个好的法官一样,大型语言模型(LLM)可以回应各种人类查询。但要提供引用来源的权威答案,模型需要一个助手来进行一些研究。
AI的法院书记员是一个称为检索增强生成的过程,简称RAG。
等等,RAG与向量相似性搜索有什么关系?
RAG在底层使用向量相似性搜索。请看下面的RAG过程的视觉表示:
图片来源:Chia Jeng Yang关于RAG和简单/复杂RAG的介绍
信息从数据源中提取(A),被分割成块(B),转换成向量(C),并插入到向量数据库中(D)。当用户提出问题时,其问题被转换成向量(1)。然后这个向量与向量数据库中的向量进行比较(2)。最相似的向量(3)被传递给LLM(4),然后返回给用户的答案(5)。
这就是RAG的工作方式。它们在底层使用向量相似性搜索。
那么,我如何实现我的目标呢?
如果你希望你的LLM用特定的答案(即事实)回答特定的问题,你至少有以下三个选项:
- 自定义解决方案(参见我的过去的StackOverflow回答)。
- 使用LlamaIndex RAG或LangChain RAG(参见我的YouTube教程及其对应的代码)。
- 使用OpenAI的Assistants API(参见我的YouTube教程及其对应的代码)。