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

我正在阅读《统计自然语言处理基础》。书中关于信息熵与语言模型关系的陈述如下:

…这里的关键点是,如果一个模型捕捉了更多的语言结构,那么该模型的熵应该更低。换句话说,我们可以用熵作为衡量我们模型质量的指标…

但考虑这个例子:

假设我们有一台机器,它每次吐出两个字符,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  (以2为底)

但随后,设计者告诉我他的设计,于是我根据这些信息改进了我的模型。新的模型如下:

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

这个新模型的熵是:

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

显然,第二个模型比第一个模型更好。但熵却增加了。

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

能有人对此提供一些见解吗?

补充1

(非常感谢Rob Neuhaus!)

是的,在我重新消化了提到的NLP书籍后。我认为我现在可以解释了。

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

要评估一个语言模型,我们应该测量它对该语言中真实序列的惊讶度。对于遇到的每个真实单词,语言模型会给出一个概率p。我们用-log(p)来量化惊讶度。我们在一个足够长的序列上平均总的惊讶度。因此,对于一个包含500个A和500个B的1000个字母序列,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分布的期望。如果序列较短,则不会给出令人信服的结果。

我在这里没有提到交叉熵,因为我认为这个术语过于吓人,且对揭示根本原因没有太大帮助。


回答:

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注