TF-IDF与余弦相似性的应用
自动提取关键词
1 | 有一篇很长的文章,要用计算机提取它的关键词,完全不加以人工干预,如何才能正确的做到? |
1 | 一个容易想到的思路,就是找到出现次数最多的词。如果某个词很重要,它应该在这篇文章中多次出现,我们进行"词频"(Term Frequency,缩写TF)统计 |
1.计算词频
1 | 词频(TF) = 某个词在文章中的出现次数 |
1 | 考虑到文章有长短之分,为了便于不同文章的比较,进行"词频"标准化。 |
1 | 词频(TF) = 某个词在文章中的出现次数/文章总词数 |
2.计算逆文档频率
1 | 需要一个语料库(corpus),用来模拟语言的使用环境。 |
1 | 逆文档频率(IDF) = log(语料库的文档总数/包含该词的文档数+1) |
1 | 如果一个词越常见,那么分母就越大,逆文档频率就越小越接近0 |
3.计算IF-IDF
1 | IF-IDF = 词频(TF) * 逆文档频率(IDF) |
1 | TF-IDF与一个词在文档中的出现次数成正比,与该词在整个语言中的出现次数成反比 |

1 | 从上表可见,"蜜蜂"的TF-IDF值最高,"养殖"其次,"中国"最低 |
找出相似文章
1 | 什么是"余弦相似性" |
1 | 句子A:我喜欢看电视,不喜欢看电影 |
1 | 怎样才能计算上面两句话的相似程度? |
1.分词
1 | 句子A:我/喜欢/看/电视,不/喜欢/看/电影 |
2.列出所有的词
1 | 我,喜欢,看,电视,电影,不,也。 |
3.计算词频
1 | 句子A:我 1,喜欢 2,看 2,电视 1,电影 1,不 1,也 0 |
4.写出词频向量
1 | 句子A:[1, 2, 2, 1, 1, 1, 0] |
1 | 如何计算这两个向量的相似程度 |

1 | 上图的a和b是两个向量,我们要计算它们的夹角θ。余弦定理告诉我们,可以用下面的公式求得: |


1 | 假定a向量是[x1, y1],b向量是[x2, y2],那么可以将余弦定理改写成下面的形式 |


1 | 数学家已经证明,余弦的这种计算方法对n维向量也成立 |

1 | 使用这个公式,我们就可以得到,句子A与句子B的夹角的余弦。 |

1 | 余弦值越接近1,就表明夹角越接近0度,也就是两个向量越相似,这就叫"余弦相似性" |
1 | (1)使用TF-IDF算法,找出两篇文章的关键词; |
1 | "余弦相似度"是一种非常有用的算法,只要是计算两个向量的相似程度,都可以采用它。 |
本文作者 : Matrix
原文链接 : https://matrixsparse.github.io/2017/02/12/TF-IDF与余弦相似性的应用/
版权声明 : 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!
知识 & 情怀 | 二者兼得