前沿重器[37] | 大模型对任务型对话的作用研究

news2024/11/27 7:32:25

前沿重器

栏目主要给大家分享各种大厂、顶会的论文和分享,从中抽取关键精华的部分和大家分享,和大家一起把握前沿技术。具体介绍:仓颉专项:飞机大炮我都会,利器心法我还有。(算起来,专项启动已经是20年的事了!)

2023年文章合集发布了!在这里:又添十万字-CS的陋室2023年文章合集来袭

往期回顾

  • 前沿重器[32] | 域外意图检测——解决“没见过”的问题

  • 前沿重器[33] | 试了试简单的prompt

  • 前沿重器[34] | Prompt设计——LLMs落地的版本答案

  • 前沿重器[35] | 提示工程和提示构造技巧

  • 前沿重器[36] | ACL23-基于检索的大语言模型-报告阅读

大模型的多轮,我们一般想到的方案都是比较大胆地把历史记录都交给大模型让大模型来做生成,这个在比较自由、开放的聊天中,肯定是有效的,但是在实际场景中,我们往往希望模型能够在一定程度控制对话的流程,我是在找类似的文章的。

这篇文章应该是我最近找的比较贴切的一篇了,所以做了精读,任务型对话是各种多轮对话里最要求主动控制对话流程的一类,因此这篇文章里面的研究应该对我想研究的部分应该也有不少用的。

论文:

  • Are Large Language Models All You Need for Task-Oriented Dialogue?

  • https://arxiv.org/abs/2304.06556

懒人目录:

  • 关键贡献。

  • 流程任务架构。

  • 方案细节。

  • 实验解析和分析

  • 文章结论。

  • 个人思考。

关键贡献

文章验证了大模型在任务型对话中多个模块中起到的作用,主要有如下结果:

  • 建立了一套基于大模型的任务型对话pipline。

  • 大模型在状态跟踪(DST,dialogue state tracking)上的效果并不好。

  • 但给定对话状态,大模型的生成却具有更好的效果。

  • 在few-shot、zero-shot等场景,大模型具有很高的利用价值。

流程任务架构

首先先来看看作者设计的整个流程架构:

e7315a3804a0a1856af7cc75a11ac5ed.png

在这个架构中,模块分成了4个,分别是上下文表征、prompt构造、大模型对话状态跟踪、大模型生成这4个模块,而对于任务型对话,比较关键的应该是对话状态跟踪和生成这两个模块,即解决“目前聊到什么程度”和“应该说什么”的问题,相比单轮的对话,多轮更多就是考虑这两个问题了。

另外值得注意的是,作者重点强调了,此处是不做模型微调的,因为要考验的是模型的开箱即用能力。事实也确实需要如此,在很多场景下,我们没有条件去微调模型,无论是数据、机器还是别的问题,因此我自己也挺认可作者在这块的尝试,需要分析清楚,大模型在什么方面的能力较强,适合做什么任务,了解其边界。

0d0667c65253c85dabac1636979ccb6d.png

此后,作者又给出了更为详细的流程:

  • 首先,会编码一批训练数据,这些数据是用于进行few-shot的样本。

  • 意图/领域识别,并根据识别结果构造原始的prompt。

  • 用大模型推理出对话状态,并检索出数据库信息和另外的prompt。

  • 利用大模型再做出最终的回复话术。

有了整个架构,我们能很轻松地对论文提出的大体框架有一个了解,剩下就是每一部分的具体细节了。

方案细节

在整个流程中,其实有3次大模型的调用,即领域意图识别、对话状态跟踪以及回复话术生成3个部分,因为模型是不能微调的,所以整个流程里,我们能做的只有构造出良好的prompt来引导模型输出更好的结果,而为了更好地体现大模型的泛用性,所以在prompt构造时,也只是用简单快速的结果。

在任务型对话中,首先是需要进行query理解的,在这里作者叫做“领域识别”,领域识别是为了识别目前用户所说的话是什么状态的,只有识别出来领域,才能明确目前的对话状态以及下一步可以采取的对话策略。而做“领域识别”的方法,是通过构造合适的prompt,来让模型来了解具体的领域,这里作者在附录里给出了一个例子,我们重点关注的是,作者使用了哪些特征和例子,以及提示的话术技巧。

cc06a928e25544119d0806ea945f1183.png

