在自然语言处理中,困惑度是用来衡量语言模型优劣的一个方法。它的值是对交叉熵损失函数做指数运算后得到的结果。
交叉熵损失函数
单个训练样本的损失:
loss=−n1∑i=1nyilogyi^=−logyj^
n是标签数量,在语言模型中指的是字符总数。
yi^是预测概率,
yi是预测正确概率。假如标签数为3,每个样本只有一个标签,正确预测结果为类别1,则
y1=1,
y2=0,
y3=0,代入公式得到
loss=−logy1^。可以看到交叉熵损失函数只关心预测正确的概率。
困惑度
perplexity=eloss=yi^1
- 最佳情况下,模型总是把标签类别的概率预测为1,此时困惑度为1;
- 最坏情况下,模型总是把标签类别的概率预测为0,此时困惑度为正无穷;
- 基线情况下,模型总是预测所有类别的概率都相同。
yi^=n1,
perplexity=n。此时困惑度为类别个数。
显然,任何一个有效模型的困惑度必须小于类别个数。在语言模型中,困惑度必须小于词典大小vocab_size
。