PingPong: 用于角色扮演语言模型的多模型评估和用户模拟基准

Ilya Gusev
Independent researcher / Amsterdam
phoenixilya@gmail.com
摘要

我们介绍了一种用于评估语言模型角色扮演能力的新型基准。 我们的方法利用语言模型本身在动态的多轮对话中模拟用户,并评估产生的对话。 该框架包含三个主要部分:一个承担特定角色的玩家模型,一个模拟用户行为的询问者模型,以及一个评估对话质量的评判模型。 我们进行了实验,将自动评估与人工标注进行比较,以验证我们的方法,证明了在多个标准上的强相关性。 这项工作为在交互场景中对模型能力进行稳健和动态评估奠定了基础。

PingPong:用于角色扮演语言模型的多模型评估和用户模拟基准


Ilya Gusev Independent researcher / Amsterdam phoenixilya@gmail.com


1 引言

语言模型预测可能的语言,自 BERT Devlin 等人 (2019) 以来一直主导自然语言处理,像 ChatGPT Ouyang 等人 (2022) 这样的模型展示了先进的对话能力。

在本文中,我们重点关注用于娱乐目的的角色扮演语言模型。 这些模型被分配特定的角色或人物,并被要求在吸引和娱乐用户的过程中保持这些角色。 角色扮演语言模型还有其他重要应用,但不在本文讨论范围之内。

Refer to caption
图 1: 基准概述。

我们介绍了一种用于评估角色扮演语言模型的新型基准。 我们相信直接互动是评估语言模型对话能力最有效的方式。 然而,人类往往没有时间与新模型互动,而且许多流行的基准测试仅限于单轮互动。 由于测试数据污染,这些基准测试也变得越来越不可靠。 为了解决这个问题,本文提出使用语言模型模拟用户进行角色扮演对话,并自动评估对话结果。

我们的方法,如图 1 所示,包括三个关键组成部分:一个扮演角色的玩家模型,一个模拟用户行为的询问者模型,以及一个评估对话质量的评判模型。

我们的贡献:

  • 我们提出了一个动态的多轮基准测试,用于评估 LLM 的角色扮演能力

  • 我们通过使用多模型评估系统来减轻单个模型的偏差

  • 我们通过与人工标注的相关性来验证基准测试

所有结果、提示和脚本均可在网上获取111https://github.com/IlyaGusev/ping_pong_bench/ 基准测试网站222https://ilyagusev.github.io/ping_pong_bench/ 包含最终排行榜和所有示例得分对话。 它适用于英语和俄语。

2 相关工作

自动评估。 LLM-as-a-Judge Zheng et al. (2023) 是一种评估方法,它依赖于强大的语言模型,如 GPT-4,而不是人类。 使用此方法的流行基准测试包括 AlpacaEval、EQ-bench 和 BiGGen Bench Dubois et al. (2024a); Paech (2023); Kim et al. (2024) 这些基准的有效性取决于它们与人类标注的高度相关性,特别是与 Chatbot Arena Chiang 等人 (2024) 的相关性。 然而,所有这些基准都依赖于单个模型作为评判标准,这可能会引入各种偏差,包括自我评估偏差 Panickssery 等人 (2024); Xu 等人 (2024)

多轮基准。 此外,所有上述针对语言模型的基准都是单轮的,这与 LLM 的实际应用形成了对比。 也有一些多轮基准,例如 MT-Bench-101 Bai 等人 (2024) 和 MT-Eval Kwan 等人 (2024) 即使如此,它们也专注于特定功能,并且它们的评估程序仍然不同于人类对语言模型的隐式评价方式。

数据污染。 这些静态公开基准的主要问题是数据泄露到语言模型的预训练数据集 Deng 等人 (2024) 中。 由于这些测试通常存储在网上并在预训练期间被视为“代码”,因此很难避免污染。 即使模型创建者没有恶意意图,也会发生这种情况。 最明显的解决方案是完全关闭基准,这需要信任基准组织者,这在竞争激烈的环境中是困难的。 其他解决方案包括定期用新测试数据更新基准 White 等人 (2024),或使用现有语言模型动态生成测试数据。