然后是对话状态跟踪,结合领域识别的结果,总结出目前的对话状态,为后续的文本生成服务,这里也提供一个例子,里面会包含任务定义、领域描述、对话历史和用户画像等信息,最终返回的是需要更新的对话状态部分。

da187d5027c880f34fafc4c2e4d309a3.png

至于最后的结果生成,则是结合前面的内容,去生成返回给用户的回复,值得注意的是,待生成的内容并不是完整的,而是会在一些位置挖槽或者占位符的模板,然后用额外的信息进行填补,直接看例子吧,关注绿色那块。

7efad7e9b6ecae2ad137266d34c0d300.png

实验解析和分析

实验的设置里,多半是讲了使用的大模型以及数据集,还有评价指标(这里有自动化指标也有人工评价指标),这里就不赘述了,更多是结论和规律的挖掘。

首先是在领域识别这一块,主要有如下结论:

  • 不同的模型对领域识别的效果差异是比较大的,这块有调整和选择的空间。

  • 有时候我们会以我们的理解为模型提供一些额外的信息,但不一定每次加入额外信息都会带来提升,还可能会带来伤害。

然后是对话状态跟踪的部分,此处作者使用了有监督模型和大模型的预测进行对比。

  • 有监督模型的效果比大模型要好不少。

  • 哪怕使用了few-shot之类的in context learning的方式,仍旧有比较大的差距。

  • chatgpt的效果比别的大模型有比较大的优势。

而从整个对话的角度来看,看对话成功的指标,有如下结论:

  • 有监督模型仍然具有较大优势。

  • 添加few-shot,会有一定收益,但是这个数量好像对结果影响不大。

  • 增加对话轮数的输入,对结果的收益明显。

文章结论

首先来看看作者对LLM在任务型对话实验中的一些结论吧:

  • 状态跟踪模块,大模型的表现并不好,需要依赖更多的调整以及更强的结果解析,才能够优化。

  • 而在足够好的状态跟踪下,大模型在最终的结果生成下,能表现得很好,即使没做微调。

  • 如果能用到更强的大模型,该效果的上限会有明显提升。

个人思考

文章的这些实验其实给了不少的启示,虽然只是局限的任务型,但是现在很多多轮对话场景,其实都是任务型的复杂版罢了,毕竟很多时候是要对对话策略和流程进行理解和控制的,这些启示也能为实际使用提供宝贵的经验参考,我的想法是下面5点。

第一在系统方案设计上,首先思考的是,在系统层面,我们并不需要拘束大模型的调用次数,实际上是可以调用多次的,让他分步逐步完成一系列任务,例如本文的设计就让模型调用了3次,每次之间我们可以通过调用数据库之类的手段灵活操控后续的步骤,通过逐步引导,最终能够让大模型完成任务。

第二是对任务方案的选型,即每个步骤中的方案选择中,我们一定程度明确了大模型的优势和劣势。在缺少微调的条件下,few-shot和zero-shot配合prompt下,大模型对于一些偏传统NLP的任务,例如分类等,能有一个还行的效果,相比需要训练的小模型,在此场景下,大模型有一定的优势。然而尽管如此,但是如果能足够的数据微调,小模型还是能更容易有更好的结果。

第三,还是大模型的优势,主要是生成,即最终返回给用户的response部分,因此在系统中,我们可以比较放心地把生成的任务交给他,前提是,prompt中要有足够明确的引导,在提供足够的信息支撑下,模型基本都能够给出适合场景、信息完善的回复,这方面是值得信任的。

第四是强调,prompt的重要性,正如文章所言。作者在文中有强调两个点,模型不微调以及prompt的精调是可能存在收益的,只是在实验过程出于严谨和泛用性而没有做,侧面其实就强调了这块的调优空间是非常大的,我们在日常的工作中可以提供比较多的精力在这块,有一定的性价比。至于prompt的调优技巧,和日常模型学习类似,还是看论文和看案例,看看大家经常提到的方案和技巧,需要具有什么信息等。

