9

我知道英语的香农熵是每个字母 1.0 到 1.5 位,有人说每个字母低至 0.6 到 1.3 位,但我想知道有没有办法运行一种算法来查看大量文本然后确定集体文本的期望值是集体文本的每个字母 0.08 位?

4

3 回答 3

6

一种语言的熵率的数学定义是,如果您有一个以该语言生成字符串的源,则第 n符号的熵的限制,以之前的 n-1 个为条件(假设源是固定的) )。

这种来源的一个足够好的近似值是一个大的英文文本语料库。Open National American 语料库非常好(100M 字符,涵盖所有类型的书面文本)。然后,逼近上述限制的基本算法是,对于给定的 n,查看文本中出现的所有 n-gram,并建立在定义中涉及的条件熵的各种概率的统计估计。熵率的计算。

完整的源代码很简短(大约 40 行 Python 代码)。我最近发表了一篇关于估计英语熵率的博客文章,其中涉及更多细节,包括数学定义和完整实现。它还包括对各种相关论文的引用,包括Shannon 的原始文章

于 2013-12-10T00:50:55.600 回答
2

估计文本的香农熵值。人类无法准确地找出答案。您可以通过在其上运行有效的压缩算法 (PAQ) 来估计它,或者使用人类来预测给定字符串的下一个字母。人类会做得很好,因为他们应用语义知识,而不仅仅是统计知识或句法知识。

简短回答:尝试尽可能压缩您拥有的数据/文本并计算您凭经验需要多少位。

这取决于具体算法,您可以将数字降低到什么程度。这将始终只是香农熵的上限(请记住,永远不会知道确切的值)。

于 2012-04-08T21:23:59.403 回答
0

Oli Charlesworth 是正确的,熵是根据概率定义的,而不是文本。

为数据生成无序度量的唯一真正方法是使用 Kolmogorov 复杂度。虽然这也有问题,特别是它是不可计算的,并且还没有严格定义为必须任意选择一种基础语言——正如 Oli 所说的“上下文”。如果测量的无序与将要处理数据的事物相关,则可以解决这种明确的定义。因此,当考虑在特定计算机上进行压缩时,基本语言将是该计算机的汇编。

因此,您可以将文本的无序定义如下:

用汇编语言编写的输出文本的最短程序的长度。

于 2013-09-15T13:09:06.317 回答