github:https://github.com/pengbaolin/LLM-Augmenter(暂无处readme外其他文件)
paper:https://arxiv.org/pdf/2302.12813.pdf
![在这里插入图片描述](https://img-blog.csdnimg.cn/24cba6213c0f4c00a5646eb9007b3aa2.png#pic_center
背景
大语言模型(LLMs) ,如 GPT-3和 ChatGPT,已经证明了在生成流畅、连贯和信息丰富的自然语言文本方面的出色能力。人们普遍认为,这些模型令人印象深刻的能力源于其中编码的丰富的世界知识,以及模型从知识边缘进行概括的能力。然而,LLMs 的知识编码是有损耗的,知识泛化可能导致"记忆扭曲"。因此,这些模型倾向于产生幻觉,在执行关键任务时会导致损伤。
。尽管人们对于利用外部知识改进 LLM 的兴趣越来越浓厚,但是,几乎所有以前提出的方法都需要对 LLM 的参数进行微调,随着 LLM 的尺寸呈指数增长,这种方法的成本可能会高得令人望而却步。因此,对于任务关键的任务,用即插即用(PnP)模块来增强固定的 LLM 是非常可取的。
模型
本文提出了一种基于外部知识和 PnP 模块的自动反馈的 LLM-AUGMENTER 改进方法。如图1中的例子所示,给定一个用户查询,Augmenter 首先从外部知识(例如 Web 或特定任务的数据集)中检索证据,如有必要,进一步巩固证据,将检索到的原始证据与相关背景联系起来 ,并进行推理,形成证据链。然后,LLM-AUGMENTER 使用一个提示查询一个固定的 LLM (即 ChatGPT) ,该prompt包含 ChatGPT 生成基于外部知识(证据)的候选响应的综合证据。然后,LLM-AUGMENTER 验证候选响应,例如,通过检查它是否产生了幻觉证据。如果是这样,LLM-AUGMENTER 生成一个反馈信息。该消息用于修改再次查询 ChatGPT 的prompt。这个过程不断重复,直到一个候选响应通过验证并发送给用户。
模型总体结构
我们将人类系统对话描述为一个由五元组(S,A,P,R,y)描述的马可夫决策过程(MDP) :
S 是对话状态的无限集合,它对存储在工作记忆体中的信息进行编码,包括对话历史、用户查询、证据、候选响应;
A 是策略选择要执行的一组操作,包括
(1)调用 Knowledge Consolidator 整合来自外部知识的证据;
(2)调用 Prompt Engine 查询 LLM 以生成候选响应;
P (s'|s, a)给出了在状态 s 中采取行动 a 后进入新状态 s'的转换概率;
R(s,a)是环境(例如,用户或模拟器)提供的在状态 a 中采取行动后获得的外部奖励;
y(0, 1]是一个折扣因子
Working Memory
此模块跟踪对话状态,该状态捕获到目前为止会话中的所有基本信息。状态使用六元组(q, e, o, u, f, hq)表示:
状态用六元组(q; e; o; u; f; hq)表示:
q 是当前用户查询;
e 是 q 的证据,由 Knowledge Consolidator 从外部知识整合;
o 是 LLM 为 q 生成的一组候选响应;
u 是评估 o 的每个元素效用的得分,f 是指导 LLM 提高其效用的口头反馈 ------ u 和 f 都是由Utility 模块生成的
hq 是之前的对话历史。
注意,给定用户查询 q,LLM-AUGMENTER 可以进行多次迭代来修改其响应,每次迭代都会基于证据e、反馈f, u生成一个候选响应,然后将最终响应发送给用户,如图1所示。
Policy
这个模块选择下一个导致最佳的期望奖励 r的系统行动。这些操作包括:
(1)从外部知识中获取 q 的证据 e;
(2)调用 LLM 来生成候选响应;
(3)如果响应通过 Utility 模块的验证,则向用户发送响应。
该策略可以使用手工制定的规则来实现,也可以通过人机交互来训练。在这项研究中,我们实现了一个可训练的策略 作为一个神经网络模型参数化。是优化使用 REINFORCE 以期最大限度地提高预期报酬:
我们发现使用预训练模型(例如 T5)是有效的,它不仅可以利用预训练模型的能力,而且还可以通过调整整合额外的信息。
策略学习通常需要大量的人机交互,收集这些交互的成本很高。为了应对这一挑战,策略学习可以分为三个阶段:
- 从基于规则的策略引导:领域专家将特定于任务的知识和业务逻辑编码为 IF-THEN规则。例如,如果在客户服务的用户查询中提到了产品名称,则明智的做法是始终调用知识整合器以从产品数据库中收集产品信息。
- 使用用户模拟器学习:我们使用语言模型来模拟人类用户如何与LLM-AUGMENTER交互。LLM-AUGMENTER通过实用程序模块评估的任何有效响应都可以用作训练示例,允许 LLM-AUGMENTER 自我改进。
- 最后,LLM-AUGMENTER与人类用户互动,以进一步完善其策略。
除了 Policy 之外,LLM-AUGMENTER 的其他可训练模块(即 Knowledge Consolidator 和 Utility)也可以使用相同的学习方法进行优化。
Action Executor
该模块执行策略选择的操作,它由两个组件 Knowledge Consolidator 和 Prompt Engine 组成。
Knowledge Consolidator
知识整合器增强了 LLMs 的能力,可以根据外部知识做出反应,在完成任务时减轻幻觉,比如回答有关最新新闻的问题,以及在餐馆预订桌子。知识整合器以模块化的方式设计,由知识检索器、实体链接器和证据链组成。
具体来说,检索器首先基于 q 和 hq 生成一组搜索查询,然后调用一组 API 从各种外部知识源检索原始证据 ,例如调用Bing API 查询 Web 文档(包括 Wiki 文章和 Reddit 消息),调用 REST API 查询特定于任务的数据库以获取餐厅评论和产品规格。
检索到的原始证据有时是不完整的和有噪音的。因此,实体链接器利用相关上下文丰富原始证据,形成证据图,即基于维基百科将原始证据中提到的每个实体与其相应的描述联系起来。然后,链接器从图表中删除不相关的证据,形成一个与查询最相关的证据链。综合证据 e 然后被发送到Working Memory。
Prompt Engine
Prompt Engine生成一个查询LLM的提示以生成候选响应。(prompt是一个文本字符串 由任务指合、用户查询q、对话框历史记录hq、知识合并器提供的证据e)和反馈/(如果实用程序模块提供)组成。prompt是针对特定任务的,其详细信息见附录A。
Utility
给定候选响应o,Utility模块使用一组特定于任务的效用函数生成效用得分u和相应的反馈。
这些实用程序功能2访问LLM的响应与用户期望或特定业务需求的一致性。例如,在信息寻求对话中,重要的是LLM的所有回答都基于外部证据,以避免产生误导性或不准确的信息。在餐厅预订对话框中,LLM 响应应该是对话式的,并专注于指导用户完成预订过程,而不是进行偏离主题的闲聊。
受 Glaese 等人 (2022) 的启发,可以有两种不同类型的效用函数:
- 基于模型的效用函数将偏好得分分配给反应的不同维度.如流利性、信息性和真实性。这些函数是根据预先收集的人类偏好数据或注释日志数据进行训练的。
- 基于规则的效用函数使用启发式或编程函数衡量响应是否符合特定规则。
此外我们还提出了一个utility function来生成信息丰富且可操作的反馈,以帮助修改提示,使LLM能够生成更好的响应。如图1所示,效用函数生成反馈"但没有关于国际标题数量的信息"。
这样的效用函数是由ψ参数化的文本生成模型Q,可以作为seq2seq或自回归语言模型实现。它的任务是输入用户查询 q、证据 e、候选响应 o 和对话历史记录 hq,并在文本 f 中生成反馈
f= Q(g e, o, hq)
此外,LLM和基于规则的自然语言生成器可以用于反馈生成。
实验配置
检索器:bm25
prompt模版: