为什么我们可以使用熵来衡量语言模型的质量?

时间:2014-04-08 09:49:36

标签: machine-learning nlp data-mining text-mining

我正在阅读< Foundations of Statistical Natural Language Processing>。它有关于信息熵与语言模型之间关系的以下陈述:

  

......这里的要点是,如果一个模型捕获更多的   一种语言的结构,那么模型的熵应该是   降低。换句话说,我们可以起诉熵作为质量的衡量标准   我们的模特......

但是这个例子怎么样:

假设我们有一台机器一个接一个地吐出2个字符A和B.而机器的设计者使A和B具有相同的概率。

我不是设计师。我尝试通过实验对其进行建模。

在初始实验期间,我看到机器分割了以下字符序列:

  

A,B,A

所以我将机器建模为P(A)= 2/3和P(B)= 1/3。我们可以将此模型的熵计算为:

-2/3*Log(2/3)-1/3*Log(1/3)= 0.918 bit  (the base is 2)

然后,设计师告诉我他的设计,所以我用更多信息改进了我的模型。新模型如下所示:

P(A)= 1/2 P(B)= 1/2

这个新模型的熵是:

-1/2*Log(1/2)-1/2*Log(1/2) = 1 bit

第二种模式明显优于第一种模式。但是熵增加了。

我的观点是,由于试验模型的随意性,我们不能盲目地说较小的熵表示更好的模型。

有人可以对此有所了解吗?

ADD 1

(非常感谢Rob Neuhaus!)

是的,在我重新消化了上面提到的NLP书之后。我想我现在可以解释一下。

我计算的实际上是语言模型分布的熵。它不能用于评估语言模型的有效性。

要评估一种语言模型,我们应该衡量一下 意外 它能为我们提供该语言的真实序列。对于遇到的每个真实单词,语言模型将给出概率 p 。我们使用 -log(p)来量化惊喜。我们在足够长的序列中平均总惊喜。因此,如果是一个1000字母的序列,500 A和500 B, 1 / 3-2 / 3模型给出的惊喜将是:

[ - 500 * log(1/3) - 500 * log(2/3)] / 1000 = 1/2 * Log(9/2)

正确的1 / 2-1 / 2模型将给出:

[ - 500 * log(1/2) - 500 * log(1/2)] / 1000 = 1/2 * Log(8/2)

所以,我们可以看到,1 / 3,2 / 3模型给出了更多的惊喜,这表明它比正确的模型更糟糕。

只有当序列足够长时,平均效果才会模仿1 / 2-1 / 2分布的预期。如果序列很短,则不会给出令人信服的结果。

我没有在这里提到 cross-entropy ,因为我觉得这个术语太吓人了,并且对揭示根本原因没什么帮助。

1 个答案:

答案 0 :(得分:2)

如果你有一个更大的数据样本,那么将2/3分配给A和1/3到B的模型很可能会比真实模型更差,每个模型给出1/2。问题是你的训练集太小了,所以你误以为错误的模型更好。我鼓励你进行实验,生成一个长度为10000的随机字符串,每个字符的可能性相同。然后在更长的字符串上测量2 / 3,1 / 3模型的cross entropy与1 / 2,1 / 2模型。我相信你会看到后者表现得更好。下面是一些示例Python代码,展示了这一事实。

from math import log
import random

def cross_entropy(prediction_probability_seq):
    probs = list(prediction_probability_seq)
    return -sum(log(p, 2) for p in probs) / len(probs)

def predictions(seq, model):
    for item in seq:
         yield model[item]

rand_char_seq = [random.choice(['a', 'b']) for _ in xrange(1000)]

def print_ent(m):
    print 'cross entropy of', str(m), \
        cross_entropy(predictions(rand_char_seq, m))

print_ent({'a': .5, 'b': .5})
print_ent({'a': 2./3, 'b': 1./3})

请注意,如果您在选项中添加额外的'a',那么第二个模型(更接近真实分布)的交叉熵将低于第一个。

但是,另外要考虑的另一件事是,您真的想要衡量您在培训期间未观察到的数据的可能性。如果你不这样做,记住训练数据中噪声的更复杂的模型将比没有那么多记忆噪声能力的更小/更简单的模型更有优势。

作为测量语言模型质量的可能性的一个真正问题是它有时不能完美地预测实际的更高级别的应用程序错误率。例如,语言模型经常用于语音识别系统。有一些改进的语言模型(在熵方面)并没有降低整个系统的字错误率,这是设计师真正关心的。如果语言模型改进了整个识别系统已经足够自信以获得正确答案的预测,就会发生这种情况。