LSH文本相似度

文本相似度计算

文本相似度计算可应用于‘猜你喜欢’相关推荐、 推荐系统冷启动推荐等

  • 1、计算两两文章TFIDF之间的相似度
  • 2、计算两两文章的word2vec词向量相似度
    • 大量数据量的时候,加上使用LSH–(大数据量考虑)

文本相似度计算流程的一种实现方式:

tfidf textrank提取文章关键词 主题词 -> 训练word2vec模型,实际应用文章过多可以分频道训练,每个频道一个模型-> 读取对应频道word2vec模型的词向量与查询文章的关键词表做内表连接生成临时表 -> 此处可以选择词向量与tfidf的权值相乘 -> 取临时表中文章关键词向量的平均值作为文章向量

LSH(Locality Sensitive Hashing)局部敏感哈希

LSH是一种算法技术,它以相似的“桶”将相似的输入项具有高概率。(桶的数量远小于可能的输入项的范围。)由于类似的项目最终存在于相同的桶中,因此该技术可用于数据聚类和最近邻搜索。它与传统的散列技术的不同之处在于散列冲突最大化,而不是最小化。或者,该技术可被视为减少维度的一种方式高维数据; 高维输入项可以减少到低维版本,同时保持项之间的相对距离

针对不同的相似度测量方法,局部敏感哈希的算法设计也不同,我们主要看看在两种最常用的相似度下,两种不同的LSH:

  1. 使用Jaccard系数度量数据相似度时的min-hash

  2. 使用欧氏距离度量数据相似度时的基于随机投影的方式

  • $$
    h(\boldsymbol{v})=\left\lfloor\frac{\boldsymbol{x} \cdot \boldsymbol{v}+b}{w}\right\rfloor
    $$

  • x是一个随机数,xv就是投影;w值可以控制量化误差;b是随机扰动
    其中,b∈(0,r)b∈(0,r)是一个随机数,rr是直线的分段长度,hash函数族的函数是依据a,ba,b的不同建立的。

    若要空间中的两个点v1,v2v1,v2映射为同一hash值,需要满足的条件为:这两点与aa的点积加上随机值bb的计算结果在同一条线段上。

LSH api

class pyspark.ml.feature.BucketedRandomProjectionLSH(inputCol=None, outputCol=None, seed=None, numHashTables=1, bucketLength=None)

  • inputCol=None:输入特征列
  • outputCol=None:输出特征列
  • numHashTables=4:哈希表数量,几个hash function对数据进行hash操作,即哈希降维的次数,官方建议使用4
  • bucketLength=None:桶的数量,值越大相同数据进入到同一个桶的概率越高,哈希冲突概率越高,官方建议使用10
  • method:
    • approxSimilarityJoin(df1, df2, 2.0, distCol=’EuclideanDistance’) 求出冲突文档的欧氏距离
    • 计算df1每个文章相似的df2数据集的数据

h(\mathbf{x})=\left\lfloor\frac{\mathbf{x} \cdot \mathbf{v}}{r}\right\rfloor

调用模型

计算相似的文章以及相似度

发表评论

邮箱地址不会被公开。 必填项已用*标注