想象一家高档餐厅来了一位会写故事的大厨。它每次端出的创意菜都把“故事”当作主料:有的像悬疑汤,有的像冒险拼盘。食客吃得开心,但餐厅老板想知道这位大厨到底有多会创作、哪些菜稳定、哪些菜偶尔惊艳。于是,老板请来一组食评人、一台菜肴分析仪,还规定统一的品鉴表。这个“评菜团”的任务,就是今天要讲的故事生成评测。它的工作分几步:先定义创意菜的评判维度,再让真人食客盲品打分,又让机器做客观测量,最后比较两套结果是否一致、是否校准,并用精心设计的菜单(数据集)反复测试。这样,我们就能看清 AI 模型的故事创作能力,而不是被一两道好菜冲昏头脑。
学会故事生成评测,你就掌握了“如何科学评价 AI 的创意”——这是进阶为高级评测工程师、模型评估负责人必须迈过的一步。
可视化演示
本节配有交互动效(进入视口后自动加载,约 3KB)。
创意能力概述
创意主厨端出新菜,食客的第一反应往往不是分析调料,而是问:这道菜有惊喜吗?在故事生成里,“惊喜度”就是创意。创意能力指的是模型能否在连贯叙事中写出不套路、有新意、能打动人心的内容。它不是一句“生成正确”就能概括的,而是像评价一道菜是否值得被记住一样,需要看整体完成度。
故事生成评测因此不是查错题,而是综合打分。我们既关心故事主线是否清晰,也关心人物行为是否统一,还关心结构是否张弛有度。就像评审团不会只看一道菜的颜色,而要综合香气、口感、回味、摆盘来给分。实际评测时,最朴素的做法是把几种关键能力合成一个综合分。
这套综合打分就像餐厅的招牌菜评分卡,既不会让一道菜的某个亮点掩盖整体问题,也不会因为某道配菜难吃就全盘否定主菜。评测创意能力,首先要建立这种“多维度看整道菜”的视角。
- 确定分项C 代表情节合理性,S 代表叙事结构,D 代表创意多样性,先分别给出 0 到 1 之间的评分。
- 分配权重0.4、0.3、0.3 表示每个维度对总分的贡献比例,权重之和为 1。
- 加权合成把每个分项乘以对应权重后再相加,得到最终创意质量分 Q。
评测维度界定
美食评审团手上通常会拿三张表:一张记故事线,一张记人物,一张记结构。在故事生成评测中,这三张表分别对应情节合理性、角色一致性与叙事结构。情节合理性关心事件有没有因果链,角色一致性关心人物前后是否“不崩人设”,叙事结构关心起承转合是否完整。
除了三大主维度,还有一个常被忽略的“多样性创意”。它可以理解为同一菜单里十道菜是否各有特色。如果模型生成十个故事,开头全是“从前有个少年”,那即使单篇质量不错,整体创意依然不足。评测时,我们会从生成文本中抽取若干属性,逐项判断是否一致。
角色就像一道菜里的固定主料,前面是河鱼,后面突然变成猪肉,食客立刻就会皱眉。评测维度界定的意义,就是把“不崩人设”这种直觉翻译成可计算、可标注、可比较的具体规则。
- 列出属性清单从故事里抽取角色外貌、性格、目标等可前后对照的属性,形成抽查清单。
- 判定一致性逐一比较每个属性在故事前后是否矛盾,数出其中一致的属性个数。
- 计算占比用一致属性数除以总抽查属性数,得到 0 到 1 之间的一致性分数。
主观评测方法
如果想知道一道菜到底好不好吃,最直接的办法还是请真人食客来尝。故事生成的主观评测同样如此:组织人类标注者对生成故事进行评分。这种方法能捕捉语义、情感、幽默等难以量化的“口感”,但缺点是成本高、标准因人而异。
为了降低个人口味带来的偏差,评测中常使用成对比较:同时给标注者两个故事,只问“哪个更好”。这比让标注者打 80 分还是 90 分更容易达成一致,好比盲品时只需在 A、B 两道菜中选更喜欢的。专家访谈则进一步追问“为什么好”,帮助提炼更细的评测维度。成对比较结果可以用一个经典模型来刻画。
主观评测就像请多位美食家盲品,单个人可能有偏好,但通过成对比较和适当建模,我们能从一堆“这道更好”的判断中还原出相对稳定的质量排序。它是最接近人类真实感受的评价方式。
- 潜在得分把每个故事看作有一个隐藏的“真实质量分” s,数值越高代表越可能被偏好。
- 指数化用自然指数函数把任意实数映射为正数,方便构造概率。
- 归一化用 A 的指数值除以两者指数值之和,得到 A 战胜 B 的概率。
客观评分指标
请真人食客试菜成本高、速度慢,于是厨师团队发明了一台“菜肴分析仪”。故事生成评测中的自动指标就扮演这个角色:不需要人类实时打分,可以快速批量计算。最基础的一类指标是 n-gram 重叠,核心思想是看生成故事和参考故事在词汇片段上的重合度,类似比较两道菜的用料清单。
然而,n-gram 重叠只看表面字词,无法理解“少年打败巨龙”和“勇者战胜恶龙”在语义上其实很像。于是又发展出语义相似度、统计多样性、复杂度指标等。多样性指标衡量模型是否只会重复套话,复杂度指标则关注句式和词汇的丰富程度。下面是 n-gram 重叠的经典精确率公式。
客观指标的好处是可复现、可扩展,但缺点也很明显:像“菜谱分析仪”只能测出表面食材是否相似,测不出真正的口味和创意。因此,自动指标通常与主观评测搭配使用,而不是完全替代。
- 构造 n-gram 集合把生成故事和参考故事分别切分成连续 n 个词的片段集合。
- 求交集统计生成故事的 n-gram 中有多少也被参考故事包含。
- 计算比例交集大小除以生成故事 n-gram 总数,得到重叠精确率。
人机相关性
当主厨和评审团都对同一批菜打了分,老板自然要问:机器的判断和人类的感觉一致吗?故事生成评测中的“人机相关性”正是回答这个问题。常用的做法是把人类评分和自动指标在同一批故事上的得分放在一起,计算相关系数。相关系数高,说明自动指标可以在一定程度上代理人类审美;相关系数低,则说明指标可能测错了方向。
Pearson 相关系数是最常见的线性相关指标。它衡量两组分数是否“同步高低”,比如人类给高分时自动指标通常也给高分。但要注意,相关性不等于一致性,就像两个人说“这道菜不错”,一个给 70 分,一个给 90 分,相关高但分值并不一致。因此还需要一致性检验来辅助判断。
人机相关性就像核对“机器味觉仪”和“食客打分表”的排名是否吻合。如果机器认为惊艳的菜,食客也普遍点头,我们才敢用自动指标做大规模初筛,再用人类评审做关键决策。
- 中心化分别把人类评分 h_i 和自动指标 a_i 减去各自的平均值,消除整体高低的影响。
- 求协方差把每对中心化后的值相乘再加总,刻画两者是否同时高于或低于均值。
- 归一化除以两组分数的标准差乘积,将结果压缩到 -1 到 1 之间。
校准与偏差
即使机器评分和人类评分高度相关,也仍可能有“系统偏差”:机器总是倾向于把 0.7 的菜标成 0.9,或者把人类认为 80 分的菜统一压到 60 分。校准就是修正这种偏差,让“机器说 0.8 分”和“实际有一批故事确实接近 0.8 分”对应起来。
校准差一个经典量化指标是 Expected Calibration Error(ECE),中文可叫“期望校准误差”。它先把所有预测按置信度分箱,再逐个箱子比较“机器给出的平均置信度”和“真实人类认可的比例”。两者差距越小,校准越好。这就像把食客按口味辣度分成几档,分别检查每个档位的机器推荐成功率。
校准就像纠正一位口味偏咸的评审员:不是让他乱打分,而是把他的打分量表整体对齐。故事生成评测方案如果不做校准,自动指标即使“方向正确”,最终结论也可能是系统性高估或低估模型能力的。
- 分箱把所有样本按预测置信度分到 K 个区间,每个箱子有 n_k 个样本。
- 算偏差在每个箱子里求真实准确率 acc_k 与平均置信度 conf_k 的绝对差。
- 加权平均按箱子大小占比加权汇总,得到整体校准误差。
数据集构建
要持续考核大厨,老板必须准备稳定的“测试菜单”。故事生成评测的数据集构建就是这个“菜单设计”过程。数据来源要多元,最好覆盖不同题材、不同长度、不同风格;标注规范要明确,否则不同标注者对“情节合理”的理解会天差地别;规模设计则要平衡成本与统计功效——太少测不稳,太多标不起。
高质量评测数据集还会考虑“基准复用”:把公开数据集和内部评测集组合起来,方便同行横向比较。为了让标注质量可信,通常会让两名标注者标注同一批故事,再计算标注一致性。一致性越高,说明规范越清晰,后续评测结果越可靠。
数据集构建像是给评菜团统一菜谱和品鉴标准。菜谱越清晰,食客评分越稳定;菜单覆盖面越广,我们对大厨创意能力的判断就越不容易被单一口味带偏。
- 配对标注让两名标注者独立对同一批 M 个故事打标签,得到两组结果。
- 判断相等逐个样本比较两组标签是否完全一致,一致记 1,否则记 0。
- 取平均所有判断结果求和后除以样本总数,得到一致性比率。
AI 应用场景
内容平台批量评估 AI 网文
阶段:离线评测与上线质量监控
解决的问题:内容平台每天收到大量 AI 生成小说,人工逐篇审读成本极高。传统方式只能抽样检查,容易漏掉“情节崩坏”或“主角人设突变”的问题。利用故事生成评测的维度框架,平台可以先让自动指标从情节合理性、角色一致性、叙事结构三个方向打分,筛出高风险作品,再交由人类编辑重点审核。
具体案例:一家短篇故事社区在征文活动中用“情节合理性 + 角色一致性”双指标做初筛,把 1 万篇 AI 投稿压缩到 300 篇进入人工评审。人工评审环节使用成对比较,最终获奖作品在读者回访中的满意度提升了 23%。
评测基准团队设计自动化校准方案
阶段:基准设计与指标校准
解决的问题:很多团队只报告自动指标分数,却不知道这些分数是否与人类感受一致。基准研发团队可以把“人机相关性 + ECE 校准”嵌入评测流程:先在小规模人工标注集上计算自动指标与人类评分的相关系数,再按置信度分箱校准误差,最后给出可信的校准后分数。
具体案例:某大模型评测平台在发布故事生成榜单时,除报出 ROUGE、BERTScore 等指标外,还额外公开了与人类评分的 Pearson 相关系数和 ECE 校准曲线。参与方看到“分数高但校准差”的模型后,意识到其输出在特定题材上存在系统性偏差,从而针对性地优化数据配比。
Python 演示
import mathimport random def pearson(xs, ys): n = len(xs) mx = sum(xs) / n my = sum(ys) / n cov = sum((x - mx) * (y - my) for x, y in zip(xs, ys)) vx = math.sqrt(sum((x - mx) ** 2 for x in xs)) vy = math.sqrt(sum((y - my) ** 2 for y in ys)) return cov / (vx * vy) if vx * vy > 0 else 0.0 def expected_calibration_error(scores, labels, bins=5): predictions = [s >= 0.5 for s in scores] bin_conf = [0.0] * bins bin_acc = [0.0] * bins bin_n = [0] * bins for s, y in zip(scores, labels): i = min(int(s * bins), bins - 1) bin_n[i] += 1 bin_conf[i] += s bin_acc[i] += 1 if (s >= 0.5) == (y == 1) else 0 ece = 0.0 for i in range(bins): if bin_n[i]: conf = bin_conf[i] / bin_n[i] acc = bin_acc[i] / bin_n[i] ece += (bin_n[i] / len(scores)) * abs(acc - conf) return ece def main(): random.seed(42) # 人类评分是更真实的食客打分 human = [random.uniform(0.3, 0.95) for _ in range(100)] # 自动指标与人类评分并非完全同步 auto = [min(1.0, max(0.0, h + random.gauss(0, 0.15))) for h in human] good = [1 if h >= 0.5 else 0 for h in human] r = pearson(human, auto) ece = expected_calibration_error(auto, good) print("Pearson correlation: %.3f" % r) print("Expected calibration error: %.3f" % ece) if __name__ == "__main__": main()
def pearson(xs, ys):定义相关系数函数,接收人类评分和自动指标两列分数。cov = sum((x - mx) * (y - my) for x, y in zip(xs, ys))计算中心化后的协方差,体现两者是否同步变化。return cov / (vx * vy) if vx * vy > 0 else 0.0除以标准差乘积,把相关性归一化到 -1 到 1。def expected_calibration_error(scores, labels, bins=5):定义校准误差函数,用 5 个置信度分箱刻画预测置信度与真实结果的差距。i = min(int(s * bins), bins - 1)把连续置信度得分映射到对应分箱序号。ece += (bin_n[i] / len(scores)) * abs(acc - conf)按样本占比加权累加每个箱子的置信度与准确率之差。r = pearson(human, auto)在模拟数据上计算自动指标与人类评分的相关性。
常见误区
误区我以为自动指标能算出 80 分,这篇故事就一定比算出 60 分的好,直接按分数排名就完事了。
正解自动指标只是“菜肴分析仪”,能测出用词重叠度、句法复杂度,却很难体会反转是否精彩、人物是否讨喜。自动分数高只能说明在某些可量化的表面上接近参考,并不等于人类感知上的“更好”。正确做法是把自动指标作为初筛,再用人类评测小样本做相关性验证。
为何常见:因为自动指标客观、可复现,看起来像科学结论,初学者容易把“数值高”和“质量高”画等号。
误区既然机器不懂审美,那所有评测都应该相信人类标注,人类评分永远不会错。
正解人类评分也受疲劳、个人偏好、前后标准不一致等影响。同一个人早上和晚上可能给同一个故事打出不同分数,不同人之间的尺度差异更大。所以人类评测需要用评分量表、成对比较、多人标注和一致性检验来规范,不能简单认为“人说的就是金标准”。
为何常见:因为人类确实能捕捉机器忽略的语义细节,但忽略了人类评测本身的方差和偏差。
误区既然是测创意能力,那就把网上能找到的故事全塞进数据集,数量越多,结果越可信。
正解如果数据集里 90% 是玄幻,10% 是推理,模型可能在玄幻上表现很好而推理很差,平均分却显得不错。数据集构建要控制题材、长度、难度和参考质量的平衡,甚至需要分层采样,才能让评测分数反映真实能力。
为何常见:人们习惯认为“样本量越大误差越小”,却忽略了样本结构不均衡带来的系统性偏差。
误区只要主角名字每段都一样,就算角色一致;如果换了名字,就是不一致。
正解角色一致性关注的是人物的性格、目标、能力、知识边界等属性是否矛盾。一个角色前一秒胆小如鼠,后一秒无惧屠龙,即使名字没变,也会被判为“崩人设”;反过来,用“少年”“勇者”等不同称呼指代同一角色,并不一定算不一致。评测时要按属性清单逐项判断。
为何常见:因为“一致性”这个词听起来像“前后相同”,初学者容易把它简化成最显眼的姓名标识。
面试题
Q1. 故事生成评测中,“角色一致性”主要考察什么?
- A.角色姓名是否完全相同
- B.角色行为与设定是否矛盾← 正确答案
- C.角色出场次数是否平均
- D.角色说话语气是否单一
答案:B。角色一致性关注角色行为、目标、性格等属性能否前后自洽,不能只看名字或出场次数。选项 B 最符合“不崩人设”的核心含义。
Q2. 人类主观评测最常用哪种方式来比较两个故事?
- A.分别给分再排名
- B.直接阅读找错别字
- C.成对比较相对优劣← 正确答案
- D.统计每句平均字数
答案:C。成对比较只让标注者判断“哪个更好”,比绝对打分更容易保持标准一致,就像盲品时只需在两道菜里选更喜欢的。
Q3. 自动评分指标与人类评分的相关分析主要回答什么问题?
- A.故事是否符合语法规范
- B.指标高是否代表人类也认可← 正确答案
- C.模型是否能无限生成
- D.数据集的标注成本高低
答案:B。相关分析衡量自动指标与人类评分是否同步变化。如果相关高,自动指标可以在一定程度上代理人工评价;相关低则说明指标可能偏离人类感受。
Q4. Expected Calibration Error(ECE)衡量的是什么?
- A.生成模型训练轮数多少
- B.置信度与准确率的差异← 正确答案
- C.人类评分的平均分数
- D.故事文本的总字数大小
答案:B。ECE 通过分箱比较模型的平均置信度与实际准确率,衡量“机器说 0.8 分时,真实情况是否接近 0.8”。它关注的是校准误差,而不是训练轮数或字数。
Q5. 评测数据集构建时,最关键的一步是什么?
- A.让模型自己挑选故事
- B.制定明确标注规范← 正确答案
- C.只收集科幻题材数据
- D.用自动翻译生成文本
答案:B。没有明确标注规范,不同标注者对“情节合理”“角色一致”的理解会差异巨大,导致数据集质量失控。数据来源、规模设计都建立在规范之上。
Q6. 为什么不能只用 n-gram 重叠作为唯一客观指标?
- A.它的计算速度非常慢
- B.它无法理解深层语义← 正确答案
- C.它只能用于短文本
- D.它会把所有分数归零
答案:B。n-gram 重叠只看表面词汇片段是否重合,无法理解“打败巨龙”和“战胜恶龙”在语义上等价。因此需要语义相似度、多样性等指标协同评测。
Q7. 关于 Bradley-Terry 成对比较模型,下列说法正确的有?
- A.两故事潜在分相等时胜率为一半← 正确答案
- B.潜在分更高的故事胜率更高← 正确答案
- C.成对比较可缓解绝对评分偏差← 正确答案
- D.该模型不必依赖任何人工数据
答案:ABC。当 s_A 和 s_B 相等时,胜率是 0.5;s_A 更高时胜率大于 0.5;成对比较不要求标出绝对分数,能缓解评分尺度差异。D 错误,因为模型参数需要由人类成对比较结果来拟合。
Q8. 下列哪些属于故事生成评测维度?
- A.情节是否合理完整← 正确答案
- B.角色是否始终一致← 正确答案
- C.编码字节占用多少
- D.叙事结构是否清晰← 正确答案
答案:ABD。故事生成评测关注情节合理性、角色一致性和叙事结构等创意维度。“编码字节占用”是存储指标,不是叙事质量指标。
Q9. 校准自动指标与人类评分时,正确做法有哪些?
- A.统一评分量表与锚点← 正确答案
- B.增加随机噪声增强鲁棒性
- C.按置信度分箱校核误差← 正确答案
- D.删除所有低分样本再拟合
答案:AC。统一评分量表能减少标注者尺度差异,按置信度分箱可计算 ECE 校准误差。增加随机噪声和删除低分样本都会破坏真实数据分布,不是校准的正确策略。
Q10. 某模型对 100 个故事给出预测置信度;其中 40 个置信度 0.8、实际正确 24 个,60 个置信度 0.9、实际正确 54 个。若按两箱计算 ECE,结果是多少?
- A.0.06
- B.0.08← 正确答案
- C.0.12
- D.0.16
答案:B。第一箱置信度 0.8、准确率 24/40=0.6,差值为 0.2,权重 0.4;第二箱置信度 0.9、准确率 54/60=0.9,差值为 0。ECE=0.4×0.2+0.6×0=0.08。