当前位置: 首页 > news >正文

论文阅读_训练大模型用于角色扮演

英文名称: Character-LLM: A Trainable Agent for Role-Playing
中文名称: 角色-LLM:训练Agent用于角色扮演
文章: [https://arxiv.org/abs/2310.10158](https://arxiv.org/abs/2310.10158)
作者: Yunfan Shao,  Linyang Li,  Junqi Dai,  Xipeng Qiu
机构: 复旦大学计算机学院
日期: 2023-11-16
引用次数: 5

1 读后感

论文的目标是使用模型来模拟具体的人物角色,这个想法很有意思,有点类似于反思过程的逆向操作。反思的过程是从具体到抽象,我们根据生活中的具体场景和事件进行思考,通过层层抽象最终形成对一个人的理解。而角色扮演则相反,例如模拟一个历史人物,首先从维基百科获取这个人的信息,这些信息通常是抽象的,需要将这些抽象内容具体化,场景化,使其变成鲜活的经历,然后用这些经历来训练模型。

在从具体到抽象的过程中,数据量逐渐减少,因此可以使用提示,有限的上下文就足够支持;而在文中提出的从抽象到具体的扩展过程中,数据量逐渐增多,使用提示就会比较困难,也需要更多的资源,因此作者考虑使用这些新数据来训练模型,通过精调模型的方式来解决问题。

另一个有趣的点是,为了保持角色的完整性,需要让大模型忽略一些角色不应该拥有的知识,例如贝多芬不应该懂得编程。作者通过创建对话的方式来引导确定角色的知识范围,从而创建数据供大模型训练。这种攻防交替的过程有点像“左右互搏”。

我认为,这种逆向思维非常有意思。另一个小发现是:我们可以考虑利用大模型进行一些细化和扩写的工作,比如根据贝多芬的简介写一本贝多芬的故事。

换一个角度看,如果我们能记录一个人的日常生活,可能就能训练出一个能够模拟他的机器人。

2 摘要

目的:利用大模型的理解能力和文本生成能力,来模拟一个人。

方法:教大模型扮演特定的人,如贝多芬、凯撒大帝等。方法侧重于根据特定角色生成训练数据,训练模型模拟这个人。

实验:对训练过的模型代理进行访谈,并评估代理是否记住了他们的角色和经历。

3 引言

之前的实验提出了一个创新的想法,即使用语言模型来模拟人类的日常行为,如起床、做早餐、上班等。这个想法的核心是利用 LLMs 模拟人类的记忆、反思和行动,以生成多人的日常生活场景,实现这一目标的具体方法是通过提示工程。然而,当需要深入模拟一个人的思考和经验时,简单的提示可能就不再足够。一个更为理想的模拟方式是精细调整人工智能模型,让其能够体验事件、感受情绪,并记住与他人的互动。

文中提出了 Character-LLM,一种可训练的角色扮演 Agent,可以从实际经验、特征和情感中学习。

首先,收集某个人物的经历;然后,根据收集到的个人经历提取出场景,作为记忆的闪回;接着,我们将这些闪回扩展成具体的场景,并为这些场景添加详细的元素,使模型能够从详细的经验中学习,从而形成特定的性格和情感。例如,在论文中,作者构建了描述贝多芬父亲的场景,他是一位音乐家,对年轻的贝多芬进行了严格的教育。

最后,将这样的经验输入到特定的语言模型中,例如 LLaMA 7B 模型,并采用监督微调的策略来构建 Character-LLM。为了避免出现诸如古代著名人物的角色扮演代理拥有现代世界知识等不合理的情况,还引入了“保护经验”的概念,以确保角色的一致性。

图 1:Character-LLM. 首先从可靠的来源为这个角色策划了个人资料(以贝多芬为例)。然后,使用以下指令从这些配置文件中引出详细的体验 LLM 作为闪回场景。通过使用体验上传从这些场景中学习,训练有素的模拟可以像贝多芬一样进行高度可信的互动。

最后,通过新颖的面试流程测试这些角色模拟。来评估评角色扮演效果。结果表明,文中提出的 Character-LLMs 是基于其训练数据的成功模拟。得出结论:

  • 可训练的智能体在记忆经验和保持宿主的个性方面很有前途;
  • 可训练的智能体仍然受到有限经验和全局知识的影响,可能会将他们的记忆与幻觉混淆。

文章贡献如下:

  • 提出通过 Character-LLM 构建可训练智能体作为角色扮演的想法。
  • 提出一个训练框架,包括经验重建、上传和保护经验,以训练模拟使用 LLMs。
  • 提出评试角色智能体的方法。

4 方法

根据过去的经历和事件培养个性的方式中汲取灵感。让大型语言模型模仿预定义角色的心理活动和身体行为,从重建的场景中,获得扮演他们的能力。

图 2:角色模拟专用基础模型的机制。

4.1 构建经验数据集

使用大型语言模型重建特定个体的体验。人类的经历是高度复杂的,包括许多重要的里程碑,其中穿插着琐碎和不相关的事件,通常跨越相当长的时期。文中提出了一个基于事实的体验重建管道,分为下面三部分。

4.1.1 Profile 简介

组织一个描述人物各个方面的综合角色档案。描述全面介绍了角色的整体信息和重大事件,涵盖了从幼儿期到最后阶段。具体方法是:使用个人的相应维基百科页面作为个人资料。

4.1.2 Scene 场景

角色互动展开的特定场景,包括交互的时空背景以及所涉及的人物。具体方法是简要描述了角色在特定生命时期的经历之一,让 LLM 根据经历描述列举出几个极有可能发生的不同场景,输出限制为生成场景的简明描述。

4.1.3 Interaction 互动

生成角色的认知过程、话语或动作。所有交互都以纯文本表示。将场景扩展到个人之间的详细交互体验,提示通过 LLM 结合角色之间的互动以及目标个人的想法来详细说明场景。生成的交互由一系列块表示,每个块代表特定角色的话语或目标个体的反映。这里仅关注角色的反应,而不是所有角色的反应,以免训练时产生混淆。

4.2 防护

大型语言模型有跨越多个领域的广泛知识。而过多的知识会破坏表演的可信度,角色可能会无意中表达与角色身份和时代不符的知识。例如,古罗马人不应该会写程序,文中将这个问题称为性格幻觉。

当面对超出角色内在能力界限的问题时,模型应学会避免提供答案。具体方法是:构建一个好奇的角色坚持不懈地向目标角色询问与角色固有身份相矛盾的知识,角色应该表现出无知和困惑。

4.3 上传经验

对于每个角色,仅使用来自相应角色体验的数据来微调单独的模型。由于成本限制,只使用小规模的体验数据集(由大约 1K 2K ∼ 场景组成)进行微调。

5 实验

5.1 数据

表 1:角色及其对应的建构体验数据统计。

5.2 训练

将 LLaMA 7B 作为基础模型,微调了每个角色。在每个示例的开头插入一个元提示。每个示例的提示中都会实例化简明描述,以提供场景的环境、时间、地点和相关人员的背景。附录 C 中列出了一些培训示例。使用 8 个 × A100 80GB GPU 训练一名代理大约需要一个小时。

5.3 面试评估

利用模型建立面试场景,旨在探究他们在上述方面的表演能力和潜在缺陷。评估包括每个角色的 100 多个多样的单轮面试和多轮面试。

单轮面试:一次问模型一个问题,不包括前面问题的对话历史。

多轮面试:多轮对话,利用 ChatGPT 作为面试官,引导 ChatGPT 根据角色的简介提出尖锐的问题。如果模型通过说一些没有太多细节的话来回避问题,ChatGPT 面试官会提出后续问题,从而对模型的演技熟练程度进行更深入的评估。

表 2:单轮和多轮访谈收集的问题数量。

基线:Alpaca 7B,Vicuna 7B 和 ChatGPT。

5.4 主要结果

图 4:性格、价值观、记忆、幻觉和稳定性 不同维度的评估结果。

6 分析

6.1 与角色的一致性

相对于基线模型,角色模型会用他父亲如何教育他的记忆和情感来回答,这更接近于真正的人类。文中认为体验重建和上传过程有助于构建更接近的角色。

6.2 保护场景

少量的保护场景(每个角色少于 100 个场景)有效地缓解了幻觉,而不会对刻画的其他能力造成干扰。

(文章最后还列出了具体数据示例)

相关文章:

论文阅读_训练大模型用于角色扮演

英文名称: Character-LLM: A Trainable Agent for Role-Playing 中文名称: 角色-LLM:训练Agent用于角色扮演 文章: [https://arxiv.org/abs/2310.10158](https://arxiv.org/abs/2310.10158) 作者: Yunfan Shao, Linyang Li, Junqi Dai, Xipeng Qiu 机构: 复旦大学…...

v-if控制div内容显示,克隆这个div但是v-if没有效果

问题描述: 我的子页面打印的时候通过isPdf来隐藏“选择参加人员”按钮。 我子页面有个el-dialog,el-dialog里面有个大的div它的id为app-pre-meet-add,在子页面我通过isPdf来显示我想要的内容。现在我在父页面先通过this.$refs.child.control…...

flutter的状态管理学习

文章目录 1.flutter widget分类2. 代理组件又分为3. 状态 state 数据4. 刷新 数据变化5. code 1.flutter widget分类 组合渲染代理 2. 代理组件又分为 Positioned向父组件传递数据InheritedWidget向子组件传递数据 3. 状态 state 数据 状态就是用到了向子组件传递数据&#xff…...

开源免费虚拟化KVM的部署及其虚拟机资源变更、快照、克隆等常见运维操作

实践说明:基于RHEL9(AlmaLinux9.1)部署,同类系统(CentOS9,RockyLinux9等)适用,但适用场景是不限于此的。 文档说明:本文档旨在帮助快速应用KVM虚拟化技术,重在实践操作,提供了简要参考。 文档形成时期&…...

阿里云git clone超时报错解决方法

参考:引用文章...

力扣刷题-二叉树-合并二叉树

617.合并二叉树(经典) 合并二叉树是操作两棵树的题目里面很经典的,如何对两棵树遍历以及处理? 给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。 你需要将他们合并…...

了解JavaScript 加密、混淆和生成签名

分析并理解网站的 JavaScript 加密、混淆和生成签名的方法是 JavaScript 逆向工程中的一个重要方面。这些技术通常用于保护代码免遭未授权的访问和修改,或确保数据在传输过程中的安全性。 加密 目的:加密用于保护敏感数据,使得只有拥有正确密…...

Go语言的指针(深度解析)

指针是Go语言中的一个重要概念,它提供了对内存地址的直接访问和操作能力。通过指针,我们可以高效地传递和修改变量的值,避免了值传递所带来的拷贝开销。在本文中,我们将深入探讨Go语言指针的概念、使用方法和注意事项。 指针的本…...

HTB-SAU

信息收集 # cat port.nmap # Nmap 7.94 scan initiated Thu Jan 11 19:26:51 2024 as: nmap -sS --min-rate 10000 -p- -oN port.nmap 10.10.11.224 Nmap scan report for 10.10.11.224 (10.10.11.224) Host is up (0.28s latency). Not shown: 65531 closed tcp ports (r…...

AI创新之美:AIGC探讨2024年春晚吉祥物龙辰辰的AI绘画之独特观点

🎬 鸽芷咕:个人主页 🔥 个人专栏:《粉丝福利》 《linux深造日志》 ⛺️生活的理想,就是为了理想的生活! ⛳️ 推荐 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下…...

Linux的SSH服务

一.SSH服务简介 1.什么是SSH SSH(Secure Shell)是一种安全通道协议,主要用来实现字符界面的远程登录、远程复制等功能。SSH 协议对通信双方的数据传输进行了加密处理,其中包括用户登录时输入的用户口令,SSH 为建立在应…...

MySQL连续案例续集

01)查询学过「张三」老师授课的同学的信息 SELECT s.*, c.cname, t.tname, sc.score FROM t_mysql_teacher t, t_mysql_course c, t_mysql_student s, t_mysql_score sc WHERE t.tid c.tid AND c.cid sc.cid AND sc.sid s.sid AND t.tname ‘张三’ 02&#x…...

【STM32读取HX711的函数】

[两个普通IO读取HX711数据的函数-主芯片是STM32F407] 以下是.h文件中的内容: #ifndef __hx711_h #define __hx711_h #define HX711CH1_DIO_GROUP GPIOA #define HX711CH1_CLK_GROUP GPIOA #define HX711CH1_DIO_PIN GPIO_Pin_1 #define HX711CH1_CLK_PIN GPIO_Pin…...

MATLAB对数据隔位抽取和插值的几种方法

对于串行的数据,有时我们需要转成多路并行的数据进行处理,抽取;或者是需要对数据进行隔点抽取,或对数据进行插值处理。此处以4倍抽取或插值为例,MATLAB代码实现。 文章目录 抽取方法一:downsample函数方法…...

[NSSCTF Round#16 Basic] CPR

打着玩玩,比赛很简单。 Crypto pr 一个RSA题,n1p*q,n2q*r给了两个c和p,r而且flag经过pad用单因子无法解出。分别用p,r解完再取crt from Crypto.Util.number import * import randomflagplaintext NSSCTF{****************} charset abcdefghijklmn…...

LAMMPS 文献:9 种熔化温度模拟方法的总结与比较:两相法、单相法以及缺陷法

记录一下检索到一篇通过LAMMPS模拟熔化温度的总结文章:单相方法、过热–过冷方法、Z 方法、修正 Z 方法、孔洞方法、修正孔洞方法、两相方法、夹层方法以及修正两相法。 感谢论文的原作者! 文章题目: A comprehensive investigation on the…...

JSR-107 (JCACHE)

JSR107 Specification 1.1.1 Maintenance Release https://docs.google.com/document/d/1ijduF_tmHvBaUS7VBBU2ZN8_eEBiFaXXg9OI0_ZxCrA/edit?pli1 What is JSR-107? JSR-107 is a standardized API for temporary, in-memory caching in Java applications. It defines a s…...

kylin4.0.3升级问题

话接前文: kylin升级(3.0.1->kylin-4.0.3)-CSDN博客文章浏览阅读941次,点赞29次,收藏12次。原本的cube太多了,换其他OLAP数据库太麻烦。相比之下,升级是一个很好的选择(官网有说明内存降低和构…...

【UML】第16篇 活动图

目录 一、什么是活动图 二、应用场景: 三、绘图符号的说明: 四、语法: 五、例图 六、建模的流程 6.1 对业务流程建模时 6.2 对用例进行活动图建模时 一、什么是活动图 活动图(Activity Diagram)是UML中用于描…...

Python学习之路-函数进阶

Python学习之路-函数进阶 参数和返回值的作用 函数根据有没有参数以及有没有返回值,可以相互组合,一共有4 种组合形式:无参数,无返回值;无参数,有返回值;有参数,无返回值&#xff…...

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板,载入页面后,会显示引导弹窗,适用于引导用户使用页面,点击完成后,会显示下一个引导弹窗,直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...

AtCoder 第409​场初级竞赛 A~E题解

A Conflict 【题目链接】 原题链接:A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串,只有在同时为 o 时输出 Yes 并结束程序,否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...

Qt Http Server模块功能及架构

Qt Http Server 是 Qt 6.0 中引入的一个新模块,它提供了一个轻量级的 HTTP 服务器实现,主要用于构建基于 HTTP 的应用程序和服务。 功能介绍: 主要功能 HTTP服务器功能: 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...

网络编程(UDP编程)

思维导图 UDP基础编程(单播) 1.流程图 服务器:短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...

Element Plus 表单(el-form)中关于正整数输入的校验规则

目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入&#xff08;联动&#xff09;2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...

接口自动化测试:HttpRunner基础

相关文档 HttpRunner V3.x中文文档 HttpRunner 用户指南 使用HttpRunner 3.x实现接口自动化测试 HttpRunner介绍 HttpRunner 是一个开源的 API 测试工具&#xff0c;支持 HTTP(S)/HTTP2/WebSocket/RPC 等网络协议&#xff0c;涵盖接口测试、性能测试、数字体验监测等测试类型…...

Python Einops库:深度学习中的张量操作革命

Einops&#xff08;爱因斯坦操作库&#xff09;就像给张量操作戴上了一副"语义眼镜"——让你用人类能理解的方式告诉计算机如何操作多维数组。这个基于爱因斯坦求和约定的库&#xff0c;用类似自然语言的表达式替代了晦涩的API调用&#xff0c;彻底改变了深度学习工程…...

C# 表达式和运算符(求值顺序)

求值顺序 表达式可以由许多嵌套的子表达式构成。子表达式的求值顺序可以使表达式的最终值发生 变化。 例如&#xff0c;已知表达式3*52&#xff0c;依照子表达式的求值顺序&#xff0c;有两种可能的结果&#xff0c;如图9-3所示。 如果乘法先执行&#xff0c;结果是17。如果5…...

【Veristand】Veristand环境安装教程-Linux RT / Windows

首先声明&#xff0c;此教程是针对Simulink编译模型并导入Veristand中编写的&#xff0c;同时需要注意的是老用户编译可能用的是Veristand Model Framework&#xff0c;那个是历史版本&#xff0c;且NI不会再维护&#xff0c;新版本编译支持为VeriStand Model Generation Suppo…...

ZYNQ学习记录FPGA(一)ZYNQ简介

一、知识准备 1.一些术语,缩写和概念&#xff1a; 1&#xff09;ZYNQ全称&#xff1a;ZYNQ7000 All Pgrammable SoC 2&#xff09;SoC:system on chips(片上系统)&#xff0c;对比集成电路的SoB&#xff08;system on board&#xff09; 3&#xff09;ARM&#xff1a;处理器…...