一串英文文本的熵如何表明它的质量低?

15

Jeff Atwood最近在推特上分享了一篇CodeReview的帖子,他想知道社区能否改进他的“计算字符串熵的代码”。他解释说:“我们在Stack Overflow的一些地方计算字符串熵作为低质量的标志。”

他的方法的要点似乎是如果计算字符串中唯一字符的数量,那就表示熵(代码取自PieterG的答案):

int uniqueCharacterCount = string.Distinct().Count();

我不理解唯一字符计数如何表示字符串的熵,以及字符串的熵如何表示低质量。我想知道是否有更多了解这个领域的人能够解释一下Atwood先生试图实现什么。

谢谢!


11
非常抱歉,您提供的内容似乎是无意义的随机字符,我无法将其翻译成有意义的句子。如果您有其他需要翻译的内容,请告诉我,我会尽力为您提供帮助。 - Hans Passant
4
根据这个算法,我的字符串熵值更高,但质量类似。 - Pandincus
1
@Kirk Woll -- 挺有见地的;-) - Pandincus
1
@zzzzBov:请参考http://en.wikipedia.org/wiki/Entropy_(information_theory)了解熵在这个上下文中的含义。它与两个字符串之间的差异无关,只是两个字符串可以具有不同的熵值。 - Jim Mischel
2
熵不是两个字符串之间的差异。它是数据冗余或随机性的度量,包括字符串。高度随机的数据将具有令牌的均匀分布,并且将包含很少有意义的模式和高熵。英文文本是冗余的,因为出现“q”通常在“u”之前。跟在“s”后面的“t”也是一个好猜测。同样,“overflow”可能经常跟在“stack”后面。... - Jason Kleban
显示剩余3条评论
5个回答

8
混淆的原因似乎是认为这个功能被用来阻止帖子发布 - 实际上并不是这样。它只是多个算法之一,用于查找可能存在低质量帖子,并显示在管理员工具的低质量帖子标签页(需要10k声望)上。实际上仍然需要人类来查看帖子。其目的是捕获像~~~~~~No.~~~~~~FUUUUUUUU------这样的帖子,而不是抓住所有低质量帖子。
关于“独特字符计数如何表示熵?” - 实际上并不表示。最受赞同的答案完全没有抓住重点。
请参见https://codereview.stackexchange.com/questions/868#878https://codereview.stackexchange.com/questions/868#926

6

字符串“aaaaaaaaaaaaaaaaaaaaaaaaaaa”的熵值非常低,而且毫无意义。

字符串“blah blah blah blah blah blah blah blah”熵值稍高,但仍然相当愚蠢,并且可能是攻击的一部分

如果帖子或评论的熵值与这些字符串相当,则可能不适合;它不能包含任何有意义的信息,甚至垃圾邮件链接都没有。这样的帖子可以被过滤掉或需要额外的验证码。


3
让我们看一下维基百科上关于信息熵的条目:
在信息论中,熵是与随机变量相关的不确定性度量。在这个情境下,该术语通常指的是香农熵(Shannon entropy),它量化了一条消息中所包含信息的期望值……
具体来说,对于英文信息:
根据基于人类实验的香农估计,英文文本的熵率在每个字母1.0到1.5位之间,也可能低至每个字母0.6到1.3位。
换句话说,低熵不是好事,高熵也不是好事,或者反过来-存在一个最优熵范围。

2
香农熵H(P)是随机变量X的概率分布P的属性。
对于字符串,一种简单的处理方法是将其视为字符包。在这种情况下,频率计数提供了一个近似的概率分布P,即从字符串中随机选择一个字符的概率分布。
如果我们只是计算字符串中唯一字符的数量,这将与该字符串中出现的唯一字符数量的均匀分布的熵相关。唯一字符数量越多,熵就越大。
然而,Jeff Atwood(和BlueRaja的)后续代码贡献是更好的度量标准,因为它们考虑了一个字符串可能代表的其他可能分布;仍然被认为是字符包。
在Rex M的回答基础上......寻找'字符熵'落在1.0-1.5范围之外的字符串会更有意义,因为它们可能是“低质量字符串”。

0

这并不是对你问题的确切回答,但维基百科有熵的解释

熵是一种无序的度量,或者更准确地说是不可预测性。例如,使用公平硬币进行一系列抛硬币的操作具有最大的熵,因为没有办法预测接下来会出现什么。使用一个双面硬币进行一系列抛硬币的操作具有零熵,因为硬币总是正面朝上。在现实世界中,大多数数据集处于两者之间。

英文文本的熵相当低。换句话说,它相当可预测。即使我们不知道接下来会出现什么,我们也可以相当确定,例如e的数量将比z的数量多得多,或者组合“qu”将比任何其他带有“q”的组合更常见,“th”组合将比其中任何一个更常见。未压缩的英文文本每个字节(八位)的消息具有约一位熵。


确实!如果英文文本的熵很高,拼写检查器就无法正常工作。 - Jasen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接