凉宫春日、李云龙等32个人物都能扮演,这个聊天机器人很懂剧情,代码可商用

2023-08-28 13:42 664 阅读 ID:1375
机器之心
机器之心

 让 AI 模仿特定人物聊天是 ChatGPT 类大语言模型的一个常见玩法,有些公司还开发了专门的 APP,如 character.ai。在国内,一个名叫「Chat 凉宫春日」的项目充分地满足了这种需求。


凉宫春日是谷川流创作的《凉宫春日系列》轻小说及其衍生作品的女主角,设定为高中生。虽然项目名字里只有「凉宫春日」,但「Chat 凉宫春日」可以模仿的人物达到了 32 个,包括李云龙(《亮剑》男主角)、哈利・波特、张牧之(电影《让子弹飞》男主角)、Sheldon(美剧《生活大爆炸》男主角)等等。在聊天时,这个模型不仅可以模仿这些人物的语气、个性,还能充分结合剧情。  

「Chat凉宫春日」是由李鲁鲁、冷子昂、陈启源发起的Luotuo(骆驼)的子项目之一,在魔搭社区主办的Create@AI黑客马拉松大赛中获得二等奖(top3)。我们可以在B站上看到他们的项目介绍视频。

视频链接:https://www.bilibili.com/video/BV1Xh411A7kC/?vd_source=12c1d661b492e88e254fc63d0a861962

近期,项目作者还发布了系统的技术报告,这份报告介绍了他们打造「Chat 凉宫春日」的过程以及一个支持 32 个人物的 54k 对话数据集的制作过程。同时,他们也在 HuggingFace 上发布了他们的数据集。

  • 技术报告链接:https://arxiv.org/pdf/2308.09597.pdf
  • GitHub 链接:https://github.com/LC1332/Chat-Haruhi-Suzumiya
  • 数据集链接:https://huggingface.co/datasets/silk-road/ChatHaruhi-54K-Role-Playing-Dialogue

项目作者之一冷子昂表示,「除了项目本身之外,我们的贡献者除了我和鲁鲁都是从社区拉起来的队伍,是一个众人拾柴火焰高的事情,后面我们还会持续做更多的内容和尝试,希望社区的小伙伴可以一起支持我们。」


本项目采用 Apache 2.0 协议,也就是说,你可以利用项目中的代码进行商用。但是你仍然需要遵守以下事项:1. 角色本身的版权方的协议;2. 项目中使用的接口方,比如 OpenAI 的协议;3. 项目中使用的模型的协议(比如如果后期采用了 LlaMA 或者 GLM 的模型。)


以下是项目的大体内容。

让 AI 扮演特定角色有一定难度

用 AI 模型进行角色扮演在游戏、创意产业等许多领域具有潜在的应用前景。


在开源角色扮演的实现中,开发者或用户已经采用了类似的 Prompt,将它们持续输入到 ChatGPT 或者作为 system whisper 接入到语言模型中:  

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}." 

因为 ChatGPT 或 Claude 在训练的时候已经阅读过很多故事,再加上更大的语言模型所表现的「智能」行为。用户们发现模型往往能在这样的 prompt 下表现出一定的角色扮演能力。然而,这样的实现虽然简单,却有以下缺点: 

  1. 这样的 prompt 使用高度依赖大语言模型本来的记忆。如果大语言模型对于角色的记忆本身是模糊的,则无法模仿特定的角色。 
  2. 这里的「know all of the knowledge of {character} 」的定义也是模糊的,无法很好地防御大语言模型幻觉效应的产生。 
  3. 即使是使用这样的 prompt,聊天机器人的对话风格还是会很大程度受到语言模型的影响,调整 prompt 或许能够缓解这样的问题,但是每一个特定的角色都要非常精细地调整 prompt。 


这些缺点明显限制了这种角色扮演聊天机器人的使用。
另一种简单的思路是将角色对话微调到模型中,作者发现不少开发者进行了这样的尝试。在拥有足够多的语料下,语言模型确实有能力掌握一个特定角色的语气,但是这样也会带来新的问题。在一个初步的实验中,他们发现微调后的 ChatBot 会产生更多的幻觉效果。并且对于大量的非主角角色,很难形成如此多的语料对模型进行微调。综上所述,让语言模型更好地进行角色扮演,模仿输出角色的经典台词是个非琐碎的问题。

