网上讲LSH这个很多,但是我就没找到有人讲清楚了的,于是写下这篇文本
https://zhuanlan.zhihu.com/p/108181478
这个链接是一知乎大神的对shingling,min-hash和LSH的理解性讲解
前面很容易懂,唯独LSH,让人看不懂,我也看了他推荐的链接,有篇英文pdf讲的这个。
看了几遍,就是没说破LSH怎么用,就在讲特异度和敏感度的问题。
http://web.stanford.edu/class/cs246/slides/03-lsh.pdf
其实就很简单,过程如下。
整个过程
- 数据,有10万文档
- 对这十万文档进行shingling,可以是n-gram取字符串分片,也可以是分词,就是粒度化。
- 建立0-1矩阵,行就是所有文档粒度化的字符串去重排序的集合,列是各篇文档。
- min-hash,进行降维,自己建立100个hash,然后对行序号计算hash值,最后计算min-hash,不太明白min-hash的看前面的链接。
- 得到hash方法集合和文档的矩阵,行数变少了,文档数没变,文档数也不能变,所以还是只有变行数,于是就有了LSH。
- 把行均匀分成多块,也就是几个hash方法一组,这样就有多组了,计算LSH时,就选一组就可以了,计算量就小了。前面文档是解释怎么选择分多少组,让误差小。buckets似乎没什么用。