NLP文本相似度

相似度

  • 相似度度量:计算个体间相似程度

  • 相似度值越小,距离越大,相似度值越大,距离越小

  • 最常用--余弦相似度:​

    • 一个向量空间中两个向量夹角的余弦值作为衡量两个个体之间差异的大小

    • 余弦值接近1,夹角趋于0,表明两个向量越相似

  • 如果向量a和b不是二维而是n维

示例

  • 句子1:这只皮鞋号码大了,那只号码合适

  • 句子2:这只皮鞋号码不小,那只更合适

    ​分词

  • 句子1:这只/皮鞋/号码/大了,那只/号码/合适

  • 句子2:这只/皮鞋/号码/不/小,那只/更/合适

    ​列出所有词

  • 这只,皮鞋,号码,大了,那只,合适,不,小,更

    ​计算词频

  • 句子1:这只1,皮鞋1,号码2,大了1,那只1,合适1,不0,小0,更0

  • 句子1:这只1,皮鞋1,号码1,大了0,那只1,合适1,不1,小1,更1

    ​词频向量化

  • 句子1:(1,1,2,1,1,1,0,0,0)

  • 句子2:(1,1,1,0,1,1,1,1,1)

    ​套公式计算

处理流程

得到了文本相似度计算的处理流程:

  • 找出两篇文章的关键词

  • 每篇文章各取出若干个关键词,合并成一个集合,计算每篇文章对于这个集合中的词的词频

  • 生成两篇文章各自的词频向量

  • 计算两个向量的余弦相似度,值越大就表示越相似

词频-TF

  • 假设:如果一个词很重要,应该会在文章中多次出现

  • 词频-TF(term frequency):一个词在文章中出现的次数

  • 也不是绝对的!出现次数最多的是“的”、“是”、“在”,这类最常用的词,叫做停用词(stop words)

  • 停用词对结果毫无帮助,必须过滤掉的词

  • 过滤掉停用词后就一定能解决问题么?

  • 进一步调整假设:如果某个词比较少见,但是它在这篇文章中多次出现,那么它很可能反映了这篇文章的特性,正是我们所需要的关键词

反文档频率-IDF

  • 在词频的基础上,赋予每一个词的权重,进一步体现该词的重要性

  • 最常见的词(“的”、“是”、“在”)给予最小的权重

  • 较常见的词(“国内”、“中国”、“报道”)给予较小的权重

  • 较少见的词(“养殖”、“维基”、“涨停”)给予最大的权重

  • 将TF和IDF进行相乘,就得到了一个词的TF-IDF值,某个词对文章重要性越高,该值越大, 于是排在前面的几个词,就是这篇文章的关键词。

计算步骤

  1. 词频(TF)= 某个词在文章中出现的次数

    • 词频标准化:词频(TF)=某个词在文章中出现的次数文章的总词数​

    • 词频标准化:词频(TF)=某个词在文章中出现的次数该文出现次数最多的词的出现次数​

  2. 反文档频率(IDF)= log(语料库文档总数包含该词的文档数​)

  3. TF-IDF = 词频(IF)* 反文档频率(IDF)

相似文章

  • 使用TF-IDF算法,找出两篇文章的关键词

    • top-n(TF-IDF值)

    • 按分数(TF-IDF值)过滤

  • 每篇文章各取出若干个关键词(比如20个),合并成一个集合,计算每篇文章对于这个集合中词的词频(为了避免文章长度的差异,可以使用相对词频)

  • 生成两篇文章各自的词频向量

  • 计算两个向量的余弦相似度,值越大就表示越相似

自动摘要

  • 确定关键词集合

    • top-n(TF-IDF值)

    • 按分数(TF-IDF值)过滤

  • 找出包含关键词的句子

  • 对关键词排序,相对于的句子划分等级

  • 把等级高的句子取出来,就是摘要

  • 文章的信息都包含在句子中,有些句子包含的信息多,有些句子包含的信息少。“自动摘要”就是要找出哪些包含信息多的句子

  • 句子的信息量用“关键词”来衡量,如果包含的关键词越多,就说明这个句子越重要

  • 只有关键词之间的距离小于“门槛值”,他们就被认为处于同一个蔟之中,如果两个关键词之间有5个以上的其他词,就可以把这两个关键词分在两个蔟

  • 对于每个蔟,都计算它的重要性分值

    蔟的重要性包含的关键词数量族的长度​

    示例:其中某个蔟一共有7个词,其中4个是关键词。因此,它的重要性分值等于(4*4)/7 = 2.3

  • 简化:不再区分“蔟”,只考虑句子包含的关键词。只考虑关键词首先出现的句子

    • 优点:简单快速,结果比较符合实际情况

    • 缺点:单纯以“词频”做衡量标准,不够全面,有时重要的词可能出现的次数并不多

