困惑度(perplexity)
/ per-PLEK-suh-tee /
困惑度衡量的是一个语言模型被真实文本「惊到」的程度。想象模型一个词一个词地读一句话,每读一个就去猜下一个会是什么。如果下一个词通常都在它的预料之中,它就几乎不惊讶;如果它老是被打个措手不及,那它就非常惊讶。困惑度把这种平均的惊讶程度打包成一个数字——越低代表越不惊讶,也就意味着对这门语言拟合得越好。
有一个直观的读法:困惑度为N,大致就像模型在每一步都得从N个等可能的词里均匀地挑一个那样困惑。困惑度为10,意味着它差不多像每次蒙着眼睛从10个选项里挑那样没把握;困惑度为100,就是从100个里挑。所以一个困惑度为20的模型,粗略地说,在预测下一个词上比困惑度为40的模型好上一倍。在数学上,它不过是「文本上平均对数损失」的指数。
困惑度是追踪「语言模型在训练中是否真的在学」的主力工具,更低的数字确实反映出更好的下一词预测能力。但要当心那种过度宣称:低困惑度并不意味着文本是真实的、有用的,或讲得通的。一个模型可以对流畅的胡话毫不惊讶。而且困惑度的数字,只有在同样的文本、同样的分词方式上算出来时才可比——词表不同会让这些数字无从比较,所以一个不带任何背景报出来的困惑度,几乎毫无意义。
读到「猫坐在___上」时,一个好模型预料到的是「垫子」「地板」「沙发」——只有寥寥几个可能的词,所以困惑度低。一个弱模型则觉得这里几乎任何词都说得通,仿佛要在几百个里挑——困惑度高。文本是同一句,模型的惊讶程度却不同。
困惑度 ≈ 模型在每一步实际上是在多少个词之间犹豫不决。
困惑度分数只有在完全相同的分词方式和测试文本下才可比——一个词表更大或切分方式不同的模型,可能在毫无真正进步的情况下报出不同的数字。而且关键是,困惑度衡量的是「流畅度的拟合」,而非事实的正确性;一段自信而流畅的幻觉,完全可以拥有出色的困惑度。