RoleLLM:打造高效的角色扮演语言模型

2023-11-24 17:23:21 浏览数 (1)

代码语言:javascript复制
1. 论文名称: RoleLLM: benchmarking, eliciting, and enhancing role-playing abilities of large language models
2. 论文团队: 北航,中科大
3. 论文链接: https://arxiv.org/pdf/2310.00746.pdf
4. github: https://github.com/InteractiveNLP-Team/RoleLLM-public.git

代码语言:javascript复制
目录

1. 摘要
  1.1 动机
  1.2 目标
  1.3 贡献

2. 核心方法

  2.1 设计原则
    2.1.1 说话风格模仿
    2.1.2 角色特定知识与记忆注入

  2.2 RoleGPT
    2.2.1 角色扮演定制的限制
    2.2.2 对话历史建模的挑战
    2.2.3 对话工程方法的修改
    2.2.4 对话工程的具体实现

  2.3 上下文指令生成 Context-Instruct
    2.3.1 角色简介分段 (Role Profile Segmentation)
    2.3.2 指令和回应生成 (Instruction and Response Generation)
    2.3.3 数据过滤和后处理 (Data Filtering and Post-processing)

  2.4 角色条件化指令微调 RoCIT

3. RoleBench : 角色扮演能力基准测试

  3.1 数据构造
    3.1.1 角色选择 
    3.1.2 角色简介构建
    3.1.3 一般指令抽样   
    3.1.4 RoleBench数据生成
    3.1.5 数据清洗 

  3.2 数据分析
    3.2.1 RoleBench 数据集的生成
    3.2.2 RoleBench 的统计和质量
    3.2.3 多样性分析

4. 实验

  4.1 主要实验结果
    4.1.1 指令生成(英语)
    4.1.2 指令生成(中文)
    4.1.3 角色泛化(英语)

  4.2 消融研究
    4.2.1 不同RoleGPT提示策略的效果
    4.2.2 不同角色定制化策略的效果
    4.2.3 Context-Instruct在注入角色特征知识方面的效果
    4.2.4 规模

5. 幻想一下

1. 概要

论文介绍了一种评估和增强LLM在角色扮演方面能力的方法。作者首先提出了一个角色扮演基准(RoleBench),用于综合评估LLM的角色扮演能力,然后设计了一种名为RoleLLM的模型,它通过对话工程和上下文指令生成技术来模仿特定角色的对话风格。

1.1 研究动机 作者指出,虽然一些开源的LLM在模仿特定角色的对话风格和特性方面表现出一定的能力,但这些模型在角色扮演的任务中的优化程度有限。

1.2 研究目标 提出了通过设计新的评估基准和方法来增强LLM的角色扮演能力,使其能更好地模拟特定角色的对话风格和属性。

1.3 研究贡献 角色扮演基准(RoleBench)、设计的RoleLLM模型,以及这些工具在提升LLM角色扮演能力方面的实验验证。

2. 核心方法

2.1 设计原则

2.1.1 说话风格模仿 (1) 词汇一致性 模型生成的回应应包含角色常用的口头禅或习语,确保与角色独特的语言风格保持一致。 (2) 对话忠诚度 模型不仅要生成与上下文相关的回应,还要在风格上类似于角色的典型对话。这包括捕捉角色独特的句法和语调,比如使用口语表达方式、粗犷的说话风格。

2.1.2 角色特定知识与记忆注入 (1) 剧本基础知识 涉及在剧本中明确记录的细节,比如角色的详细背景、情景记忆和角色经历的特定事件。例如,扮演钢铁侠时,模型应包含剧本基础知识,如托尼·斯塔克在被囚禁在山洞时制造出第一套钢铁侠装甲的经历。 (2) 剧本无关的知识 包括角色可能拥有的通用知识或专长。例如,扮演钢铁侠时,除了剧本基础知识外,还应包括作为企业家的剧本无关知识,如商业头脑、领导能力和技术专长。

2.2 RoleGPT

2.2.1 角色扮演定制的限制 由于对GPT进行微调的限制,通常通过提示(prompting)来定制GPT进行角色扮演,包括zero-shot指令和few-shot提示工程(即上下文学习)。 2.2.2 对话历史建模的挑战 对于像ChatGPT和GPT-4这样的模型,它们已经将其上下文学习能力转变为对话历史建模。在这种情况下,传统的few-shot提示工程不足以完全激发角色扮演能力。

