为什么汉语难以被压缩

汉语压缩:信息熵和冗余度

image-20211101063933135

我们常常有这样的体会,同样的文章,英文原文翻译成中文一般都会短很多,并且在文件的体积上也会差上不少。这里以《百年孤独》的中英版本为例(处理文本花了我好一会,具体处理方式我会写在另一篇文章里)。

对很多人来说,信息是一个抽象的概念。主要原因是信息不像温度、长度一样能够有一个能被人理解的度量单位。举个例子:我的键盘有多长,我能回答大概35cm,但是这篇文章的信息量有多大,我就很难向读者描述清楚了。

为了便于读者理解,我这里引用了吴军先生的《数学之美》中举了这样一个例子

image-20211101045604748

1948年,香农(Claude Shannon)提出了信息熵

在信息论中,熵(英语:entropy)是接收的每条消息中包含的信息的平均量,又被称为信息熵、信源熵、平均自信息量。这里,“消息”代表来自分布或数据流中的事件、样本或特征。(熵最好理解为不确定性的量度而不是确定性的量度,因为越随机的信源的熵越大。)来自信源的另一个特征是样本的概率分布。这里的想法是,比较不可能发生的事情,当它发生了,会提供更多的信息。由于一些其他的原因,把信息(熵)定义为概率分布的对数的相反数是有道理的。事件的概率分布和每个事件的信息量构成了一个随机变量,这个随机变量的均值(即期望)就是这个分布产生的信息量的平均值(即熵)。

(百度百科)

上面的内容有点抽象,我们还是以那只球队是冠军的信息为例,如果用比特(0或1)来度量信息量。在每个球队夺冠的概率相等时, 这条消息的信息量是5bit,相当于是

但是,在上面的例子中,如果每个球队夺冠的概率不相等时,xx号是世界冠军这句话的信息量就不值5bit了,香农指出,准确信息量应该如下(我会使用LaTeX写公式了)

当所有球队夺冠概率相同的时候H取到最大值5bit(补充,因为是以bit来衡量,所以这里对数是以2为底),并且信息熵计算方式如下

我们常用的汉字(一级二级国标)大约有7000字。假如每个字等概率,那么大约需要13比特(即13位 二进制数)表示一个汉字。但汉字的使用频率不是均等的。实际上,前10%的汉字占常用文本的95%以上。因此,即使不考虑上下文的相关性,而只考虑每个汉字的独立概率,那么,每个汉字的信息墒大约也只有8-9比特。如果再考虑上下文相关性,每个汉字的信息墒就只有5比特左右。所以,一本50万字的中文书,信息熵大约是250万比特。采用较好的算法进行压缩,整本书可以存成一个320KB的文件。如果直接用两字节的国标编码存储这本书,大约需要1MB大小,是压缩文件的三倍。这两个数量的差距,在信息论中称作“冗余度"(Redundancy)。 需要指出的是这里讲的250万比特是个平均数,同样长度的书,所含的信息量可以相差很多。如果一本书重复的内容很多,它的信息熵就小,冗余度就大。

这样我们就可以更加科学和定量地解释文章开始的现象了,汉字的信息熵是较大的,而英语里面需要添加词用单词互相修饰来提供新信息(或者更准确的信息),在汉语里只需要换个字或者词就行。便经常会出现英语里需要好几个单词组成的短句,在中文往往只需要一个词就能表示的情况。所以我们说汉字是一门简洁的语言。

将两个文件压缩成zip文件,对比之前的文件可以看到英文版本的文件压缩率更大,为什么汉语这么难被压缩呢,其实我们已经可以回答了。

image-20211101045233353
image-20211101070641272

抛开由于翻译时考虑到文学性的因素而进行的修改不谈,由于汉字的信息熵大,冗余度相对小很多。所以可供压缩的地方就不多了。如果把英语翻译成中文看作是压缩的话,这种压缩比不过为了追求极致简单而压缩的算法是很正常的。以压缩为结果的角度看,在把英语翻译成中文的过程中相当于是绕了远路了。但汉字在具备了简洁性的同时还保留了高度可读性(人们能理解并用来交流)是非常不容易的。