模拟特定角色的大体思路

「Chat 凉宫春日」项目的主要目标是研究自然语言模型能否在对话中扮演来自动漫、影视作品的真实角色。在这个过程中,作者认为一个虚拟角色由三个核心部分构成:


第一,知识与背景:每个虚拟人物都有自己所处在的背景,比如凉宫春日处在一个日本的高中里。所以 ChatBot 需要了解对应故事的设定。这对于大型语言模型的记忆能力是较大的考验,需要通过外部知识库的引入去解决。


第二,人格或性格:人格和性格的设定在整部作品中需要是一致的,所以作者希望 ChatBot 所反应的人格和性格,与作品原来的设定也是一致的。


第三,语言习惯:这一点是最容易进行模仿的,只要在大型语言模型上下文中给出合适的例子,语言模型往往会进行模仿输出。作者希望这样的文学影视作品的爱好者与 ChatBot 互动时,能够「复现」文学影视作品的经典桥段,这样会让这些作品的爱好者获得更好的体验。


「Chat 凉宫春日」项目的关键想法,是抽取尽可能多的原剧本,形成角色的记忆数据库。在用户给出新的提问时,系统会搜索相关的经典剧情,并且结合人物设定的 prompt,去组合控制语言模型,争取对角色形成更精确的模仿。同时,受到 CAMEL 和 Baize 项目的启发,作者设计了一套自动对话语料生成的系统,对于性格鲜明,但是原本对话较少的角色,他们可以进一步生成符合角色性格设定的语料。这样就可以生成充分的语料使得微调一个本地的模型成为可能。


完整的开发计划如下图所示:  

项目的主要贡献可以概括为以下几点:


1、基于大型的语言模型,作者提出了一套完整的角色扮演的算法系统。这套算法可以有效地组织角色的过往记忆,使得语言模型能够模仿特定影视、动漫角色的语气和知识进行对话。这套系统可以使用 OpenAI 的 ChatGPT 或者 Claude 这样的预训练大模型,也可以使用较小的 7B 规模的本地模型。  

作者提出的算法在扮演凉宫春日,注意用户的提问和原来的剧情相关但不是完全一致,而「Chat 凉宫春日」的回答基本可以引用原剧情。

2、作者提出了一个角色扮演的数据集,这个数据集包括了超过 30 个不同的中文 / 英文影视角色。通过收集电影、小说、剧本的语料,并进行结构化的抽取,他们收集了超过 23000 条以上的对话信息。这些对话数据可以用来训练和检验角色扮演的语言模型。同时,使用作者提出的算法,借助 GPT3 和 GPT4,他们为这些角色额外模拟生成了超过 27000 条以上的对话。合并形成了 ChatHaruhi-54k 数据集。

  3、为了检验和比较不同方式形成的角色扮演 ChatBot 的性能,他们使用自动测评和人工测评两个方式对角色扮演机器人进行了测评(部分测评结果还未公布)。在自动测评中,他们测试角色是否能够对剧本中的经典的剧情进行响应,给出和原剧本近似的回答。在人工测评中,他们提出了两个不同的指标,让被试去评估两个不同的指标:吻合度:机器人的回答是否符合角色的原来设定;回答质量:机器人的回答的语言质量是否较好。结果发现,在使用同样的基础语言模型的情况下,他们的算法可以给出更好的角色扮演的性能。


下图是「Chat 凉宫春日」的核心对话系统示意图,包含 system prompt、为用户查询 q 检索到的角色记忆 D (q, R) 以及规划历史 H。  

下图是项目数据集中涉及的角色数据列表:

在实验中,作者定性比较了 5 个方案。可以看到,在加入经典对话以及修正 system prompt 之后,使用 ChatGPT 等模型可以有效的使聊天机器人体现特定人物的对话风格。同时,经过微调的 7B 模型也可以有效的将整个系统的 prompt 学习到。

更多细节请参见原报告:

https://github.com/LC1332/Chat-Haruhi-Suzumiya/blob/main/notebook/arxiv_paper.md

免责声明:作者保留权利,不代表本站立场。如想了解更多和作者有关的信息可以查看页面右侧作者信息卡片。
反馈
to-top--btn