Shannon关于“熵”的研究
冯志伟
1948年,美国科学家C. E. Shannon(香农,1916-2001,图2-8)在《贝尔系统技术杂志》(Bell System Technical Journal,27: pp 379-423, 1948)上发表了《通信的数学理论》(A mathematical theory of communication)的长篇论文,奠定了信息论(Information Theory)的理论基础,Shannon被尊为“信息论之父”。
Shannon于1916年4月30日出生于美国密歇根州的Petoskey,1936年毕业于密歇根大学并获得数学和电子工程学士学位,1940年获得麻省理工学院(MIT)数学博士学位和电子工程硕士学位。1941年他加入贝尔实验室数学部,工作到1972年。1956年他成为麻省理工学院(MIT)客座教授,并于1958年成为终生教授,1978年成为名誉教授。Shannon于2001年2月26日去世,享年84岁。
信息论是研究信息传输和信息处理系统中的一般规律的科学。在信息论产生之前,人们对于信息系统的理解是比较肤浅的,一般把携带信息的消息看成是瞬态性的周期性的信号。后来,人们把近代统计力学中的重要概念,把Markov随机过程理论以及广义谐波分析等数学方法应用于信息系统的研究中,才看出通信系统内的信息实质上是一种具有概率性的随机过程,从而得出了一些概括性很高的结论,建立了信息论这个学科。
信息论的研究对象是广义的信息传输和信息处理系统,从最普通的电报、电话、传真、雷达、声纳,一直到各种生物的感知系统,都可以用同样的信息论观点加以描述,都可以概括成这样的或那样的随机过程加以深入的研究。
从信息论的角度看来,用自然语言来交际的过程,也就是从语言的发送者通过通信媒介传输到语言的接收者的过程。图示如下(图2-9)
语言的发送者(即信源)随着时间的顺序顺次地发出一个一个的语言符号,语言的接收这也随着时间的顺序顺次地接收到一个一个的语言符号。显而易见,这个过程是时间的函数,而每一个时刻的值(即出现什么样的符号)又是随机的,因而这个过程是一个随机过程。
在这个随机过程中,如果我们做试验来确定语言中出现什么语言符号,那么,这样的试验就叫做随机试验,而所出现的语言符号就是随机试验的结局,语言可以看作是一系列具有不同随机试验结局的链。这样,我们就可以使用第一节中讲过的Markov链的理论来研究语言符号的生成过程了。
如果在随机试验中,各个语言符号的出现彼此独立,不互相影响,那么,这种链就是独立链。
如果在独立链中,每一个语言符号的出现概率相等,那么,这种链就叫做等概率独立链。如果语言符号是英语字母(包括26个字母和空白),则英语字母的等概率独立链如下:
XFOML RXKHRJFFJUJ ZLPWCFWKCYJ FFJEYVKCQ SDHYD QPAAMKBZAACIBZLHJQD
如果在独立链中,各个语言符号的出现概率不相等,有的出现概率高,有的出现概率低,那么,这种链叫不等概率独立链,英语字母的不等概率独立链如下:
OCRO HLIRGWR NMIELWIS EU LLNBNESEBYA TH EEI ALHENHTTPA OOBTTVA NAH BRL
在上述的独立链信源中,前面的语言符号对于后面的语言符号没有影响,是无记忆的,因而它是由一个无记忆信源发出的。
如果在随机试验中,各个语言符号的出现概率不相互独立,每一个随机试验的个别结局依赖于它前面的随机试验的结局,那么,这种链就是Markov链。在Markov链中,前面的语言符号对于后面的语言符号是有影响的,它是由一个有记忆信源发出的。
语言显然就是这种由有记忆信源发出的Markov链。例如,在英语中,当前面的字母是一串相互连接的辅音字母时,元音字母的出现概率就增长起来。这种链显然就是Markov链。
如果我们只考虑前面一个语言符号对于后面一个语言符号出现概率的影响,这样得出的语言符号的链就是一重Markov链。英语字母的一重Markov链如下:
ON IE ANTSOUTINYS ARE TINCTORE BE S DEAMY ACHIND ILONASINE TUCDOWE AT TEASONARE FUSO TIZIN ANDY TOBE SEACE CTIBE
如果我们考虑到前面两个语言符号对于后面一个语言符号出现概率的影响,这样得出的语言符号的链,就是二重Markov链。英语字母的二重Markov链如下:
IN NO IST LAT WHEY CRATICT FROUREBIRS CROCID PONDENOME OF DEMONSTURES OF THE REPTAGIN IS REGOAQCTIONA OF CRE
如果我们考虑到前面三个语言符号对于后面一个语言符号出现概率的影响,这样得出的语言符号的链,就是三重Markov链。类似地,我们还可以考虑前面四个语言符号、五个语言符号、...... 对后面的语言符号出现概率的影响,分别得出四重Markov链、五重Markov链、...... 等等。
随着Markov链重数的增大,每一个重数大的英语语言符号的链都比重数小的英语语言符号的链更接近于有意义的英语文本。这种情况,当语言符号是单词的时候,我们可以看得更加清楚。
例如,如果语言符号是英语的单词,那么,英语单词的不等概率独立链如下:
REPRESENTING AND SPEEDILY IS AN GOOD APT OR CAME CAN DIFFERENT NATURAL HERE HE THE A IN CAME THE TOOF TO EXPERT GRAY COME TO FURNISHES THE MESSAGE HAD BE THESE
英语单词的一重Markov链如下:
THE HEAD AND IN FRONTAL ATTACK ON AN ENGLISH WRITER THAT THE CHARACTER OF THIS POINT IS THEREFORE ANOTHER METHOD FOR THE LETTERS THAT THE TIME OF WHO EVER TOLD THE PROBLEM FOR AN UNEXPECTED
英语单词的二重Markov链如下:
FAMILY WAS LARGE DARK ANIMAL CAME ROARING DOWN THE MIDDLE OF MY FRIENDS LOVE BOOKS PASSIONATELY EVERY KISS IS FINE
英语单词的四重Markov链如下:
ROAD IN THE COUNTRY WAS INSANE ESPECCIALLY IN DREARY ROOMS WHERE THEY HAVE SOME BOOKS TO BUY FOR STUDYING GREEK
不难看出,这个链已经很像英语了,尽管它仍然是没有意义的单词链,但是,它比起其他的单词链来,更容易记忆。
那么,Markov链的重数究竟有多大,才能得出令人满意的英语句子呢?我们来考虑如下的英语句子:
The people who called and wanted to rent your house when you go away next year are from California.
在这个句子中,语法上的相关性从第二个单词people一直延伸到第十七个单词are,为了反映这种相关性,至少需要十五重Markov链。在一些情况下,Markov链的重数可能还要更大。
随机过程的一个重要特征是前后符号的相关性,从语言文本产生的历史,预测这个语言文本的将来。随着Markov链重数的增大,我们越能根据前面的语言符号预测下一个语言符号的出现情况,也就是说,随着Markov链重数的增大,我们根据前面的语言符号来预测下一个语言符号出现的这个随机试验的不肯定性越来越小,至于那些不是Markov炼的独立链,其语言符号的出现情况是最难预测的,也就是说,每一个语言符号出现的不定度是很大的。
在信息论中,信息量的大小,恰恰就是用在接到消息之前,随机试验不定度的大小来度量的。随机试验不定度的大小,叫做“熵”(entropy)。在接收到语言符号之前,熵因语言符号数目和出现概率的不同而不同,在接收到语言符号之后,不定度被消除,熵等于零。可见,信息量等于被消除的熵,因此,只要我们测出了语言符号的熵,就可以了解该语言符号所负荷的信息量是多少了。
早在1928年,L. Hartley(哈特利)就提出了如何测量信息量大小的问题。他认为,如果某个装置有D个可能的位置或物理状态,那么,两个这样的装置组合起来工作就会有D2个状态,三个这样的装置组合起来工作就会有D3个状态,随着装置数量的增加,整个系统的可能的状态树木也相应地增加。为了测定其信息能力,要使2D个装置的能力恰恰为D个装置的能力的2倍。因此,Hartley把一个装置的信息能力定义为logD,其中,D是整个系统可以进入的不同的状态数目。
在信息论中,Shannon采用了Hartley的这种办法来测定熵值。
Shannon提出,如果我们做某一有n个可能的等概率结局的随机试验(例如,掷骰子,n=6),那么,这个随机试验的熵就用log2n来度量。这种度量熵的方法是合理的。理由如下:
第一,随机试验的可能结局n越大,这个随机试验的不定度也就越大,因而它的熵也就越大。
第二,如果我们同时做包含两个随机试验的复合试验,每一个随机试验有n个可能的结局(例如,同时掷两颗骰子),那么,这个复合试验有n2个结局,其熵等于 ,即等于只掷一颗骰子时的二倍,这与Hartley的看法完全一致。
第三,如果我们同时做包含两个随机试验的复合试验,一个随机试验有m个可能结局,另一个随机试验有n个可能结局(例如,投硬币时,m=2;掷骰子时,n=6),那么,这个复合试验有m·n个可能的等概率结局,也就是说,这个复合试验的熵应该等于log2mn,另一方面,我们又可以认为,这个复合试验结局的熵应该等于构成这个复合试验的两个随机试验结局的熵之和,即等于log2m + log2n。但是,我们知道,
可见,复合试验结局的熵,不论是把它看成一个统一的试验,还是看成两个随即试验的总和,都是相等的。
这些事实都说明了我们用log2n来度量熵的合理性。
我们把有n个可能的等概率结局的随机试验的熵记为H0,
(1)
在这个公式中,当n=2时,
这时的熵,叫做1比特。
这意味着,如果某一消息由两个等概率的语言成分构成,那么,包含于每一个语言成分中的熵就是1比特。
如果随机试验有n个结局,而且,它们是不等概率的,那么,第i个结局的概率为pi,那么,这个随机试验的熵H1用下面的公式来计算:
(2)
1951年,Shannon首先应计算出英语字母的不等概率独立链的熵H1为4.03比特。
随机试验结局不等概率,减少了这个随机试验的不定度,因此,有不等式:
(3)
当p1=p2=…=pn= 时,
对于计算机科学工作者来说,定义熵的最直观的办法,就是把熵想像成在最优编码中一定的判断或信息编码的比特数的下界。
假定我们想在我们住的地方给赛马场的赛马下赌注,但是赛马场距离我们住的地方太远,我们不亲自到赛马场去,只好在我们住的地方给赛马场登记赌注的人发一个短的消息,告诉他我们给哪匹马下赌注。
假定有八匹马参加比赛。给这个消息编码的一个办法是用二进制代码来表示马的号码;这样,号码为1的马的二进制代码是001,号码为2的马的二进制代码是010,号码为3的马的二进制代码是011,等等,号码为8的马的二进制代码是000。如果我们用一天的时间来下赌注,每一匹马用比特来编码,每次比赛我们要发出3比特的信息。
我们能不能把这件事做得好一点呢?我们可以根据赌注的实际分布来传送消息,假定每匹马的先验概率如下(图2-10);
马1 1/2 马5 1/64
马2 1/4 马6 1/64
马3 1/8 马7 1/64
马4 1/16 马8 1/64
马的先验概率
对于这些马的随机变量X的熵可以让我们知道其比特数的下界,计算如下:
+ =
= 2比特
每次比赛平均为2比特的代码可以这样来编码:用最短的代码来表示我们估计概率最大的马,估计概率越小的马,其代码越长。例如,我们可以用0来给估计概率最大的马编码,按照估计概率从大到小的排列,其余的马的代码分别为:10,110,1110,111100,111101,111110,111111。
如果我们对于每一匹马的概率估计都是一样的,情况将如何呢?前面我们已经看到,如果对于每一匹马,我们都使用等长的二进制编码,每匹马都用3比特来编码,因此平均的比特数为3。这时的熵是一样的吗?是的,在这种情况下,每匹马的估计概率都是1/8。我们选择马的熵是这样计算的:
由这个例子我们就可以理解为什么会有:
与熵有密切关系的是“困惑度”(perplexity)这个概念。如果我们把熵H作为2的指数,那么,2H这个值就叫做困惑度。从直觉上,我们可以把困惑度理解为在随机试验中选择随机变量的加权平均数。因此,在等概率估计的8匹马之间进行选择(这时,熵 H=3比特),困惑度为23,也就是8。在概率有差异的8匹马之间进行选择(这时,熵H=2比特),困惑度是22,也就是4。显然,一个随机试验的熵越大,它的困惑度也就越大。
在自然语言处理中,熵和困惑度是用于评估N元语法模型的最普通的计量方法。
如果考虑到前面的语言符号对后面的语言符号出现概率的影响,那么,可得出条件熵,Markov链的熵就是条件熵,具体地说,其计算公式可以简明地写为:
其中,bi(n-1) 是由 n-1 个结局构成的组合,在它后面有第 j 个结局,P[bi(n-1),j]是这个组合出现的概率,Pbi(n-1)(j) 是在由前面 n-1 个结局构成的组合之后,第j 个结局出现的条件概率。
根据这个公式,我们可以分别就一重Markov链(二元语法)、二重Markov链(三元语法)、三重Markov链(四元语法),...... 分别算出一阶条件熵(H2)、二阶条件熵(H3)、三阶条件熵(H4)、......等等。
一阶条件熵按下面公式来计算:
(4)
其中,Pij 表示在文本中一切可能的双语言符号组合的出现概率,Pi(j) 表示在前面语言符号为 i 的条件下,语言符号 j 出现的条件概率。
二阶条件熵按下面的公式来计算:
(5)
其中,Pijk 表示一切可能的三语言符号组合的出现概率,Pij(k) 表示在语言符号 i, j 之后,语言符号 k 出现的条件概率。
随着Markov链重数的增大,条件熵越来越小,我们总是有:
(6)
这说明,每在前面追加一个语言符号,不会使包含在文本中一个语言符号的熵有所增加。另一方面,因为包含在文本的一个语言符号中的熵在任何场合总是正的,所以,存在着关系式:
(7)
也就是说,熵是有下限的。当 k 逐渐增加时,熵逐渐趋于稳定而不再减少,这时,这个不再减少的熵就是包含在自然语言一个符号中的真实信息量,叫做极限熵。
从等概率独立链的熵到不等概率独立链的熵,从不等概率独立链的熵到一阶条件熵,从一阶条件熵到二阶、三阶、......,一直到极限熵,是语言信息结构化的体现,它反映了语言的结构对于语言的信息的制约性。极限熵的概念,科学地把语言结构的这种制约性反映在语言符号的熵值中,它对于自然信息处理的研究具有重要的意义。
在很多场合,我们需要计算单词序列的熵;例如,对于一个语法来说,我们需要计算单词的序列W={... w0,w1,w2, ... ,wn}的熵,其中,w0,w1,w2, ... ,wn表示不同的单词。我们的办法之一是让变量能够覆盖单词的序列。例如,我们可以仿照上面的方法来计算在语言L中长度为n的单词的一切有限序列的随机变量的熵。计算公式如下:
(8)
我们可以把熵率(entropy rate)定义为用单词数n来除这个序列的熵所得的值(我们也可以把熵率想象成每个单词的熵):
(9)
但是为了计算一种语言的极限熵,我们需要考虑无限长度的序列。如果我们把语言想象成产生单词序列的随机过程L,那么,它的熵率H(L)可定义为:
(10)
Shannon-McMillan-Breiman(香农-麦克米兰-布莱曼)定理指出,如果语言在某种意义上是正则的(确切地说,如果语言既是平稳的,又是遍历的),那么有:
(11)
这意味着,我们可以取语言中一个足够长的序列来替代该语言中所有可能的序列的总合。Shannon-McMillan-Breiman定理的直觉解释是:一个足够长的单词序列可以在其中包含其他很多较短的序列,而且每一个这些较短的序列都可以按照它们各自的概率重复地出现在较长的序列之中。
如果随着时间的推移,随机过程指派给序列的概率是不变的,那么就说,这个随机过程是平稳的(stationary)。换言之,在平稳随机过程中,单词在时间t的概率分布与在时间t+1的概率分布是相同的。Markov模型以及N元语法的概率分布都是平稳的。例如,在二元语法中,Pi只依赖于Pi-1, 因此,如果我们把时间的索引号移动到x,Pi+x仍然依赖于Pi+x-1。然而自然语言却不是平稳的,在自然语言中,下一个单词的概率可能依赖于任意距离的事件并且依赖于时间。所以,我们的统计模型对于自然语言的正确分布和熵的描述,都是近似的。
最后,使用这种尽管不正确但是非常方便的简单假设,我们就能够取一个很长的输出样本,来计算某个随机过程的极限熵,并且计算它的平均对数概率。
我们在前面说过,某个模型的交叉熵可以用来作为某个随机过程的极限熵的上界。我们可以使用这样的方法来估计英语的极限熵。
为什么我们要关心英语极限熵呢?
第一个原因是英语的极限熵将为我们对概率语法的试验提供一个可靠的下界。另一个原因是我们可以利用英语极限熵帮助理解语言中的哪一部分提供的信息最大。例如,判断英语的预测能力主要是依赖于词序,还是语义,还是形态,还是组成符号,还是语用方面的线索?这可以大大地帮助我们了解我们的语言模型应该着重研究哪一方面。
计算英语极限熵的方法通常有两种。
第一种方法是Shannon使用的方法,这是他在信息论领域的开创性工作的一部分。他的思想是利用受试人来构造一个信息试验,要求受试人来猜测字母,观察他们的猜测的字母中有多少是正确的,从而估计字母的概率,然后估计序列的熵值。
实际的试验是这样来设计的:我们给受试人看一个英语文本,然后要求受试人猜测下一个字母。受试人利用他们的语言知识来猜测最可能出现的字母,然后猜测下一个最可能的字母,如此等等。我们把受试人猜对的次数记录下来。Shannon指出,猜测数序列的熵与英语字母的极限熵是相同的。Shannon这种观点的直觉解释是:如果受试人做n个猜测,那么,给定猜测数序列,我们能够通过选择第n个最可能的字母的方法,重建原来的文本。这样的方法要求猜字母而不是猜单词,受试人有时必须对所有的字母进行穷尽的搜索!所以,Shannon计算的是英语中每个字母的极限熵,而不是英语中每个单词的极限熵。他报告的结果是:英语字母的极限熵是1.3比特(对于27个字母而言[26个字母加上空白])。Shannon 的这个估值太低了一些,因为他是根据单篇的文本(Dumas Malose的《Jefferson the Virginian》)来进行试验的。Shannon还注意到,对于其他的文本(新闻报道、科学著作、诗歌),他的受试人往往会猜测错误,因此这时的熵就比较高。
第二种计算英语的熵的方法有助于避免导致Shannon 结果失误的单篇文本的问题。这个方法使用一个很好的随机模型,在一个很大的语料库上训练这个模型,用它给一个很长的英语序列指派一个对数概率,计算时使用Shannon-McMillan-Breiman定理:
例如,Brown(布朗)等在58,300万单词的英语文本上(293,181个“型”[type])训练了一个三元语法模型,用它来计算整个Brown语料库的概率(1,014,312个“例”[token])。训练数据包括新闻、百科全书、小说、官方通信、加拿大议会的论文集,以及其他各种资源。
然后,他们使用词的三元语法给Brown语料库指派概率,把语料库看成是一个字母序列,从而来计算Brown语料库的字符的熵。他们得到的结果是:每个字符的极限熵为1.75比特(这里的字符集包含了95个可印刷的全部ASCII 字符)。这是在三元语法的情况下英语字母的条件熵。显而易见,这个条件熵比Shannon测出的极限熵1.3比特要大一些,而且Brown使用的字符集是ASCII 字符集,包含95个字符,很多字符超出了英语26个字母的界限。
大多数文献报道,包含在一个英语字母中的极限熵大约在 0.9296比特到1.5604比特之间,其平均值为 1.245比特,这个计算结果与Shannon测定的结果(1.3比特)相近,我们一般都采用这样的计算结果。
在实践的迫切要求下,继Shannon测出了英语字母的不等概率独立链的熵H1之后,人们又测出了一些印欧语言的熵。到目前为止,英语已经测出了九阶条件熵,俄语已经测出了十四阶条件熵。下面,我们把法语、意大利语、西班牙语、英语、德语、罗马尼亚语、俄语的不等概率独立链的熵H1列表比较如下(表2-2):
中国冯志伟在上世纪70年代,模仿香农对于英语字母的熵的研究,采用手工查频的方法首次估算出汉字的熵H1为9.65比特,并提出了“汉字容量极限定理”。他根据Zipf定律,使用数学方法,证明了当统计样本中汉字的容量不大时,包含在一个汉字中的熵H1随着汉字容量的增加而增加,当统计样本中的汉字容量达到12366字时,包含在一个汉字中的熵H1就不再增加了,这意味着,在测定汉字的熵H1的时候,统计样本中汉字的容量是有极限的。这个极限值就是12366字,超出这个极限值,测出的汉字的熵再也不会增加了,在这12366个汉字中,有4000多个是常用字,4000多个是次常用字,4000多个是罕用字。他认为,这12366个汉字可以代表古代和现代文献中汉字的基本面貌。由此他得出结论:从汉语书面语总体来考虑,在全部汉语书面语中(包括现代汉语和古代汉语),包含在一个汉字中的熵H1是9.65比特。当然,这只是冯志伟的一个不成熟猜测。
1988年,北京航空学院计算机系刘源使用计算机自动查频计算出汉字的熵H1为9.71比特,1994年,新加坡国立大学计算机系赖金锭使用计算机计算出汉字的熵H1为9.59比特,他们的结果与冯志伟原来用手工查频方法猜测的结果是很接近的。
1996年,冯志伟还根据汉语与英语文本对比,首次估算出汉字的极限熵为4.0462比特;2006年,清华大学计算机系孙茂松、孙帆在大规模语料库(106-107汉字)的基础上,使用Brown的方法估算出汉字的极限熵为5.31比特,这个结果更为准确。
根据Shannon信道编码定理,在编码时,码字的长度不能小于符号的熵H1。汉字的熵H1为9.65比特,大于一个字节(1字节=8比特),因此,汉字不能像英文字符那样采用单字节编码,而必须采用双字节(2字节=16比特)编码或者三字节编码,冯志伟测定汉字熵的工作为20世纪80年代信息处理用汉字编码字符集的制定采用双字节编码提供了理论根据。
冯志伟还发现,文本的阅读速度V与字符的熵H1存在着反比关系,在不同字符的文本阅读中,字符的熵越小,阅读速度越快,字符的熵越大,阅读的速度越慢,阅读速度v与字符的熵H1的乘积是一个常数,这个常数k反映了人们阅读文本字符的能力,在不同字符的文本阅读中,尽管字符各有差异,所有的人阅读文本字符的能力是大致相同的。因此,应当存在下列的公式:
V•H1 = k
这个公式反映了使用不同字符的人们阅读字符的一个普遍规律。当然,这只是冯志伟的一个大胆的假设,有待科学实验来检验。
熵是信息量的度量,在自然语言处理中,熵是用来刻画语言数学面貌的非常有价值的数据。熵可以用来度量一个特定的语法中的信息量是多少,度量给定语法和给定语言的匹配程度有多高,预测一个给定的N元语法中下一个单词是什么。如果有两个给定的语法和一个语料库,我们可以使用熵来估计哪一个语法与语料库匹配得更好。此外,我们可以使用熵来比较两个语音识别任务的困难程度,也可以使用它来测量一个给定的概率语法与人类语法的匹配程度,还可以使用它来估计人们阅读文本字符的能力的大小。
