大数据开发 NLP文本相似度
大数据开发 NLP文本相似度
2019年01月10日 19:59:00 Blithe_Lee2 阅读数 134更多
所属专栏: 大数据开发
版权声明:本文为博主原创文章,大家可以转载分享学习 https://blog.csdn.net/qq_31469369/article/details/86251873
NLP文本相似度
nlp 自然语言处理
- 个体间的相似程度 一般用余弦相似度 个体间的相似程度 一般用余弦相似度表示
cosA=a·b/|a|·|b|
得到了文本相似度计算的处理流程是:
– 找出两篇文章的关键词;
– 每篇文章各取出若干个关键词,合并成一个集合,计算每篇文章对于这个集合中的
词的词频
– 生成两篇文章各自的词频向量;
– 计算两个向量的余弦相似度,值越大就表示越相似。
- 词频——TF(Term Frequency)
• :一个词在文章中出现的次数
• 也不是绝对的!出现次数最多的是“的”“是”“在”,这类最常用的词,
叫做停用词(stop words)
• 停用词对结果毫无帮助,必须过滤掉的词
• 如果某个词比较少见,但是它在这篇文章中多次出现,那
么它很可能反映了这篇文章的特性,正是我们所需要的关键词 - 反文档频率 -IDF
• 在词频的基础上,赋予每一个词的权重,进一步体现该词的重要性,
• 最常见的词(“的”、“是”、“在”)给予最小的权重
• 较常见的词(“国内”、“中国”、“报道”)给予较小的权重
• 较少见的词(“养殖”、“维基”、“涨停”)较大权重
4.TF·IDF值越大 该词的越重要
反文档频率(IDF)= log( 语料库文档数/包含这个关键词的文档数+1)
应用:
- 相似文章
• 使用TF-IDF算法,找出两篇文章的关键词;
• 每篇文章各取出若干个关键词,合并成一个集合,计算每篇文章对于这个集合
中的词的词频;
• 生成两篇文章各自的词频向量;
• 计算两个向量的余弦相似度,值越大就表示越相似。 - 文章摘要
5.L C S 定 义
• 最长公共子序列(Longest Common Subsequence)
• 一个序列S任意删除若干个字符得到的新序列T,则T叫做S的子序列
• 两个序列X和Y的公共子序列中,长度最长的那个,定义为X和Y的最长公共子序
列
– 字符串12455与245576的最长公共子序列为2455
– 字符串acdfg与adfc的最长公共子序列为adf
• 注意区别最长公共子串(Longest Common Substring)
– 最长公共子串要求连接
L C S 作 用
• 求两个序列中最长的公共子序列算法
– 生物学家常利用该算法进行基因序列比对,以推测序列的结构、功能和演化过程。
• 描述两段文字之间的“相似度”
– 辨别抄袭,对一段文字进行修改之后,计算改动前后文字的最长公共子序列,将除此子序列
外的部分提取出来,该方法判断修改的部分
求 解 — — 暴力穷举法
• 假定字符串X,Y的长度分别为m,n;
• X的一个子序列即下标序列{1,2,……,m}严格递增子序列,因此,X共有2
m个
不同子序列;同理,Y有2
n个不同子序列;
• 穷举搜索法时间复杂度O(2
m ∗ 2
n
);
• 对X的每一个子序列,检查它是否也是Y的子序列,从而确定它是否为X和Y的公
共子序列,并且在检查过程中选出最长的公共子序列;
• 复杂度高,不可用!
求 解 — — 动态规划法
• 字符串X,长度为m,从1开始数;
• 字符串Y,长度为n,从1开始数;
• Xi=<x1,……,xi>即X序列的前i个字符(1<=i<=m)(Xi计作“字符串X的i前缀”)
• Yi=<y1,……,yi>即Y序列的前j个字符(1<=j<=n)(Yj计作“字符串Y的j前缀”)
• LCS(X,Y)为字符串X和Y的最长公共子序列,即为Z=<z1,……,zk>
• 如果xm = yn(最后一个字符相同),则:X?与Yn的最长公共子序列Zk的最后一个字符必定为
xm(= yn)
• ?? = xm = yn
• LCS(X?, Yn)=LCS(X?−1, Yn−1)+x