• Quora Question Pairs整理 文本相似度计算(unfinished)


    要计算文本的相似度,要解决两个问题:首先,需要选择一个文本的表示方式。其次,需要选择一个衡量文本的相似度的距离度量。

    文本的表示

    自然语言理解的问题要转化为机器学习的问题,第一步肯定是要找一种方法把这些文本符号数学化。词向量是用一个向量来表示某个词的方法。下面介绍几种常见的词向量。

    1. SOW 词集模型

      忽略文本词序、语法和句法,仅仅记录某个词是否在文本中出现。具体地,根据语料库获得一个单词集合,集合中保存着语料库中出现过的所有单词,集合的长度为 \(|V|\),作为词向量的长度。对于每一个词,将该词在字典中对应的序号所在的位置上的值置为1,其他位置上的值置为0。例如,字典集合为("a", "am", "beautiful", "i", "is", "not", "she"),那么is对应的词向量为[0, 0, 0, 0, 1, 0, 0],文本"she is beautiful"对应的向量为[0, 0, 1, 0, 1, 0, 1]。

    2. BOW 词袋模型

      与SOW相比,BOW将文本中某个单词出现的次数也考虑到词向量中。例如,"she is not beautiful, is she?"对应的向量为[0, 0, 1, 0, 2, 1, 2]。

    3. nBOW 标准化的词袋模型

      与BOW相比,nBOW多了标准化的步骤。若 \(c_i\) 代表向量在第 i 个位置上对应的单词在文本中出现的次数,\(d_i\) 为向量在第 i 个位置上的值,则 \(d_i = \frac{c_i}{\sum_{j=1}^{|V|} c_j}\)。"she is not beautiful, is she?"对应的向量为[0, 0, 0.17, 0, 0.33, 0.17, 0.33]。

    4. TF-IDF 词频-逆文档频率

      TF-IDF中,每一单词对应的值是词频和逆文本频率的乘积。TF基于单个文本计算,IDF则是基于整个语料库计算。
      词频:是指某个词在文本中出现的次数 \(c_i\)。由于不同的文本有不同的长度,为了方便文本之间的比较,可以将词频标准化。方法一,\(TF = \frac{某个词在文本中出现的次数}{文本的总词数}\);方法二,\(TF = \frac{某个词在文本中出现的次}{该文本中出现次数最多的单词的出现次数}\)
      逆文档频率:如果一个单词在整个语料库中的很多文本里都出现,那么该单词的逆文本频率就越小。一种常见的计算方法是 \(IDF = \log \frac{语料库中的总的文本数量}{包含该词的文本数量 + 1}\)。分母之所以要加1,是为了避免分母为0(即所有文档都不包含该词)。
      TF-IDF与文本中的某个词的出现次数成正比,与整个语料库中存在该词的文本的总数量成反比。TF-IDF倾向于过滤掉常见的词语,保留重要的词语。一个文本中的某个单词的TF-IDF值越大,说明在给定语料库的前提下该单词在这个文本中越重要。
      最后,它的缺点:一方面,单纯以“词频”衡量一个词的重要性不够全面,有时重要的单词可能出现次数并不多;另一方面,TF-IDF也忽略文本词序、语法和句法。

    5. N-Gram 多元语言模型

      常见的N-Gram模型包括unigram一元语言模型、bigram二元语言模型和trigram三元语言模型。实践表明,四元及四元以上的语言模型对自然语言处理任务的帮助不大。前面所介绍的SOW、BOW、nBOW、TF-IDF都是基于unigram模型介绍的,它们假设文本中的单词都是相互独立的,忽略了单词出现顺序和文本结构的影响。对于bigram和trigram模型,同样可以转换成以上的词向量表示方法。对于bigram模型,"she is not beautiful, is she?"中包括["she_is", "is_not", "not_beautiful", "beautiful_is", "is_she"];对于trigram模型,"she is not beautiful, is she?"中包括["she_is_not", "is_not_beautiful", "not_beautiful_is", "beautiful_is_she"]。

    6. LSI/LDA

      向量空间模型VSM中词向量的长度都为 \(|V|\),通常 \(|V|\) 是一个很大的数,我们可以对其进行降维处理。经典的向量空间模型往往基于一个基本假设:文档之间重复的词语越多越可能相似。这一点在实际中并不尽然。VSM没有能力处理一词多义和一义多词问题,例如同义词也分别被表示成独立的一维,计算向量的余弦相似度时会低估用户期望的相似度;而某个词项有多个词义时,始终对应同一维度,因此计算的结果会高估用户期望的相似度。很多时候相关程度取决于背后的语义联系,而非表面的词语重复。主题模型是特征提取的一种方法,它是对文字隐含主题进行建模的方法,可以用来进行语义挖掘。

      初始的词向量可以是SOW、BOW、nBOW、TF-IDF等,通常使用TF-IDF,得到隐含的低维语义空间,达到降维的目的。

      • 潜在语义分析(LSA或LSI):一种基于奇异值分解(SVD)的方法来得到文本的主题的简单实用的主题模型。LSA经过一次奇异值分解就可以得到主题模型,同时解决词义的问题。但其有很多不足,导致它在当前实际的主题模型中已基本不再使用。
        首先,SVD的时间复杂度高,计算耗时【可以选择非负矩阵分解NMF方法来加快处理速度】。其次,模型中的主题数目一般是凭经验选择的,这个问题存在于大部分的主题模型【可以使用交叉验证的方法寻找适合的主题数】。还有就是,LSA得到的不是一个概率模型,缺乏统计基础,结果难以直观的解释【可以用pLSA或LDA这类基于概率统计的主题模型来替代基于矩阵分解的主题模型】。

      • 概率潜在语义分析(pLSA或pLSI):pLSA是一个两层概率模型。在pLSA中,D代表文档,Z代表隐含类别或者主题,W为观察到的单词,则 \(P(d_i)\) 表示文档 \(d_i\) 出现的概率(顺从多项式分布),\(P(z_k|d_i)\) 表示文档 \(d_i\) 中出现主题 \(z_k\) 下的单词的概率(顺从多项式分布),\(P(w_j|z_k)\) 表示主题 \(z_k\) 下出现单词 \(w_j\) 的概率,因此我们的训练目标是最大化 $$P(D,W) = \sum_{i=1}^{M} P(d_i) \sum_{j=1}^{N_{d_i}} \sum_{k=1}^{K} P(w_j|z_k) P(z_k|d_i)$$pLSA的参数个数是 \(M \times K + K \times |V|\),所以参数个数随着文档数量的增加而增加,通过EM算法求解。同时,文档之间相互独立,文档内的单词之间也相互独立。但是很重要的是,pLSA只是对已有文档的建模,也就是说模型不适合于新文档,因此pLSA存在容易过拟合的缺点。【困难在于 \(P(z_k|d_i)\) 的构造】

      • 隐含狄利克雷分布(LDA):LDA引入了Dirichlet先验概率,pLSA是LDA的一种特殊情况,因此LDA是一个三层概率模型,相比pLSA更加复杂。【当训练样本量足够大,pLSA的效果等同于LDA】LDA 生成模型中, M 篇文档会对应于 M 个独立的 Dirichlet-Multinomial 共轭结构;K 个主题会对应于 K 个独立的 Dirichlet-Multinomial 共轭结构。

    7. Word2vec模型

      对于BOW、TF-IDF等基于词袋模型来说,不同文本得到的词向量都近乎正交,而且无法计算独立单词组成的文本的距离。
      word2vec只能得到词向量,比较词之间的相似度,通过简单的加权、tag加权、tf-idf加权等方式得到文档向量。

    8. GloVe模型

    9. Doc2vec模型

      加权的方式丢失了最重要的句子结构信息(也可以说是词序信息),而doc2vec的方法则保存了这种信息。

    距离度量

    1. 欧氏距离

      \[dist(\mathbf{a}, \mathbf{b}) = ||\mathbf{a}-\mathbf{b}||$$衡量的是空间各点的绝对距离,跟各个点所在的位置坐标直接相关。欧氏距离属于几何距离,几何距离还包括曼哈顿距离、切比雪夫距离。 \]

      \[Cosine(\mathbf{a}, \mathbf{b}) = \frac{<\mathbf{a}, \mathbf{b}>}{|\mathbf{a}| \times |\mathbf{b}|}$$衡量的是空间向量的夹角,更体现方向上的差距,对绝对数值不敏感,修正了度量标准不统一的问题。由于余弦距离对绝对数值不敏感,所以可以通过所有的样本在维度上减去一个均值(即令特征的均值为0)来修正这种不合理。 \]

      \[Jaccard(\mathbf{a}, \mathbf{b}) = \frac{|\mathbf{a} \bigcap \mathbf{b}|}{|\mathbf{a} \bigcup \mathbf{b}|}$$衡量的是两个集合中不同元素占所有元素的比例,不关注具体的值,而关注某个值是否存在。与其类似的还有Dice系数:$2 \times |\mathbf{a} \bigcap \mathbf{b}| $ 除以 $|\mathbf{a}| + |\mathbf{b}|$。 \]

      汉明距离的前提是待比较的两个序列是等长的,它表示两个序列对应位置的值不同的数量,相当于进行异或运算。

    2. 编辑距离

      编辑距离是指两个文本之间,由一个转成另一个所需的最少编辑操作次数。许可的编辑操作包括将一个字符/单词替换成另一个字符/单词,插入一个字符/单词,删除一个字符/单词【动态规划问题】。

    3. 相对熵(KL散度)

      \[D(p||q) = \sum_{i=1}^{|V|}{p(\mathbf{x}_i) log{\frac{p(\mathbf{x}_i)}{q(\mathbf{x}_i)}}}$$相对熵可以度量两个随机变量的距离。KL散度是两个概率分布P和Q差别的非对称性的度量。由于相对熵是非对称的,因此可以分别计算 $D(p||q)$ 和 $D(q||p)$ 然后取平均 \]

      简单来说,对于一个文本中的所有词的词向量,分别找出另一个文本中距离和该词向量距离最近的词向量(即最小距离),最后将这些最小距离求和。不过实际中,在词移距离中的词向量与词向量之间并不是一对一的关系。一个文本中词向量可能对应着另一个文本中的多个词向量,只是权重不同。$$\min_{T \geqslant 0} \sum_{i,j=1}^{n} T_{ij} ||\mathbf{x_i}-\mathbf{x}j||$$$$s.t. \sum{j=1}^{n} T_{ij} = d_i,,, \sum_{i=1}^{n} T_{ij} = d_j$$算法改进:WCD、RWMD

    其他

    参考

    http://blog.csdn.net/xiaomuworld/article/details/52372331
    http://www.flickering.cn/数学之美/2014/06/lda数学八卦lda-文本建模/

  • 相关阅读:
    bootstrap-图片样式记录
    关于json数据中的多反斜杆转译--StringEscapeUtils.unescapeJava(踩过的坑)
    Nginx与tomcat组合的简单使用
    多进程之间的互斥信号量的实现(Linux和windows跨平台)
    跨平台(win和unix)的线程封装类
    linux 静态库、共享库
    WinMain与wWinMain,win32的字符集问题
    linux下添加动态链接库路径、动态库加载等方法
    win系统动态载入DLL所需要的三个函数详解(LoadLibrary,GetProcAddress,FreeLibrary)
    dll程序开发总结
  • 原文地址:https://www.cnblogs.com/viredery/p/document_similarity.html
Copyright © 2020-2023  润新知