角色扮演论文浅读:RoleLLM、Character-LLM以及ChatHaruhi

大模型关系型数据库智能语音交互

引言

最近笔者集中阅读了3篇角色扮演的论文:RoleLLM[1]、Character-LLM[2]以及ChatHaruhi[3]。

本篇博文是对这三篇论文的归纳,主要介绍其技术实现方式、dialogue数据合成方法以及评测方法。

角色扮演的技术实现

Zero-Shot Prompting

进行System Prompting是最简单的方式。

一个常见的Prompt如下(源自ChatHaruhi):


            
I want you to act like {character} from {series}.
            
I want you to respond and answer like {character} using the tone, manner and vocabulary {character} would use. 
            
Do not write any explanations. 
            
Only answer like {character}. 
            
You must know all of the knowledge of {character}. 
            
My first sentence is "Hi {character}."
        

ChatHaruhi对其进行了额外的2点优化:

  1. 允许LLM复用few-shot examples 。即允许LLM在相似场景下,直接使用角色的对话内容;
  2. 在结尾额外加上一段人物性格描述 ,以强化生成效果。

一段针对白展堂的System Prompt如下。

picture.image

Few-Shot Prompting / In-Context Learning

加入few-shot examples(从该角色的历史dialogue数据中检索而来),有助于LLM获取相关知识、模仿角色的风格。

RoleLLM指出有两种Few-Shot方法:

  1. single-turn prompt 。在单轮对话中一次性引入examples,示例如下;

picture.image 2. multi-turn prompt 。RoleLLM称之为dialogue engineering,即将对话过程以userassistant角色交替写入。

picture.image

在RoleLLM的实验当中, 第二种方法的效果要更好

RoleLLM论文中,这类方法被称为 RoleGPT ,是一个比较强的baseline;这个方法也是ChatHaruhi的主要方法(其完整的Prompt示例见下图)。

picture.image

此处使用的历史dialogue数据,通常来自于对剧本、电视剧、小说的抽取,ChatHaruhi的git项目[4]上包含许多此部分的内容,感兴趣的读者可以参考。

Fine-Tuning

In-Context Learning vs Fine-Tuning是一个常被讨论的议题。

Fine-Tuning的迷人之处在于: 适当的数据 + 开源LLM + Fine-Tuning 有可能超过 闭源LLM + In-Context Learning

在本文介绍的3篇论文中,Character-LLM是纯基于Fine-Tuning的,并且每一个role训练一个LLM;在RoleLLM和ChatHaruhi中则是作为一种实现方案,与in-context learning方案进行对比。

picture.image

picture.image

RoleLLM的实验结果表明:

  1. 在英文上,RoleLLaMa(fine-tuned模型,7B)还是逊于RoleGPT
  2. 在中文上,RoleGLM(fine-tuned模型,ChatGLM2-6B)则可与RoleGPT一战

picture.image

Character-LLM的实验结果表明:

  1. fine-tuned后的LLaMa 7B模型,在4个指标上都强于Alpaca、Vicuna,并与Chatgpt可以一战
  2. 在values(价值观)维度上,fine-tuned模型效果略差,作者解释这可能与模型倾向于生成更短的文本有关。

评估指标和评测方法,请参见后文内容。

Dialogue数据的合成方法

细心读者可以注意到,RoleLLM的对比实验中,有些模型带有-script的标记,这类模型是直接在script剧本数据(已处理为多轮对话形式)上进行Fine-Tuning后得到的模型,其效果明显较差,这说明 Fine-Tuning数据的准备是需要研究的。 天然的dialogue数据效果不一定好,那么可能要转而求助 数据合成

同时,对于一些对话数据较少的角色,要想进行Fine-Tuning,也需要先进行 dialogue数据合成 。接下来,笔者将介绍3篇工作各自的数据合成方法。

RoleLLM

picture.image

RoleLLM的数据合成有以下两个思路:

  1. general domain 。收集开源的general instructions(如英文领域的Super-NaturalInstruct、中文领域的COIG等),然后给到RoleGPT,让其在通用问题上,生成模仿某个角色的对话
  2. role-specific 。即论文所谓的Context-Instruct,其核心思路是根据Role Profile来生成Question、Answer,这样生成的dialogue数据更加与role本身相关,因此有role-specific的特点 。Role Profile分为两部分:一个是role description、catchphrases,这部分由GPT生成;另一个是结构化好的历史dialogue,也是从剧本数据中提取而来。在生成Question、Answer时,将两部分profile分别给到LLM,让其生成question、对应的answer、以及confidence score(置信度),最终仅保留 高置信度的非重复数据

RoleLLM的数据合成方法比较 体系化 ,这样能够增加合成数据的 多样性 ,这是值得学习的一点。

不过其原生方法所生成的数据都是 单轮 的,这是硬伤(Character-LLM和ChatHaruhi则没有这个问题)。但论文作者也指出,可以借助Baize[5]和CAMEL[6]的技术来生成多轮数据。

Character-LLM

在Character-LLM中,作者称其合成的数据为experience