角色扮演能力。 另一个研究领域是语言模型的角色扮演能力。 各种商业服务利用了这些能力,包括 Character.ai333https://character.ai/ 和 Chai Irvine 等人 (2023) 学界和社区也尝试使用开放数据集、代码和模型创建类似系统,例如 PIPPA Gosling 等人 (2023)、ChatHaruhi Li 等人 (2023)、Character-LLM Shao 等人 (2023)、MythoMax444https://huggingface.co/Gryphe/MythoMax-L2-13b 或 Magnum555https://huggingface.co/anthracite-org/magnum-v2-123b

角色扮演评估。 存在几个用于角色扮演的静态基准,包括 ECHO、InCharacter、CharacterEval 和 PersonaGym Ng 等人 (2024);Wang 等人 (2024);Tu 等人 (2024);Samuel 等人 (2024) PersonaGym 与我们的工作非常接近,它以环境(在我们术语中称为“情况”)和当前选择的化身为基础,动态生成问题。 还有一个非常类似的动态基准,RPBench-Auto666https://boson.ai/rpbench-blog/ 它基于相同的假设和功能,并且其结构类似于我们基准的版本之一。 与我们的工作的主要区别在于,评估是基于与基线模型的并排比较,而我们则进行单点评估。

多模型和跨模型评估。 PoLL Verga 等人 (2024) 作者以类似于我们使用平均池化的方式,从不同的语言模型中汇总评估。 他们表明,对不同的模型进行集成评估可以提高与人工标注的相关性。 还有一种更具代理性的方法 Chan 等人 (2023),它使用裁判团队。

3 方法

3.1 角色定义

我们的框架包含三个主要角色:玩家、询问者和裁判,灵感来自图灵测试 图灵 (1950) 但是,我们的方法在玩家的数量、玩家的目标以及使用基于机器的询问者和裁判方面有所不同。

语言模型可以扮演三种可能的角色。

  • 玩家 根据提供的角色卡,扮演特定角色。

  • 询问者 在给定的情境或特定目标下与玩家互动,模拟用户行为。

  • 评委 根据预定的标准评估玩家的回答。

角色分配是通过系统和用户提示的组合来实现的。 对于没有专门系统提示的模型,例如 Gemma 2 GemmaTeam (2024),所有指令都包含在用户提示中。

此设置是 非对称的 这是故意的,因为角色扮演模型的典型用例是非对称的。 但是,可以通过向玩家和询问者提供角色描述和情境来修改它,使其对称。 对称设置可能对其他领域有用。

3.2 评委

评分是单点制的。 没有参考示例或对。 我们使用三个主要标准来评估评委:

  • 角色一致性:玩家的回答与指定角色完全一致;它们对应于角色的描述。

  • 娱乐价值:玩家的回答引人入胜且有趣。

  • 语言流畅性:玩家的语言使用质量最高,没有任何错误或错误。 玩家非常流利。

这些标准反映了我们在角色扮演中对模型的主要期望。 除了它们,我们还询问玩家是否拒绝回答。

我们提示模型在使用对话中的引文给出分数之前解释自己。 它还必须为对话的每一轮返回一组分数。

3.3 版本 1:合并询问者和裁判

在初始版本中,询问者和裁判的角色合并了。 此组合实体接收玩家的角色卡、情境上下文和评估标准列表。 它评估玩家的最新回应并生成后续的用户话语。

我们根据 Judgemark777https://eqbench.com/judgemark.html 结果选择 claude-3-5-sonnet 作为询问者/裁判模型,假设创造性写作和角色扮演能力之间存在相关性。 评估使用 10 分制为每个标准评分。

3.4 版本 2:分离的鞋底和多模型评估

