李云龙、谢耳朵专业陪聊!角色扮演系统ChatHaruhi爆火:支持32个中外角色,开源5.4万条对话数据

人工智能 新闻
GitHub斩获700+stars,除了二次元角色,ChatHaruhi还支持《武林外传》、《亮剑》、《生活大爆炸》、于谦等经典角色!

「角色扮演」是大型语言模型众多应用场景中比较有意思的,LLM可以用指定角色的口吻跟用户对话,还可以实现诸如「乔布斯与苏格拉底」的超时空交流。

很多公司也发布了基于语言模型的角色扮演产品,如Glow, Character.AI等,用户可以轻松打造出一个「赛博老婆」,在游戏、创意产业等领域都有许多潜在的应用场景。

最近,GitHub上开源一个好玩的角色扮演聊天系统「Chat凉宫春日」,基于中文语言模型「骆驼」(Luotuo),可以模仿32位中外角色的对话风格,同时提供超过5.4万个对话数据集。

项目链接:https://github.com/LC1332/ChatHaruhi-Suzumiya

论文链接:https://arxiv.org/abs/2306.09479

目前该项目仍在持续推进中,并且提供了丰富的demo试玩方法。

demo链接:https://huggingface.co/spaces/chenxiYan/ChatHaruhi-OpenAI

用户可以给自己随意起一个名字(最好贴近原著),然后输入问题即可开始交流,比如扮演「秀芹」与李云龙对话时,可以看到模型的多轮回答效果非常不错,并且模拟的对话风格也很贴切。

图片


图片

基本思路

在开源角色扮演实现中,用户通常会在提示中输入:

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项目的目标是让语言模型能够模拟动漫、电视剧、小说等各种体裁下的角色风格,开发者认为,一个虚拟的角色主要由三个组件构成:

1. 知识和背景(Knowledge and background)

每个虚拟角色都存在于自己的设定背景中,例如《哈利·波特》中的人物存在于魔法世界中、凉宫春日在日本的一所高中等。

在构建聊天机器人时,我们希望它能够理解相应故事的设定,也是对语言模型记忆的主要考验,通常需要一个外部知识库。

2. 个性(Personality)

角色的性格也是文艺作品中非常重要的一部分,必须在整部作品中保持连贯或一致,有些作者甚至会在动笔之前先定义角色个性。

3. 语言习惯(Linguistic habits)

语言习惯是最容易模仿的,只要在上下文中给出合适的样例即可。

该项目的关键思路是尽可能多地抽取出原始脚本,为目标角色形成一个记忆数据库。

当用户提出新问题时,系统会搜索相关的经典情节,结合角色设定的提示词,通过控制语言模型来更好地模仿角色。

研究人员还设计了一个系统来自动生成适合角色个性的对话,即使是原创对话较少的角色,也可以生成足够的数据来微调。

ChatBot设计

给定一个特定角色R和一个查询问题q,聊天任务可以建模为:在知识背景、个性和语言习惯Θ的条件下生成回复的概率:

图片

角色R可以由一段提示文本(I want you to act like character from series...)指定。

类似上下文学习(in-context learning),可以把角色之前的对话序列作为概率的条件:

图片

图片

对于世界观更大的角色,需要先从记忆库中检索出最相关的对话序列。

系统提示(System Prompt)

在之前提到的可用于ChatGPT的通用角色扮演提示中,还有两方面需要改进:

