TF-IDF
- 信息检索中最常用的一种文本关键信息表示法
- 基本思想:若在一个文档中出现的频率高,且在语料库中其它文本中很少出现,则人文这个词库有很好的区分能力。
- 词频TF:Term Frequency,衡量一个term在文档中出现的有多频繁,越频繁,其重要性可能越高。
- 考虑到文章长度差异,需要对词频做标准化:
- TF(t)=(t出现在文档中的次数)/(文档中term总数)
- TF(t)=(t出现在文档中的次数)/(文档中出现最多的term的次数)
逆文档频率IDF:Inverse Document Frequency,用于模拟在该语料库的实际使用环境中,某一个term有多重要
-
有些词到处出现,但是明显没什么用。比如各种停用词,过渡句用词之类的。
-
因此把罕见的词的重要性(weight)调高,把常见词的重要性调低。
-
IDF具体算法:
- IDF(t) = log(语料库中的文档总数/(含有该term的文档总数+1))
-
TF-IDF=TF*IDF
- TF-IDF与一个词在文档中的出现次数成正比。
- 与该词在整个语料中的出现次数成反比。
TF-IDF
- 优点
- 简单快速
- 结果也比较符合实际情况
- 缺点
- 单纯以“词频”衡量一个词的重要性,不够全面,有时重要的词可能出现次数并不多
- 无法考虑词与词之间的相互关系
- 这种算法无法体现词的位置信息,出现位置靠前的词与出现位置靠后的词都被视为重要性相同,这是不正确的。
- 一种解决方法是,对全文的第一段和每一段的第一句话,给予较大的权重。
TF-IDF的具体实现
jieba、NLTK、sklearn、gensim等程序都可以实现TF-IDF的计算。除算法细节上会有差异外,更多的是数据输入/输出格式上的不同。
TD-IDF的jieba实现
输出结果会自动按照TF-IDF值降序排列,并且直接给出的是字条而不是字典ID,便于阅读使用。可在计算TF-IDF时直接完成分词,并使用停用词表和自定义词库,非常放便。有默认的IDF语料库,可以不训练模型,直接进行计算。以单个文本为单位进行分析。
jieba.analyse.extract_tags(
sentence : 为待提取的文本
topK = 20 :返回几个 TF/IDF 权重最大的关键词
withWeight = False : 是否一并返回关键词权重值
allowPOS = () : 仅包括指定词性的词,默认值为空,既不筛选
)
import jieba
import jieba.analyse
jieba.analyse.extract_tags("&#