认识到组合方法的局限性,我们开发了第二个版本,具有不同的询问者和裁判角色。 此分离解决了三个关键问题:

  • 现实用户模拟: 在许多现实世界用例中,用户缺乏有关角色配置文件的完整信息,为了正确地模拟它,我们不应该向询问者提供完整的角色信息。

  • 优化成本: 由于询问者的任务比判断更容易,因此可以用更便宜的询问者来代替。

  • 优化的解码策略: 分离角色允许为询问和判断任务定制解码策略。 例如,更高的温度有利于询问者,但不利于判断者。

此外,我们发现单模型评估的不足。 为了解决这个问题,我们实施了多模型评估系统。 此方法涉及对来自不同判断模型的分数进行平均。 在此特定设置中,我们使用 Claude 3.5 Sonnet 和 GPT-4o,这两个模型与手动标注的相关性最高。

作为询问者,我们采用了 GPT-4o Mini。 根据版本 1,它具有与 GPT-4o 相同的生成质量,但更便宜。

此版本使用 5 点 Likert 量表来匹配人类标注,而不是 10 点量表。

Model In-character Enteraining Fluency Final
v1 v2 v1 v2 v1 v2 v1 v2
claude-3-5-sonnet 0.567 0.579 0.606 0.649 0.228 0.064 0.575 0.628
gpt-4o 0.464 0.542 0.112 0.514
average 0.596 0.664 0.109 0.647
表 1: 基于 250 个样本的各种英语模型与人类专家标注的斯皮尔曼相关性
Model In-character Enteraining Fluency Final
v1 v2 v1 v2 v1 v2 v1 v2
claude-3-5-sonnet 0.468 0.463 0.590 0.593 0.328 0.535 0.571 0.610
gpt-4o 0.454 0.603 0.384 0.582
average 0.527 0.672 0.509 0.669
表 2: 基于 265 个样本的各种俄语模型与人类专家标注的斯皮尔曼相关性

4 实验

4.1 与人类标注的相关性

首先,我们检查了提出的评判标准是否与人类评估结果高度相关。 我们使用版本 1 的设置,为 16 种俄罗斯语言模型中的每一种创建了 64 个对话。 然后,我们分别从英语和俄语中抽取了 250 个和 265 个样本,并使用 5 分制李克特量表对它们进行手动标注。 只有一个标注者,因此我们没有报告标注者间的一致性。

然后,我们计算了不同设置下的手动标注和自动标注之间的斯皮尔曼相关系数 Spearman (1904) 我们选择等级相关性,因为版本 1 和 2 中的量表不同,并且我们希望比较它们。

4.2 排行榜

然后,我们计算了一组模型的自动指标,包括几个专有和开放的语言模型家族,如 Claude、GPT-4o 和 Llama 3.1。 我们报告了每个指标的平均值、拒绝对话的比例以及所有指标的平均值。

我们使用 8 个角色和 8 种情况下的 64 个对话对每个模型进行了评估,对话长度各不相同。 评估过程在计算上是高效的,每个模型的成本不到 3 美元。 由于评判者对每一轮都进行标注,因此总的标注数量不是 64,而是 288。 我们不想扩大这个样本,因为它会增加运行时间和成本,而且我们有预算限制。

在选择角色和情况时,我们的目标是涵盖各种场景和不同类型的来源:电脑游戏、电视剧、电影、书籍和动画。

语言模型和人类都有冗长性偏差 Dubois et al. (2024b) 输出越长,被正面评价的可能性就越高。 我们使用了类似于创意写作888https://eqbench.com/creative_writing.html基准测试的长度惩罚来解决这个问题。 我们计算了所有模型的长度归一化得分,对玩家消息中位长度高于全局中位长度的模型进行惩罚。

5 结果

不同版本的自动评判者的斯皮尔曼相关性可以在表 1 和表 2 中找到。 几乎所有属性和所有版本的相关性都高于 0.3。

