困惑度(Perplexity)在NLP中是个最流行的评估指标,它用于评估语言模型学的到底有多好.
但是很多炼丹师可能至今对"困惑度"依然感到困惑,这篇就把这个讲清楚.
假设我们要做个对话机器人,它功能很简单,就是你跟它说你冰箱有啥,它告诉你还需要买啥,能一起做出美味佳肴.
例如"鸡肉,胡萝卜",它能够立马给出5~6种购物清单,这就类似用一个NLP模型,去预估和"鸡肉和胡萝卜"共现较多的食材.
但是这样评估并不全面,真实情况是用这个NLP模型可能会产生很多新菜谱,然后按照新菜谱可能可以创造更好的美味佳肴?
那还需要美食家去评价这个模型了.有没有一种指标,它独立于特定的任务,可以评估模型的质量呢?那就是困惑度了,它衡量了模型对自己预估结果的不确定性.
低困惑度说明模型对自己很自信,但是不一定准确,但是又和最后任务的表现紧密相关.然后它又计算起来非常简单,用概率分布就可以计算.
困惑度如何算?
举个简单的例子,训练上述对话机器人的样本如下:
1. 鸡肉,黄油,梨
2.鸡肉,黄油,辣椒
3.柠檬,梨,虾
4.辣椒,虾,柠檬
这些句子,有6个word,我们学个模型就是给一个词,预估其他词和它一起共现的概率.最简单的模型就是unigram模型了,每个word都是独立分布的,因为每个词都出现了两次,所以所有词出现的概率都是一样的:
这明显是个非常差的模型,无论你告诉这个模型你有啥,它都会随机给你