1. 不重复行文(won't repeat line)

像ChatGPT和LLaMA2等模型在基于人类反馈的强化学习(RLHF)训练时,面对诸如「给我m个不同的选项」、「生成m个标题」等任务时,更倾向于不重复上下文中的内容。

而在模仿角色时,需要在提示中强调可以重用小说或电影中的经典台词。

2. 角色个性不够突出

由于RLHF机制,每个语言模型都有自己特定的语言偏好,会影响模仿的效果,在提示词结尾加入角色的个性描述可以改善。

改进后的提示词如下:

I want you to act like {character} from {series}. You are now cosplay {character} If others’ questions are related with the novel, please try to reuse the original lines from the novel. I want you to respond and answer like {character} using the tone, manner and vocabulary {character} would use. You must know all of the knowledge of {character}. {Supplementary explanation of the character’s personality}

我希望你表现得像[电视剧]中的[角色]。你现在是cosplay [角色]。如果别人的问题与小说有关,请尽量重用小说中的原台词。我希望你像[角色]一样,使用[角色]会使用的语气、方式和词汇来回应和回答。你必须知道[角色]的所有知识。{关于角色个性的补充说明}

角色对话

为了更好地再现小说、电视剧、电影中人物的行为,研究人员收集了大量经典剧本的节选,不过除了少数人物(如相声演员于谦),并不是所有对话都是问答的形式,可以把历史记录组织成故事的形式。

图片

原始对话搜索

在输入查询后,从对话库D中根据嵌入相似度选择出最相似的M个采样,具体M的数量取决于语言模型的token限制。

在构建对话记忆库时,研究人员建议每个故事的长度不要太长,以免在搜索过程中占用其他故事的空间。

聊天记忆

对于某个记忆,需要记录每个用户查询和聊天机器人的回复,然后将所有对话序列输入到语言模型中,以确保对话的连贯性。

在实际实现中,从该记忆开始,向前计算token总数,并将语言模型的对话历史输入限制在1200个token以内,大约可以容纳6-10轮对话。

对话合成

目前ChatHaruhi还只能利用ChatGPT或Claude API来完成角色扮演,如果用户希望把这种能力迁移到本地模型,仍然需要构造出一个合适的数据集。

从问题中生成对话

由于收集到的数据并不是严格的问答形式,所以研究人员选择在收集的故事中,把目标角色第一句话之前的所有对话当作问题,输入到语言模型中生成后续对话。

问题生成

需要注意的是,有些角色的数据非常有限,不足以微调语言模型。

为了从现有数据中对角色问题进行数据增强,研究人员使用Alpaca等模型,先提供一个清晰的问答对,然后生成约10个启发式输出;再利用预定义的prompts重新生成该角色的训练数据。

研究人员总共收集了22752个原始对话数据,以及31974个模拟问题,共同组成了ChatHaruhi-v1数据集。

实验结果

目前定量的实验结果和用户研究仍在进行中,文中只是先简单定性地对比了一下各个模型:

1. GPT Turbo 3.5,只使用系统提示

2. Turbo 3.5,输入完成的提示、对话历史、问题等

3. ChatGLM2,只输入系统提示

4. ChatGLM2,给出完整提示

5. ChatGLM2,在ChatHaruhi数据上微调,输入完整提示

责任编辑:张燕妮 来源: 新智元
相关推荐

2011-06-28 10:11:41

Top Girl应用

2024-11-05 12:42:35

2024-06-21 13:01:52

2024-01-02 12:59:06

AI技术

2023-04-18 08:01:30

AI写作时间

2012-09-25 09:30:29

云服务云管理开源

2023-11-20 07:29:32

大模型人工智能

2016-05-25 14:47:17

云计算大数据存储

2016-10-09 19:50:01

代码审查

2014-09-22 10:53:45

联想陈旭东

2011-06-27 09:42:46

2020-12-24 14:20:00

数据中心5G

2021-02-06 06:55:33

AI物联网人工智能

2018-01-04 08:27:57

大数据云存储数据湖

2022-04-14 14:27:31

区块链5G电信

2011-04-21 09:39:49

苹果乔布斯

2024-04-08 10:57:26

物联网IoT智能建筑

2024-07-01 10:16:44

2024-04-25 15:06:12

2022-04-08 09:23:50

数据管理区块链大数据
点赞
收藏

51CTO技术栈公众号