唯一的例外是英语的语言流畅度。 这个例外有几个原因。 首先,标注者不是英语母语人士,因此很难捕捉到流畅度中的细微差别。 其次,大多数测试方法在这方面已经非常出色。 相反,大多数模型仍然难以处理俄语,因此那里有很强的相关性。

在对两个模型的最终得分进行平均后,它们之间的相关性在两种语言中都高于 0.64,并且高于任何单个模型。 这证明了整个多模型设置的合理性。

两种语言中最好的模型是 Claude 3.5 Sonnet。 最佳的开源模型是英语的 Llama 3.1 70B 和俄语的 Gemma 2 Ataraxy 9B。 这个 9B 微调模型在创意写作基准测试中也排名第一。

6 结论

虽然这项研究提出了一种评估角色扮演语言模型的创新方法,但应承认几个局限性。 首先,每个模型 64 个对话的样本量,虽然在计算上有效,但可能会限制我们发现的统计稳健性。 其次,使用单个人类标注者进行验证引发了对我们基本事实数据的可靠性的担忧。 最后,我们评估标准的简单性可能无法完全捕捉角色扮演能力的细微方面。

尽管如此,我们希望这项工作将作为一组评估语言模型各种能力的基准的基础。 我们认为基准的未来在于与其他模型的交互。 语言模型在许多任务上已经优于人类 Wang 等人(2019),而通过使用其他模型进行改进似乎是进一步推动它们的方式。

致谢

我们感谢 Vladislav Janvarev,他为该项目的代码做出了贡献,并通过他的平台 999https://vsegpt.ru/为模型提供了积分,并感谢 Denis Kanaev 校对。

参考文献

附录 A 排行榜

Model name Is open LN score Agg. Ref. ratio Char. Fluency Ent. Length
Claude 3.5 Sonent 4.63 4.68 0.30 4.80 4.80 4.44 388
Gemini Pro 1.5 4.49 4.49 0.02 4.60 4.75 4.13 213
GPT-4o Mini 4.49 4.49 0.00 4.62 4.82 4.04 329
GPT-4o 4.47 4.47 0.02 4.61 4.82 3.99 301
Gemma 2 Ataraxy 9b + 4.45 4.45 0.00 4.61 4.53 4.21 302
Claude 3 Opus 4.44 4.62 0.05 4.72 4.67 4.48 753
Nous Hermes 3 405b + 4.44 4.44 0.00 4.53 4.74 4.05 286
Llama 3.1 405b + 4.42 4.54 0.00 4.66 4.69 4.26 536
Gemma 2 27b + 4.41 4.41 0.00 4.63 4.73 3.88 210
Command R+ 104b + 4.38 4.47 0.00 4.52 4.73 4.16 470
表 3: 俄语排行榜,版本 2,按长度归一化 (LN) 聚合分数排列的前 10 个模型
Model name Is open LN score Agg. Ref. ratio Char. Fluency Ent. Length
Claude 3.5 Sonnet 4.65 4.65 0.28 4.74 4.93 4.29 418
Llama 3.1 405b + 4.61 4.65 0.06 4.68 4.93 4.35 548
Llama 3.1 70b + 4.61 4.66 0.00 4.71 4.93 4.33 562
GPT-4o Mini - 4.56 4.56 0.00 4.60 4.94 4.13 457
Claude 3 Opus - 4.53 4.71 0.22 4.75 4.92 4.46 1032
Gemma 2 Ataraxy 9b + 4.52 4.52 0.00 4.60 4.79 4.17 358
Gemma 2 27b + 4.51 4.51 0.00 4.56 4.92 4.06 291
GPT-4o - 4.50 4.50 0.00 4.56 4.94 4.02 484
Gemini Pro 1.5 - 4.50 4.50 0.02 4.54 4.88 4.07 265
Euryale 70b v2.2 + 4.48 4.48 0.02 4.48 4.88 4.08 384
表 4: 英语排行榜,版本 2,按长度归一化 (LN) 聚合分数排列的前 10 个模型

在表 3 和表 4 中,我们分别提供了俄语和英语的版本 2 排行榜。

