总结:我们没有使用微调,而是结合使用提示链和预处理/后处理来将幻觉发生率降低一个数量级,但这确实需要对 OpenAI 进行 3-4 倍的调用。还有很大的改进空间!
使用 GPT 等大型语言模型面临的最大挑战之一是它们倾向于捏造信息。
这对于生成用于创意写作或头脑风暴会议的文本等用例来说可能没什么问题,但当输出用于客户支持等商业应用时,这可能是灾难性的。幻觉或虚假信息的产生在这些情况下尤其有害,并可能导致严重后果。
即使一次虚假信息的产生也可能损害公司的声誉、导致法律责任并损害客户的利益。
有几种方法可以解决这一挑战。
一种常用方法是使用微调来提高模型在特定领域数据集上的准确性。微调的问题在于,当你拥有多租户 SaaS 产品时,收集特定领域的数据集很困难,因为每个客户的用例和用户角色都略有不同。所以我们必须找到其他方法来解决这个问题。
以下是我们目前所做的工作
提示词链接(Prompt Chaining)
我们尝试的第一件事是使用提示链技术将复杂的提示分解成几个部分,并让 GPT 在每一步“检查其答案”。
例如,我们不是使用用户输入和注入的内容单独调用 GPT,而是首先要求 GPT 评估它是否可以回答问题并证明其响应的合理性。我们目前有 3 个步骤——预处理步骤、评估步骤和响应步骤。
以下是我们在评估步骤中使用的提示示例。它只是要求 GPT 回答它是否可以根据提供的内容回答问题。
"""<|im_start|>system You found the following content by searching through documentation. Use only this content to construct your response. {content}<|im_end|>
<|im_start|>user First, determine if the content found is sufficient to resolve the issue. Second, respond with a JSON in the format:
{
"content_contains_answer": boolean, // true or false. Whether the information in the content is sufficient to resolve the issue.
"justification": string // Why you believe the content you found is or is not sufficient to resolve the issue.
}
The inquiry: {inquiry}<|im_end|><|im_start|>assistant {
"content_contains_answer":<|im_end|>"""
请注意,我们要求 GPT 以 JSON 格式返回答案,并使用预期结构为助手的答案提供种子。这确保我们能够解析响应,并且几乎 100% 的时间都有效。
我们还注意到,content_contains_answer
即使我们不使用它做任何事情,只需要求模型提供理由就可以提高其预测的准确性。你只需要叫出 GPT 的胡说八道!
这种方法将幻觉的发生率从20%降低到了5%。
这些技术在这里和这里都有很好的记录
后期处理
接下来帮助我们将效率从 5% 降至 2% 的是对 GPT 的输出进行后处理。这有几个步骤:
- 检查 token 的 e^(logprob) 是否
true
低于 90%。如果是,我们重新运行评估提示并强制content_contains_answer
为假。我们发现这可以减少误报,而不会对误报产生太大影响。 - 如果
content_contains_answer
为假,我们将使用返回的理由并再次调用 GPT API 来重新措辞理由以将其定位到用户。这减少了我们最终输出出现奇怪措辞(如“用户应该……”)的可能性。这不完全是幻觉,也不是最佳体验。
预处理
这是我们最近添加的步骤,使我们的幻觉率低于 2%。我们做的第一件事是让 GPT 对用户查询的意图进行分类。根据意图,我们将在评估和响应步骤中使用不同的提示。
我们还在尝试对用户输入进行额外的预处理,使其更有可能在搜索步骤中找到相关结果。这可以通过从用户的查询中提取实体并在稀疏嵌入上以更高的权重运行向量搜索来实现。这有助于解决技术性问题并涉及特定标记组合(如) ,因为对于这些情况,关键字搜索比语义搜索更有用。这一切都是通过 Pinecone 的新混合搜索功能keras.save_model
实现的。
最后的想法
最后一条可能有用的提示是将内容包装在 <Content></Content> 标签中。这有助于 GPT 理解不同来源之间的差异,甚至返回稍后可以str.replace()
使用链接的占位符(例如 Content1)。您还可以对注入提示的任何其他数据执行此操作。
总体而言,我们发现,结合使用提示链、预处理和后处理可以很好地降低幻觉风险并提高 GPT 的准确性。缺点是它需要更多的 API 调用,但随着最近价格下降 90%,这现在非常可行。
RA/SD 衍生者AI训练营。发布者:chris,转载请注明出处:https://www.shxcj.com/archives/3253