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

这几天“差评洗稿”的事情,闹得沸沸扬扬,楼主本身也是内容创作的手艺人,简单说两句。
 
“运营为王”的今天,组一队编辑,起一个噱头标题,调整别人原创的内容(洗稿),在朋友圈/微信群/各渠道推广,个人原创作者根本防不胜防。
 
楼主最早写文章的配图都不带水印的,无奈抄袭成风的浮躁互联网,在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元,感谢大家。文章中部广告,文章底部广告,文章底部二维打赏码都非常影响用户体验,楼主就不这么切入广告了。平时发的推广软文,大家多帮忙扫扫码,多帮忙点击点击,多帮忙转发转发哈,撰文不易。
 
做技术,思路更重要,求转。
原文公众号在此

版权内容
MixMarker » 洗稿,技术上怎么判断文章相似性?

提供最优质的资源集合

立即查看 了解详情