举个例子,假设说把我正在写的“文本分类入门”系列文章的第二篇抽出来当作一个需要分类的文本,则可以用如下的向量来表示这个文本,以便于计算机理解和处理。
w2=(文本,5,统计学习,4,模型,0,……)
这个向量表示在w2所代表的文本中,“文本”这个词出现了5次(这个信息就叫做词频),“统计学习”这个词出现了4次,而“模型”这个词出现了0次,依此类推,后面的词没有列出。
而系列的第三篇文章可以表示为
w3=(文本,9,统计学习,4,模型,10,……)
其含义同上。如果还有更多的文档需要表示,我们都可以使用这种方式。
只通过观察w2和w3我们就可以看出实际上有更方便的表示文本向量的方法,那就是把所有文档都要用到的词从向量中抽离出来,形成共用的数据结构(也可以仍是向量的形式),这个数据结构就叫做词典,或者特征项集合。
例如我们的问题就可以抽离出一个词典向量
D=(文本,统计学习,模型,……)
所有的文档向量均可在参考这个词典向量的基础上简化成诸如
w2=(5,4,0,……)
w3=(9,4,10,……)
的形式,其含义没有改变。
5,4,10这些数字分别叫做各个词在某个文档中的权重,实际上单单使用词频作为权重并不多见,也不十分有用,更常见的做法是使用地球人都知道的TF/IDF值作为权重。(关于TF/IDF的详细解释,Google的吴军研究员写了非常通俗易懂的文章,发布于Google黑板报,链接地址是,有兴趣不妨一读)TF/IDF作为一个词对所属文档主题的贡献程度来说,是非常重要的度量标准,也是将文档转化为向量表示过程中的重要一环。
在这个转化过程中隐含了一个很严重的问题。注意看看词典向量D,你觉得它会有多大?或者说,你觉得它会包含多少个词?
假设我们的系统仅仅处理汉语文本,如果不做任何处理,这个词典向量会包含汉语中所有的词汇,我手头有一本商务印书馆出版的《现代汉语词典》第5版(2005年5月出版),其中收录了65,000个词,D大致也应该有这么大,也就是说,D是一个65,000维的向量,而所有的文本向量w2,w3,wn也全都是65,000维的!(这是文本分类这一问题本身的一个特性,称为“高维性”)想一想,大部分文章仅仅千余字,包含的词至多几百,为了表示这样一个文本,却要使用65,000维的向量,这是对存储资源和计算能力多大的浪费呀!(这又是文本分类问题的另一个特性,称为“向量稀疏性”,后面会专门有一章讨论这些特性,并指出解决的方法,至少是努力的方向)
这么多的词汇当中,诸如“体育”,“经济”,“金融”,“处理器”等等,都是极其能够代表文章主题的,但另外很多词,像“我们”,“在”,“事情”,“里面”等等,在任何主题的文章中都很常见,根本无法指望通过这些词来对文本类别的归属作个判断。这一事实首先引发了对文本进行被称为“去停止词”的预处理步骤(对英文来说还有词根还原,但这些与训练阶段无关,不赘述,会在以后讲述中英文文本分类方法区别的章节中讨论),与此同时,我们也从词典向量D中把这些词去掉。
但经过停止词处理后剩下的词汇仍然太多,使用了太多的特征来表示文本,就是常说的特征集过大,不仅耗费计算资源,也因为会引起“过拟合问题”而影响分类效果[22]。
这个问题是训练阶段要解决的第一个问题,即如何选取那些最具代表性的词汇(更严格的说法应该是,那些最具代表性的特征,为了便于理解,可以把特征暂时当成词汇来想象)。对这个问题的解决,有人叫它特征提取,也有人叫它降维。
特征提取实际上有两大类方法。一类称为特征选择(Term Selection),指的是从原有的特征(那许多有用无用混在一起的词汇)中提取出少量的,具有代表性的特征,但特征的类型没有变化(原来是一堆词,特征提取后仍是一堆词,数量大大减少了而已)。另一类称为特征抽取(Term Extraction)的方法则有所不同,它从原有的特征中重构出新的特征(原来是一堆词,重构后变成了别的,例如LSI将其转为矩阵,文档生成模型将其转化为某个概率分布的一些参数),新的特征具有更强的代表性,并耗费更少的计算资源。(特征提取的各种算法会有专门章节讨论)