- Transformer基础
- 常用的大语言模型
- 行业大语言模型
- 大语言模型评估
- 数据构造与清洗
- 分词器构造
- 大语言模型的微调
- 基于PEFT的LLaMA模型微调
- 基于人类反馈的强化学习框架
- 前沿偏好对齐方法
- 基于DPO的偏好对齐实战
- GPTs初体验
- GPTs的初阶使用
- GPTs的高阶使用
- 公开数据集
- 主流方法
- Text2SQL任务实战
- 角色扮演
- 角色扮演实战测试
- 基于Baichuan的角色扮演模型微调
- 对话要素抽取
- 对话要素抽取实战测试
- 基于Qwen的对话要素抽取模型微调
- Agent概述
- Agent的主要模块
- Agent的行为决策机制
- 主流Agent框架
- 基于知识库问答
- 向量数据库
- 基于知识库的大型语言模型问答实战
- AutoGPT概述
- LangChain概述
- 使用LangChain构建AutoGPT
- 运行AutoGPT
大型语言模型的角色扮演应用
随着人工智能技术的飞速发展,大型语言模型已经显现出其惊人的潜力,为处理一些复杂的智能任务(如角色扮演)奠定了坚实的基础。本章首先详细介绍角色扮演的应用领域、大型语言模型如何进行角色扮演及数据构造和评估方法,然后利用GPT-3.5和Baichuan2模型进行有效的角色扮演,最后还探讨了如何通过模型微调技术,进一步提升大型语言模型角色扮演的效果,帮助读者全面理解角色扮演的任务本质,并指导如何在实际场景中有效落地。
6.1 角色扮演
角色扮演应用主要利用大型语言模型来模拟不同属性和风格的人物和角色,如游戏人物、动漫角色、网络小说的主角、电影人物、电视人物、历史名人等,旨在为用户带来更精细、更沉浸的交互体验。为了确保用户获得最佳的体验,角色扮演应用不仅需模拟角色基本的对话流程,还要求大型语言模型深入理解角色的性格、故事背景、情感状态和行为模式,从而塑造出更为智能和生动的AI角色。
角色扮演可以应用在教育、游戏、心理咨询、创作、培训等多个领域中。在教育领域,角色扮演应用可以用来模拟各种学习场景,让学生与场景中不同角色之间进行交流与互动,从而更好地理解和掌握课程的知识内容,也可以提高学习的趣味性。在游戏领域,角色扮演应用可以成为游戏中的NPC(Non-Player Character,非玩家角色),让游戏变得更智能,在与玩家角色进行交互过程中,提高玩家的沉浸感,让其享受游戏中的故事情节。在心理咨询领域,角色扮演应用可以扮演一名心理医生,帮助用户探索和解决个人问题,也可以通过模拟特定社交场景来帮助用户解决社交问题。在创作领域,角色扮演应用可以成为作家、艺术家等创作人的灵感
来源,在与不同角色交流的过程中,延伸更多的故事情节,帮助找到创作灵感。在培训领域,角色扮演应用可以用于模拟工作场景,例如模拟不同类型客户的状态,员工在与其交流过程中,学习如何更好地处理各种情况,提高员工的工作效率、服务质量和应对能力等。总之,随着大型语言模型的技术发展,可以预见到角色扮演将会有更加广泛和深入的应用。大型语言模型也不再是一个冷冰冰的机器,而是具有“人情味”的智能交互助手。
目前,许多企业已经推出了基于大型语言模型的角色扮演产品,例如国外的character.ai(见图6-1)和国内的百川角色大模型(见图6-2),这些产品的出现标志着这一领域的快速发展和广泛的应用前景。
1. 大型语言模型如何进行角色扮演
大型语言模型通常经过海量数据进行预训练,掌握了众多知识内容,经过指令微调和强化学习后,获得了理解并执行人类指令的能力。因此,通过设置系统指令、少样本(上下文)学习等方法可以在不对大型语言模型进行训练的情况下,激发出大型语言模型的角色扮演能力。
在设置系统指令时,需要明确指导模型理解其所扮演的角色,告知模型这些角色具有哪些特点,通常涉及身份、兴趣、观点、经历、成就、社交关系、语言特征、情感表达及互动模式等,样例如表6-1所示。
表6-1 大型语言模型角色扮演系统提示样例
为了增强大型语言模型角色扮演能力,可以通过上下文学习或少样本方式来增加模型效果,主要是在原始提示内容中增加一些演示示例,将新的知识有效地融入大型语言模型中,使得输入模型的提示内容更加流畅或更具有逻辑性,以便模型发挥更好的效果,样例如表6-2所示。但不同的演示示例的选择可能很大程度上会影响模型的推理效果,可以根据角色选择固定对话内容作为演示示例,也可以借助检索系统对用户问题从对话语料库中匹配相似对话内容作为演示示例。
表6-2 大型语言模型角色扮演上下文学习样例
然而,尽管通过系统指令或上下文学习可以使大型语言模型进行角色扮演,但由于绝大多数开源模型缺乏针对角色扮演的定制优化,因此角色扮演效果并不理想。一些闭源模型(如GPT-4)虽然展现出了出色的角色扮演能力,但也面临着API调用成本高、上下文窗口限制、无法微调等诸多问题,限制了角色扮演的优化与发展。此外,当前大型语言模型在角色扮演的颗粒度方面还有待提高,往往在扮演如作家、程序员、工程师等较为宽泛的职业角色时表现较好,但在处理更复杂、细粒度的具体角色(如孙悟空、福尔摩斯、甄嬛)时,表现往往不尽如人意,无法进行细致的互动。
因此,研究者针对固定角色,通常先收集、整理、标注角色对话数据(包括角色的个人资料、经验和情感状态),再为不同角色设计更精细的启动提示,最后对开源模型进行微调,让其具有扮演某一或某几个角色的能力,从而更好地模拟人类在持续交互中的记忆和情感变化。
目前对大型语言模型角色扮演的要求也有所不同,一部分人认为模型在扮演某一角色时,仅应回复角色知识范围内的知识,否则就是大型语言模型存在幻觉;另一部分人认为如果知识超出角色认知范围,则应按照角色的语气和说话风格来继续回答,大型语言模型在扮演过程中,应回复更加广泛的知识。这两种看法都没有错,主要还要看具体的应用场景,以及呈现的产品形态。
2. 角色扮演数据的构造方法
目前角色扮演数据的获取与构造主要有3种方法:从文学作品的提取、通过人工角色扮演的精细标注,以及利用先进的大型语言模型进行数据合成。这些方法各具特色,为构建丰富、多维的角色对话数据提供了不同的途径。
文学作品是一个宝贵的资源库,蕴含了丰富的角色对话和详细的人物描述,我们可以从影视剧、剧本、小说等多种形式的作品中挖掘角色扮演数据。但这种提取过程往往产生的数据较为原始,通常需要进一步的加工和细化才能有效地应用于模型的微调。
人工角色扮演标注是一种更为直接的方法,让一个人直接扮演角色,另一个人扮演用户,在不同主题内容下通过模拟对话来生成数据。但这种方法的主要挑战在于其较高的人力成本和对扮演者角色理解深度的要求。如果扮演者对角色的理解不够深入,生成的数据可能会受到个人解读和表现风格的影响,进而影响数据质量。
大型语言模型合成是利用GPT-4等具有出色角色扮演能力的模型,通过对角色的描述和对话样例进行数据合成的一种高效且成本较低的角色扮演数据生成方法。这种方法能够迅速生成大量对话数据,特别适合需要大规模数据集的应用场景。但也对语言模型的能力提出了较高的要求,需要模型能够准确理解和反映角色的背景知识和人物特性。
通过大型语言模型进行角色对话数据的合成主要可以通过以下方法:
·让大型语言模型在开源指令数据集上,对通用问题生成模仿某个角色特点的回复答案。
·利用角色描述、口头禅等角色特点的文本,对剧本中提取出的角色对话数据进行提炼,生成对应的问题、答案、参考依据、置信度等,构成角色对话数据。
·根据维基资料,让大型语言模型提取出一些角色相关的重要场景(涉及地点、背景、人物等信息),再利用大型语言模型进行经历补全,生成目标任务的内心思考和与其他人物的对话数据。
·收集一定量角色的台词数据作为台词库,将目标角色发言前的内容作为问题,让大型语言模型继续完成对话,但在系统提示词中会提供角色相关背景信息,并从台词库中检索对应的台词内容提供参考,防止大型语言模型生成对话不符合角色原始风格。
3. 大型语言模型角色扮演的能力评估
角色扮演对话是一项复杂的任务,它不仅要求精准模仿角色的行为和言辞,还需要保持角色的知识体系和展现出色的多轮对话技能。一般评估模型的角色扮演能力需要从记忆能力、价值观、人格特征、幻觉、稳定性等多个方面展开。与常规的大型语言模型评价方法相同(详见第1.4.2节),评估大型语言模型的角色扮演能力同样可以通过解题或人工评价等方式进行。
RoleEval榜单:https://arxiv.org/abs/2312.16132。
RoleEval榜单 是通过做题形式来评估大型语言模型在角色扮演方面的能力的。
该榜单包含6000道中英文并行的选择题,覆盖了包括名人、动画、漫画、电影、电视剧、游戏和小说等领域的300个有影响力的人物和虚构角色。对每个角色设定了20个问题,包括17个关于基础知识的问题和3个需要多步骤推理的问题。这些问题触及角色的基本属性(如性别、种族、个性、技能和能力)、社会关系(包括家庭、师徒关系及其他重要的个人或职业联系)以及角色亲身经历的重大生活事件或经历。
CharacterEval榜单:https://arxiv.org/abs/2401.01275。
CharacterEval榜单 则是通过设计13个具体指标(分为4个维度),利用人工评价的方法来评估大型语言模型的角色扮演能力。在对话能力的评价维度中,考察了流畅性、连贯性和一致性;在角色知识的评价维度中,关注知识的暴露度、准确性、幻觉度、人物行为和说话风格;在角色吸引力的评价维度中,评估了拟人化程度、沟通技巧、表达的多样性和共情能力;在模型人格测试的评价维度中,则是基于迈尔斯-布里格斯类型指标(MBTI)进行评估。
当然,如果给定前置条件、评测要求、演示示例等相关信息,也可以利用GPT-4等能力较强的模型进行自动打分。