LM-PPL

PPL是Perplexity的缩写,中文称为"困惑度"。它是一种衡量语言模型性能的指标,常用于评估语言模型在给定测试集上的表现。PPL越低,说明语言模型对测试数据的预测越准确,性能越好。

PPL的计算基于语言模型对测试集的概率估计。给定一个测试集 $W = w_1, w_2, ..., w_N$,其中N是测试集的长度(单词数),语言模型的PPL定义为:

$$PPL(W) = \sqrt[N]{\frac{1}{P(w_1, w_2, ..., w_N)}} = \sqrt[N]{\prod_{i=1}^N \frac{1}{P(w_i | w_1, ..., w_{i-1})}}$$

其中,$P(w_1, w_2, ..., w_N)$是语言模型对整个测试集的概率估计,$P(w_i | w_1, ..., w_{i-1})$是语言模型在给定前i-1个单词的情况下,对第i个单词的概率估计。

由于连乘的概率值很小,为了避免下溢出(underflow),通常使用对数概率进行计算。因此,PPL的计算公式可以改写为:

$$\log PPL(W) = -\frac{1}{N} \sum_{i=1}^N \log P(w_i | w_1, ..., w_{i-1})$$

$$PPL(W) = \exp(-\frac{1}{N} \sum_{i=1}^N \log P(w_i | w_1, ..., w_{i-1}))$$

在实际计算中,我们通常先计算测试集的对数概率和,然后除以测试集长度,再取负号,最后取e的指数。

对于n-gram语言模型,由于马尔可夫假设,第i个单词的概率只依赖于前n-1个单词,因此条件概率可以简化为:

$$P(w_i | w_1, ..., w_{i-1}) \approx P(w_i | w_{i-n+1}, ..., w_{i-1})$$

这样,我们可以通过n-gram的频次估计条件概率,进而计算PPL。总之,PPL反映了语言模型在测试集上的预测能力,是评估语言模型性能的重要指标之一。

举个例子

假设我们有一个bigram语言模型(n=2),训练数据如下:

a b
a c
b a
b a
c a

根据这个训练数据,我们可以估计出bigram的条件概率:

P(a|<s>) = 2/5
P(b|<s>) = 2/5
P(c|<s>) = 1/5
P(a|a) = 0
P(b|a) = 1/2
P(c|a) = 1/2
P(a|b) = 1
P(b|b) = 0
P(c|b) = 0
P(a|c) = 1
P(b|c) = 0
P(c|c) = 0

其中,<s>表示句子的开始。

现在,如果我们要计算测试集"a b a"的PPL,则:

$$P(w_1, w_2, w_3) = P(a|<s>) * P(b|a) * P(a|b) = 2/5 * 1/2 * 1 = 1/5$$

$$PPL(W) = \sqrt[3]{\frac{1}{P(w_1, w_2, w_3)}} = \sqrt[3]{5} \approx 1.71$$

标签: NLP

添加新评论