一个experience由以下两部分内容组成:

  1. scene 。包括地点、背景、人物等信息;
  2. dialogue 。在某个scene下,目标role和其他role的对话数据,其中还额外包括目标role的思考(thinking)过程。

picture.image

experience的获取流程如下:

  1. 将目标role在wiki上的信息,作为profile
  2. 使用LLM,根据profile来生成scene,其prompt示例如下;

picture.image 3. 基于scene + profile,让LLM生成dialogue数据。其prompt示例如下,用此种方法生成的数据可以是多轮的。

picture.image

一条用于训练的experimence如下:

picture.image

需要额外提到的是,Character-LLM论文提到了角色幻觉(Character Hallucination)的概念,其举的场景是:问一个古罗马的角色关于python的问题。Character-LLM认为这种情况下,角色不应该做出回答,因此额外构建了一些protective experience,引导LLM拒绝回答那些超出角色设定的问题。论文作者还提到,角色幻觉问题的重要性在于,攻击者有可能利用这种幻觉来解锁模型的全部能力,从而带来潜在的危害;但角色幻觉也有一些益处,可以让古代角色与现代知识有更多的交融。

ChatHaruhi

ChatHaruhi主要采用的方法是generate dialogue from question

picture.image

其思路是:将目标role发言前的内容作为 question ,给到LLM,让其 继续完成这个dialogue 。同时为了优化生成效果,论文也采取了few-shot prompting的策略。在实验中,有50%的概率会生成多轮对话。

可以发现,这一合成方法 基于已有的dialogue数据进行再次合成 ,但对于一些本身数据较少的角色不太友好,因为其本身能用作question的数据不够。

什么不够就生成什么,论文因此又提出了question generation方法。

picture.image

其思路是: 给LLM一些question-answer示例,让其模仿生成更多的question 。其prompt如下。

picture.image

通过question generation流程,可以得到更多的question,随后将其送往generation dialogue from question流程,便能够生成更多的dialogue数据。

通过使用这两种方法,ChatHaruhi将原本22K的dialogue数据,扩增到了 54K

效果评测

基于ground truth

第一类评测方法基于ground truth,大致思路是: 把同一个context给到LLM,判断ground truth text 与 generated text之间的相似度/重合度

RoleLLM采取的衡量指标是Rouge-L,ChatHaruhi采取的衡量指标是两者embedding之间的cosine相似度。

LLM作为打分者

让人类直接参与打分的难点在于: 打分者需要对目标角色有深入了解,标注成本比较高 。因此RoleLLM和Character-LLM均引入了LLM打分的方法。

Character-LLM的思路是: 定义5个评分维度,让LLM进行打分

其定义的5个维度如下:

  1. Memorization ,角色的记忆;
  2. Values ,价值观;
  3. Personality ,思考、表达的个性;
  4. Hallucination ,幻觉(即前文提到的角色幻觉问题);
  5. Stability ,稳定性,包括多轮稳定性、对不同输入的稳定性。

为使打分结果更可信,Character-LLM采取了manual Chain-of-Thought的思想,让LLM进行step-by-step judging

RoleLLM的思路是: 直接对比两类方法的效果,让LLM决定谁更好,用win rate大小表明效果的好坏

ChatHaruhi的评测维度为:角色吻合度、对话质量;但其arxiv文章中并没有包含评测结果。

总结

本文对3篇角色扮演的工作进行了归纳整理,介绍了其技术实现方法、dialogue数据合成方法以及评测方法,希望对相关研究者和从业者有所帮助。

可以发现的是,这几篇工作的核心都围绕在 如何构建dialogue数据 ,这与其背后所采取的技术方案(retrieval augmentationin-context learningfine-tuning)息息相关。但笔者感觉在角色扮演任务下, dialogue的形式可能不够 ,因为角色的记忆/知识、风格、思想/价值观等内容,在dialogue形式下被杂糅在了一起,因此大部分的复杂度都落在了 如何构建数据 上,未来或许可以考虑将不同的要素分别建模,Agent化是一个可能的优化方向。

关注笔者

欢迎关注笔者,了解更多有趣、有用的NLP知识,一同探索技术的价值和边界~

参考资料

[1] RoleLLM: Benchmarking, Eliciting, and Enhancing Role-Playing Abilities of Large Language Models: https://arxiv.org/abs/2310.00746

[2] Character-LLM: A Trainable Agent for Role-Playing: https://arxiv.org/abs/2310.10158

[3] ChatHaruhi: Reviving Anime Character in Reality via Large Language Model: https://arxiv.org/abs/2308.09597

[4] ChatHaruhi Github: https://github.com/LC1332/Chat-Haruhi-Suzumiya/tree/main

[5] Baize: An Open-Source Chat Model with Parameter-Efficient Tuning on Self-Chat Data: https://arxiv.org/abs/2304.01196

[6] CAMEL: Communicative Agents for Mind Exploration of Large Language Model Society: https://arxiv.org/abs/2303.17760

0
0
0
0
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论