2.2.3 对话工程方法的修改 为了解决上述问题,作者对few-shot提示方法进行了修改,转而采用对话工程的方式。 2.2.4 对话工程的具体实现 (1) 使用GPT-4生成角色描述 首先使用审核过的GPT-4来生成角色描述和口头禅,作为定制指令(即系统指令)的核心。 (2) 整体角色扮演任务指令 然后,包含一个类似“请像[角色名称]这样说话”的整体角色扮演任务指令,并使用BM25算法检索与角色简介相关的前5个对话对作为few-shot示范。 (3) 捕捉角色的说话风格 通过这种方法,RoleGPT的回应可以捕捉到角色的说话风格,并包含一些角色特定的知识。

2.3 上下文指令生成 Context-Instruct Context-based Instruction Generation 为了增强角色特定知识密度而引入的上下文指令生成方法。这个过程包括三个步骤: 2.3.1 角色简介分段 (Role Profile Segmentation) 为了适应GPT模型上下文大小的限制,如何将角色简介分割成更容易管理的部分。这个分割过程主要包括两个部分: (1) 角色描述和口头禅(Segment a) 这部分包含对角色的综合描述,以及角色的标志性语句或口头禅。这些信息用于生成与剧本无关的指令,这些指令不依赖于角色在任何特定剧本中的行为或历史,而是更多地依赖于角色的一般特征和知识。 (2) 结构化对话(Segment b) 包含了按一定结构排列的对话,可能来自于角色在剧本中的具体对话或场景。这些对话段落被用来生成基于剧本的指令,这种指令依赖于角色在特定剧本或故事情境中的具体经历和互动。

2.3.2 指令和回应生成 (Instruction and Response Generation) (1) 生成候选项 在生成角色特定指令数据的过程中,考虑三个元素:问题(Q)、对应的答案(A)、以及带有理由的置信度评分(C)。 (2) 使用LLM生成三元组 对于每个角色和段落,使用大型语言模型(LLM)来生成这些三元组。

(3) 质量问题和解决方案 初步尝试表明,不带置信度评分的QA对生成质量较低,这种做法在基于剧本的指令中经常出现问题不完整,而在与剧本无关的指令中由于缺乏上下文而出现幻觉。因此,模型被提示生成带有理由的置信度评分,以评估问题的完整性或事实性。

2.3.3 数据过滤和后处理 (Data Filtering and Post-processing) 包括基于置信度评分的过滤和去重,以确保数据的质量和多样性。

2.4 角色条件化指令微调 RoCIT Role-Conditioned Instruction Tuning

(1) 增强数据的类型 ⭕️ 通用领域指令数据:由RoleGPT生成,用于一般性对话和交互。 ⭕️ 角色特定指令数据:通过Context-Instruct生成,专门针对特定角色的知识和风格。

(2) 微调的目的 微调这些数据不仅改善了模型的说话风格,还将角色特定的知识嵌入到模型权重中。

(3) 应用于不同语言的模型 将此方法应用于英语的LLaMA和中文的ChatGLM2,分别获得了RoleLLaMA和RoleGLM。

(4) 角色条件化微调与普通微调的区别 与传统的有监督微调相比,角色条件化微调采用特殊策略进行角色定制,这包括系统指令和检索增强。

(5) 系统指令的定制化 ⭕️ 在RoCIT中,在输入前附加了包含角色名称、描述、口头禅和角色扮演任务指令的系统指令。 ⭕️ 对于RoleLLaMA,使用了Alpaca提出的聊天标记语言格式。 ⭕️ 对于RoleGLM,将其翻译成中文。 ⭕️ 在训练时,仅对回应和特殊标记(以蓝色显示)进行监督。

(6) 推理时的用户交互 ⭕️ 在推理(即模型使用)阶段,用户可以通过系统指令轻松地修改LLM的角色。 ⭕️ 与检索增强相比,使用系统指令可以减少上下文窗口的消耗。

3. RoleBench : 角色扮演能力基准测试

3.1 数据构造 构建一个名为RoleBench的数据集,用于评估和增强角色扮演能力。这个过程包括五个步骤:

3.1.1 角色选择 (1) 选择代表性角色 : 仔细挑选100个代表性且独特的角色,这些角色来自多样化的剧本,包括电影剧本、SummScreen项目,以及手动策划的中文剧本。

(2) 使用GPT-4辅助 : 在选择过程中利用GPT-4的帮助。

3.1.2 角色简介构建 (1) 生成角色描述和口头禅 : 利用GPT-4生成角色描述和标志性语句。 (2) 结构化对话解析 : 从剧本中解析结构化对话。

3.1.3 一般指令抽样 (1) 抽取英文通用指令 : 从多个数据集中随机抽取1,500条英文通用指令,包括Super-NaturalInstruct、UltraChat和Alpaca的指令。 (2) 抽取中文通用指令 : 抽取COIG和BELLE的1,479条中文通用指令。 (3) 指令去重 : 基于BM25相似度进行去重。

3.1.4 RoleBench数据生成 (1) RoleBench 通用数据 : 使用RoleGPT为每个通用指令生成多个回应。

