洗稿,技术上怎么判断文章相似性?

3,489 阅读6分钟

这几天“差评洗稿”的事情,闹得沸沸扬扬,楼主本身也是内容创作的手艺人,简单说两句。

 

“运营为王”的今天,组一队编辑,起一个噱头标题,调整别人原创的内容(洗稿),在朋友圈/微信群/各渠道推广,个人原创作者根本防不胜防。

 

楼主最早写文章的配图都不带水印的,无奈抄袭成风的浮躁互联网,在N个平台发现了贴有“原创”标签的楼主的文章,才被迫打上“架构师之路”的水印。

画外音:楼主的配图很丑,很容易辨认。

 

当然,有些很用心的博主:

  • 会调整文章结构,文字顺序
  • 会重画架构图

反正就是不会说明来源。

 

洗稿又不犯法,怎么这么矫情?

 

大伙将心比心的感受下,辛辛苦苦花了5个小时缕思路,写文字,画图形,调格式发布的原创文字,5K阅读。

洗稿组织花了10分钟调整内容,打原创标签,多渠道运营,5W+阅读,原创作者会是什么感受?

 

大伙将心比心的感受下,辛辛苦苦花了4年时间,写了几百篇文章,只为分享知识。

被洗稿之后的文章,目的却是赚打赏赚广告费,原创作者会是什么感受?

 

真希望,这是“内容为王”的时代。

 

好了,技术公众号,还是多聊聊技术的东西。很多原创内容在网上被抄来抄去,改来改去,技术上有什么样的方法能够判断抄袭与洗稿,判断文章相似性,收集证据呢?希望本文能给大家一些思路。

 

两篇文章,如何判断一模一样?

:很容易想到的,一个字节一个字节的比对。

 

一个字节一个字节比对效率较低,有没有更高效的方法?

:可以用一个签名值(例如md5值)代表一篇文章,签名值相同则认为文章相同。

 

md5是一种常见的签名算法,常用来判断数据的完整性与一致性。例如:

  • 判断下载的区块链是否被篡改,只要比对本地数据md5,与预期的md5即可
  • 判断上线的二进制是否被篡改,只要比对线上二进制的md5,与编译机上二进制的md5即可
  • 判断消息是否被篡改,只要比对收到消息的md5,与传过来的md5值即可

 

md5设计原则:两篇文章哪怕只有1个字符不同,其md5签名值也会非常大,它只适用于“完整性”检测,并不适用于“相似性”检测。

对于一篇原创文章,洗稿者可能删除了5%的内容,修改了5%的内容,调整顺序了5%的内容(一般没有时间增加5%的内容)。此时的签名值并不相同。

洗稿这种场景,并不适合签名值比对。

 \

有没有一种哈希算法,文章越相似,哈希值也越相似呢?

:局部敏感哈希LSH(Locality Sensitive Hash)是典型解决方案(感兴趣的同学自行百度),这里分享一下minHash的思路。

 

什么是minHash?

:minHash是局部敏感哈希的一种,它常用来快速判定集合的相似性,也常用于检测文章的相似性。

其思路为:用相同的规则抽取集合中的少部分元素代表整个集合,如果少部分元素的重合度很高,非常可能整个集合的重复度也很高。

 

举例:待判定的集合为A{1, 7, 5, 9, 3, 11, 15, 13}

已有的集合为:

B{10, 8, 2, 4, 6, 0, 1, 16},

C{100, 700, 500, 900, 300, 1100, 1500,1300},

D{1, 3, 2, 4, 6, 5, 8, 7}

假设使用部分元素代替全体集合的规则为:集合内元素进行排序,取值最小的4个(这个过程有信息损失,我们可以认为是一个hash过程)代表整个集合。

 

处理结果为:

A{1, 3, 5, 7}

B{0, 1, 2, 4} =>A与B有1个元素相同

C{100, 300, 500, 700} => A与C有0个元素相同

D{1, 2, 3, 4} => A与D有2个元素相同

判断结论:认为集合A与集合D是最相似的。

 

例子说明了整体思路,实际执行的过程中:

  • 可以使用更多的元素来代表集合,以提高准确性
  • 可以使用更多的hash函数来代表集合,以提高准确性
  • minHash可以量化评判相似度
  • 文章库中的哈希值都可以提前计算

 

minHash可以检测集合相似度,它与文章相似度有啥关系?

:如果能将每一篇文章,用一个集合来表示,那么文章的相似度就能用minHash来解决了。

 

如何将文章转化为集合?

:分词。

 

举例:文章为A{我是58沈剑,我来自58到家}

已有文章库为:

B{我是一只来自58的狼}

C{58到家,服务到家}

D{这事和我没关系,我是凑数的}

 

使用分词将上述文本集合化:

A{我,58,沈剑,来自,到家}

B{我,58,来自,狼}

C{58,服务,到家}

D{事,我,凑数,关系}

判断结论:转化为集合后,可以快速判断文章A与文章B的相似度最高。

实际执行过程中,除了分词还可以考虑词频,以及词的权重。用这种方法进行文章相似度检测,准确率非常高(文本越长越准)。

 

能否进一步优化,提升效率,保留证据,证明洗稿者抄袭?

答:使用上述方法进行文章相似度检测,需要进行中文分词,词频统计,哈希值计算,相似度计算,计算量微大。可以这么优化:

  • 不再进行分词,而是进行“分句”,用标点符号把长文按照句子分开,使用N个句子作为文章的签名,能大大降低工程复杂度,并且准确度也异常的高
  • 故意留一些错别字,洗稿者很难发现这些错别字,能够很快证明抄袭成立

 

总结

  • 签名,例如md5经常用于判断文章相同,其效率比全文比对效率高
  • 局部敏感哈希,例如minhash经常用于判断文章相似
  • minhash的原理是,使用子集代表全集合,以子集的相似性模拟全集合的相似性
  • 把文章转化为集合的常见方法是分词
  • 分句,故意留错别字能够提高检测效率

 

画外音:看了下后台,创作4年,总打赏10797.72元,感谢大家。文章中部广告,文章底部广告,文章底部二维打赏码都非常影响用户体验,楼主就不这么切入广告了。平时发的推广软文,大家多帮忙扫扫码,多帮忙点击点击,多帮忙转发转发哈,撰文不易。

 

做技术,思路更重要,求转。