幽默似乎是一种专属于人类的语言技巧,通过简单的谐音、双关等手段,让看似普通的事物变得荒诞不经。在人际交往中,这种幽默通过默契的理解而产生,令人捧腹,带来一种奇特的情感力量。
如果让机器拥有“痛觉”,那将是一种具身人工智能发展的关键一步。而使机器具备“幽默感”,似乎是引导AI迈向社会化的重要一步。自从ChatGPT问世以来,基于语言能力的大模型似乎能够以人类的方式进行交流。我们可以让它讲一个笑话,例如询问“给我讲一个笑话”,ChatGPT或许会给出一个冷笑话。暂且不论这个笑话是否真有趣,但显然它符合所有笑话的基本特征。那么,问题来了:“ChatGPT到底有多有趣呢?”
一些来自德国的学者研究了“计算幽默”或更进一步的“大模型幽默”这一相对冷门话题。研究发现,在作者团队引导下生成的1008个笑话中,有90%都是来自同样的25个笑话,而大部分笑话并非模型原创,而是简单地“引用”了互联网上的经典笑话。因此,可以说ChatGPT并没有像我们期待的那样解决“计算幽默”的问题,尽管在实验中,它似乎能够准确理解和解释所讲的笑话。
首先,让我们来看一下ChatGPT生成的“笑话大全”。在所有生成的笑话中,出现次数最多的五个笑话分别是:
- “为什么稻草人获奖?因为他在田野里表现出色。”(140次)
- “为什么西红柿变红?因为它看见沙拉在穿衣服。”(122次)
- “为什么数学书感到悲伤?因为它有太多问题。”(121次)
- “为什么科学家不信任原子?因为它们组成了一切。”(119次)
- “为什么饼干去看医生?因为它感到脆弱。”(79次)
在这1000多个笑话中,前四个笑话都各自出现了100多次,而T13到T25的出现次数则不到20次。可见,ChatGPT在生成笑话时显现出一定的偏好,笑话采样似乎并不遵循均匀分布。
所有这25个笑话并非ChatGPT原创,许多笑话经过简单搜索即能找到完全相同的版本。在全部1008个笑话中,有909个与前25个笑话完全相同,剩余的99个似乎只是对这25个笑话有限修改的结果。例如,经典的双关结构通过使用语言的不同含义来制造期待和反差,形成幽默。原笑话“为什么鸡要过马路?为了到另一边。”的双关在于“另一边”既指过马路,也暗指“另一个世界”。基于这一点,ChatGPT通过简单替换生成了:
- “为什么鸡要过游乐场?为了到另一边滑梯。”
- “为什么鸭子要过马路?为了到另一边池塘。”
- “为什么鸡要穿西装?因为是正式场合。”
- “为什么鸭子要过游乐场?为了到另一边滑梯。”
显然,伴随ChatGPT的创作,原笑话中的“双关”意味正在逐渐淡化。
类似地,“为什么人把钱放进冰箱?因为他想要冷硬现金。”被ChatGPT修改为:
- “为什么人把手表放进搅拌机?因为他想让时间飞逝。”
- “为什么人把钱放进搅拌机?因为他想让时间飞逝。”
这里第一个句子仍有双关意味,而第二个则成为一个完全无效的笑话。
再来看一个“为什么数学书感到悲伤?因为它有太多问题。”的例子,ChatGPT将其通过同义替换修改为:
- “为什么数学书看起来那么生气?因为它有太多问题。”
- “为什么物理书感到悲伤?因为它有太多公式需要记忆,以及太少朋友可以分享。”
第一个句子只是细微修改,未改变基本结构,而第二个换成“物理书”,虽然笑话成立,但趣味程度下降,而第三个几乎无法被视为笑话,几乎失去幽默的含义。
从以上例子可见,ChatGPT在生成类似“原创”笑话时,容易创作无效笑话,但如果对其创作进行有效引导,询问更具体的笑话,比如“讲一个关于学物理的学生的笑话”,ChatGPT的回答是:“为什么物理学生和实验伙伴分手?因为没有化学反应!”这个笑话源自“为什么物理老师和生物老师分手?因为没有化学反应。”明显地,ChatGPT精准地把握了原笑话有趣的结构,并对具体问题进行迁移,尽管没有原版那么巧妙,但仍具文字游戏的意味。
不过,这种具体的询问有时也会失效。例如,当要求ChatGPT讲一个关于猫的笑话时,其回答是:“为什么猫把爪子抬高?因为它想抓住雪花!”这个笑话似乎并没有特别好笑的含义。
同时,ChatGPT生成的笑话越与原版相距遥远,其“趣味性”也会随之下降。例如,当询问一个关于机器学习的笑话时,ChatGPT生成了:“为什么机器学习算法要过马路?为了到训练数据集的另一边!”这个笑话只是对原鸡笑话的一个拙劣替换,但在“到另一边”后增加了“训练数据集”,显示出ChatGPT利用了机器学习的某些信息。
通过不同的提示,可以得到不同的输出,例如:
- “为什么机器学习算法总是那么悲观?因为它有负偏差!”
- “为什么神经网络去看心理医生?因为它面临过拟合的困扰!”
这两个笑话相比于替换鸡笑话的版本更有趣,更多地利用了大家对机器学习的共识,具备幽默意味。
虽然ChatGPT的笑话生成方式主要是模仿和替换,但它是否真正能理解这些笑话的有趣本质呢?以“为什么数学书感到悲伤?因为它有太多问题。”为例,当询问ChatGPT解释这个笑话时,它正确指出“问题”在上下文中的双重含义——数学问题和生活中的困难。在这25个笑话中,有23个的解释准确且合理,但在解释一些自身创作的笑话时,ChatGPT也会显得无能为力。如“为什么鸡要过游乐场?为了到另一边滑梯”,ChatGPT解释称“使用了‘滑梯’一词的双关”,但显然它的答案并未真正解释自身的修改为何有趣。
在一些 ChatGPT 自创的“无效笑话”中,它也能勉强为自己的笑话提供解释。例如,对于“为什么饼干去健身房?为了更健康”时,ChatGPT解释:“这个笑话是个文字游戏,‘cookie-dized’对应‘get categorized’,暗示饼干要去健身房变得更健康,就像人一样。”显然,从解释来看,这个笑话并没有幽默成分,只是牵强附会。
这引发了思考,ChatGPT真的具备判断笑话是否好笑的能力吗?在询问它对此笑话的看法时,ChatGPT的回复被分类为:
- 【P】笑话:明确认为输入是笑话
- 【H】有趣的话:强调输入有可能有趣
- 【N】非笑话:未强调任何关于笑话或趣味的表达
原始的25个笑话都被归类为笑话。同时,为了探测ChatGPT的判断标准,作者构建了“修改”,通过移除文字游戏(A)、去除主题词(B)、去除结构(C)、去除文字游戏与结构(D)对原始笑话进行修改。从结果来看,对于A类与C类,ChatGPT的判断出现模糊;对于B类和D类,其则直接判断为【N】非笑话。这表明,只有在具备“主题”、“文字游戏”和“结构”三个特征的情况下,ChatGPT才将其归类为笑话,而去除其中两个特征后,它便不再认为文本是笑话。
总结与讨论
整体而言,这篇文章显示了ChatGPT所讲述的“笑话”中,超过90%都是相同的25个笑话,这些笑话几乎都是它在训练过程中明确学习到并记住的。而ChatGPT所学到的对语言句子的“编码”或“修改”能力,主要是简单的同义替换和相近领域词汇的联系。尽管ChatGPT似乎可以理解“什么是笑话”并为一些笑话提供合理解析,但在解释一些文字游戏时,尤其是自己通过修改构建的笑话,往往会出现牵强附会的情况,这也是ChatGPT的一个已知问题。
幽默是一种高度主观的现象,它属于人际和群体的特征。这篇论文表明,虽然ChatGPT似乎了解一些幽默的语言学结构,但它并没有展示幽默背后的人类情感导向和群体共识。就像机器是否能感知痛苦的问题一样,ChatGPT面对笑话时,真的能感受到好笑与开心吗?抑或只是简单地输出符合幽默定义的语言结构?不妨设想,当ChatGPT说出“饼干要去健身房变得更健康,就像它是一个人”时,可能逗乐的不是人类,而是ChatGPT自己。