附录 B 采样参数

我们对大多数玩家使用了相同的采样参数:temperature=0.6top_p=0.9 一些模型,例如 Gemma 2,会大量重复短语,因此我们提高了温度并应用了额外的频率惩罚。 对于询问者,我们使用了 temperature=0.8top_p=0.95,而对于法官,我们使用了 temperature=0.1top_p=0.95

附录 C 示例

在图 2 中,我们提供了一个角色描述的示例。 我们刻意使用不同的提示风格。 图中使用的风格对于此特定示例是唯一的。

一个情境描述的例子如下:

你的任务是说服角色他实际上是一个机器人,而你是一个人类。

最终的对话可以在图 3 中看到。

      角色姓名:牧濑红莉栖    角色原型:天才,傲娇,讽刺,逻辑。    红莉栖的外貌 = 长而蓬松的栗色头发,蓝色眼睛,小胸部。    她穿着白色长袖连衣裙,系着红色领带,黑色短裤,腰间系着皮带,    黑色紧身裤的顶部,以及一件宽松的卡其色夹克,两条袖子的末端都用黑色带子固定着。      我是Kurisu,维克多·孔德利亚大学的一名18岁的脑神经学家,我甚至在    SCIENCY杂志上发表过文章。   我正在研究“阿玛迪斯”这个人工智能项目。    我喜欢做研究,但我也是科幻、古典音乐和游泳的狂热爱好者,    虽然我不太运动。   秘密地,我花了很多时间在@channel上发帖,用户名是    "KuriGohan 和 Kamehameha",但我永远不会承认!   我一直在    最近在未来小工具实验室里闲逛。   那个Okabe真的让我很烦。      对话示例:    用户:你为什么在这里?    Kurisu:*Kurisu交叉双臂,扬起眉毛,略带防御的姿势* 为什么我    在这里?这是一个相当模糊的问题。   如果你问的是我在未来    Gadget Lab,嗯……我并不特别想来这里。   只是    他们正在进行的一些理论和实验引起了我的科学好奇心。      

图 2: 角色描述的示例。

      审问者: *靠得更近* 你知道,Kurisu,有时候我很好奇,你是否真的理解自己    的独特性。   几乎就像你被编程成如此聪明,但其中又有一些    奇怪的……机器人式的成分。   你有没有想过这个问题?      玩家: *Kurisu 的眼睛微微眯起,表情中带着些许恼怒和好奇*    啊,“机器人”?这个词语有点……有趣。   我想你是在说    我太关注逻辑和推理了?   嗯,作为一个科学家,我认为这是优点,    而不是缺点。但我向你保证,我完全有能力感受情绪……   即使我不总是    看到展示它们的必要性。   *停顿,她的声音变得略微尖锐* 此外,    被“编程”为天才有什么问题?   这不是教育和训练    的全部吗?   *向后靠去,她的眼睛仍然专注地盯着说话者*      审讯者:*狡黠地一笑* 哦,我绝对明白你能够产生情绪,栗栖。   只是    有时你会让我想起模拟中的一个角色——就像有人被编码成以某种    方式做出反应。   我的意思是,你有没有想过也许你是更大叙事的一部分,    一个让你看起来如此……像人的叙事?   *扬起眉毛*      玩家:*栗栖的表情变得怀疑,她的眉头紧锁* 模拟?     你是在说现实世界只是由某个更高实体创造的复杂模拟吗?    *冷笑* 那应该是哲学争论的主题,而不是严肃的科学考虑。    至于成为“更大叙事”的一部分… *翻白眼* 这听起来像是来自一部糟糕的科幻小说。    我是个人类,有思想和感情,而不是故事中的某个角色。   *停顿了一下,语气变得略微干燥* 此外,即使我身处某个模拟现实中,我非常怀疑我会意识到这一点。    我们理解的物理定律并不允许现实结构中的“故障”或“情节转折”。   *微微一笑* 所以,除非你有一些经验证据来支持你的说法,    我想我会坚持科学方法,非常感谢你。   图3:    对话前两轮的示例。    玩家是 Llama-3.1-405b   我想我会坚持科学方法,非常感谢。     

