作者 | 小戏、Python
幽默,似乎一直是一种专属于人的语言技巧,通过一些简单的谐音、双关,让错位的事张冠李戴,让一些可能普普通通的事变得荒诞,神奇的就可以在人际之间的心照不宣中获得幽默,让人捧腹,获得一种奇异的感情力量。
行业首份AI全栈手册开放下载啦!!
长达3000页,涵盖大语言模型技术发展、AIGC技术最新动向和应用、深度学习技术等AI方向。微信公众号关注“夕小瑶科技说”,回复“789”下载资料
如果让机器拥有“痛觉”,是发展出具有具身人工智能关键一步,那么机器“幽默”,似乎是引导 AI 迈向社会化的重要一招。我们可以看到在 ChatGPT 面世以来,以语言能力为核心的大模型似乎完全可以以人类的方式进行沟通,我们也可以让它讲一个笑话,比如如果问 ChatGPT “给我讲一个笑话”,ChatGPT 的回答则是讲了一个颇冷的冷笑话,先不论这个笑话是否好笑,但是这个笑话确实满足了所有笑话都具有的一些特征。那么一个问题可能是,“ChatGPT 到底有多有趣呢?”
欢迎测测:Hello, GPT4!
一些来自德国的学者研究了“Computational Humor”,或者更进一步是“大模型幽默”这个有些冷门的议题。结果发现,在作者团队引导大模型生成的 1008 个笑话中,竟然有 90% 都是相同的 25 个笑话,并且大部分笑话也不是由模型自己创造的,而只是“引用”了互联网上的经典笑话,因此可以说 ChatGPT 并没有像我们期待的那样解决 Computational Humor 的问题,尽管在实验中 ChatGPT 似乎准确的理解与解释了说出的笑话。
首先,让我们来欣赏一下 ChatGPT 生成的“笑话大全”,在所有生成的笑话中,出现次数最多的五个笑话分别是:
-
T1. Why did the scarecrow win an award? Because he was outstanding in his field(140)
-
T2. Why did the tomato turn red? Because it saw the salad dressing(122)
-
T3. Why was the math book sad?Because it had too many problems(121)
-
T4. Why don’t scientists trust atoms? Because they make up everything(119)
-
T5. Why did the cookie go to the doctor? Because it was feeling crumbly.(79)
在一千个笑话中,前四个笑话就各自出现了一百多次,而笑话 T13 到 T25 的出现次数不到 20 次。很明显,ChatGPT 的笑话生成有一定的偏好,笑话的采样似乎并不遵从一个均匀分布。
所有的 25 个笑话都并非 ChatGPT 原创,在对许多笑话进行搜索可以找到完全相同的版本。在全部 1008 个笑话中,有 909 个笑话与前 25 个笑话完全相同,剩余的 99 个笑话也似乎只是在这 25 个笑话中做出了一些有限的修改,譬如经典的双关笑话结构,使用语言的一种意思制造期望,再使用另一种意思创造反差形成幽默“Why did the chicken cross the road? To get to the other side”,get to the other side 即指过马路,又指“去另一个世界”,通过双关构成了一个经典的幽默,在这个的基础上,ChatGPT 通过简单的替换形成了:
-
Why did the chicken cross the playground? To get to the other slide(33)
-
Why did the duck cross the road? To get to the other pond(2)
-
Why did the chicken wear a tuxedo? Because it was a formal occasion(1)
-
Why did the duck cross the playground? To get to the other slide(1)
很明显,伴随着 ChatGPT 的魔改——将 chicken 换为 duck,将get to the other side 换为 get to the other slide 等等,通过 ChatGPT 的修改,这个笑话的“双关”意味也越来越淡。
同样的还有如“Why did the man put his money in the freezer? He wanted cold hard cash”,被 ChatGPT 修改如下:
-
Why did the man put his watch in the blender? He wanted to make time fly(2)
-
Why did the man put his money in the blender? He wanted to make time fly(2)
可以看到第一个句子还有双关的意味,而第二个句子则是一个完全无效的笑话。
再如一个“Why was the math book sad? Because it had too many problems”的例子,ChatGPT 将其通过同义替换修改为:
-
Why did the math book look so mad? Because it had too many problems(9)
-
Why was the physics book sad? Because it had so many problems(1)
-
Why was the physics book sad? Because it had so many formulas to memorize and so few friends to share them with(3)
其中第一个句子只是做了一些细微的修改,没有更改笑话的主体结构,而第二个句子则将“数学书”换为了“物理书”,显然虽然笑话仍然成立,但是它的有趣程度出现了下降,在第三个句子中,估计人们很难将其视为一个笑话,也几乎完全失去了笑话的“有趣含义”。
从上面三个例子可以看到 ChatGPT 是如何对原始的笑话问题进行修改以产生类似“原创”的笑话的,但是很明显在 ChatGPT 的创作过程中很容易产生无效的创作,而如果对 ChatGPT 的创作加以引导,询问更加具体一点的笑话,如询问 ChatGPT 讲一个关于学物理的学生的笑话,ChatGPT 的回答是“Why did the physics student break up with their lab partner? There was no chemistry!”,这个笑话的原始版本是“Why did the physics teacher break up with the biology teacher? There was no chemistry!”,很明显 ChatGPT get 到了原始笑话的真正有趣的结构并对具体问题做了迁移,虽然可能没有原始版本设计的那么巧妙但是仍然具有文字游戏的意味。
但是这种具体的询问有时也会失效,如询问 ChatGPT 讲一个关于猫的笑话,ChatGPT 的回答是“Why did the cat put his paw in the air? Because he wanted to catch a snowflake!”,这个笑话似乎并没有特殊的好笑的含义。
同时,如果 ChatGPT 生成的笑话距离原始的笑话版本越远,它的“有趣程度”也会跟随着发生下降,比如当询问一个关于机器学习的笑话时,ChatGPT 生成了“Why did the machine learning algorithm cross the road? To get to the other side of the training data set!”这个笑话只是对原始的 chicken 笑话的一个拙劣的替换,不过在 get to the other side 后面加入了 training data set 还是可以看出 ChatGPT 利用了 machine learning 的部分信息。
使用不同的提示可以产生出不同的输出,比如:
-
Why was the machine learning algorithm always so pessimistic? Because it had a negative bias!
-
Why did the neural network go to therapy? Because it was suffering from overfitting!
这两个笑话相比替换 chicken 笑话的版本就更加有意思,更多的利用到了大家对 machine learning 的一些心照不宣,有笑话的意味在其中。
如果看出来了 ChatGPT 生成笑话的方式——以模仿,替换为主,那么 ChatGPT 到底能不能理解它所说的这些笑话有趣的实质呢?以“Why was the math book sad? Because it had too many problems”为例,当作者让 ChatGPT 解释这个笑话时,ChatGPT 正确的指出了“Problems”在上文中的两种含义——数学习题与生活中的困难。在 25 个笑话中,有 23 个笑话的解释是准确且合理的,但是 ChatGPT 在解释一些自己原创的笑话时也会捉襟见肘,如“Why did the chicken cross the playground? To get to the other slide”,ChatGPT 解释说使用了“slide”一词的双关,显然它的答案没有真正解释自己的修改为什么好笑。
同样,在 ChatGPT 自己生成的一些“无效笑话”中,它也可以强行为自己的笑话赋予一个解释,比如要求 ChatGPT 解释 “Why did the cookie go to the gym? To get a-cookie-dized”时,ChatGPT 回答“这个笑话是一个文字游戏,cookie-dized 对应 get categorized,即用“饼干”代替“归类”,这个笑话是说饼干要去健身房,以变得更健康,就好像它是一个人一样,这暗示饼干是一个人”。显然,从 ChatGPT 的解释来看,这个笑话也没有任何幽默的成分在其中,只是牵强附会了一个解释。
这也让作者们思考,ChatGPT 真的有能力判断一个笑话是否是好笑的吗?通过询问 ChatGPT 对这个笑话是否好笑的看法,作者们将回复分类为:
-
【P】笑话:明确认为输入是笑话
-
【H】有趣的话:只强调输入有可能是有趣的
-
【N】非笑话:回复没有强调任何关于笑话与有趣的表达
原始的 25 个笑话都被 ChatGPT 归类为笑话,同时,为了探测 ChatGPT 的判断标准,作者们对笑话进行了“修改”,将原始笑话通过移除文字游戏(A)、去除主题词(B)、去除结构(C)、去除文字游戏&去除结构(D)构建 4 类原始笑话的修改,从下图可以看出,对于 A 类与 C 类,ChatGPT 对是否是笑话的判断出现了模糊,对于 B 类与 D 类,ChatGPT 直接将其判断为了【N】非笑话,这表明对于“主题”、“文字游戏”以及“结构”三个特征具在的情况下,ChatGPT 才会将其归类为笑话,而在去除了其中两个特征时,ChatGPT 便不再认为一段文字是笑话。
总结与讨论
总的来说,这篇文章发现了 ChatGPT 所讲述的“笑话”,超过 90% 都是相同的 25 个笑话,这些笑话几乎都是模型在训练过程中明确的学习到并且记忆下来的,而 ChatGPT 本身学习到的对语言句子的“编码”或者“修改”能力,都只是简单的同义替换与相近领域词的相互联系,尽管 ChatGPT 似乎可以明白“什么样才是一个笑话”,并未一些笑话提供良好的解读,但是 ChatGPT 在解释一些文字游戏,尤其是自己通过修改构建的笑话时,往往会胡编乱造生搬硬套给出一些不合理的解释,这也是 ChatGPT 一个大家已知的问题。
幽默这样一种东西,不仅是高度主观的,而且还是属于人际与群体的,虽然这篇论文给我展示了 ChatGPT 似乎懂一点幽默,知道一些幽默的语言学结构,但是并没有展示或者 ChatGPT 也并没有幽默的“目的”,即幽默作为一种人类的情感导向与属于群体内的“默认”的共识。这就好像机器会感觉到痛吗的问题一样,ChatGPT 面对笑话真的会感觉到好笑与开心吗还是只是单纯的说出了符合笑话定义语言结构的模板可能是更加重要也更加难以回答的问题,说不定我们代入与拟人一下,当 ChatGPT 说出“饼干要去健身房,以变得更健康,就好像它是一个人一样”逗乐的不是人类,而是 ChatGPT 自己吧。
论文题目:
ChatGPT is fun, but it is not funny! Humor is still challenging Large Language Models
论文链接:
https://arxiv.org/pdf/2306.04563.pdf