【NLP】文本相似 - hippowc/hippowc.github.io GitHub Wiki

概述

文本处理中一个重要的工作就是:如何对其进行抽象分解,从而能够站在数学角度去量化其相似性。

基于文本之间相似性的度量方式才可以做:

  • 利用划分法的K-means、基于密度的DBSCAN或者是基于模型的概率方法进行文本之间的聚类分析
  • 利用文本之间的相似性对大规模语料进行去重预处理,或者找寻某一实体名称的相关名称

文本相似性常用度量方式

字面距离

字符串相等

常用方式:

  • 比较两个字符串每个字符是否相等
  • 计算哈希值,比较哈希值

其相似度的度量结果只有两种:相等,不相等。这在很多情况下是没办法使用的

字符串相似

常用方式:

  • 计算相同字符数(不考虑顺序)
  • 莱温斯坦距离(Levenshtein 编辑距离)
    • 原理:两个字符串之间,由一个转成另一个所需的最少编辑操作次数(替换、插入、删除)
  • Jaro距离
    • 也是一种编辑距离
  • 汉明距离(Hamming距离)
    • 两个字符串对应位置不同字符的个数
    • 汉明重量:非零元素的个数
  • SimHash
    • 一种局部敏感hash,是google进行海量网页去重的主要算法
    • 传统hash如果内容不相同,签名会差别很大,simHash产生的签名在一定程度能表征内容相似度
    • 获取SimHash步骤
      • 对文本分词,去噪音词,对每个词加权(乘系数)
      • 使用hash计算每个词的hash值,目的是将字符串编程数字(将文字变为数字计算才能提高性能)
      • 加权,hash * 系数
      • 合并,将数值累加
      • 降维,将所有数字变为01,大于0为1,小于0为0
    • 相似度计算:可以通过计算汉明距离,譬如:小于3认为文本相似
    • 适用于较长的文本,计算速度是优势

语义相似

通过字面距离相近,不一定能够说明两个文本是相同的语义

想要做到语义层面的度量,我们需要用到机器学习建模,而自然语言的问题转化为机器学习的首要问题便是找到一种方法把自然语言的符号数学化。

nlp的两个理论方向

  • 基于统计的经验主义方法
  • 基于规则的理性主义方法

着计算机性能的提升,以及互联网发展而得到的海量语料库,目前NLP的研究更多是基于统计的经验主义方法

更多的可参照 nlp -- 概览