zoukankan      html  css  js  c++  java
  • 2. 文本相似度计算-距离的度量

    1. 文本相似度计算-文本向量化

    2. 文本相似度计算-距离的度量

    3. 文本相似度计算-DSSM算法

    4. 文本相似度计算-CNN-DSSM算法

    1. 前言

    上文介绍了文本的向量化处理,本文是在上文的向量化处理后的数据进行距离的计算。距离度量的方式有多种多样,但是一种相似度计算方式并不适用与所有的情况,需要根据不同的情况和数据类型进行选择。

    2. 相似度计算方式

    相似度就是比较两个事物的相似性。一般通过计算事物的特征之间的距离,如果距离小,那么相似度大;如果距离大,那么相似度小。

    简化问题:假设有两个对象(X)(Y),都包括(N)维特征,(X=(x_1,x_2,x_3,..,x_n),Y=(y_1,y_2,y_3,..,y_n)),计算(X)(Y)的相似性。常用的方法如下:

    2.1 余弦相似度

    余弦相似度用向量空间中两个向量夹角的余弦值作为衡量两个个体间差异的大小。相比距离度量,余弦相似度更加注重两个向量在方向上的差异,而非距离或长度上。适合word2vec模型向量化的数据。

    [cos heta = frac{sum_{i=1}^{n}x_{i}*y_{i}}{sqrt{sum_{i=1}^{n}x_{i}^{2} sum_{i=1}^{n}y_{i}^{2}}} ]

    2.2 欧式距离

    欧氏距离是最常用的距离计算公式,衡量的是多维空间中各个点之间的绝对距离,当数据很稠密并且连续时,这是一种很好的计算方式。

    因为计算是基于各维度特征的绝对数值,所以欧氏度量需要保证各维度指标在相同的刻度级别,如在KNN中需要对特征进行归一化。

    [d = sqrt{sum_{i=1}^{n}(x_{i}-y_{i})^{2}} ]

    2.3 曼哈顿距离

    曼哈顿距离简单来说就是统计相同坐标轴上的距离的和。

    [d = sum_{i=1}^{n}|x_{i}-y_{i}| ]

    2.4 闵可夫斯基距离

    大家有没发现欧式距离和曼哈顿距离在形式上比较相近。是的,其实它们是闵可夫斯基距离的特殊化。适合TF-IDF向量化后的数据或者提炼出来的主题模型数据。

    [d = (sum_{i=1}^{n}(x_{i}-y_{i})^{p})^{frac{1}{p}} ]

    2.5 皮尔森相关系数(pearson)

    皮尔森相关系数是衡量线性关联性的程度。

    两个连续变量((X,Y))的pearson相关性系数(P_{X,Y})等于它们之间的协方差(cov(X,Y))除以它们各自标准差的乘积(sigma{X}),(sigma{Y})。系数的取值总是在-1.0到1.0之间,接近0的变量被成为无相关性,接近1或者-1被称为具有强相关性。

    [P_{X,Y} = frac{cov(X,Y)}{sigma_{X}sigma_{Y}} ]

    2.6 Jaccard相似性系数

    Jaccard(杰卡德)相似性系数主要用于计算符号度量或布尔值度量的样本间的相似度。若样本间的特征属性由符号和布尔值标识,无法衡量差异具体值的大小,只能获得“是否相同”这样一种结果,而Jaccard系数关心的是样本间共同具有的特征。适合词集模型向量化的数据。

    [J(X,Y) = frac{|Xigcap{Y}|}{|Xigcup{Y}|} ]

    3. 总结

    本文介绍的相似度计算方式,总的来说还是比较简单、易于理解。相似度计算方式的不同对最终结果的影响没有向量化方式不同影响大,但是相似度计算方式不同对计算时间影响比较大。下文将从深度学习的角度介绍文本相似度计算。

  • 相关阅读:
    leetcode-788-Rotated Digits(使用vector替代if else的逐个判断)
    leetcode-771-Jewels and Stones(建立哈希表,降低时间复杂度)
    leetcode-766-Toeplitz Matrix(每一条对角线元素的比较)
    leetcode-762-Prime Number of Set Bits in Binary Representation
    leetcode-747-Largest Number At Least Twice of Others(求vector的最大值和次大值)
    Flink中逻辑计划和物理计划的概念划分和对应关系
    Java线程池中线程的生命周期
    在ServletFilter层返回多字段提示给前端
    JavaBIO利用装饰器模式来组织和扩展接口
    SparkShuffle机制
  • 原文地址:https://www.cnblogs.com/huangyc/p/9786731.html
Copyright © 2011-2022 走看看