0/参考网址:
www.cnblogs.com/en-heng/p/5…

1/总结
tf: term frequency,词频,表示一个词word在一篇文档中出现的频率。
公式为: tf = count(word) / |D|
其中,count(word)是word在Document文档中出现的次数。
|D|是文档document中所有词的数量。
idf: 逆文档频率,反应word的普通程度。当一个word越普遍,其idf值越小,反之,其idf值越大。
公式为 idf = log分子/分母
分子是资料库中收录的所有的文档数,比如有100万篇收录的文档。
分母是在这100万篇文档中出现过word这个词的文档总数。
所以就很好理解了,如果在这100万篇文档中,越多的文档中有word这个词,说明这个词越普遍,则idf的值就越小。
tf-idf值:就是tf*idf,2个值相乘。词频*拟文档频率。
所以,当一个词word在文档中频率越高切普遍度低,其tf-idf值越高。
tf-idf这个指标,兼顾词频和普遍度
2/什么是TF-IDF技术
TF-IDF主要用来评估某个字或者用某个词对一个文档的重要程度,因此可以用该技术提取文档的关键词。
该技术可以从2个层面来讲,一个是TF,一个是IDF
TF:term frequency,词频,即某个词在文章中出现的频率(在这里要去掉停用词),
公式为count(word)/D
IDF: 逆文档频率,反映的是某个词出现在所有文档中的普遍程度,
当一个词越普遍(即有大量的文档中都包含这个词),则IDF越小,否则越大。
TF-IDF:TF * IDF,该值越大,说明这个词作为关键词的可能性越大。
TF-IDF(Term Frequency/Inverse Document Frequency)是信息检索领域中搜索词重要性度量技术
用以衡量一个关键词𝑤对于查询(Query,可看作文档)所能提供的信息。
词频(Term Frequency,TF)表示关键词𝑤在文档𝐷𝑖中出现的频率,
其中,𝑐𝑜𝑢𝑛𝑡(𝑤)为关键词𝑤的出现次数,|𝐷𝑖|为文档𝐷𝑖中所有词的数量。
𝑇𝐹𝑤,𝐷𝑖=𝑐𝑜𝑢𝑛𝑡(𝑤)/|𝐷𝑖|
逆文档频率(Inverse Document Frequency, IDF)反映关键词的普遍程度
当一个词越普遍,(即有大量文档包含这个词)时,其IDF值越低;反之,则IDF值越高。
IDF定义如下:
𝐼𝐷𝐹𝑤=log𝑁/( ∑𝑁𝑖=1𝐼(𝑤,𝐷𝑖) )
其中,𝑁为语料库中的文档总数,𝐼(𝑤,𝐷𝑖)表示文档𝐷𝑖是否包含关键词,若包含则为1,若不包含则为0。
若词𝑤在所有文档中均未出现,则IDF公式中的分母为0;因此需要对IDF做平滑(smooth)处理:
𝐼𝐷𝐹𝑤=log𝑁/( 1+∑𝑁𝑖=1𝐼(𝑤,𝐷𝑖) )
关键词𝑤在文档𝐷𝑖的TF-IDF值:
𝑇𝐹−𝐼𝐷𝐹𝑤,𝐷𝑖 = 𝑇𝐹𝑤,𝐷𝑖 ∗ 𝐼𝐷𝐹𝑤
从上述定义可以看出:
当一个词在文档频率越高并且新鲜度高(即普遍度低),其TF-IDF值越高。
TF-IDF兼顾词频与新鲜度,过滤一些常见词,保留能提供更多信息的重要词。
举个例子:
比如某个语料库中有5万篇文档,含有“健康”这个词文档有2万篇。
现有一篇文章,共1000个词,‘健康’这个词一共在其中出现了30次,
则TF-IDF = 30/1000 * log(50000/(20000+1)) = 0.012。
及'健康'对于这篇文章的重要性是0.012,及重要程度是0.012。
根据重要程度,可以决定该次是否可以作为关键词。
2/关键词提取
最近碰到一个需求,挖掘行业关键词
比如,IT行业的关键词有:Java、Python、机器学习等。
TF-IDF正好可用来做关键词的抽取,词TF-IDF值越大,则说明该词为关键词。
那么,问题来了:如何套用TF-IDF模型呢?
3/模型套用
为了做关键词挖掘,首先得有数据;我们从某招聘网站爬取了20个行业招聘信息数据。
然后,对数据进行分词。
我们发现,行业关键词具有领域特定性,即一个行业的关键词一般不会同属于另外几个行业。
因此,我们每一个行业的所有招聘信息进行分词,分词结果作为一个大doc,则doc的总数量为20。
最后用sklearn库的TF-IDF矩技术,取每个行业top词。
在上述模型套用中,因为doc总数少,发现top词中会有一些常见词,诸如“认真负责”、“岗位”之类。为了过滤常见词,采取两个办法:
用jieba分词对每一条招聘信息做关键词抽取(也是基于TF-IDF),如此能在生成大doc时剔除掉部分常见词。
引入max_df,如果词的df超过某一阈值则被词表过滤。