问题定义
对于一个给定的query,从数据库中召回所有dist<thres的docs。
问题求解
Naive的方法需要O(n)的时间复杂度,LSH只需要O(1)即可实现。
具体来说分为三步:
1)抽取Embedding(LSH中称为Shingling)
2)降维(LSH常用MinHash)
3)LSH
前两步比较简单,也是管用方式,最后一步LSH算法其实思想也比较好想。
即对于降维后的emb,将其划分为k个bands,每个band有m个row。
对于每个band进行hash,任意两个doc如果有>=1个band被分到一个桶中,我们认为他们是相似的。
对于query,我们需要做的就是分band然后hash,最后将同一个桶中所有的doc取出即是最终的答案。
Reference
https://www.bilibili.com/video/BV1SC4y187x1?p=3&vd_source=6e6b2d418dac7b0fac4ea954a9be1106
http://web.stanford.edu/class/cs246/slides/03-lsh.pdf
https://zhuanlan.zhihu.com/p/108181478