海量数据相似数据查找方法(ANN):【高维稀疏向量的相似查找——MinHash, LSH, SimHash】【稠密向量的相似查找——Faiss、Annoy、ScaNN、Hnswlib】

主要分为高维稀疏向量稠密向量两大方向。

高维稀疏向量的相似查找——minhash, lsh, simhash

针对高维稀疏数据情况,如何通过哈希技术进行快速进行相似查找。

例如,推荐系统中item-user矩阵。如果你有item数量是百万级别,user是千万级别,这个矩阵是十分稀疏的。你如何计算每一个item的Top N相似item呢?

同样海量文本场景,文本集合可以看成doc-word 稀疏矩阵,如何求解每个文档的Top N相似文档?

如果采用两两比较的话,至少有两个问题:

  • O(n^2) 遍历时间复杂度;
  • 两个高维向量之间计算相似度,比如jaccard相似度,时间很耗时。

常见的解决方法如下:

  • 正排是doc-words,倒排是word-docs
  • 对正排里doc1的所有words,拉出对应的倒排docs,归并
  • 对正排里doc2的所有words,拉出对应的倒排docs,归并
  • 对上述两个向量求相似度

问题:虽然时间复杂度可以减小,但高频词可能导致倒排的拉链长度太长,导致效率下降。

minhash

例如,小写字母代表词,大写字母代表文档:

S1={a, d}, S2={c}, S3={b, d, e}, S4={a, c, d}

你可能感兴趣的:(#,RS/召回层,#,LLM/数据处理,算法)