最长公共子序列-LCS

  • 最长公共子序列(Longest Common Subsequence)

  • 一个序列s任意删除若干个字符得到的新序列T,则T叫做S的子序列

  • 两个序列X和Y的公共子序列中,长度最长的那个,定义为X和Y的最长公共子序列

    示例:

    1. 字符串12455245576的最长公共子序列为2455

    2. 字符串acdfg与adfc的最长公共子序列为adf

  • 注意区别最长公共字串(Longest Common Substring)

    • 最长公共字串要求是连续的

LCS作用

  • 求两个序列中最长的公共子序列算法

    生物学家常利用该算法进行基因序列对比,以推测序列的结构、功能和演化过程

  • 描述两段文字之间的“相似度”

    辨别抄袭,对一段文字进行修改之后,计算改动前后文字的最长公共子序列,将除此子序列外的部分提取出来,该方法判断修改的部分

求解-暴力穷举法

  • 假定字符串X,Y的长度分别为m,n;

  • X的一个子序列即下标序列{1,2,.......,m}严格递增子序列,因此,X共有​个不同子序列;同理,Y有​个不同子序列

  • 穷举搜索法时间复杂度O(​)

  • 对于X的每一个子序列,检查它是否也是Y的子序列,从而确定它是否为X和Y的公共子序列,并且在检查过程中选出最长的公共子序列

  • 复杂度高,不可用

求解-动态规划法

  • 字符串X,长度m;字符串Y,长度为n

  • ​即 X序列的前i个字符(1<= j <= m)(​计作“字符串X的i前缀”)

  • ​即 Y序列的前i个字符(1<= j <= n)(​计作“字符串X的j前缀”)

  • LCS(X,Y) = 为字符串X和Y的最长公共子序列,即为​

  • 若果​(最后一个字符相同),则:与​的最长公共子序列​的最后一个字符必定为​

  • 如果​

      1 2 3 4 5 6 7
    X B D C A B A  
    Y A B C B D A B

    对于上面的字符串X和Y:

    ​'C' 则有:LCS(BDC, ABC) = LCS(BD, AB) + 'C'

    ​'B' 则有:LCS(BDCAB, ABCB) = LCS(BDCA, ABC) + 'B'

    如果​ ,则​, 或者​,即​

    ​ 则有:​{​}

    ​ 则有:​{​}

    总结:

  • 属于动态规划问题

数据结构-二维数组

  • 使用二维数组C[m, n]

  • C[i, j]记录序列​和​的最长公共子序列的长度

    当或当且当且​

  • 例子

    X= <A, B, C, B, D, A, B>

    y = <B, D, C, A, B, A>

      j 0 1 2 3 4 5 6
    i   B D C A B A
    0 0 0 0 0 0 0 0
    1 A 0 0 0 0 1 1 1
    2 B 0 1 1 1 1 2 2
    3 C 0 1 1 2 2 2 2
    4 B 0 1 1 2 2 2 3
    5 D 0 1 2 2 2 2 3
    6 A 0 1 2 2 3 3 4
    7 B 0 1 2 2 3 4 4

