SimHash
什么是字面文本相似度?
在NLP领域如何判断两个文本的相似性是一个基础性的任务,而文本的相似性往往可以理解为两个方面:字面相似性和语义相似性。怎么理解这个内容呢?就比如说白龙马
和赤兔马
,乍一看,”WC,这不就是马么有啥区别?一个是白的一个是红的,也没啥!“,但是究其本质白龙马
是龙啊,赤兔马
就是一匹普通的坐骑。
上面的例子可以认为是“形似韵不同”的诠释,还有些是“形不似,神似”,等等。而字面文本相似度就是解决无论语义怎样,只要两个文本长得差不多,那就相似。
什么是SimHash?
说SimHash不难会想到Hash。
Hash对于一个了解数据结构的人来说并不陌生,可以认为是数据的一个“唯一性”id,但是并不唯一,这与hash算法和hash函数的选取有关,有可能出现冲突等问题。扯远了~
一个文本采用Hash后的编码可以代表这个文本,但是将整个文本的内容进行hash后,很少有两个hash文本很类似,也就是说,文本间的hash码会有很大的差异。也就无法度量文本间的字面相似度。
SimHash是Google发表于2007的论文《Detecting Near-Duplicates for Web Crawling》。设计的初衷是用于搜索引擎的网页去重的工作。
其实还有一个作用,就是用于判断两篇文章是否有抄袭。如果最后的SimHash的值相差不多,很可能文章就有抄袭。
SimHash还有一种叫法,称为局部Hash