代码语言:javascript复制
# 举例说明(通用数据)
假设我们有一个通用指令:“描述一幅名画的细节。” 使用RoleGPT,我们为这个指令生成多个回应。每个回应都是独立的,可能涵盖不同的名画和描述风格。例如:

回应1:《蒙娜丽莎》的最引人注目之处在于她神秘的微笑和深邃的眼神,背景描绘了一幅模糊的山水画,增添了作品的神秘感。
回应2:梵高的《星夜》以其旋转的天空和充满活力的色彩而闻名,夜空中闪烁的星星和动荡的云层构成了一幅充满激情的画面。

(2) RoleBench 特定数据 : 使用Context-Instruct生成角色特定的问答对。

代码语言:javascript复制
# 特定数据

假设我们选择了一个特定的角色:“19世纪的艺术评论家”。我们使用Context-Instruct为这个角色生成特定的问答对。例如:

问答对-1

问题:作为19世纪的艺术评论家,你如何评价印象派画作的风格变革?
答案:印象派画作的风格变革反映了对光线和颜色的新认识,它们摒弃了传统细腻的绘画技巧,转而关注瞬间感觉的捕捉和大胆的色彩运用。

问答对-2

问题:19世纪艺术评论家如何看待蒙娜丽莎的微笑?
答案:蒙娜丽莎的微笑被视为艺术史上的一个谜,其微妙的表情展现了艺术家达芬奇对人物情感细微变化的深刻洞察。

3.1.5 数据清洗 清洗过程确保了回应的完整性、AI身份和角色身份的隐藏,以及非拒绝性。

3.2 数据分析

3.2.1 RoleBench 数据集的生成 ⭕️ RoleBench-general-en (英文) 和 RoleBench-general-zh (中文):使用GPT-4 API生成。 ⭕️ RoleBench-specific-en (英文) 和 RoleBench-specific-zh (中文):基于GPT-3.5 API,使用Context-Instruct方法生成。 ⭕️ 角色选择、描述和口头禅生成:所有这些步骤均通过GPT-4 API执行。 ⭕️ GPT API调用参数:附录F中展示了用于调用GPT API的具体参数。

3.2.2 RoleBench 的统计和质量 ⭕️ 基本统计信息:表1提供了RoleBench的基本统计数据。

⭕️ 质量评估:随机抽样了100个通用和角色特定的实例,由专家注释员从三个方面评估它们的质量。表2的结果表明,大多数实例质量较高。 ⭕️ 有效和无效示例:附录J提供了有效和无效示例。

3.2.3 多样性分析 ⭕️ 指令的动词-名词结构:图4展示了RoleBench-en指令的动词-名词结构,其中内圈代表前10个动词,外圈代表与这些动词直接相关的前4个名词对象,这些结构占指令总数的5.6%。

⭕️ 角色分类和多样性:将RoleBench中的角色划分为多个类别,并在图3中使用词云展示它们的多样性。

⭕️ 指令和回应的长度分布:图5展示了指令和回应的长度分布。

4. 实验

4.1 主要实验结果 4.1.1 指令生成(英语)

表格3a和3b展示了Rouge-L和GPT评分,这些评分用于评估各模型在指令概括能力上的表现。

(1) RoleLLaMA的表 ⭐️ RoleLLaMA在角色扮演性能方面相较于指令调整的基准线和原始基础模型表现出了显著的提升。这种提升体现在模仿说话风格(CUS)、响应准确性(RAW)和角色特定知识(SPE)方面。 ⭐️ LLaMA-script(直接在原始对话脚本数据上调整的模型)甚至表现不如基础LLaMA模型,这表明了去噪脚本数据的重要性。

(2) Alpaca/Vicuna与LLaMA的对比 ⭐️ 这种比较突显了通用指令调整在角色扮演中的有效性。然而,RoleLLaMA与Alpaca/Vicuna之间的差异强调了大型语言模型(LLMs)需要在通用指令遵循之外增强其角色扮演能力的必要性。

(3) RoleLLaMA与RoleGPT的对比 ⭐️ 尽管在模仿说话风格(CUS)和响应准确性(RAW)方面RoleLLaMA落后于RoleGPT,但在角色特定知识方面超越了RoleGPT,这表明了Context-Instruct技术的有效性。

4.1.2 指令生成(中文) 对中文指令概括能力的评估,涉及对5种中文角色使用指令调整的大型语言模型(LLMs)进行的实验。

(1) ChatGLM2的表现 ⭐️ 实验发现,即便在没有角色扮演数据增强的情况下,ChatGLM2在角色扮演性能上表现突出,尤其是在角色特定知识方面。

