美文网首页
自然语言处理 | 文本相似度计算

自然语言处理 | 文本相似度计算

作者: cathy1997 | 来源:发表于2019-10-04 09:48 被阅读0次

文本是一种高维的语义空间,需要对其进行抽象分解,从而能够从数学角度去量化其相似性。
距离度量的方式有多种多样,但是一种相似度计算方式并不适用与所有的情况,需要根据不同的情况和数据类型进行选择。

文本相似度计算的几种方法

余弦相似度

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


Python代码实现:

def cosine_similarity(vector1, vector2):
    dot_product = 0.0
    normA = 0.0
    normB = 0.0
    for a, b in zip(vector1, vector2):
        dot_product += a * b
        normA += a ** 2
        normB += b ** 2
    if normA == 0.0 or normB == 0.0:
        return 0
    else:
        return round(dot_product / ((normA**0.5)*(normB**0.5)) * 100, 2)

或者

import numpy as np
def get_cossimi(x,y):
    myx=np.array(x)
    myy=np.array(y)
    cos1=np.sum(myx*myy)
    cos21=np.sqrt(sum(myy*myy))
    cos22=np.sqrt(sum(myx*myx))
    return (cos1/float(cos22*cos21))

曼哈顿距离(L1范数)

统计相同坐标轴上的距离的和。

欧式距离(L2范数)

欧氏距离是最常用的距离计算公式,衡量的是多维空间中各个点之间的绝对距离,当数据很稠密并且连续时,这是一种很好的计算方式。
因为计算是基于各维度特征的绝对数值,所以欧氏度量需要保证各维度指标在相同的刻度级别,如在KNN中需要对特征进行归一化。

def distance(vector1,vector2):
    d=0;
    for a,b in zip(vector1,vector2):
        d+=(a-b)**2;
    return d**0.5;

闵可夫斯基距离(Lp范数)

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

皮尔森相关系数(pearson)

皮尔森相关系数是衡量线性关联性的程度。
两个连续变量(X,Y)(X,Y)的pearson相关性系数PX,YPX,Y等于它们之间的协方差cov(X,Y)cov(X,Y)除以它们各自标准差的乘积σXσX,σYσY。系数的取值总是在-1.0到1.0之间,接近0的变量被成为无相关性,接近1或者-1被称为具有强相关性。

from math import sqrt

def multipl(a,b):
    sumofab=0.0
    for i in range(len(a)):
        temp=a[i]*b[i]
        sumofab+=temp
    return sumofab

def corrcoef(x,y):
    n=len(x)
    #求和
    sum1=sum(x)
    sum2=sum(y)
    #求乘积之和
    sumofxy=multipl(x,y)
    #求平方和
    sumofx2 = sum([pow(i,2) for i in x])
    sumofy2 = sum([pow(j,2) for j in y])
    num=sumofxy-(float(sum1)*float(sum2)/n)
    #计算皮尔逊相关系数
    den=sqrt((sumofx2-float(sum1**2)/n)*(sumofy2-float(sum2**2)/n))
    return num/den

Jaccard相似性系数

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

kl散度/相对熵/kl距离

相对熵(relative entropy)又称为KL散度(Kullback–Leibler divergence,简称KLD)、信息散度(information divergence)、信息增益(information gain)。
KL散度是两个概率分布P和Q差别的非对称性的度量(designed to measure the difference between probability distributions),KL散度是用来度量使用基于Q的编码来编码来自P的样本平均所需的额外的位元数。 典型情况下,P表示数据的真实分布,Q表示数据的理论分布,模型分布,或P的近似分布。

KL散度

DSSM算法

CNN-DSSM算法

相关文章

  • 文本匹配利器:从Siamse孪生网络到Sentence-BERT

    文本匹配一直是自然语言处理(NLP)领域一个基础且重要的方向,一般研究两段文本之间的关系。文本相似度计算、自然语言...

  • 从Siamse孪生网络到Sentence-BERT综述

    文本匹配一直是自然语言处理(NLP)领域一个基础且重要的方向,一般研究两段文本之间的关系。文本相似度计算、自然语言...

  • 自然语言处理 | 文本相似度计算

    文本是一种高维的语义空间,需要对其进行抽象分解,从而能够从数学角度去量化其相似性。距离度量的方式有多种多样,但是一...

  • 2019-04-22

    当你喜欢一个女生的时候,你会付出你的所有,和我好像。 1.文本相似度计算——文本向量化 1.前言 在自然语言处理过...

  • FromWord Embeddings To Document

    文本相似度是自然语言处理研究热点之一,论文提出了一种新的衡量文本相似度的方法,Word Mover’s Dista...

  • 3.Gensim中Dict,Tf-Idf的解释

    最近项目中,有用到文本相似度计算,涉及到自然语言处理的一个很强大的库gensim 1.1 基本概念和用法 corp...

  • 2018-06-23NLP知识体系

    NLP 自然语言处理的大致知识领域如下 语法分析 句法分析 情感分析 句子生成 句子相似度 文本分类/聚类 文本表...

  • 机器学习中常用的相似性度量算法

      在目前的自然语言处理、数据挖掘以及机器学习中,相似性度量算法是一种比较常用的算法,是文本计算的基础。相似性度量...

  • 一文概览NLP算法(Python)

    一、自然语言处理(NLP)简介 自然语言处理就是用计算机来分析和生成自然语言(文本、语音),目的是让人类可以用自然...

  • senLDA实践—长短文本相似度

    背景:计算短文本与长文本的相似度,如在搜索场景中,计算query和doc的相似度,用于排序。 经过调研,找到百度的...

网友评论

      本文标题:自然语言处理 | 文本相似度计算

      本文链接:https://www.haomeiwen.com/subject/njprpctx.html