第五是基于一二三这三点导出的,即一个多轮对话系统可能的一个理想形态,大模型可能是一个关键模块,但并不唯一,更多的可能可以考虑把他放在最后一步,即回复生成这方面,而上游的query理解、对话策略,可能用早先已有的一些方案,例如分类模型、数据库与规则等,可以有效对句子进行解析和理解,并且对对话策略实现了有效控制。不要把大模型仅用在最后一步当做是很low的事,其实这一步也是非常关键的,因为早先的多轮对话,一直会苦恼于最终文本怎么生成,一般的方案就只是人工编辑、历史对话挖掘和有监督的文本生成,这3个方案都对数据有很强的依赖性,大模型已经则极大地解决了这个问题。

6404b49ac74071254823683c0bb37cfd.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1175511.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Makefile 保姆级使用教程

目录 Makefile 规则 Makefile的使用介绍 make 命令的使用 即时变量、延时变量介绍和使用 使用make命令编译多个文件 假想目标 常用函数 1.$(foreach var,list,text) 2.$(wildcard pattern) 3.$(filter pattern...,text) 4.$(filter-out pattern...,text) 5.$(patsub…

【每日一题】最大单词长度乘积

文章目录 Tag题目来源题目解读解题思路方法一:转态压缩 写在最后 Tag 【位运算-状态压缩】【字符串】【2023-11-06】 题目来源 318. 最大单词长度乘积 题目解读 找出英文字符串数组中两个字符串长度乘积的最大值,并且这两个字符串不含公共字母。 解题…

Day21力扣打卡

打卡记录 在树上执行操作以后得到的最大分数&#xff08;树状DP&#xff09; 链接 大佬的题解 class Solution { public:long long maximumScoreAfterOperations(vector<vector<int>> &edges, vector<int> &values) {vector<vector<int>…

更强的端点控制如何保护系统和数据

端点——员工日常使用的笔记本电脑、设备和工作站——正在成为网络攻击者的目标。 如果他们可以仅通过一个端点访问组织的系统&#xff0c;那么他们就拥有一个启动板&#xff0c;可以从该启动板在网络上横向移动&#xff0c;以窃取数据或植入勒索软件等。 他们甚至可以提升权…

基于白冠鸡算法的无人机航迹规划-附代码

基于白冠鸡算法的无人机航迹规划 文章目录 基于白冠鸡算法的无人机航迹规划1.白冠鸡搜索算法2.无人机飞行环境建模3.无人机航迹规划建模4.实验结果4.1地图创建4.2 航迹规划 5.参考文献6.Matlab代码 摘要&#xff1a;本文主要介绍利用白冠鸡算法来优化无人机航迹规划。 1.白冠鸡…

Java与Redis的集成

目录 一、Java连接Redis 1.1 导入依赖 1.2 Redis服务器准备 1.3 建立连接 二、Java操作Redis的常见类型数据存储 2.1 String&#xff08;字符串&#xff09;存取值操作 2.1.1 指定存储数据的数据库与存储入库操作 2.1.2 存储数据的修改与查询 2.1.3 数据临时存储 2.2…

Python unittest单元测试框架 TestSuite测试套件

TestSuite 测试套件简介 对一个功能的验证往往是需要很多多测试用例&#xff0c;可以把测试用例集合在一起执行&#xff0c;这就产生了测试套件TestSuite 的概念&#xff0c;它是用来组装单个测试用例&#xff0c;规定用例的执行的顺序&#xff0c;而且TestSuite也可以嵌套Tes…

AI芯片架构体系综述:芯片类型CPU\GPU\FPGA\ASIC以及指令集CSIS\RISC介绍

大模型的发展意味着算力变的越发重要&#xff0c;因为大国间科技竞争的关系&#xff0c;国内AI从业方在未来的一段时间存在着算力不确定性的问题&#xff0c;与之而来的是许多新型算力替代方案的产生。如何从架构关系上很好的理解计算芯片的种类&#xff0c;并且从计算类型、生…

FastBond2阶段2——基于ESP32C3开发的简易IO调试设备

1. 项目介绍 之前买了许多国产单片机esp32c3一直在吃灰&#xff0c;没有发挥它的真实价值。非常感谢硬禾组织的Fastbond2活动&#xff0c;刚好两者经过微妙的碰撞。恰可以用于FastBond2活动主题4 - 测量仪器&#xff08;单片机开发测试领域&#xff09;&#xff0c;或者用于国…

虚拟机项目部署与发布

目录 一.单机项目 1.1. 本机测试 1.2.部署 二.前后端 3.1.准备 3.2.部署 今天就到这里了哦&#xff0c;希望能帮到你哦&#xff01;&#xff01;&#xff01; 一.单机项目 当我们拿到已开发完的项目后&#xff0c;首先需要在我们自己的主机上进行测试&#xff0c;开发完的…

【Shell脚本4】Shell 传递参数

Shell 传递参数 我们可以在执行 Shell 脚本时&#xff0c;向脚本传递参数&#xff0c;脚本内获取参数的格式为&#xff1a;$n。n 代表一个数字&#xff0c;1 为执行脚本的第一个参数&#xff0c;2 为执行脚本的第二个参数&#xff0c;以此类推…… 以下实例我们向脚本传递三个…

持续集成交付CICD:安装Jenkins Slave(从节点)

目录 一、实验 1.安装Jenkins Slave 二、问题 1.salve节点启动jenkins报错 2.终止命令行jenkins节点状态丢失 一、实验 1.安装Jenkins Slave&#xff08;从节点&#xff09; &#xff08;1&#xff09;查看jenkins版本 Version 2.414.2 (2) 添加节点 系统设置&#xf…

c++ 信息学奥赛 2047:【例5.16】过滤空格

#include<cstdio> using namespace std; char st[200]; int main() { while (scanf("%s",&st)1)printf("%s ",st); //%s 后要有一个空格&#xff0c;不能省略return 0; } 解析&#xff1a;本题中使用一个技巧&#xff0c;那就是scanf函数…

Redis原理到常用语法基础图文讲解

在初期&#xff0c;已经讲述了Redis安装问题。现在正式进入Redis的入门阶段 系统架构的演进 传统单机架构 一台机器运行应用程序、数据库服务器 现在大部分公司的产品都是这种单机架构。因为现在计算机硬件发展速度很快&#xff0c;哪怕只有一台主机&#xff0c;性能也很高…

多种循环法打印乘法表

1 问题 使用多种循环法打印乘法表&#xff0c;有助于巩固夯实循环的语法及用法。 使用for-for、for-while、while-for方法实现乘法表。 2 方法 &#xff08;1&#xff09;for-for:使用两个for.. in..来实现乘法表。 &#xff08;2&#xff09;for-while:使用一个for语句再一个w…

C++前缀和算法的应用:最大化城市的最小供电站数目

本文涉及的基础知识点 C算法&#xff1a;前缀和、前缀乘积、前缀异或的原理、源码及测试用例 包括课程视频 二分法 题目 给你一个下标从 0 开始长度为 n 的整数数组 stations &#xff0c;其中 stations[i] 表示第 i 座城市的供电站数目。 每个供电站可以在一定 范围 内给所…

强化学习中策略的迭代

一、策略迭代 一旦使用vπ改善了策略π&#xff0c;产生了更好的策略π0&#xff0c;我们就可以计算vπ0并再次对其进行改进&#xff0c;产生更好的π00。因此&#xff0c;我们可以获得一系列单调改善的策略和值函数&#xff1a; 其中E−→表示策略评估&#xff0c;I−→表示策…

[云原生1. ] Docker 的安全及日志管理

文章目录 1. Docker自身存在的安全问题1.1 Docker 自身漏洞1.2 Docker 源码问题 2. Docker 架构缺陷与安全机制2.1 容器之间的局域网攻击2.2 DDoS 攻击耗尽资源2.3 有漏洞的系统调用2.4 共享root用户权限 3. Docker 安全基线标准3.1 docker容器使用安全注意点&#xff1a;3.1.1…

【Spring Boot 源码学习】JedisConnectionConfiguration 详解

Spring Boot 源码学习系列 JedisConnectionConfiguration 详解 引言往期内容主要内容1. RedisConnectionFactory1.1 单机连接1.2 集群连接1.3 哨兵连接 2. JedisConnectionConfiguration2.1 RedisConnectionConfiguration2.2 导入自动配置2.3 相关注解介绍2.4 redisConnectionF…

3.26每日一题(线性非齐次的特解如何设)

1、非齐次方程有e的2x次幂&#xff1a;特解也有e的2x次幂 2、e的2x次幂前面有特殊的一元方程&#xff1a;特解要设为一般的特征方程&#xff08;axb&#xff09; 3、求线性齐次特征方程的特征根&#xff1b; 4、判断e的 rx 次幂中的 r 和特征根有没有重合的个数&#xff1a;…