关于汉字熵(信息量)

陕西省气象局   张时钊  2003.10.20

 

 

一、引子

网上有一篇来自纽约的米阿仑写的文章,题目叫《从信息熵角度看中文软件和中文信息业的发展》(已转贴在我的论坛上)。这是一篇难得的好文章,很值得一读。他认为:“微软公司在设计制作中文软件的时候,忽略了信息科学技术的基础课题:信息熵。” 因而埋下了“定量炸弹”。“这颗炸弹涉及的不是两个字节(指千年虫Y2K——引用者注),而是整个系统的基础。把它称‘定量’,是因为没有达到一定信息产业的产品数量和技术要求的程度,就很难看到这颗炸弹的潜在威胁会造成多大损失。这颗炸弹可能很快起爆,也可能要等一段时间,全看中文信息产业发展如何。一旦起爆,那就不是两个字节的问题,而是整个系统以及这个系统下的全部数据和操作的问题,其威胁比Y2K 要大得多。”“中文信息产业相当大的一部分很可能有一天会毁于微软公司的‘定量炸弹’。”

我确实不理解这个“定量炸弹”的来龙去脉。从作者后来说的以下一段话,或可理解它的实质。他说:“中文数据的文字方式决定了标准的多重性和规模过大,而且,只要汉字还再增加,它的字符集就是不稳定的。不管一个字符用多少字节,也不管计算机的储存容量有多大,也不管各种系统的兼容有多么全面,这样的字符集做数据储存和检索还可以,做全面的数据管理就总是有严重问题。”作者反复说的中文“文字方式”,应该就是我说的“汉字植根于电脑”的字库加编码方式。在这个方式下,字库或字符集大而不稳定,是全部困难的所在。显然,字符集一改变,一切已数字化的资料就作废了。汉字不仅太多,而且必然还要产生新汉字,字符集永远不可能稳定。相反的,英文只有26个字母,十分稳定。如果也对英文字(词)编码,问题可能更严重。如果汉字按我的无字库方式,采用笔画组字技术,一切问题都解决了。汉字笔画正好对应西文字母,只要制定出汉字笔画标准,中文也同样稳定。据研究,可能比英文还要稳定,你看,英语学生完全看不懂他们的古文,而中国学生看中文古文就较容易。

作者在文中介绍了熵(信息量)的概念。他说:“汉字的信息量最大,因而,在信息管理和传递的时候,中文处于最不利的地位。”“一般说来,某种文字的字符信息熵越大,原始数据输入的工作量有可能变得越小,而整体工作效率就越低。”苏培成教授的“现代汉字学纲要”中也有类似的论述。米阿仑虽然没有明确指出,所谓的“定量炸弹”就是因为汉字信息量大,但我觉得文章的主题实际上就是这句话。文中虽没有很多数学式子,但因涉及较新的信息论数学,而我们搞文的数学根基不大好,准确理解可能还是有困难。由于问题的重要,有必要再深入浅出地讨论汉字的信息熵这个概念,明白为什么汉字的信息量大,为什么信息量大了反而不好,应如何解决“定量炸弹”这个危险问题。我自己的数学,从初中起就只靠自修学的,现在年纪大了,看到数学式子也头痛,对数学式子的理解可能不正确。下面叙述的只是我个人的理解方法,如果不准确,请大家批评指正。

 

二、汉字熵

   

