Algorithm 有没有一种算法可以找到文本的香农熵?

Algorithm 有没有一种算法可以找到文本的香农熵?,algorithm,text,Algorithm,Text,我知道英语的Shannon熵是每个字母1.0到1.5位,有人说低至每个字母0.6到1.3位,但我想知道是否有一种方法可以运行一个算法,查看大量文本,然后确定集体文本的预期值,例如集体文本的每个字母0.08位?Shannon估计文本的熵值。人类无法准确地找到答案。您可以通过在其上运行高效的压缩算法(PAQ)或使用人工预测给定字符串的下一个字母来估计它。人类会做得很好,因为他们应用语义知识,而不仅仅是统计知识或句法知识 简短回答:尽量压缩你拥有的数据/文本,并计算你经验上需要多少位 这取决于具体的算

我知道英语的Shannon熵是每个字母1.0到1.5位,有人说低至每个字母0.6到1.3位,但我想知道是否有一种方法可以运行一个算法,查看大量文本,然后确定集体文本的预期值,例如集体文本的每个字母0.08位?

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

简短回答:尽量压缩你拥有的数据/文本,并计算你经验上需要多少位


这取决于具体的算法,你能得到多少。这永远只是香农熵的上限(记住,确切的值永远不会知道)。

奥利·查尔斯沃思是正确的,熵是根据概率定义的,而不是文本

唯一能为数据生成无序度度量的真正方法是使用Kolmogorov复杂性。尽管这也有问题,特别是它是不可计算的,并且还没有严格定义好,因为人们必须任意选择一种基础语言——正如奥利所说的“上下文”。如果所测量的无序度与将要处理数据的东西相关,那么这种良好定义就可以解决。因此,当考虑在特定计算机上进行压缩时,基础语言将是该计算机的汇编语言

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


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

的数学定义是,如果您有一个以该语言生成字符串的源,则第n个符号的熵限制取决于前n-1个符号(假设源为)

这样一个来源的一个足够好的近似是一个大型的英语文本语料库。这本书相当不错(100个字符,涵盖所有类型的书面文本)。然后,近似上述极限的基本算法是,对于给定的n,查找文本中出现的所有n-gram,并对熵率计算中涉及的条件熵定义中出现的各种概率进行统计估计


做这件事的方法很短很简单(大约40行python代码)。我做了一个更详细的分析,包括数学定义和完整的实现。它还包括对各种相关论文的参考,包括。

很难用一种完全有意义的方式来衡量这一点,因为根据定义,熵是一种概率度量。我可以将任何给定的文本压缩到一个位,使用一种将该位映射回原始文本的压缩方案。如果我只需要表示两个不同的文本,那就绝对好了。因此,在这种情况下,文本的信息内容是1位的。感谢您的回复。有没有办法测量不同文本的冗余度?假设你有两组1000字的文本,你能测量一个文本是否比另一个文本多或少冗余吗?不能没有上下文。有可能其中一个文本是由伪随机数生成器生成的,在这种情况下,它是完全冗余的(用于为生成器设定种子的值除外)。您所能说的就是,在特定规则的上下文中(例如,从前两个字母中预测当前字母),您可以按一定比例压缩文本。但是选择不同的规则,结果就会不同。基本的问题是,考虑到之前发生的事情,你必须弄清楚比特流中的下一个比特是如何“可预测”的。虽然有许多不同的压缩算法利用已知的可预测特性,但没有办法量化所有可预测的方式。试想——有些朋友你可以逐字预测他们在特定情况下会说什么,有些朋友会反复使用相同的短语,但顺序不同,而其他朋友则完全不可预测。通过压缩文本(例如:gzip)并查看压缩比,你会得到一个合理的估计。“标准”文本可能会压缩到原始大小的10…20%。感谢您的回复。你知道有任何软件下载可以压缩数据/文本并提供数据压缩比吗?以“位/字符”表示的压缩比是(compressedSizeInBytes/originalSizeInBytes*8)。@PoloMontana:只需使用你最喜欢的压缩工具,比较前后的文件大小。谢谢你的回复。我完全知道我现在需要做什么。@usr我不确定你的建议是否是一个好的衡量标准(尽管我同意它在正确的轨道上)。首先,我们应该强调这是香农熵(SE)的上界。其次,我们应该将压缩后的大小与随机排列的相同文本进行比较。可以想象,有一些特定于编码的压缩,这不应该算作SE的一部分。据推测,经过排列的文本不能像原始文本那样被压缩,这种差异是关键的衡量标准。“最短程序…”只是谈论压缩性的另一种方式。给定特定的压缩算法,程序的大小将由文本的可压缩性决定,再加上解压所需的代码大小。N-gram不如一般数据压缩强大。因此,N-gram会高估香农熵。像PAQ这样的压缩器保持着压缩的世界记录,是目前人类已知的最好的香农估计量。@usr:压缩算法高度依赖于数据类型;我不知道怎么办