1、TF-IDF算法学习

说明:文章中的学习内容和图片取自莫烦python的视频。

1、何为TF-IDF?

TF—词频(Term Frequency):表示词条在文章中出现的次数(频率);

例如下图:在这里插入图片描述

IDF—逆文件频率指数(Inverse Document Frequency):所有的词在这个系统中的区分力的大小,真正突出每一篇文章的重点;
例如下图:如果这个系统中每一篇文章中都有重复出现“我”这个字的时候,那么“我”这个字在任意一篇文档中的区分力就不强。如果搜索的时候关键字用的是“莫烦”,然鹅整个系统中叫莫烦的人又能有多少呢?所以“莫烦”这个词的区分力就很强。在这里插入图片描述

分割

所以,TF是文章信息的局部信息;而IDF表示的是系统的全局信息。

TF-IDF的核心思想为词条的重要性随着该词条在当前文档中出现的次数成正比增加,但同时会随着它在语料库(所有文档)中出现的频率成反比下降。

并且两个各有各自的优势,所以想要结合两者的优势来表达一篇文章,就可以将这两者进行结合----即TF-IDF算法,这个算法常用于是一种用于信息检索(information retrieval)与文本挖掘(text mining)的常用加权技术
将TF-IDF两者相结合,就是将这两者相乘的意思
公式:TF-IDF = TF(词频) * IDF(逆文档频率)
这就意味着,所有文章都可以用一串集合所有词的分数来表示。通过分数的高低,可以大概看出这一篇文章的关键内容是什么。
在这里插入图片描述

二、TF-IDF的数学表达式

举个例子:

假设我们在搜索引擎中搜索“莫烦python”,机器会利用词表来计算“莫烦python”这个问题的TF-IDF值,然后会计算问句和每篇文章的cosine距离。这个例子中的计算过程,简单来说,就是将文章按照词的维度放到一个四维空间中,(由于画不了四维,就用个三维空间说明一下)然后把问句同样也放到这个空间里,最后看空间中这个问题离哪一个文章的距离最近,越近则相似度越高。通过这样的方式呢,我们就能找到搜索问题的最佳匹配文章了。
在这里插入图片描述

注:TF-IDF并不是一种神经网络或者深度学习,而是一种基于统计学的方法。但它有不可动摇的地位,最主要的原因是搜索中,文档量是巨大的, 而深度学习单个处理每篇文档太慢了,在追求搜索速度时,我们不得不依赖于快速的传统方法。
在这里插入图片描述

在这里插入图片描述

三、TF-IDF应用

 (1)搜索引擎;(2)关键词提取;(3)文本相似性;(4)文本摘要

四、代码

1、sk-learn实现

from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import cosine_similarity

docs=[
    "it is a good day, I like to stay here",
    "I am happy to be here",
    "I am bob",
    "it is sunny today",
    "I have a party today",
    "it is a dog and that is a cat",
    "there are dog and cat on the tree",
    "I study hard this morning",
    "today is a good day",
    "tomorrow will be a good day",
    "I like coffee, I like book and I like apple",
    "I do not like it",
    "I am kitty, I like bob",
    "I do not care who like bob, but I like kitty",
    "It is coffee time, bring your cup",
 ]

## sk-learn
vectorizer = TfidfVectorizer()
tf_idf = vectorizer.fit_transform(docs)

q = "I get a coffee cup"
qtf_idf = vectorizer.transform([q])
res = cosine_similarity(tf_idf, qtf_idf)
# [[0.        ]
#  [0.        ]
#  [0.        ]
#  [0.        ]
#  [0.        ]
#  [0.        ]
#  [0.        ]
#  [0.        ]
#  [0.        ]
#  [0.        ]
#  [0.21398863]
#  [0.        ]
#  [0.        ]
#  [0.        ]
#  [0.56058105]]
res = res.ravel().argsort()[-3:]    #元素从小到大排列,提取最后三个其对应的index(索引)
#[13 10 14]
print("top 3 docs for '{}':".format(q))  
for i in res:
    print(docs[i])

结果入下:

top 3 docs for ‘I get a coffee cup’:
I do not care who like bob, but I like kitty
I like coffee, I like book and I like apple
It is coffee time, bring your cup

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值