⭐️ 这意味着ChatGLM2在理解和执行与特定角色相关的指令方面具有较强的能力,即使这些能力没有通过专门的角色扮演数据来增强。

(2) RoleBench的影响 ⭐️ 当ChatGLM2使用RoleBench进行微调后,其角色扮演能力在所有评价指标上都得到了进一步的提升。 ⭐️ 微调后的ChatGLM2甚至在某些评价指标上略微超过了RoleGPT。这表明RoleBench作为一个微调工具,在提升模型在特定角色上的表现方面非常有效。

4.1.3 角色泛化(英语)

英文角色泛化能力的评估,特别是对于10个未见过的角色。

(1) RoleLLaMA在未见过的角色上的表现 ⭐️ 在模仿说话风格(CUS)和维持准确性(RAW)方面,RoleLLaMA表现出了性能提升。这表明该模型在处理新角色时,在模拟特定说话风格和保持响应准确性方面有一定的适应能力。 (2) 角色特定知识(SPE)的局限性 ⭐️ 在角色特定知识(SPE)方面,与基准线相比,并没有显著的改进。这一结果是直观的,因为对于一个完全未见过的角色,模型没有事先的知识储备,因此很自然地会在处理这类角色时表现出混淆或不确定。

4.2 消融研究 4.2.1 不同RoleGPT提示策略的效果 使用GPT-3.5来评估三种角色提示方法:零样本提示工程(zsp,zero-shot prompt engineering)、少样本提示工程(fsp,few-shot prompt engineering)和少样本对话工程(fsd,few-shot dialogue engineering)。

(1) 评估方法 评估指标包括“赢率”(Win Rate)和“平均排名”(Avg. Ranking)。赢率指的是一种方法被GPT-3.5评为三种方法中最佳的频率;平均排名则是该方法的平均排名位置。

(2) 实验结果 发现少样本对话工程(fsd)显著优于少样本提示工程(fsp),而这两种少样本方法均优于零样本提示工程(zsp)。

4.2.2 不同角色定制化策略的效果 两种角色定制策略的效果比较:零样本系统指令(sys)与少样本信息检索增强(reaug)。信息检索增强基于角色定制中提到的方式,即将从个人资料中检索到的对话插入到输入中,并按照RoleLLaMA和RoleGLM特有的聊天标记语言进行格式化。在微调和推理过程中,输入结合了系统指令和这些检索到的上下文示例。

(1) 两种策略的比较 系统指令基础方法相比于信息检索增强方法,在RoleLLaMA和RoleGLM上表现出了更优的性能,导致更高的上下文效率。 (2) 原因分析 研究者认为,从个人资料中检索到的上下文示例可能是嘈杂和稀疏的,这导致了相对较小的大型语言模型(例如RoleGLM和RoleLLaMA)分心,并降低了它们的性能。相比之下,像RoleGPT这样的更大型模型表现出对嘈杂和稀疏信息的更强鲁棒性,导致性能保持不变甚至增加。

4.2.3 Context-Instruct在注入角色特征知识方面的效果 Context-Instruct是一种用于增强模型在特定角色知识方面的技术,能够显著增强模型在角色特定知识方面的能力。

⭐️ 与信息检索增强相比,Context-Instruct表现出更好的效果,信息检索增强可能会由于检索源的嘈杂性导致分心和缺乏鲁棒性。 ⭐️ 当不使用Context-Instruct和信息检索增强时,模型在角色特定知识方面的表现明显不足。

4.2.4 规模 模型规模与性能的关系:

不同大小的RoleLLaMA模型在角色扮演任务上的表现,随着模型大小的增加,所有评价指标(即RAW、CUS、SPE)的结果都有所提升。

5. 幻想一下

想象一下,如果AI变成了戏剧学校的校长,那么RoleLLM框架就是它的得意之作。这个框架不仅给大型语言模型开设了“角色扮演101”这门课,还让它们学会了如何成为下一个演艺圈大明星。

首先,研究者们像好莱坞星探一样,挑选了100个角色,给每个角色建立了一份像个人档案一样详细的资料。然后,为了让这些AI学会如何模仿著名演员的说话风格,他们发明了RoleGPT,简直就是让AI学会了“模仿秀”。至于如何让AI了解每个角色的深层次知识,那就靠Context-Instruct技术,这玩意儿就像是给AI装了一个专业知识抽屉,需要什么知识就能抽出来什么。

当然,所有这些努力汇集成了RoleBench——一个既是角色扮演练习场,又是开源指令调整数据集的瑰宝。结果呢?RoleLLaMA和RoleGLM两个模型就像是从AI戏剧学校毕业的杰出学生,不仅在角色扮演上小试牛刀,甚至还敢跟使用GPT-4的RoleGPT一较高下。看来,AI界的奥斯卡奖也就是时间问题了!

0 人点赞