文本特征抽取
两组小说,一组是爱情的,另一组是科幻的。我们能否用支持向量机训练一个模型,用来识别小说类型呢?
这个并不容易。因为支持向量机这类机器学习算法只能接受数学里面的向量作为输入。如果用它来做文本分类,必须先把文本转化成向量才行。这就是涉及到一个很重要的话题,如何把文本转化成向量?
把文本转化成数学模型,是用数学方法处理文本的先决条件,这个过程称为文本特征抽取。向量作为一种基本的数学模型,是文本特征抽取的一种常见方法。
文本的向量空间模型(VSM)
向量空间模型中将文本表达为一个向量,看作向量空间中的一个点。
词权重
一个句子中的每个词在决定句子的含义时贡献度并不相同,也就是每个词的权重不同,例如下面的句子:
Most scientists think that butterflies use the position of the sun in the sky as a kind of compass
that allows them to determine which way is north.
- 重要的词:butterflies, monarchs, scientists, compass
- 不重要的词:most, think, kind, sky
词权重就是反映每个词的重要性的度量。如何计算权重?下面介绍注明的TF/IDF计算方法
词频(tf)
一个词在一个句子中出现的次数越多,那么这个词在描述这个句子的含义方面贡献度越大,可通过下面两个式子中的一个来计算每个词的词权重:
文档频率(df)
文档频数(Document Frequency, DF)是最为简单的一种特征选择算法,它指的是在整个数据集中有多少个文本包含这个单词。在训练文本集中对每个特征计一算它的文档频次,并且根据预先设定的阑值去除那些文档频次特别低和特别高的特征。文档频次通过在训练文档数量中计算线性近似复杂度来衡量巨大的文档集,计算复杂度较低,能够适用于任何语料,因此是特征降维的常用方法。
在训练文本集中对每个特征计算它的文档频数,若该项的DF 值小于某个阈值则将其删除,若其DF 值大于某个阈值也将其去掉。因为他们分别代表了“没有代表性”和“没有区分度”2 种极端的情况。DF 特征选取使稀有词要么不含有用信息,要么太少而不足以对分类产生影响,要么是噪音,所以可以删去。DF 的优点在于计算量很小,而在实际运用中却有很好的效果。缺点是稀有词可能在某一类文本中并不稀有,也可能包含着重要的判断信息,简单舍弃,可能影响分类器的精度。
文档频数最大的优势就是速度快,它的时间复杂度和文本数量成线性关系,所以非常适合于超大规模文本数据集的特征选择。不仅如此,文档频数还非常地高效,在有监督的特征选择应用中当删除90%单词的时候其性能与信息增益和x2 统计的性能还不相上下。DF 是最简单的特征项选取方法, 而且该方法的计算复杂度低, 能够胜任大规模的分类任务。
但如果某一稀有词条主要出现在某类训练集中,却能很好地反映类别的特征,而因低于某个设定的阈值而滤除掉,这样就会对分类精度有一定的影响。
逆文档频率(idf)
通常来说,如果一个词在越多的文档中出现过,那个这个词对某一个文档的贡献度应该就越小,也就是通过这个词来区分文档的区分度越小,可以用逆文档频率(idf)来度量这个概念。先定义另一个概念,文档频率df,表示包含某个词的文档的数目, N表示文档的总数量。逆文档频率计算公式如下:
TF/IDF
TF/IDF(term frequency/inverse document frequency) 的概念被公认为信息检索中最重要的发明。在搜索、文献分类和其他相关领域有广泛的应用。
假定一个文档就是信息源,该文档包含 T1,T2,...,Tn 共 n 个词汇,每个词汇出现了 N1,N2,...,Nn 次,词汇在文档集中出现的文档频率(词汇的发生概率)分别为 D1,D2,...,Dn ,那么传输一个这样的文档需要多少编码长度呢?
假设每个词汇的出现相互独立,并且不考虑出现的先后顺序(即把文档看作bag of words,信息检索模型中常见)。因此由这些词汇组成的文档的概率为:
任意随机事件的自信息量定义为该事件发生概率的对数的负值,设事件X的概率为P(X),那么其自信息定义为
也可以理解为某个概率的事件进行编码所需要的最小编码长度。
那么,对具有这种概率的事件进行编码,需要的编码长度为
即这篇文档理论上能够最大极限地被压缩到 −log(P(X)) 比特,并且数学上可以证明这样的压缩形式是极限压缩。
另外,也可以这样理解,对于关键词 Ti ,文档频率为 Di ,这个关键词的编码长度为 −log(Di) ,因此在文档中出现 Ni 次,所以,共需要编码长度为 −Nilog(Di) 。而整个文档的编码长度为
与上面的式子相同。
接下来,考察该文档中每个词的平均编码长度。与之对应的是熵的概念,因为在信息论中自信息量是一个随机变量,不能用来作为整个信源的信息测度,所以引入平均自信息量,即熵,定义为
即整个文档需要的编码长度除以总词数,即:
在这个平均编码长度中,每个关键词都做出了不同的贡献。我们将关键词在文档中的重要性量化为对平均编码长度的贡献上。不难得出如下结论:越是出现次数多(词频高)且罕见的词汇(文档频率低)的关键词对平均编码长度大小的贡献越大。
假设
对于关键词Ti而言,它对平均编码长度的贡献为:
其中Ni / K为在文档中关键词Ti的词频(TF,Term Frequency),log(1/Di)为文档中关键词Ti的文档频率倒数的对数式,称为逆文档频率(IDF,Inverse Document Frequency),这就是经典的TF*IDF。
这里把文档看作信息源,需要通过信道传输,而首要工作就是编码,文档的最小编码长度即为自信息量,平均编码长度为熵,而每个关键词对文档的编码都有不同的贡献,根据贡献的大小量化其重要性,即TF*IDF。
讲起 TF/IDF 的历史蛮有意思
IDF 的概念最早是剑桥大学的斯巴克-琼斯[注:她有两个姓] (Karen Sparck Jones)提出来的。斯巴克-琼斯 1972年在一篇题为关键词特殊性的统计解释和她在文献检索中的应用的论文中提出IDF。
遗憾的是,她既没有从理论上解释为什么权重 IDF 应该是对数函数log(D/Dw)(而不是其它的函数,比如平方根),也没有在这个题目上作进一步深入研究,以至于在以后的很多文献中人们提到 TF/IDF 时没有引用她的论文,绝大多数人甚至不知道斯巴克-琼斯的贡献。
同年罗宾逊写了个两页纸的解释,解释得很不好。倒是后来康乃尔大学的萨尔顿 (Salton)多次写文章、写书讨论 TF/IDF 在信息检索中的用途,加上萨尔顿本人的大名(信息检索的世界大奖就是以萨尔顿的名字命名的)。很多人都引用萨尔顿的书,甚至以为这个信息检索中最重要的概念是他提出的。
当然,世界并没有忘记斯巴克-琼斯的贡献,2004年,在纪念文献学学报创刊 60 周年之际,该学报重印了斯巴克-琼斯的大作。罗宾逊在同期期刊上写了篇文章,用香农的信息论解释 IDF,这回的解释是对的,但文章写的并不好、非常冗长(足足十八页),把一个简单问题搞复杂了。
其实,信息论的学者们已经发现并指出, IDF 的概念就是一个特定条件下、关键词的概率分布的交叉熵(Kullback-Leibler Divergence)。这样,信息检索相关性的度量,又回到了信息论。
回到开头的问题
既然可以借助 TF/IDF 方法计算每个关键词的权重,那么给定两组小说,我们可以设定一个阈值,根据每个词在这些文档中的权重(信息量),选择出有价值的关键词,建立文档的向量特征模型,每一篇文档都可以转化为特征向量。于是可以借助传统的机器学习方法对其进行训练学习和数据预测了。
TF/IDF只是文本特征抽取的方法之一,为了不同的目的,还有其它方法,回头再慢慢讨论。