熵,是物理名字,在信息论里则叫信息量。从控制论的角度来看,应叫不确定性。当我们不知道某事物具体状态,却知道它有几种可能性时,显然,可能性种类愈多,不确定性愈大。不确定性愈大的事物,我们最后确定了、知道了,这就是说我们从中得到了愈多的信息,也就是信息量大。所以,熵、不确定性、信息量,这三者是同一个数值。最简单的是只有两种可能性,非此即彼,我们就以这种事物的信息量为单位,叫1比特(bit)。4种可能性,用二分法,分为2组,我们要非此即彼地确定2次,才能确定其状态,所以含有2比特信息量。如果可能性数目有2n次方(N=2^n),那就是n比特,即信息量等于可能性数目N的‘以2为底的对数’:H=2N)=㏒(N/㏒(2)。后一个等号说明,以2为底的对数㏒2可用普通对数㏒(以10为底)来计算,即用N的普通对数除2的普通对数。N3种可能性时,信息量H=㏒(3/㏒(2)=1.585。只要有函数型计算器,我们就可以进行以下简单实例的验算。

我们现在不是讨论事物本身的信息量,而是讨论描述事物的文字符号包含的信息量。先讨论比较简单的数字符号。二进制数只有2个符号:01。一位二进制数有2种可能性,其信息量是1比特。n位二进制数可记N=2^n个不相等的数,含有n比特信息,所以每位数字的信息量还是1。十进制数字有10个,每位数字的信息量是㏒(10)/ (2)=1/0.301=3.32。不难验证所有十进制数,每位数字的信息量都是3.32,例如3位数共1000个,信息量是㏒(1000)/ (2)=3*3.32。而十六进制的每位数字的信息量是4

事情好像很简单,其实不然。试考虑还没有发明数字的远古人,他用刻画来记数,用刻n画的方法记数目n10以内的数平均每个数要刻(1+10/25.5画,每画的平均信息量是3.32/5.50.604,而100以内的数平均每个数(1+100/250.5画,每画的平均信息量只有6.64/50. 50.132。因为古人刻的每一画是没有次序或位置的区别的,所以每一画的信息量变化很大,数值则很小。次序或位置非常重要,罗马字和我国古代的数码,也是短画,但要讲究位置组合,每画所含的信息量就大大提高了。注意,我们以后讨论的文字信号,都是有次序的。

这样,文字信号的信息量H是信号个数n的以2为底的对数: H=(n)/ (2)。英文有 26个字母,每个字母的信息量H=(26)/ (2)4.700。汉字个数不定,算1000个时等于3*3.329.96,算作一万、十万时则分别为13.2816.60。我们能随意增加大量一辈子也用不到的汉字,来无限地增加每个汉字的信息量?这当然不合理。原来信息量不能无条件地按符号的个数来计算,只有各符号的可能性一样,都等于1/n时才行。数字符号就满足这样的条件。事实上信息量应按符号的可能性(数学上叫概率大小)来计算,它是概率的负对数。对于二进制数,每个符号的概率都等于1/2,按负对数计算:-㏒(1/n)=-(㏒(1) (n))=-(0-㏒(n))=㏒(n)。这就是我们前面使用的公式的来源。如果符号i的概率pi不等于1/n,则Hi=-㏒(pi)。因为各个符号的概率pi不相等,对于总体来说,平均信息量就是它们的加权平均H=-∑pi(pi),这里累加符号∑表示对所有 i 进行累计。(以上式子除以㏒(2),就可化为以比特为单位了)。

定义信息量为概率的负对数,是很合理的。试考虑一个两种可能性的事物,仅当可能性相等时,不确定性最大,最后我们知道了某一可能性确实发生了,也得到最大的信息量。如果其中某一个可能性很大(另一个必然很小),不确定性就很小。如果可能性大到1,也就是必然要发生的,因为1的对数为0,我们从知道它的发生这件事得到的信息也为0

按这个公式计算汉字的信息量时,汉字的平均信息量在字数达到1000时很快增至9.00,字数达到5000时就达到9.65,以后几乎不再增加。(参见后面的表和图)。学者冯志伟有一个“汉字容量极限定律”,认为字数达到12366后,信息量不再增加。以下是各种语言的字母的信息量:

      法文          3.98比特

      意大利文      4.00比特

      西班牙文      4.01比特

      英文          4.03比特

      德文          4.10比特

      罗马尼亚文    4.12比特

      俄文          4.35比特

      中文          9.65比特

我在“论汉字笔画”一文中,使用自己的小样本统计数据,计算得英文的信息量是4.16。这个数值稍大些,是因为我还加了一个特殊字符“空格”,㏒(27)4.755就比㏒(26)0.055。可见平均信息量是很稳定的。

 

三、多余度

 

由上可知,有n个符号的文字,每个字符最大的信息量(最大熵)H0=㏒(n)(即-㏒(1/n)),而有不相等概率时,其平均信息量(平均熵)H=-∑pi(pi)总小于最大信息量H0。例如英文的最大信息量等于4.7,就要用5个二进制数码来编码和传输。但它的平均信息量近于4.03,表示实际上可用比4个多一点点的二进制位就可以了。方法是用不等长的编码,概率小的用长码(多于4位),概率大的用短码(少于4位)。信息量的计算就可指导我们编码设计,减小码长,提高通信效率。

除了文字符号的一定的概率分布,包含了一部分信息外,文字的上下文关系,包含了更多的信息,使一篇文字的实际信息量更小(小于各个文字的信息量之和)。因为已知一定的前文,且已知前文愈长,其后的文字符号分布将更确定。计算这样的条件信息量,当然很复杂而困难。这样达到的最小的信息量,称为极限信息量(极限熵)HL 。我们可以进一步研制使传输更快的编码,即不是对个别文字符号,而是对文字串进行编码,就可使平均码长减小,逼近极限熵。这就像我们直接对中文词或句子编码可以提高输入速度一样,因为许多汉字组合是不可能出现的。

据研究,英文和中文的极限熵为(见苏培成“现代汉字学纲要”193页):

       英文:    0.931.56比特(原书是0.280.47,要除㏒(2)化为比特)

       中文:    3.455.78比特(原书是1.041.74,要除㏒(2)化为比特)

              一个汉字相当于3.7个英文字母。

极限熵HL 比最大熵H0 小得多,它们之间的差很大,说明这一部分熵是多余的,被浪费了。信息论研究这样的多余度:

R=(1HL/H0)×100

把以上数据代入公式,可以算得多余度如下:

       英文:10.93/4.780       11.56/4.767

       中文:13.45/13.2974     15.78/13.2956

这里,汉字的最大熵以1万个汉字计,即H0 =㏒(10000)/(2)13.29。可见中文的多余度略小。

苏培成说:“汉语书面语的多余度比英语低,说明汉语比英语简练而难懂”。认为多余度低就难懂好像没有什么根据,他还用简洁的古文翻译成拼音文字后没人看得懂作例子,更不妥当。相声里有一个段子,说山东人说话简洁,只要一个字,而多余度大的要十多个字,啰嗦不见得就明白。中文英文各有千秋,英文里的一些时态,用中文确难翻译。同样中文里的许多语境,也难用英文表达,甚至有人认为,中国之所以没有诺贝尔文学奖,是因为英文不能把中文的精华翻译出来,使得评审人员不能感受到中国文学之美。但是中文比英文简洁,联合国的5种文件以中文的最薄,则是事实。这些统计数字是否反映了这个事实?我不知道“一个汉字相当于3.7个英文字母”是怎么来的,若按此计算,中文比英文的效率高一倍左右(因为无论存储还是传输,每个汉字都占2个字节,印刷也是每个汉字占两个字母的位置,却相当于3.7个字节的作用,故3.7/21.85倍),应该没那么高。以中文的多余度比英文低10﹪来估计,似乎又小了点。实际上多余度的计算是建筑在各自的最大熵上的,没有可比性,何况汉字最大熵随所取字数而定,没有标准。不过以上计算的汉字多余度数值与英文的没有很大的差别,我们至少可以认为,它不是主要问题。

信息论上研究多余度,是为了用编码方法提高传输速度,多余度高时作用更大。但计算机上每个字符都是用等长码,没有使用提高速度的编码方法,在这种情况下,文字的多余度小即浪费小,反而有利。

在通讯上,有时会有意增加多余度,提高纠错能力,保证可靠性。最常见的是奇偶效验和冗余和。冗余和是发送的一组码的和。加和时丢弃进位,所以整组8位码的冗余和也是8位码。每发一组码都加发这个冗余检验码。接收方也进行加和运算,如果得出的冗余和与接收到的冗余和不一样,就说明发生了错误,要求重发。奇偶效验更简单。普通的ASCII字符只有96个(加上前面32个控制字符共128个),只要7个二进制位就够了。现在用8位码传输,最后多余的一位看传输的7位码有几个1来定,以凑够奇数或偶数个1。这样接收方发现某个码奇偶不对,就知道错了,要求重发。米阿仑在文章中说:“中文的汉字方式需要两个字节,在建立字库的时候,两个字节的比特全都用满了,没有剩余的比特来作奇偶检验和抗错。这是中文网络通讯中很容易出现坏码(不是乱码)的基本原因之一。”我认为这句话并不正确。汉字内码不能进行奇偶效验时,ASCII码也不可能进行奇偶效验,因为这时ASCII的高位必须都为为0。即使在纯英文下,一般软件都把高位为1的码子用作扩展字符,普通字符的高位也必须为0

多余度高,信息字符有缺损时,就有可能恢复。在计算机上研制这样的软件,利用条件概率的统计规律进行恢复,并不容易,在目前的数据通讯上好像没有使用。至于印刷或手写文字的恢复,由于汉字的二维结构信息大,则更容易些,所以汉字的计算机识别也比英文好。

米阿仑又说:“中文字符信息熵大,没有MIME转换就很容易出现乱码或坏码。转换是有成本消耗的,而汉字方式的成本消耗是世界上最大的。”我不懂MIME,但从一些资料看,它好像不是针对汉字的,而是针对多媒体信息流的。

总之,在多余度比较上,在信息传递的整个过程中,中文是没有问题的。多余度与英文差不多,它在纠错上也没多大意义。因为我们传输的不是汉字或字母,而是01序列,只要确保01序列不变就行了。至于把文字变为01序列的编码问题,无论对哪一种文字,总可以设计出最优的编码。有可能当前的计算机制式,适合于英文最优编码而不适合于汉字最优编码,如果这样,我们可以生产适合于汉字的计算机。现在的计算机,以8个二进制位为一个字节。26*252个字母每个占一个字节(不计高位,每字节有128个状态),6863个国标汉字每个占2字节(高位都为1,共128*12816384个状态),或者21003BGK汉字每个占2字节(仅第一字节高位必为1,共128*25632768个状态),可以共存,都没有很大的浪费,我认为这里也没有什么大问题。

 

四、汉字熵大为什么不好

 

从多余度的计算公式:R=(1HL/H0)×100﹪可知,多余度随最大熵H0的增大而减小。而从最大熵的计算公式H0=㏒(n)可知,最大熵则随字符个数的增加而增大。虽然随着字数的增加,概率分布将更不均匀,因而平均熵H以及极限熵 HL的增加稍慢一些,但毕竟也增加了。请看下面的附图,它表明汉字平均熵H是如何随着参与统计的汉字种数(当然所取的汉字都是频数最大的)的增加而增加的。为了比较,我还自己统计了英文词的平均熵。虽然样本小,但可以明显地看到,其规律是一样的,按曲线趋势,会超过中文。附表则列出了相应的数据。

 

 

 

 

 

 

 

中文

英文          

N

统计字数

总计字数

总计字数

1

100

8605156

6.296984

23731

5.797287

2

200

12017901

7.25226

28098

6.547706

3

300

14226335

7.778737

30676

6.971444

4

400

15780745

8.130579

32526

7.267427

5

500

16901466

8.383729

33997

7.497386

6

600

17761006

8.578863

35208

7.683932

7

700

18438401

8.734818

36252

7.842263

8