去年我在测一个自研笑话生成模型项目名称写着AI幽默感测试结果第一轮盲评数据出来组里吵了一个下午同一条段子有人打了5分说想到了我舅有人打了1分说这算什么笑话。那一刻我才意识到幽默感测试真正的问题不在于让AI学会搞笑而在于我们连搞笑的尺子都没做好。这篇文章就围绕我实际搭建的一整套AI幽默感测试方案展开说清楚三个问题幽默感到底能不能被量化、用什么指标和流程去测、以及实测中机器讲笑话那些理论上好笑但现实冷场的典型原因。无论你是做AI评测、做对话机器人产品还是单纯好奇机器有没有幽默细胞这里面的思路和踩坑记录应该都派得上用场。1. 幽默感测试到底在测什么先拆掉好笑这顶帽子1.1 为什么好不好笑是一道主观题却有客观规律可循幽默感测试第一关不是算法问题而是定义问题。好笑听起来是纯主观感受但如果你让几百人对同一批笑话打分数据会呈现出非常稳定的分布规律经典的结构性段子setup-promise punchline得分方差其实不大真正方差大的往往是谐音梗和涉及特定文化背景的梗。这意味着主观评价背后仍然存在可建模的共性特征。我做测试时采用了三步拆解先定义幽默感在这个场景下的具体外延再找可采集的行为信号最后把信号换算成指标。外延包括单句笑话、多轮对话中的即兴回应、以及对已有梗的二次创作行为信号包括评测者的打分、是否主动追问、是否复述给朋友指标则是好笑度、意外度、逻辑一致性这些东西的加权组合。这个拆解看起来简单但它决定了整个测试的效度。如果一上来就问这个AI幽默吗评测者会维度混乱最后测出来的其实是个人喜好而一旦拆成好笑程度意外程度合理程度三个子项分数就变得可对比、可归因。1.2 测试的三个层次单句输出、多轮回应、场景化表达幽默感测试不能只在一个场景里做。我实际分了三个层次单句笑话生成给一个主题词或开头让模型写出一句完整的梗。这测的是生成能力不需要上下文也是最基础的测试项。多轮对话即兴接梗在对话历史里埋入一个槽点看模型能否顺着语境接住。这测的是上下文理解 时机判断 克制力难度直接翻倍。场景化表达给出具体情境比如安慰一个刚丢了项目的同事要求幽默但不得冒犯。这测的是是否知道什么场合能开玩笑。三个层次混在一起评测是很多人做幽默感测试时最大的坑。单句好笑不等于对话有趣对话有趣不等于场景得体。我会把这三个层次的数据分开统计否则最后你会得到一个综合看起来还行但哪哪都不行的模糊结论。1.3 一个尖锐的问题AI幽默感测试是在测AI还是在测观众这是我在项目中期才真正意识到的问题。同样一条笑话程序员群体和非技术群体给出的分数差异巨大20岁出头的大学生和35岁以上的职场人对冒犯性幽默的容忍度也明显不同。如果你把AI生成的梗拿给自己的朋友测你其实是在测朋友的口味。所以我在评测组里强制选手来自不同背景至少有技术背景、内容运营、行政支持、传统行业四类角色。样本量不需要特别大但结构必须分散。后续每次跑分我都会先算不同人群之间的Kappa一致性如果一致性低于0.3说明这条笑话的文化依赖度过高不适合作为模型幽默感强弱的证据。2. 三大幽默理论如何翻译成机器可计算的信号2.1 不协调理论笑点是语言模型的最低置信区间先说最常被引用到AI幽默里的不协调理论incongruity theory笑点来自预期与现实的落差。放到语言模型里这个落差可以用一个很直观的东西近似——模型对下一处文本的置信度。举例来说一句话铺垫完毕模型原本预测到的高概率尾词大概率是正常结尾如果实际出现了低概率但语义上说得通的词就会产生被闪了一下的效果。我在评测特征里把这个量化为意外度具体做法是让语言模型对笑话后半段逐词计算平均困惑度再与同主题普通语句的困惑度做差。但只凭意外度一定会翻车。低概率词太多就成了胡言乱语听众只会觉得莫名其妙不会觉得好笑。所以任何意外都要受逻辑一致性约束——它得在某种解释框架里成立哪怕是一个歪理。这其实就是幽默里常说的意料之外情理之中。2.2 优越感理论通过对比和自嘲完成的安全感制造第二个理论是优越感理论superiority theory笑来自某个瞬间觉得自己或自己所在的群体比笑的对象略高一等。放在机器生成里常见结构是吐槽某个职业/场景让听众代入得到优越感。但AI直接模仿这种结构有安全风险——万一吐槽到用户所属群体就是冒犯。我在对模型做指令的时候会刻意引导它走自嘲路线让AI吐槽自己而不是吐槽人类。自嘲结构天然带有安全感又保留了优越感的心理机制。实测下来效果好得多。如果你的测试目标是日常可用的幽默感优先测自嘲型幽默别测攻击型幽默。2.3 释放理论铺垫-紧张-释放的叙事节奏第三个理论是释放理论relief theory笑话先制造微小紧张再用包袱把紧张安全释放掉听众的舒压感就转化为笑。这个理论在测试里对应的是叙事节奏——前面铺垫得越是让他们啊这是在说正事后面反转时笑得越厉害。这个信号其实可以从文本结构上判断一个合格的段子通常前70%篇幅在制造语境惯性最后30%突然扭转。反过来那种从头到尾都在挤笑点的AI输出往往让人疲劳因为它没有安排张力释放点。后来我在分析评测数据时发现好笑度得分高的输出里前段与后段的词汇抽象度往往存在明显落差这就是铺垫抖包袱在统计上留下的痕迹。2.4 从理论到特征surprise、coherence、valence三件套把三个理论落到实操我最终保留了三项机器可算的文本特征Surprise意外度通过语言模型的概率分布计算转折点前后的困惑度差。Coherence一致性转折后的语义偏离程度要在合理范围用向量相似度衡量。Valence情感倾向笑话整体是善意的还是刻薄的用情感模型打分。三者合起来成了一个初步的自动化幽默度粗筛公式FunnyScore α×Surprise β×Coherence - γ×ValencePenalty。α、β、γ用一小批人工标注数据标定。粗筛不是为了替代真人打分而是为了在大量候选里先过滤掉明显冷场的输出把评测者的时间花在值得看的候选上。3. 一套可落地的AI幽默感评测流水线从数据准备到指标解读3.1 基础版受控打分卡与四维评分规则正式的评测我用了受控打分卡而非简单让用户打一个总分。卡片包含四维好笑度1到7分7分是我笑出了声4分是会心一笑但不至于出声。意外度1到5分指结尾在多大程度上偏离了预期。逻辑一致性1到5分指这个意外是否还能被合理解释。冒犯风险0或1只要任何一个评测者觉得冒犯就记为1不讨论程度。这个卡最重要的设计是让评测者先打完意外度和一致性再打好笑度而不是凭第一感觉瞎给总分。实际操作下来评测者的打分稳定性明显提高因为你先逼他想清楚了为什么笑他再打分心里更有数。3.2 进阶版A/B配对检验与改良版图灵测试打分卡解决这笑话好不好笑但解决不了这笑话是不是AI写的。所以我在基础卡之上加了两种进阶玩法A/B配对检验同一个主题让AI写两条、人写一条混合后两两呈现给评测者让他选出哪条更好笑。每条笑话至少与另外两条做三次配对最后用Bradley-Terry模型换算成相对幽默值。改良版图灵测试混入人类写的笑话让评测者判断这是AI还是人。注意判断正确率本身不是衡量标准——接近50%反而是好结果说明AI已经骗过了人类。如果你看到正确率70%以上说明机器味还很重。这两种玩法不能互替A/B配对测的是哪个更好笑图灵测试测的是像不像人写的。很多AI输出的幽默感能达到前者胜出却在后者上被人一眼看穿因为它的像人程度还差得远。3.3 裁判LLM开始流行但它自身的评分偏差你绕不开做评测时还有个很新的工具可以用让LLM当裁判对笑话按规则打分。省人力且一致性很强。但用久了你会摸到它的脾气LLM裁判有明显的保守倾向偏好政治正确、温和、结构完整的公式化笑话。容易低估荒谬型、冒犯边缘型、依赖小众场景的笑话。对双关语存在系统性偏好哪怕人类觉得这个双关很烂。破法是人机混合评审先让LLM粗筛掉一类明显低分的候选再用人工打分卡处理剩余样本。我试过纯靠LLM做最终裁决结果一批很有真人味的自嘲型笑话全被压了分而那批标准段子手风格的高分笑话在真人面前冷场率极高。LLM只能当筛子不适合当尺子。3.4 让指标真正落地一致性计算、置信区间和样本量最后是统计分析。每个模型的非评分结果要报告三样东西评测者间一致性Kappa系数低于0.4说明笑话本身争议性过高分数参考意义有限。置信区间用Bootstrap重采样计算平均分误差范围别只看点估计。样本量每个模型至少30条笑话、每条至少15人打分人数少了方差太大任何差异都不显著。这一套下来你获得的就不仅是一个这模型好笑的概率而是一份可归因、可复现、能横向比较不同模型的评测报告。4. 真人实测让AI讲笑话的冷场与救场记录4.1 实测设置模型选择、采样参数与安全过滤为了说明上面这套流程我放一次完整实测的记录。被测对象是两款开源大模型一个偏通用对话一个经过大量网络段子语料微调。生成参数统一为temperature1.1、top_p0.9——温度太低笑话会过于保守太高则容易碎成废话。每条笑话输出后先过一个冒犯词表过滤器再走裁判LLM粗筛保留20条进入真人评测。评测者共16人覆盖四个背景类别每人需要完成打分卡、三次A/B配对和图灵判断。整个过程约40分钟。4.2 案例一双关语在中文语境下的表现中文双关评测是重灾区。我让模型围绕程序员生成笑话得到一条程序员的生活就是周一写代码周二改bug周三改改bug的bug周四把bug改回bug周五把代码删了重写。这条在意外度上得分不错4.1逻辑一致性也行4.4但好笑度只有3.1。评测者的原话很统一这不叫笑话这叫真实。它更像一种吐槽性陈述节奏上缺少真正的强转折。后来我把采样温度调到1.3模型倒是生成了更像刻板笑话的版本但又流入了英文双关的英文残留结构中文评测者无法建立预期差。这暴露了一个真问题中文互联网的幽默感高度依赖语境和流行文化锚点纯结构性的双关迁移到中文后效果折损极大。如果你的产品面向中文用户直接套用英文笑话数据微调的模型基本会冷场。4.3 案例二多轮对话中的回环幽默多轮测试里我设计了一个场景用户先抱怨最近加班到怀疑人生看模型怎么幽默接话。通用对话模型的回复是建议你不要怀疑人生人生本来就没空怀疑你它也在加班。这条平均好笑度4.4意外度3.9一致性4.6是本次测试里得分最高的几条之一。评测者普遍能明确说出为什么好笑它把人生拟人化成也在加班的社畜消解了我的情绪又没过度夸张。但要注意这条笑话的成功严重依赖对话之前那句特定抱怨。我换了个语境——最近减肥老是失败——同样结构生成出来就变得生硬。这说明AI的多轮幽默本质上是上下文缝合术它会从历史里抽元素回环利用但理解不深一旦用户给出更隐晦的情绪表达它接住的成功率会急速下降。4.4 案例三自嘲型幽默的安全边界与风格迁移微调过段子语料的模型生成了一条让我印象很深的自嘲我的幽默感是从一万条人类段子里学来的所以你笑了说明你被我训练过。这条好笑度4.5意外度4.2一致性3.7而且是图灵测试里最接近真实人类成就感的候选——它把AI的训练这个事实转化为笑点给人一种它居然知道自己是什么的灵性。整个16人评测组里预言这是真人写的的评测者占了大多数。但如果把这种自嘲风格迁移到品牌客服或公司对外机器人身上就是另一回事。用户面对一个宣称自己有AI自我意识的段子手可能会误解产品边界。所以自嘲类幽默测试要加一道场景判定它是适合创作者人设的调侃还是任何场景都安全。结论是前者居多后者极少。4.5 结果汇总与失败模式读取本轮两组模型各取20条进真人评测结果汇总如下幽默类型平均好笑度平均意外度平均一致性冒犯风险率人机分辨准确率单句谐音/双关3.13.03.56%71%多轮回环接梗4.03.54.13%60%自嘲型叙述4.43.83.90%52%场景任务型回应3.42.84.20%76%从这个表能直接读出三件事。第一人机分辨准确率最高最容易被识破的是场景任务型回应因为它太稳健、太正确、太像被教导过的三好学生。第二自嘲型最难分辨但使用场景最窄。第三双关类的冒犯风险率高达6%因为谐音很容易滑向对人或群体的刻板联想。失败模式里还有一类值得单独说安全护栏干预导致的笑话截断。有两条高潜力的笑话因为后半段触发了敏感词拦截输出被硬生生换成哈哈你懂的属于典型的说到一半怂了评测者给出一致差评。这事提醒我们做幽默感测试时一定要记录安全拦截点否则你会把产品缺陷错怪到模型幽默能力头上。5. 幽默感评测暴露出的AI能力边界与后续方向5.1 语言模型擅长模仿梗不擅长发明梗这轮测试后我对AI幽默感的结论非常明确它在记忆力上远超人类在发明力上远逊于正常成年人。它能缝合你喂给它的一万条段子里出现过的结构能精准调用流行语但一旦要求它脱离已知结构、自创一个全新的喜剧逻辑它产出的东西大概率是错乱而不是创新。这不是缺点而是当前架构的必然。幽默的发明需要突破分类边界而LLM的训练目标是预测最可能延续的文本——本质上它每一次输出都在寻找更合理的路径这与幽默要求的故意走进不合理把玩一番存在内在张力。测试者不该期待模型能发明新梗而该期待它在特定场景里完成结构重组。5.2 评测分数很高但现场冷场问题可能出在评测设计上如果你按我的流程跑了一遍发现分数挺高但同事讲给你的感受却很冷先别怀疑模型回头检查评测者构成。我遇到过一版生成器在内部评测里拿了3.9的高分拿去给真实用户试用当场冷场。原因是我们内部评测者多来自技术背景对套话玩具型的笑话容忍度极高真实用户需要的则是懂我处境的情绪幽默。另一条要检查的是评测时间。人的幽默感知受情绪影响很大一次评测控制在30分钟内效果最好超过45分钟后面的笑话再好笑评测者也笑不动了分数会系统性偏低。这属于测试设计的疲劳效应不是模型的锅。5.3 可扩展的后续方向多维度幽默测试的组合下一步我打算做的扩展有三个方向。多模态幽默让模型描述一张图再生成配套的段子文字测试视听觉信息的综合笑点。幽默并不局限于文本配图、停顿、语气都是关键信号。长文本叙事幽默传统笑话是短促出击但幽默感最高阶的表现形式是讲述一个三分钟故事让观众在其中经历多次小反转和一次大反转。当前评测体系对这类笑话的覆盖基本是空白。多语言迁移测试中文、英文、日文之间的幽默迁移能力能反映模型是否真的理解笑点结构还是只是在背诵语言模板。我猜结构理解远强于文化理解但需要数据验证。5.4 一条实用经验让模型解释它为什么觉得好笑最后分享一个我在项目末期加入的做法每次生成笑话时强制模型输出一段创作自述解释它认为笑点在哪里、运用了什么技巧。别小看这一步它能大幅提升评测效率。评测者打完分后如果看到AI的自述能立刻区分两类缺陷一类是不会讲笑话另一类是不知道自己讲了什么笑话。前者是生成能力问题后者是自我认知问题。从我目前的数据看大部分模型卡在后者——它会产出偶尔好笑的东西但完全无法解释好笑的原因。这其实给AI幽默感测试提出了下一个更深的问题幽默到底是表达的能力还是理解幽默本身的能力我目前的答案是两者缺一不可而后者甚至更重要。一个不理解自己为何好笑的存在讲出再好的笑话也只是统计学意义上的巧合。
