浅识TF-IDF

写在最前

关于TF-IDF算法本是我九月组内分享会的内容,前段时间看《数学之美》的时候又重新看到。虽然在实战中使用的机会很少,但是不妨碍我们去感受去理解这些简洁却有力量的思想。

什么是TF和IDF

  • TF:词频(term frequency),即一个词语出现在一篇文章的频率,计算方式很简单:词频=某个词在文章中的出现次数/文章的总词数
  • IDF:逆文本频率(inverse document frequency),是一个词语的普遍重要性的度量,逆文本频率=log(语料库的文档总数/包含该词的文档数+1)

TF-IDF = TF * IDF

某一特定文件内的高词语频率,以及该词语在整个文件集合中的低文件频率,可以产生出高权重的TF-IDF。因此,TF-IDF倾向于过滤掉常见的词语,保留重要的词语。

具体公式可以参见维基百科

简单应用

TF-IDF 思想及其简单,但是应用起来威力就很大,下面我们来看一个判断句子相关性的例子:

  • str0:’今天中午的螃蟹真好吃’
  • str1:’今天中午的大闸蟹真难吃’
分词

首先我们需要对句子进行分词处理,网上有很多优秀的资源,比如结巴中文分词,这里我们从简~

str0:[‘今天’,’中午’,’的’,’螃蟹’,’真’,’好吃’]
str1:[‘今天’,’中午’,’的’,’大闸蟹’,’真’,’难吃’]

构建词向量

对我们分词的结果取set(),那么我们可以得到[‘今天’,’中午’,’的’,’螃蟹’,’大闸蟹’,’真’,’好吃’,’难吃’]这个词组。我们分别对str0和str1构建词向量,结果为

  • str0=[1,1,1,1,0,1,1,0]
  • str1=[1,1,1,0,1,1,0,1]
计算相关性

数学上我们学过向量空间的余弦相似度,在这里就派上了大用场。最简单的例子,若两条直线的余弦为0,表示不相关;若为-1,则表示完全相反。即余弦相似度越大,其内容的相似度越高,其推广到多维空间也是成立的。

公式和计算过程就省略一下,计算结果是0.677,相关系数还蛮高的

更多内容参考这里

更多应用
  • 论文检索
  • 新闻的分类
  • 用户画像