我们在进行文本分类时,用卡方检验或者信息增益的方法得到精简过的特征向量以后,下一步要做的就是确定这些特征的权重,以便于将每一篇文档表示成的向量的形式,好让计算机能够看懂。

什么是特征权重

“权重”其实和我们常说的“权”是两码事。权力高于你尽全力的权利,“权”往往象征着不平等,更多的是强权 power 的意思。而“权重”更多代表了一种平等。比如张三的博客 PR(Page Rank)值是2,李四的博客 PR 值是 5,这表明李四的博客在 google 上排名更靠前。看上去好像不公平,但仔细想想,搜索引擎的意义不正是帮助大家找出那些有价值的东西吗?一样东西受关注的程度应该和它本身的价值成正比,这才是一个正常的社会,而一个好的搜索引擎应该维护这种平衡(而不是用一些诸如竞价排名的机制来打破这种平衡)。因此从社会学的角度看,Page Rank 是极其公平的。权重,权重,其实是权其轻重的意思,英语是 weighting,表示一种衡量的方法。

特征权重就用来衡量某个特征项在一篇文章中的区分能力。布尔权重(Boolean weighting)是一种最简单的模型,即文本中只要出现过这个词,权重就等于 1, 如果没出现过权重为 0。布尔权重只能反映一些词是否在文本出现过,而不能区分这些词在文本中的“表现能力”。

打个比方,如果用布尔权重来表示一则“中国足球”的报道时,其结果可能是:(获胜1,冠军0,进球1,输球1)。

“输球”的权重是 1 不难理解,“获胜”和“进球”的权重也是 1 就奇怪了。其实也不奇怪,因为“进球”可能是“对手进球”,“获胜”也可能是“对手获胜”。

但是如果我问哪个特征最能代表“中国足球”?大家会毫不犹豫的选择“输球”,反映在报道中可能是“输球”这个词出现的频率特别高,往往一说到“中国队”下面一句话八成就是“又输球了”。为了不能让“获胜”这类词也浑水摸鱼,于是人们很容易想到了用关键词出现的次数来作为一篇文章特征向量的权重。

TF

TF(Term Frequency)即词频的意思。它衡量的是一个词的“热度”,TF 表示的是一个频率。比如一篇“英语培训”的文档,“新东方”出现了 80 次(八成是一篇软文),“听力”出现了 20 次,“口语”出现了 10 次,“高分”出现了 50 次,“英语”出现了 35 次,表示成向量的形式就是:(新东方/80, 听力/20, 口语/10, 高分/50, 英语/35)。

如果这个时候有一篇文章特征向量是这样,如果我们的计算机够智能,就应该发现这也是一篇同样类型的软文:(新东方/53, 听力/15, 口语/12, 高分/33, 英语/30)。 而如果另外有一篇文档的特征向量是这样,那就和“新东方”八竿子也打不着了:(新东方/0, 听力/0, 口语/0, 高分/1, 英语/2)

可能你已经发现了,光看次数的话会有一个缺陷,同样类型的文档,因为篇幅有长短,因此要对特征值做归一化处理(即用次数除以文章的总词数)。假设第一篇文本有 1000 个字,正确的TF形式应该表示为:(新东方/0.08, 听力/0.02, 口语/0.01, 高分/0.05, 英语/0.035)。

IDF

光考虑词频也还是不够,还需要考虑这个词是否在其它类中也一样很 hot,一些常用字会在各种类别中都频繁出现。“新东方”会在一篇英语培训的软文中经常出现,但是别忘了厨师培训领域也有一个“新东方”,而且无数 XX 领域的培训机构都会自称自己是这个领域的“新东方”,因此“新东方”这个词在代表这篇文章时的作用就要大大减低。因此有人想到了逆向文本频数(Inverse Document Frequency)的概念。

IDF = log(D/Dw)

其中 D 表示文档总数,Dw 表示出现关键字 w 的文档数。从公式中可以看出,出现关键字 w 的文档数量越少,IDF 越大;如果每篇文章都出现了 w(Dw = D),IDF 就等于 0。直观地想想也是如此,如果一个词在每个类中都出现,那么这个词也就不稀奇了。

把两者结合起来就是鼎鼎大名的 TF-IDF(关于 TF-IDF 很多人认为是 Salton 发明的,但其实并不是,吴军的《数学之美》提到了了这段历史)。文本分类时常用 TF 和 IDF 的乘积来表示特征向量的权重,即不仅要考虑一个词在一篇文章中出现的频率还要考虑它在所有文本中出现的频率,权重应与前者成正比、与后者成反比。

TF-IDF 后来还有很多种改进形式,但是因为权重计算本身就缺少理论上的证明,因此很难说哪种方法是绝对正确的。但是经验告诉我们高深东西的不一定好,简单的东西也不一定就很差,比如朴素而又万能的贝叶斯公式。如果我们自己要写一个文本分类的程序的话,TF-IDF 就足够好哩!

与特征选择之间的区别

特征向量的选择与特征权重的计算在文本分类中是两个完全不同的概念。TF-IDF 仅仅对那些不太具有代表性的关键词的权重进行了一些修正,X2 统计量也好,信息增益法也罢,它们的目标是把原本上万维的词典进行简化,所以特征选择时要抛弃那些代表性比较差的特征。但是有些人会混淆这两者的区别,然后用TF-IDF去做特征选择,结果可能还是可以分类(也有用 DF 来做特征选择的),因为特征选择只是简化字典的过程,大不了你采用随机化算法,一样也是简化,只不过我那本经过 X2 统计量或者 IG 合理筛选的“简明版”字典更好罢了。