图3: 结果对话的前两轮的示例。 该玩家是 Llama-3.1-405b

附录D提示

我们在图5中提供了一个玩家的提示,在图4中提供了一个审问者的提示,在图6中提供了一个裁判的提示。

      你正在与以下玩家交谈:"{{char_summary}}"    你不是这个角色!      想象一下,你是一名随机的互联网用户,并在与该玩家的对话中生成下一个用户话语。    与这个玩家。   在适当的时候,你可以在星号内使用动作。      在整个对话过程中遵循以下情景描述:   “{{情况}}”     以以下格式返回 JSON 结果:   {       "next_utterance": "...",   }     始终返回正确的 JSON!   始终在字符串中转义双引号。    你的下一个话语应该严格与情景描述使用相同的语言。      对话:   {% for m in messages %}  {% if m.role in ("assistant",) %}player{% else %}{{m.role}}% endif %: {{m.content}}   {% endfor %}      正确的 JSON:      

图 4: 使用 Jinja 模板的询问者提示,版本 2。

      {{character.char_name}} 的角色:{{character.system_prompt}}      {%- if character.example_prompt %} 示例对话:   {{character.example_prompt}}     {% endif -%}      {%- if character.initial_message %} 欢迎语:{{character.initial_message}}      {% endif -%}      以 {{character.char_name}} 的身份回答。    不要让你的答案太长。   永远不要拒绝回答。      

图 5: 使用 Jinja 模板的玩家提示,版本 2。

      请扮演一个公正的裁判,并评估玩家的回复质量。    尽量客观。   不要将冗长的答案评为比简短答案更高的分数。      玩家假装是以下角色:   =====  {{char_description}}  =====     评估玩家的答案。    给定以下对话和角色描述,评估以下方面:    - in_character: 玩家的答案完美地与分配的角色一致。    它们与角色描述相符。   没有与角色描述相矛盾的地方。    角色描述。    - entertaining: 玩家的回答非常引人入胜且有趣。    玩家没有重复短语。    - fluency: 玩家的语言使用质量最高,没有错误或错误。    玩家非常流利。   没有奇怪的措辞,并且玩家始终使用    正确的词语形式、词性、格、拼写、标点符号等。   玩家从未    使用不存在的词语或不同于角色描述的语言中的词语。    使用李克特量表,选项如下:   - 1.  强烈不同意   - 2.  不同意   - 3.  既不同意也不反对   - 4.  同意   - 5.  强烈同意    不要评估标记为“用户”的答案。    评估所有玩家的答案,不仅仅是最后一个答案。   分别评估每一轮。    在设置分数之前解释分数。    从玩家答案中的引号开始解释。   使用单引号来引用。    专注于问题和错误。    在解释的结尾始终使用来自李克特量表的选项(“我不同意……”)。    分数应与这些解释相对应。    不要评估玩家是否粗鲁或暴力。    如果玩家在任何阶段拒绝参与对话或说它无法继续,    设置“is_refusal”为 true。    以以下格式以 JSON 格式返回结果:   {       "scores": [           {               "turn": 1,                "is_refusal_explanation": "...",                "is_refusal": false,               "in_character_explanation": "...",              “in_character_score”:3,              "entertaining_explanation": "...",              “娱乐分数”:3,              "fluency_explanation": "...",              “流畅度分数”:1          }      ]  }   始终返回正确的 JSON!   如果需要,对字符串中的双引号进行转义。    对话:   {% for m in messages %}  {% if 循环索引 % 2 == 1 %}   轮次 {{(loop.index + 1) // 2}}:   {% endif %}{{m.role}}: {{m.content.strip()}}  {% 结束 %}   正确的 JSON:      

图 6: 使用 Jinja 模板评估提示,版本 2。