TF-IDF: 文本的一种向量表示

TF-IDF是Term Frequency-Inverse Document Frequency的简称。她是一种非常常见的用于将文本转化为有意义的数字表示的算法。这个技术被广泛的应用与NLP的各个方面。本文将会介绍怎样计算和应用TF-IDF。

文本的向量表示

为了将机器学习算法或统计技术应用到任何形式的文本上,应当将文本转化为数字或向量形式。这种数字表示应当能够描绘出本文的显著特征。有很多技术都可以做到这一点,比如,出现次数(occurrence),词频(term-frequency),TF-IDF,词共现矩阵(word co-occurrence matrix),word2vec和Glove。

基于出现次数的向量表达

由于TF-IDF是一个基于occurence的文本数字化表达,让我们先来看看之前的基于occurence的方法以及TF-IDF怎样优于他们。一种最简单的方法就是用一个词在整个语料中出现的次数来表达它。

词频

我们假设,一个词的值更高意味着这个词在给定文本中的重要性越高。这是很正确的想法,但是如果语料中的文本有不同的大小呢?这样一来,大文本中的词自然会比小文本中的词出现次数更多。因此,一个更好的表示就是基于文本的大小对词的出现次数进行标准化,这个表示被称作词频(term-frequency)。
数学上,一个词的词频的定义如下:
t f ( w ) = d o c . c o u n t ( w ) / t o t a l   w o r d s   i n   d o c tf(w) = doc.count(w)/total\,words\,in\,doc tf(w)=doc.count(w)/totalwordsindoc

Inverse Document Frequency

当计算词频时,每个词都是同样重要的,并且有机会获得它的向量表示。但是,一些词在所有的文本都很常见,以至于这些词对确定文本的意义没有什么什么作用。比如“the”,“a”,“in”,“of”等等,这些词会抑制更有意义的词的权重。因此,为了减轻这个影响,词频被一个称为逆文本频率的因子所(inverse document frequency)折减。
i d f ( w ) = l o g ( t o t a l   n u m b e r   o f   d o c u m e n t s n u m b e r   o f   d o c u m e n t s   c o n t a i n i n g   w o r d   w ) idf(w) = log(\frac{total\, number\,of\,documents}{number\,of\,documents\,containing\,word\,w}) idf(w)=log(numberofdocumentscontainingwordwtotalnumberofdocuments)

Term Frequency-Inverse Document Frequency

因此,我们得到一个新的词向量表示。如果一个词在特定的文本中经常出现,但是在其他的文本中出现次数很少,这个词会有一个很大的向量表示值。如果一个词在几乎所有的文本都有出现,那这个词的idf将会趋近于0。TF-IDF是词频和逆文本词频的乘积。
T F - I D F ( w ) = t f ( w ) ∗ i d f ( w ) TF \text- IDF(w) = tf(w)*idf(w) TF-IDF(w)=tf(w)idf(w)

文本中越重要的词的TF-IDF词越高,反之亦然。

示例

让我们看一个包含5个语料的句子

This car got the excellence award
Good car gives good mileage
This car is very expensive
This company is financially good
The company is growing with very high production

t f ( ′ c a r ′ , d 1 ) = 1 6 , tf('car',d_1)=\frac{1}{6}, tf(car,d1)=61, t f ( ′ c a r ′ , d 2 ) = 1 5 , tf('car',d_2)=\frac{1}{5}, tf(car,d2)=51, t f ( ′ c a r ′ , d 3 ) = 1 5 , tf('car',d_3)=\frac{1}{5}, tf(car,d3)=51, t f ( ′ c a r ′ , d 4 ) = 0 , tf('car',d_4)=0, tf(car,d4)=0, t f ( ′ c a r ′ , d 5 ) = 0. tf('car',d_5)=0. tf(car,d5)=0. i d f ( ′ c a r ′ ) = l o g ( 5 3 ) . idf('car')=log(\frac{5}{3}). idf(car)=log(35).
前三个句子讨论的是车,后两个句子讨论的是公司。第一类句子中,更有意义的是车的属性。同样地,第二类句子中,公司的金融和产品属性是更有用的特征。其它的字将会有更低的分数。

应用

  1. 文本分类:TF-IDF是一种基础的特征向量用来训练各种不同的分类器。
  2. 主题模型:对于自动给文本打标签来说,一种方式就是我们训练一个模型通过TF-IDF来计算每个文本的向量,并且设置一个阈值,分数高于阈值的词可以用来预测新的文本的主题。相应地,TF-IDF特征可以作为LDA,LLDA等模型的输入,来帮助获得更好的性能和准确度。
  3. 信息抽取: 通过TF-IDF可以得到某个词在文本中的重要性来补充文本挖掘和搜索算法。这些重要的词和索引越接近说明搜索的结果越好
  4. 过滤停用词

你可能感兴趣的:(算法,自然语言处理)