关键字提取算法TF-IDF
在文本分类的学习过程中,在“如何衡量一个关键字在文章中的重要性”的问题上,遇到了困难。在网上找了很多资料,大多数都提到了这个算法,就是今天要讲的TF-IDF。
总起
TF-IDF,理解起来相当简单,他实际上就是TF*IDF,两个计算值的乘积,用来衡量一个词库中的词对每一篇文档的重要程度。下面我们分开来讲这两个值,TF和IDF。
TF
TF,是Term Frequency的缩写,就是某个关键字出现的频率,具体来讲,就是词库中的某个词在当前文章中出现的频率。那么我们可以写出它的计算公式:
其中:
TF(i,j):关键词j在文档i中的出现频率。
n(i,j):关键词j在文档i中出现的次数。
比如,一篇文章一共100个词汇,其中“机器学习”一共出现10次,那么他的TF就是10/100=0.1。
这么看来好像仅仅是一个TF就能用来评估一个关键词的重要性(出现频率越高就越重要),其实不然,单纯使用TF来评估关键词的重要性忽略了常用词的干扰。常用词就是指那些文章中大量用到的,但是不能反映文章性质的那种词,比如:因为、所以、因此等等的连词,在英文文章里就体现为and、the、of等等的词。这些词往往拥有较高的TF,所以仅仅使用TF来考察一个词的关键性,是不够的。这里我们要引出IDF,来帮助我们解决这个问题。
IDF
IDF,英文全称:Inverse Document Frequency,即“反文档频率”。先看什么是文档频率,文档频率DF就是一个词在整个文库词典中出现的频率,就拿上一个例子来讲:一个文件集中有100篇文章,共有10篇文章包含“机器学习”这个词,那么它的文档频率就是10/100=0.1,反文档频率IDF就是这个值的倒数,即10。因此得出它的计算公式:
其中:
IDF(i):词语i的反文档频率
|D|:语料库中的文件总数
|j:t(i)属于d(j)|出现词语i的文档总数
+1是为了防止分母变0。
于是这个TF*IDF就能用来评估一个词语的重要性。
还是用上面这个例子,我们来看看IDF是怎么消去常用词的干扰的。假设100篇文档有10000个词,研究某篇500词文章,“机器学习”出现了20次,“而且”出现了20次,那么他们的TF都是20/500=0.04。再来看IDF,对于语料库的100篇文章,每篇都出现了“而且”,因此它的IDF就是log1=0,他的TF*IDF=0。而“机器学习”出现了10篇,那么它的IDF就是log10=1,他的TF*IDF=0.04>0,显然“机器学习”比“而且”更加重要。
总结
这算法看似简单,实际上在SEO搜索引擎优化啊,文本分类方面用的挺多的,面试时也常常作为信息论知识储备来出题。
- 【转】关键字提取算法之TF-IDF扫盲
- TF-IDF算法自动提取关键词
- tf-idf关键词提取算法
- tf-idf算法,实现文章关键字抽取
- TF-IDF提取文章关键词算法
- 关键字提取算法之TF-IDF扫盲
- 自然语言处理——TF-IDF算法提取关键词
- TF-IDF提取关键词并用余弦算法计算相似度
- 针对新闻标签提取的tf-idf优化算法1.0版本——基于jieba分词实现
- 文本特征值提取,采用结巴将文本分词,tf-idf算法得到特征值,以及给出了idf词频文件的训练方法
- Python TF-IDF 算法 提取文本关键词
- TF-IDF与余弦相似性的应用(一):自动提取关键词 - 阮一峰的网络日志
- TF-IDF与余弦相似性的应用(一):自动提取关键词
- TF-IDF及其算法
- TF-IDF及其算法
- Solr相似度算法一:Lucene TF-IDF 相关性算分公式
- TF-IDF特征提取 用sklearn提取tfidf特征
- TF-IDF算法及其编程实现
- TF-IDF与余弦相似性的应用(一):自动提取关键词
- Spark ML Lib中的Tf-Idf生成的向量不能直接用于其他算法的问题