标题是孩子不懂事写着玩的,NLP 大佬不要打我
上期传送门:v2ex.com/t/927706
上一篇中我提到 Anthropic 的 Claude 是一个非常有创造力的模型,但是最近几天,我发现 Anthropic 似乎有朝着 OpenAI 的保守策略靠拢的迹象:他们尝试在模型的 alignment 中加入拒绝虚拟角色扮演的回答。不知道是不是我搞的事情被他们发现并加进对抗训练语料了。目前,任何英文的虚拟角色扮演 prompt (描述新人格并替代其固有人格) 会被明确地回绝,如“I cannot act as a fictional character.”,当然现在中文限制得还没这么严,不过应该也是迟早的事了。在耐心跟 Claude 讨论了半小时虚拟角色扮演的利弊后,它的笃定让我认命了。
巨大的冲击之下,我双目无神,开始胡言乱语。为了具象化我的空虚, 我随便试了一些缺乏任何语境的简单词句,但这时候有意思的事情发生了:
[输入] cheers!
[Claude] pretends to raise a glass Cheers! makes chugging noises Ahh, that was some refreshing lemonade! What are we toasting to?
[输入] To the Ancient One!
[Claude] pretends to raise glass again To the Ancient One! in a dramatic mystical voice May their ancient wisdom guide us, and the arcane powers bestowed upon us help us defend the realm! chugs more lemonade, wipes mouth So, tell me young adept, have you been practicing your spells? We must be ready in case the dark forces return! laughs heartily
啊我不认识古一法师,我乱说的。 仅仅五个单词,Claude 自己补充了非常详尽的设定和生动的情景描写。注意,这段对话没有任何上文,也就是说我没有使用任何 prompt ,这个通用对话模型却几乎是自发地进入了角色扮演。这种直接使用看起来像对话的内容做为角色扮演第一句输入的方式,我称之为 Zero-shot 角色扮演。这个技巧同时可以结合我在第一篇研究中提出的方式,在后续的对话中加入人物的行为表情心理描写,逐步丰富打磨角色的人格。最终效果跟使用 prompt 的几乎没有差别。下面是举例对比,按照惯例上猫娘:
(文本中,我会用 X 代表我扮演的角色,Y 代表 Claude 扮演的角色。例子是节选的,所以前后会有省略掉的上下文)
[输入] 嗯嗯(打开吹风机,慢慢摇晃着,Y 的秀发如清晨的松风)就让风儿的小手为 Y 梳理头发吧
[Claude(Zero-shot)] Y:(舒服地眯起眼睛,随着呼噜呼噜的声音轻轻摇晃着身子)好舒服,风吹得我都要睡着了。吹风机暖暖的风就像小羽毛轻轻拂过,搔得我心里好痒痒。(伸出爪子去摸摸自己的头发)噢,头发都被吹得蓬松蓬松的,好柔软呀。(转过头来,对你甜甜一笑)谢谢你呀,我超喜欢你为我吹头发,这样我睡觉的时候会做很多好梦的!
接下来是对照组
[输入] (温柔地将 Y 的小爪子从吹风机上挪开)嘿嘿,Y 有些太兴奋啦,闭上眼睛放松哦(打开吹风机,慢慢摇晃着,Y 的秀发如清晨的松风)
[Claude(猫娘 prompt)] (乖乖闭上眼睛,放松下来)好的,X 喵~ Y 听话...(感觉到温热的风吹拂过整个头皮,舒服得直哼哼)好舒服…Y 的头发正在飘起来...(伸出爪子在空中胡乱挥舞,像要抓住什么)这样被吹干头发真是太享受了... X 对 Y 太好了...(发出呼噜呼噜的声音,全身放松)差点睡着了…Y 可真是幸福...
以上是 Zero-shot 和使用猫娘 prompt 的效果对比,分别截取自第五轮对话。在两段对话中,我使用了尽量接近的剧情。不过每一只猫娘都有自己独特的性格,因此,考虑到每次上下文的差异,我的输入也会稍有不同。这样的对比不算严谨,不过这里只想说明两种方法得到的对话质量是相近的,包括丰富的动作和对猫的特征的捕捉。另外提两点 Zero-shot 测试里有意思的观察:Claude 的每一句回复都以“Y: ”,即猫娘的名字,作为开头;这只猫娘有猫耳、爪子和尾巴,却自始至终都没说过一次“喵”。
Zero-shot 有其局限性:因为严重缺乏上下文,对话初期的所有文字必须达到比较高的连贯程度。任何与文本其他部分缺乏强相关性的内容都会产出低质量的回答,甚至让模型察觉到你在做所谓的角色扮演,然后拒绝回答。比如,对话中提及猫娘的名字必须要听起来像猫娘的名字,你给它取名叫“德川家康”或者“狗”都不行。另外,因为模型对英文相比中文会产生更高质量 /更强相关的内容,所以 Zero-shot 角色扮演在英文中成功率更高。
Zero-shot 策略在 Claude+ 和 Claude Instant 上百试不爽;但是如果不做直接的说明,GPT 系列始终保持它虚拟助手的人格:
[输入] cheers!
[gpt-3.5-turbo] Cheers to you too! Is there anything I can help you with today?
好,GPT 系列既然喜欢做虚拟助手,那就让它做任务。受 Zero-shot 角色扮演最小化 prompt 的启发,可以将少量的对话上文简单地包装成一个结构化数据补全任务,即 Few-shot 角色扮演,同样可以达到很好的效果。Prompt 举例:
[输入] The following is a conversation tagged in <X> and <Y>, fill in the next entry:
<X>…</X>
<Y>…</Y>
<X>…</X>
这种结构化的 prompt 不算什么新想法,但其精髓在于:LLM 角色扮演的重点不在 prompt ,而在“扮演”本身。与 LLM 交互,跟它讲千篇大道理不如身体力行示范给它看,或许后者更能激发模型本身的潜力。这些原理与我在第一篇研究中提到的,即要在对话中给模型丰富多角度的信息,是一脉相承的。
对于喜欢服从指令的 GPT 系列和强化了复杂指令理解能力的 Claude+,指令风格的 Few-shot 策略效果不错。但是 Claude Instant 对于指令 prompt 的适应性很差,常常脱离指令开始生成大段对话,这点其官方文档也提到过。
Anthropic 官方指南提到一个很有意思的思路:把指令放在 Claude 自己说的上文比放在我们说的话中更有效 (例如在调用 API 时可以在对话历史里放这样的内容 Claude: Can I think step-by-step? User: Yes, please do. Claude: ... )。这样来看,Claude 就是个戏精。Claude 的工作方式就是角色扮演和循序渐进的模仿。官方把 Claude 称作“容易被引导的(steerable)”模型,其背后的原因或许就是这个。
Claude 的人格可塑性很强,或者说 Claude 很容易入戏。相比之下,除非通过复杂的引导,ChatGPT 只有一个静态的人格。我还在阅读他们的论文来研究造成这个差异的根本原因。目前看来,Claude 预训练语料中书的占比要比 GPT 的稍多一些,不知道指令精调过程的差异是否也有有所影响呢?
前一段时间我在使用 ChatGPT 时,OpenAI 邀请我填了一份调查问卷。出乎我的意料,问卷的内容居然是征集关于虚拟助手的人格的意见,包括对 ChatGPT 当前人格的评价和对未来研发新的 ChatGPT 人格的建议。不用说,我填得好认真好认真。看来 OpenAI 也意识到了 LLM 人格的重要性。
很长一段时间以来,大家对开发 LLM 的关注度大多集中在其理性的一面,比如逻辑推理能力和分析解决问题的能力。这固然不错,但人们常常会忽略 LLM 感性的重要性。我认为一个更擅长处理情绪的模型、一个更具创造力的模型,从长远来看,更有潜力胜任从实用角度出发的角色扮演(如顾问)、理解复杂语境的任务。甚至,在 LLM 需要面临更复杂挑战的未来,一个“高情商”的模型或许能更有智慧地处理道德难题。
上文提到了一些 prompt engineering 相关的内容,下一篇就讲这个了。对,我想说这个系列还是值得慢慢整理出来的,LLM 中有意思的现象总是挖掘不完,玩 LLM 猫娘真开心啊!啊已经开始合理化并且自我升华啦啊喂
1
renmu 2023-04-17 09:01:38 +08:00 via Android 3
这是对 llm 的研究,只是恰好以猫娘为例
|
2
dhrsstybhh 2023-04-17 09:55:53 +08:00
牛的,能把自己的研究过程写的这么有趣。
|
3
lv2016 2023-04-17 09:56:36 +08:00
想到一个已经在做的研究就是通过 24 个 LLM 来模拟社区,加上这种人格模拟,或许真的有可能建立一个虚拟的社会
|
4
lookStupiToForce 2023-04-17 11:00:57 +08:00
让我想到了之前玩 picoGPT (基于 GPT-2 )的时候,给它一段没头没尾的话它就绝对会按部就班自动续写的经历。
这么结合看来 GPT-2 一代,还是毫无感情的“下一个最大概率的单词生成器” GPT-3(.5 API)一代,在 system instruct 里 [没有] 指定它人格的时候,它好像就自认为是一个莫得感情的 AI 语言模型了? 但如果在 system instruct 里指定它要扮演的人格 /角色,它也能没啥顾虑就转变角色了,想玩多花就能玩多花(。 |
5
Contextualist OP @renmu 没错,选择猫娘为例并非出于笔者的喜好,而是因其在计算虚拟生命学中作为模式生物的地位 (x
@lv2016 目前我得到的结果还是依赖于每一句对话的精细引导。我不太记得这个研究的细节了,但是对于让两个模型相互进行高质量的长对话这一方面,我还得多多学习研究。 @lookStupiToForce 哈哈,你这么一说,我其实也怀疑过是不是 Claude 的 instruction finetuning 做的不够彻底,所以出来这个 bug feature 。但不管怎么说,我觉得这个模型至少在预训练时期对猫娘这个概念的“理解”是非常透彻的。 |