NLP文本相似度的更多相关文章

  1. NLP文本相似度(TF-IDF)

    本篇博文是数据挖掘部分的首篇,思路主要是先聊聊相似度的理论部分,下一篇是代码实战.       我们在比较事物时,往往会用到“不同”,“一样”,“相似”等词语,这些词语背后都涉及到一个动作——双方的比 ...

  2. 大数据之路【第十二篇】:数据挖掘--NLP文本相似度

    一.词频----TF • 假设:如果一个词很重要,应该会在文章中多次出现 • 词频——TF(Term Frequency):一个词在文章中出现的次数 • 也不是绝对的!出现次数最多的是“的”“是”“在 ...

  3. NLP点滴——文本相似度

    [TOC] 前言 在自然语言处理过程中,经常会涉及到如何度量两个文本之间的相似性,我们都知道文本是一种高维的语义空间,如何对其进行抽象分解,从而能够站在数学角度去量化其相似性.而有了文本之间相似性的度 ...

  4. 从0到1,了解NLP中的文本相似度

    本文由云+社区发表 作者:netkiddy 导语 AI在2018年应该是互联网界最火的名词,没有之一.时间来到了9102年,也是项目相关,涉及到了一些AI写作相关的功能,为客户生成一些素材文章.但是, ...

  5. 【NLP】Python实例:基于文本相似度对申报项目进行查重设计

    Python实例:申报项目查重系统设计与实现 作者:白宁超 2017年5月18日17:51:37 摘要:关于查重系统很多人并不陌生,无论本科还是硕博毕业都不可避免涉及论文查重问题,这也对学术不正之风起 ...

  6. fastText、TextCNN、TextRNN……这里有一套NLP文本分类深度学习方法库供你选择

    https://mp.weixin.qq.com/s/_xILvfEMx3URcB-5C8vfTw 这个库的目的是探索用深度学习进行NLP文本分类的方法. 它具有文本分类的各种基准模型,还支持多标签分 ...

  7. Finding Similar Items 文本相似度计算的算法——机器学习、词向量空间cosine、NLTK、diff、Levenshtein距离

    http://infolab.stanford.edu/~ullman/mmds/ch3.pdf 汇总于此 还有这本书 http://www-nlp.stanford.edu/IR-book/ 里面有 ...

  8. 斯坦福NLP课程 | 第15讲 - NLP文本生成任务

    作者:韩信子@ShowMeAI,路遥@ShowMeAI,奇异果@ShowMeAI 教程地址:http://www.showmeai.tech/tutorials/36 本文地址:http://www. ...

  9. TF-IDF 文本相似度分析

    前阵子做了一些IT opreation analysis的research,从产线上取了一些J2EE server运行状态的数据(CPU,Menory...),打算通过训练JVM的数据来建立分类模型, ...

随机推荐

  1. Windows7下安装、部署Weblogic和发布war项目

    安装 1 从官方下载安装包 链接 2 下载之后,放到 Java8\jdk1.8.0\bin目录下 3 打开cmd,输入 java -jar . 4 5 6 下面是我自定义的目录, 7 8 9 10 1 ...

  2. ambiguous

    ambiguous - 必应词典 美[æm'bɪɡjuəs]英[æm'bɪɡjuəs] adj.模棱两可的:含混不清的:多义的:不明确的 网络含糊的:模糊的:暧昧的 搭配ambiguous answe ...

  3. PowerScript数据类型及变量

    PowerBuilder的标准数据类型共有14种 数据类型 意    义 示    例 Blob 二进制数据 可存放可变长度的大量数据,如图片,其它类型的文档数据. 如保存位图 Boolean 布尔型 ...

  4. Linux下使用RedisPool时报错:redis.clients.jedis.HostAndPort getLocalHostQuietly 严重: cant resolve localhost address

    项目在本地无错误,当部署到linux服务器以后,启动tomcat报错: 意思是找不到服务的名称. 后在网上检索相关答案,是因为在/etc/hosts文件中没有加入当前服务器实例的名称,将当前服务器实例 ...

  5. WebSocket入门及示例

    前言 一直在想要不要写下这篇,因为网上关于websocket的介绍和使用的好文实在太多太多,例如有这篇和这篇. 但我不管了,写下来,这样我就不用在想使用的时候总是去翻写过的源码了. 先回答几个简单的问 ...

  6. 监控服务器配置(三)-----Node_exporter安装配置

    此安装主要是为了监控服务器运行状况 1.下载node_exporter安装包(linux版)到 /opt/minitor/node_exporter . 下载地址:https://download.c ...

  7. beautiful模块

  8. 在centos7 部署bbr

    How to Deploy Google BBR on CentOS 7 Published on: Thu, Jan 5, 2017 at 6:34 pm EST CentOS Linux Guid ...

  9. linux awk使用详解

    转载:https://www.cnblogs.com/xudong-bupt/p/3721210.html   awk是行处理器: 相比较屏幕处理的优点,在处理庞大文件时不会出现内存溢出或是处理缓慢的 ...

  10. 第一次面试经历(hr面)

    经过介绍,我有幸去到一家国际背景的广告公司面试前端开发实习生.收到的邮件是复试通知,看来我已经跳过了第一轮面试. 来到hr请我进了一个小间坐下里填求职书,里面有各种个人信息,有兴趣爱好,有工作经历,以 ...