我们正在使用MinHash LSH Forest
的{{1}}实现,实现基于 Locality Sensitive Hashing(LSH)的推荐系统。
分析结果后,我们发现Datasketch
MinHash LSH Forest
不推荐给定查询的最接近匹配项。
我们使用(Datasketch)
的{{1}}分析了预测的匹配和实际最接近的匹配(注意:MinHash LSH
与Datasketch
不同),发现即使尽管MinHash LSH
的效果很好,但MinHash LSH Forest
的结果却不正确。
MinHash LSH
例如, 假设有3个句子,
句子A:查询文字。
句子B:最接近的比赛。
句子C:预计匹配。
MinHash LSH Forest
在哪里
def get_forest(df, permutations, p_trees): lemmatizer = WordNetLemmatizer() minhash = [] for i in range(len(df)): text = df.iloc[i,8] tokens = process_text(text, lemmatizer) if tokens is None: pass m = MinHash(num_perm = perms) for s in tokens: m.update(s.encode('utf8')) minhash.append(m) forest = MinHashLSHForest(num_perm = perms, l = p_trees) for i,m in enumerate(minhash): forest.add(i,m) forest.index() return forest
:句子A和句子B之间的实际Jaccard相似性。
J_AB = 0.38, J_MinHash_AB = 0.39, J_AC = 0.2, J_MinHash_AC = 0.2
:句子A和句子C之间的实际Jaccard相似性。
J_AB
:句子A和句子B之间的Jaccard相似性 由MinHash LSH计算。
J_AC
:句子A和句子C的Jaccard相似性 由MinHash LSH计算。
我们有两个问题,
为什么J_MinHash_AB
建议将句子C作为句子A的最近邻居而不是句子B?
鉴于J_MinHash_AC
将产生多个Jaccard相似性,即Datasketch MinHash LSH Forest
,MinHash LSH Forest
,J_MinHash_AB
,…………,J_MinHash_AC
可以一次访问他们都是吗?