第一章 万物皆随机
中文是最有效率的语言吗
你也许听说过这种说法:“中文是最有效率的一种语言。”比如,在各种语言版本的《哈利·波特》中,中文版本总是最薄的。这种说法到底科学吗?对此,科学家确实找到了一种方法,可以衡量一种语言的效率,甚至可以定量分析,这就是“信息熵”。
中文版和英文版《哈利·波特与魔法石》一书的厚度比较。中文版的开本略大,但远比英文版薄,中文版共191页,英文版共309页。当然,这种比较方式只是一个粗略的比较,并不是科学结论
1948年,美国数学家克劳德·香农提出了一个表征符号系统中单位符号平均信息量的指标——信息熵,还给出了一个计算信息熵的公式,这个公式十分简洁:
公式里的是指在某种符号系统中某个符号出现的频率。
比如,文字就是一种符号系统,每个汉字就是一种符号。而频率就是某个字在某类文字材料中出现的比例。如果你统计了一本100万字的书,这本书中某个字出现了1万次,那么这个字的频率就是:1万/100万=0.01=1%。
香农的这个公式就是要把某个符号系统中的符号频率全都统计出来,代入上述公式,就是这个符号系统的信息熵。
这听上去有点儿抽象,进行实际运算就容易理解了。比如,符号系统只有一个符号,信息熵会如何?
因为只有一个符号,所以它的频率必然是100%,也就是1。1的对数是0,所以按这个公式,计算结果就是0。
针对这个结果,香农给出的解释是,如果一个符号系统只有单个符号,那么这个符号系统什么信息都不能传递,单个字符能传递的信息量是0。如果一种文字只包含一个字母“a”,那么这种语言任何信息也不能传递。有人说可以用不同长度的“a”来表示不同的信息,但这要求不同长度的“a”之间有某种“分隔符”,而这种分隔符就是另一种符号。
那么有两种符号会如何?我们先假设两种符号的出现频率都是50%=0.5。那么按公式“log20.5=-1”,总信息熵就是:
-1×(0.5×(-1)+0.5×(-1))=1
所以,这种符号系统的信息熵就是1,其含义是:“这种符号系统的每个符号可以传递1bit信息。”此时能看出,之所以公式前面要有一个系数-1,就是为了使结果数值总是大于等于0,因为人对正数的感受比较直观。
影响信息熵的因素有两个:一个是符号的多少,一个是符号的频率分布。我们可以固定一个变量,看看另一个变量对信息熵的影响。
我们先假设每个符号的频率是相等的,字符数不断增加会如何?假设某符号系统有个符号,每个符号的频率是,则该系统的信息熵是:
即有个符号的符号系统,它的信息熵是。也就是说,符号越多,信息熵越大。
那么再考虑一下,如果符号数量固定,符号的频率分布改变,对信息熵的值影响如何?稍加计算就会发现,符号的频率分布越不均匀,信息熵越小。如果只有两个符号,其中一个符号的出现频率占90%,另一个只占10%,将其代入公式,可以计算出这种符号系统的信息熵是0.47左右。而之前算过两个符号频率相等的话,信息熵是1。
计算结果有了,我们来解读一下。为什么符号越多信息熵越大,也就是说单个符号提供的信息越多?
你可以设想,英语不是由26个字母组成的,而是包含1000个字母。那么,即使元音字母还是只有a,e,i,o,u这5个,每个单词要求至少有一个元音字母,那么用1000个字母,你也可能构造出1000×5×2=10000个双字母的单词。而大学英语六级的词汇量只有6000个左右,1万个单词已经非常多了。如果再考虑3个字母的组合,单词量就足够用了。
所以,英语文章如果可以用1000个字母的符号系统改写,那么几乎其中所有单词都可以用3个或更少的字母组合来表示,文章长度将大大减少,所以单个字母的信息量是不是就增加了?
而汉字系统恰恰有点儿像有几千个字母的拼写系统,所以汉字中单个字的信息熵会比英文字母高。
我们再看看为什么符号频率越均匀,信息熵越高。这是因为符号频率越均匀,连续多个符号之间的关联性越小,也就是每个符号都很关键,不能丢,所以单个符号信息量大。反之,符号出现的关联越大,则有些符号就可以省略,说明这些符号提供的信息量少。
比如,在英语里,很多单词拼写中的字母组合经常是一起出现的,例如“ing”“tion”等。在这些组合中,即使丢掉一个字母或出现次序错误,通常也不妨碍阅读。在以下英文句子中,其中很多单词的拼写都有次序错误,但是阅读起来完全无障碍,这就说明这些字母提供的信息量少:
Aoccdrnig to a rscheearch at Cmabrigde Uinervtisy, it deosn’t mttaer in waht oredr the ltteers in a wrod are, the olny iprmoetnt tihng is taht the frist and lsat ltteer be at the rghit pclae. The rset can be a toatl mses and you can sitll raed it wouthit porbelm. Tihs is bcuseae the huamn mnid deos not raed ervey lteter by istlef, but the wrod as a wlohe.
中文字与字之间的关联就小多了,一句话丢掉很多字的话,这句话的意思就很难还原了。而字与字之间关联小,意味着字与字之间出现的频率差距不大,根据上一个字,不容易猜到下一个字。这时,每个字提供的信息量就大。
那么,英语与中文的信息熵究竟有多大?2019年,国外知名数学博主约翰·D.库克发表了一篇博客文章,他计算了一下中文的信息熵。他使用的中文词频数据是一位美国大学的研究者2004年发布在网上的。在统计结果中,出现频率最高的汉字是“的”,大约是4.1%;第二位是“一”,但频率只有1.5%。库克根据这个词频,计算出单个汉字的信息熵是9.56。一般认为单个英文字母的信息熵为3.9,所以中文的效率优势是很大的。
美国大学研究学者Jun Da(笪骏)在2004年所做的对中文词频的统计,其中第四列的小数是累计频率。该行数值减去上一行的数值,就是该汉字的实际频率
这样是否就可以说中文的信息熵比英文高一倍多呢?没有那么简单,因为信息熵的比较还有一些不确定因素,如比较的对象。之前比较的是英文字母和汉字,也可以比较英文单词和汉字。
实际上,英文单词的组合虽然多了,但一句话前后的关联太多,所以单词的信息熵更低了,香农曾经计算出1个英文单词的信息熵只有2.62。当然,对中文也可以按词组来统计,但对中文来说怎么切词,是一个没有确切标准的问题。
香农统计的英语信息熵。“26个字母+空格”表示将单词间的空格也作为1个字母统计。F0的意思大概是指按每个字母出现的概率独立进行统计,F1表示按2个字母组合频率统计,F2表示按3个字母组合频率统计,等等。F-Word表示按单词出现的频率统计
有关词频的统计也是一个因素。同样是中文,文言文和白话文的词频肯定不一样。不同领域文章里的词频也会有很大差异。不过有一点可以确定,不论哪种语言,数学论文的单位字符信息熵肯定远大于其他类型的文章,这也是数学论文那么难懂的原因。数学家能用公式,就不用文字,能用“显然”或“易得”,就绝不展开解释。
张益唐有关“孪生素数猜想”的论文中的符号约定部分,每个符号都包含了非常多的信息
不管怎样,目前不同统计方式下中文的信息熵都还是领先的。库克提出了一种新的比较方法,即比较不同语言在单位时间内的输出信息量,并且他提出一个猜想:“不同语言在单位时间内的信息输出量是接近的。”比如,同样一本小说,中文版肯定比英文版薄,但如果抄写一遍,因为中文笔画多,中文会抄得比较慢,所以最终抄写时间可能差不多。
当然,在计算机时代,更应该比较在计算机上输入的时间。比如,可以比较一下平均输入同一篇文章的中文版、英文版所需要的打字次数(均使用最佳的带联想功能的输入法)。在个人感觉上,总体所需击打键盘次数应该是接近的,希望有心的读者可以尝试研究一下。
另外,如果考虑语音输出的效率,会有一些更有意思的发现。有一点可以肯定,当以语音形式输出时,单个汉字的信息量会大大减少。因为汉字有5000多个,但汉字的发音,当考虑声调时,只有1200多种组合,不考虑声调的话,只有300多种组合。像笔者这样前后鼻音不能区分清楚的人,信息量就丢失更多了。这就可以解释生活中的很多现象。
汉字带声调的拼音组合频率前10位(数字表示声调,没有数字表示轻声)
汉字无声调拼音组合频率前10位
中文没法改成拼音文字,写出来完全没法读,同音字太多。比如:
xue shu xue hui shang yin shi yi ben hen hao kan de shu xue shu.(读读看,这句话是什么意思?你可以发现,只有拼音的句子念起来是很累的。)
再比如,很多人玩过一个耳语传话的游戏:一些人以耳语的形式把一句话传给下一个人,看最终的结果与开始的信息区别有多大。通常,到六七个人之后,这句话就被改得面目全非。下次各位可以试试传一句简单的英语,看看是不是容易保持原来的句子。
因此,当有外国人问“为什么你们中国人讲话总是这么大声”时,你可以回答:“因为中文语音的信息熵低,我不得不大声说,确保对方每个字都听清楚。”
另外,中文的影视作品都喜欢加上字幕,甚至还有弹幕文化,其基础原因还是在于汉字信息熵高,语音信息熵低。中文视频打上字幕,就不用太注意去听对白,观看时大脑就能放松些。而用英语打弹幕的话,屏幕上都是长长的句子,会严重影响正常的视频收看,所以说英语的地区就没法形成弹幕文化。
为什么香农将这个表征信息量大小的指标命名为“信息熵”?它与物理中的“熵”有联系吗?当然是有联系的。物理中的“熵”,一种直观的定义就是表征一个系统的“混乱”程度,越混乱,熵值越大,越有序,熵值越低。
而对“混乱”的一种直观定义就是,当略微改变一个系统的状态时,其与原先状态的可区分程度。举例来说就是,对一个井井有条、十分干净整洁的屋子,稍微挪动一样东西,就很容易发现变化,而对一个杂乱不堪的屋子,移动很多东西之后,感觉仍然是杂乱不堪的。
在信息熵中,为什么语言越“混乱”,信息量越大?这一点可以从语言的上下文关联度来考虑。英语单词中的字母相关度是很高的,比如之前提到过的“ing”“tion”,还有各种前缀、后缀。
“耳语传话游戏”,一群人通过耳语传递一串文字,通常没用多久,这句话就被传得面目全非了
整洁的房间和杂乱的房间对比。对整洁的房间来说,稍微改变一些就能觉察到区别,“熵”比较低;对杂乱的房间来说,挪动很多物体也很难感受到区别,“熵”很高
因为相关度大,在“ing”或者“tion”这样的后缀组合里拿掉一个字母,完全不影响阅读,说明这些组合中单个字母提供的信息量很小。
中文的上下文关联度就低很多,所以单个汉字信息量就大。而上下文关联度高,也可以理解为符号系统“有序”,而关联度小就是“无序”,所以把信息量用“熵”来命名再恰当不过了,而且它确实与物理中的“熵”有许多相似的性质。
最后,信息熵如同很多物理量一样,是可以有单位的,它的单位是“比特”(bit,就是计算机中,“比特位”的比特)。从信息熵公式看,信息熵是没有量纲的,但有时我们也用bit作为其单位。比如,中文平均单个汉字的信息熵是9.56,也可以说成单个汉字提供的信息量是9.56bit。为什么可以这么说?这其实是一个符号的编码问题。
现在我们的计算机系统中的字符一般采用的是等长的编码方式,即每个字符的编码长度是相等的。比如,在unicode编码系统中,每个字符用16bit的二进制位来编码。那么在理论上,它可以对216=65536种字符进行编码(实际上,这16bit还被划分为多个“平面”,目前已经对约13万个符号进行编码),它已经足够对世界上所有文字符号进行编码了,甚至现在我们还不断在其中增加表情符。
如果编码目标是使目标文本的总长度最短的话,那么等长编码方式就不是最优方案了。因为每个字符的频率不同,我们可以考虑对频率高的字符用比较短的长度进行编码。
比如,之前提到,在中文文本中,“的”这个字的使用频率最高,那可以考虑对“的”用1位二进制,即“0”进行编码,其他汉字都用以“1”开始的二进位进行编码。中文使用频率第二高的字符是“一”,可以用两位二进制“10”对它编码,用“110”给使用频率第三位的汉字编码……这样频率高的汉字编码长度短,频率低的长度长,且不同汉字的编码通过最左边的若干二进位都是可以区分的。
unicode不但对几乎所有语言进行了编码,也包含越来越多的表情符
这种编码方式在计算机术语中称为“霍夫曼编码”或“前缀码”,因为不同的字符依靠编码的前缀来区分。当然,汉字中“的”出现的频率远没高到值得用一位二进制对其编码。但有一种算法可以根据不同字符的频率表,得出平均码长最短的编码方式,此时的编码结果称为“最优前缀码”或“最优霍夫曼编码”。
对照某个汉字字符的频率表,如果你计算出其信息熵是9.56,那对照同一张频率表,对其进行最优前缀码编码,你会发现,单个汉字的平均编码长度就是9.56(具体原因请自行思考)。因此,可以说信息熵的单位就是“比特”。
到这里又会有一个很有意思的洞察,就是考察不同语言文本文件的压缩率。比如,都是用unicode编码的中文版、英文版“哈利·波特”系列图书,分别比较压缩后的文件大小的变化程度,它们会有什么样的区别?
压缩软件的工作原理,就是去除文本中的冗余信息,用接近最优的编码方式,对文件重新编码的过程。那么,如果一个文本压缩后,能压缩得很小,就说明原来的文本信息比较冗余,单位字符的信息量低。反之,如果压缩后,文件大小变化不大,就说明原来的文本信息冗余量少,单位字符信息量大。
在现实中,有很多人做了实验。结果中文不负众望,在各类语言的压缩率比较中,中文本的压缩率总是最低的。这也从侧面验证了,中文(文字)是主流语言中最有效率的语言。
有关信息熵的话题聊得差不多了,我最大的感想是,香农用如此简单的一个公式给了我那么多的启发和思考。我觉得以后提到“最美公式”的时候,香农的这个信息熵公式应该有一席之地。汉字在符号上提供的信息量大,基本是可以确定的,而中文在语音上会丢失信息的劣势也是很明显的。
思考题
如果用压缩软件压缩不同语言的音频,压缩比之间的大小会如何?