NLP_getStudted - yunfanfan/Notes GitHub Wiki

以下内容全部来自文本分类入门这个博客,博主已经十年没有更新了,但是当年写的这些东西是真的很通俗易懂,适合我这样的傻子阅读。

统计学习方法

  1. 我们所说的“理解”往往指的是文章的语义甚至是语用信息,这一类信息极其复杂,抽象,而且存在上下文相关性,对这类信息如何在计算机中表示都是尚未解决的问题
  2. 人们开始用文章中所包含的较低级别的词汇信息来表示文档,一试之下,效果居然还不错。
  3. 前提:文档的内容与其中所包含的词有着必然的联系,同一类文档之间总存在多个共同的词,而不同类的文档所包含的词之间差异很大。
  4. 不光是包含哪些词很重要,这些词出现的次数对分类也很重要。
  5. 这一前提使得向量模型(俗称的VSM,向量空间模型)成了适合文本分类问题的文档表示模型。在这种模型中,一篇文章被看作特征项集合来看,利用加权特征项构成向量进行文本表示,利用词频信息对文本特征进行加权。它实现起来比较简单,并且分类准确度也高,能够满足一般应用的要求。
  6. VSM基本上完全忽略了除词的信息以外所有的部分,这使得它能表达的信息量存在上限,也直接导致了基于这种模型构建的文本分类系统(虽然这是目前绝对主流的做法),几乎永远也不可能达到人类的分类能力。
  7. 对于扩充文档表示模型所包含的信息量,人们也做过有益的尝试,例如被称为LSI(Latent Semantic Index潜在语义索引)的方法,就被实验证明保留了一定的语义信息(之所以说被实验证明了,是因为人们还无法在形式上严格地证明它确实保留了语义信息,而且这种语义信息并非以人可以理解的方式被保留下来)

训练Part 1

  1. 所有文档都要用到的词从向量中抽离出来,形成共用的数据结构(也可以仍是向量的形式),这个数据结构就叫做词典,或者特征项集合
  2. 实际上单单使用词频作为权重并不多见,也不十分有用,更常见的做法是使用地球人都知道的TF/IDF值作为权重。(关于TF/IDF的详细解释,[Google的吴军研究员写了非常通俗易懂的文章](TF-IDF讲义 来自GOOGLE黑板报),有兴趣不妨一读)TF/IDF作为一个词对所属文档主题的贡献程度来说,是非常重要的度量标准,也是将文档转化为向量表示过程中的重要一环。

TF-IDF(term frequency–inverse document frequency)是一种用于信息检索与数据挖掘的常用加权技术。TF意思是词频(Term Frequency),IDF意思是逆文本频率指数(Inverse Document Frequency)

  1. 在这个转化过程中隐含了一个很严重的问题。注意看看词典向量D,你觉得它会有多大?一本商务印书馆出版的《现代汉语词典》第5版(2005年5月出版),其中收录了65,000个词,D大致也应该有这么大,也就是说,D是一个65,000维的向量,而所有的文本向量w2,w3,wn也全都是65,000维的!大部分文章仅仅千余字,包含的词至多几百,为了表示这样一个文本,却要使用65,000维的向量,这是对存储资源和计算能力多大的浪费呀!(这又是文本分类问题的另一个特性,称为“向量稀疏性”)
  2. 另外很多词,像“我们”,“在”,“事情”,“里面”等等,在任何主题的文章中都很常见,根本无法指望通过这些词来对文本类别的归属作个判断。这一事实首先引发了对文本进行被称为“去停止词”预处理步骤.
  3. 但经过停止词处理后剩下的词汇仍然太多,使用了太多的特征来表示文本,就是常说的特征集过大,不仅耗费计算资源,也因为会引起“过拟合问题”而影响分类效果.
  4. 如何选取那些最具代表性的词汇(更严格的说法应该是,那些最具代表性的特征,为了便于理解,可以把特征暂时当成词汇来想象)。对这个问题的解决,有人叫它特征提取,也有人叫它降维
  5. 特征提取实际上有两大类方法。
    1. 一类称为特征选择(Term Selection),指的是从原有的特征(那许多有用无用混在一起的词汇)中提取出少量的,具有代表性的特征,但特征的类型没有变化(原来是一堆词,特征提取后仍是一堆词,数量大大减少了而已)。
    2. 另一类称为特征抽取(Term Extraction)的方法则有所不同,它从原有的特征中重构出新的特征(原来是一堆词,重构后变成了别的,例如LSI将其转为矩阵,文档生成模型将其转化为某个概率分布的一些参数),新的特征具有更强的代表性,并耗费更少的计算资源。

训练Part 2

对同一个分类问题,用同样的表示形式(同样的文档模型),但因为关注数据不同方面的特性而可能得到不同的结论。这种对文档数据不同方面侧重的不同导致了原理和实现方式都不尽相同的多种方法

Rocchio算法

应该算是人们思考文本分类问题时最先能想到,也最符合直觉的解决方法。

  1. 基本的思路: 是把一个类别里的样本文档各项取个平均值(例如把所有“体育”类文档中词汇“篮球”出现的次数取个平均值,再把“裁判”取个平均值,依次做下去),可以得到一个新的向量,形象的称之为“质心”,质心就成了这个类别最具代表性的向量表示。
  2. 再有新文档需要判断的时候,比较新文档和质心有多么相像(判断他们之间的距离)就可以确定新文档属不属于这个类。稍微改进一点的Rocchio算法不仅考虑属于这个类别的文档(称为正样本),也考虑不属于这个类别的文档数据(称为负样本),计算出来的质心尽量靠近正样本同时尽量远离负样本。
  3. 两个致命的假设:
    1. 它认为一个类别的文档仅仅聚集在一个质心的周围,实际情况往往不是如此(这样的数据称为线性不可分的);
    2. 它假设训练数据是绝对正确的,因为它没有任何定量衡量样本是否含有噪声的机制,因而也就对错误数据毫无抵抗力。

朴素贝叶斯算法(Naive Bayes)

  1. 贝叶斯算法关注的是文档属于某类别概率。文档属于某个类别的概率等于文档中每个词属于该类别的概率的综合表达式。而每个词属于该类别的概率又在一定程度上可以用这个词在该类别训练文档中出现的次数(词频信息)来粗略估计,因而使得整个计算过程成为可行的。使用朴素贝叶斯算法时,在训练阶段的主要任务就是估计这些值。

  2. 公式:

    1. 其中P(d| Ci)=P(w1|Ci) P(w2|Ci) …P(wi|Ci) P(w1|Ci) …P(wm|Ci)
    2. P(wi|Ci)就代表词汇wi属于类别Ci的概率。这其中就蕴含着朴素贝叶斯算法最大的两个缺陷。
      1. 首先,P(d| Ci)之所以能展开成(式1)的连乘积形式,就是假设一篇文章中的各个词之间是彼此独立的,其中一个词的出现丝毫不受另一个词的影响(回忆一下概率论中变量彼此独立的概念就可以知道),但这显然不对,即使不是语言学专家的我们也知道,词语之间有明显的所谓“共现”关系,在不同主题的文章中,可能共现的次数或频率有变化,但彼此间绝对谈不上独立。
      2. 其二,使用某个词在某个类别训练文档中出现的次数来估计P(wi|Ci)时,只在训练样本数量非常多的情况下才比较准确(考虑扔硬币的问题,得通过大量观察才能基本得出正反面出现的概率都是二分之一的结论,观察次数太少时很可能得到错误的答案),而需要大量样本的要求不仅给前期人工分类的工作带来更高要求(从而成本上升),在后期由计算机处理的时候也对存储和计算资源提出了更高的要求。

kNN算法

  1. 训练样本就代表了类别的准确信息(因此此算法产生的分类器也叫做“基于实例”的分类器),而不管样本是使用什么特征表示的。
  2. 基本思想: 给定新文档后,计算新文档特征向量和训练文档中各个文档的向量的相似度,得到K篇与该新文档距离最近最相似的文档,根据这K篇文档所属的类别判定新文档所属的类别(注意这也意味着kNN算法根本没有真正意义上的“训练”阶段)。这种判断方法很好的克服了Rocchio算法中无法处理线性不可分问题的缺陷,也很适用于分类标准随时会产生变化的需求(只要删除旧训练文档,添加新训练文档,就改变了分类的准则)。
  3. kNN唯一且致命的缺点就是判断一篇新文档的类别时,需要把它与现存的所有训练文档全都比较一遍,这个计算代价并不是每个系统都能够承受的(比如我将要构建的一个文本分类系统,上万个类,每个类即便只有20个训练样本,为了判断一个新文档的类别,也要做20万次的向量比较!)。一些基于kNN的改良方法比如Generalized Instance Set就在试图解决这个问题。

SVM算法

  1. 支持向量机(Support Vector Machine)是Cortes和Vapnik于1995年首先提出的,它在解决小样本、非线性及高维模式识别中表现出许多特有的优势,并能够推广应用到函数拟合等其他机器学习问题中。
  2. 支持向量机方法是建立在统计学习理论的VC维理论和结构风险最小原理基础上的,根据有限的样本信息在模型的复杂性(即对特定训练样本的学习精度,Accuracy)和学习能力(即无错误地识别任意样本的能力)之间寻求最佳折衷,以期获得最好的泛化能力
  3. SVM 方法有很坚实的理论基础,SVM 训练的本质是解决一个二次规划问题(Quadruple Programming,指目标函数为二次函数,约束条件为线性约束的最优化问题),得到的是全局最优解,这使它有着其他统计学习技术难以比拟的优越性。SVM 分类器的文本分类效果很好,是最好的分类器之一。同时使用核函数将原始的样本空间向高维空间进行变换,能够解决原始样本线性不可分的问题。
  4. 缺点: 核函数的选择缺乏指导,难以针对具体问题选择最佳的核函数;另外SVM 训练速度极大地受到训练集规模的影响,计算开销比较大,针对SVM 的训练速度问题,研究者提出了很多改进方法,包括Chunking 方法、Osuna 算法、SMO 算法和交互SVM 等等。
  5. 优点: 通用性较好,且分类精度高、分类速度快、分类速度与训练样本个数无关,在查准和查全率方面都优于kNN及朴素贝叶斯方法。

算法性能对比

在中文语料上的试验,文献使用了复旦大学自然语言处理实验室提供的基准语料对当前的基于词向量空间文本模型的几种分类算法进行了测试,这一基准语料分为20个类别,共有9804篇训练文档,以及9833篇测试文档。在经过统一的分词处理、噪声词消除等预处理之后,各个分类方法的性能指标如下。 img 其中F1测度是一种综合了查准率与召回率的指标,只有当两个值均比较大的时候,对应的F1测度才比较大,因此是比单一的查准或召回率更加具有代表性的指标。

由比较结果不难看出,SVM和kNN明显优于朴素贝叶斯方法(但他们也都优于Rocchio方法,这种方法已经很少再参加评测了)。在英文语料上,路透社的Reuters-21578 “ModApt´e”是比较常用的测试集,在这个测试集上的测试由很多人做过,Sebastiani在文献中做了总结,相关算法的结果摘录如下:    

分类算法 在Reuters-21578 “ModApt´e”上的F1测度
Rocchio 0.776
朴素贝叶斯 0.795
kNN 0.823
SVM 0.864

仅以F1测度来看,kNN是相当接近SVM算法的,但F1只反映了分类效果(即分类分得准不准),而没有考虑性能(即分类分得快不快)。综合而论,SVM是效果和性能均不错的算法。

相关概念总结

  1. 学习方法:使用样例(或称样本,训练集)来合成计算机程序的过程称为学习方法。
  2. 监督学习:学习过程中使用的样例是由输入/输出对给出时,称为监督学习。最典型的监督学习例子就是文本分类问题,训练集是一些已经明确分好了类别文档组成,文档就是输入,对应的类别就是输出。
  3. 非监督学习:学习过程中使用的样例不包含输入/输出对,学习的任务是理解数据产生的过程。典型的非监督学习例子是聚类,类别的数量,名称,事先全都没有确定,由计算机自己观察样例来总结得出。
  4. TSR(Term Space Reduction):特征空间的压缩,即降维,也可以叫做特征提取。包括特征选择和特征抽取两大类方法。
  5. 分类状态得分(CSV,Categorization Status Value):用于描述将文档归于某个类别下有多大的可信度。
  6. 准确率(Precision):在所有被判断为正确的文档中,有多大比例是确实正确的。
  7. 召回率(Recall):在所有确实正确的文档中,有多大比例被我们判为正确。
  8. 假设:计算机对训练集背后的真实模型(真实的分类规则)的猜测称为假设。可以把真实的分类规则想像为一个目标函数,我们的假设则是另一个函数,假设函数在所有的训练数据上都得出与真实函数相同(或足够接近)的结果。
  9. 泛化性:一个假设能够正确分类训练集之外数据(即新的,未知的数据)的能力称为该假设的泛化性。
  10. 一致假设:一个假设能够对所有训练数据正确分类,则称这个假设是一致的。
  11. 过拟合:为了得到一致假设而使假设变得过度复杂称为过拟合。想像某种学习算法产生了一个过拟合的分类器,这个分类器能够百分之百的正确分类样本数据(即再拿样本中的文档来给它,它绝对不会分错),但也就为了能够对样本完全正确的分类,使得它的构造如此精细复杂,规则如此严格,以至于任何与样本数据稍有不同的文档它全都认为不属于这个类别!
  12. 超平面(Hyper Plane):n维空间中的线性函数唯一确定了一个超平面。一些较直观的例子,在二维空间中,一条直线就是一个超平面;在三维空间中,一个平面就是一个超平面。
  13. 线性可分和不可分:如果存在一个超平面能够正确分类训练数据,并且这个程序保证收敛,这种情况称为线形可分。如果这样的超平面不存在,则称数据是线性不可分的。
  14. 正样本和负样本:对某个类别来说,属于这个类别的样本文档称为正样本;不属于这个类别的文档称为负样本。
  15. 规划:对于目标函数,等式或不等式约束都是线性函数的问题称为线性规划问题。对于目标函数是二次的,而约束都是线性函数的最优化问题称为二次规划问题。
  16. 对偶问题:

给定一个带约束的优化问题

目标函数:min f(x)

约束条件:C(x) ≥0

可以通过拉格朗日乘子构造拉格朗日函数

L(x,λ)=f(x)- λTC(x)

令g(λ)= f(x)- λTC(x)

则原问题可以转化为
目标函数:max g(λ)

约束条件:λ≥0

这个新的优化问题就称为原问题的对偶问题(两个问题在取得最优解时达到的条件相同)。

中英文文本分类的异同

  1. 中文文本来说,首先要经历一个分词的过程,就是把连续的文字流切分成一个一个单独的词汇(因为词汇将作为训练阶段“特征”的最基本单位),例如原文是“中华人民共和国今天成立了”的文本就要被切分成“中华/人民/共和国/今天/成立/了”这样的形式。
  2. 中文分词的效果对文本分类系统的表现影响很大,因为在后面的流程中,全都使用预处理之后的文本信息,不再参考原始文本,因此分词的效果不好,等同于引入了错误的训练数据。
  3. 目前比较常用的方法有词典法隐马尔科夫模型和新兴的CRF方法
  4. 预处理中在分词之后的“去停止词”一步对两者来说是相同的,都是要把语言中一些表意能力很差的辅助性文字从原始文本中去除,对中文文本来说,类似“我们”,“在”,“了”,“的”这样的词汇都会被去除,英文中的“ an”,“in”,“the”等也一样。这一步骤会参照一个被称为“停止词表”的数据(里面记录了应该被去除的词,有可能是以文件形式存储在硬盘上,也有可能是以数据结构形式放在内存中)来进行。
  5. 对中文文本来说,到此就已初审合格,可以参加训练了。而英文文本还有进一步简化和压缩的空间。英文中同一个词有所谓词形的变化(相对的,词义本身却并没有变),例如名词有单复数的变化,动词有时态的变化,形容词有比较级的变化等等,还包括这些变化形式的某种组合。而正因为词义本身没有变化,仅仅词形不同的词就不应该作为独立的词来存储和和参与分类计算。去除这些词形不同,但词义相同的词,仅保留一个副本的步骤就称为“词根还原”,

例如在一篇英文文档中,经过词根还原后,“computer”,“compute”,“computing”,“computational”这些词全都被处理成“compute”(大小写转换也在这一步完成,当然,还要记下这些词的数目作为compute的词频信息)。

文本分类问题的分类

回忆一下,分类体系是指事先确定的类别的层次结构以及文档与这些类别间的关系。 其中包含着两方面的内容:

  1. 类别之间的关系。一般来说类别之间的关系都是可以表示成树形结构,这意味着一个类有多个子类,而一个子类唯一的属于一个父类。这种类别体系很常用,却并不代表它在现实世界中也是符合常识的,举个例子,“临床心理学”这个类别应该即属于“临床医学”的范畴,同时也属于“心理学”,但在分类系统中却不便于使用这样的结构。想象一下,这相当于类别的层次结构是一个有环图,无论遍历还是今后类别的合并,比较,都会带来无数的麻烦。
  2. 文档与类别间的关系。一般来说,在分类系统中,我们倾向于让一篇文档唯一的属于一个类别(更严格的说,是在同一层次中仅属于一个类别,因为属于一个类别的时候,显然也属于这个类别的父类别),这使得我们只适用一个标签就可以标记这个文档的类别,而一旦允许文档属于多个类别,标签的数目便成为大小不定的变量,难于设计成高效的数据结构。这种“属于多个”类的想法更糟的地方在于文档类别表示的语义方面,试想,如果姚明给灾区捐款的新闻即属于灾区新闻,也属于体育新闻的话(这在现实中倒确实是合情合理的),当用户使用这个系统来查找文档,指定的条件是要所有“属于灾区新闻但不属于体育新闻的新闻”的时候,这篇姚明的报道是否应该包含在查询结果中呢?这是一个矛盾的问题。
  3. 分类系统使用何种分类算法是分类系统的核心属性。如果一个分类算法在一次分类判断时,仅仅输出一个真假值用来表示待分类的文档是否属于当前类别的话,这样的系统就可以叫做基于二元分类器的分类系统。有些分类算法天然就是独立二元的,例如支持向量机,它只能回答这个文档是或不是这个类别的。这种分类算法也常常被称为“硬分类”的算法(Hard Categorization)。而有的算法在一次判断后就可以输出文档属于多个类别的得分(假设说,得分越大,则说明越有可能属于这个类别),这类算法称为“排序分类”的算法(Ranking Categorization),也叫做m元分类算法kNN就是典型的m元分类算法(因为kNN会找出与待分类文档最相近的训练样本,并记录下这些样本所属的分类)。

特征选择算法之卡方检验

  1. 特征提取算法又分为特征选择和特征抽取两大类,其中特征选择算法有互信息,文档频率,信息增益,卡方检验等等十数种,这次先介绍特征选择算法中效果比较好的卡方检验方法。

  2. 卡方检验其实是数理统计中一种常用的检验两个变量独立性的方法。

  3. 基本思想就是通过观察实际值与理论值的偏差来确定理论的正确与否。

  4. 具体做法:

    1. 先假设两个变量确实是独立的(行话就叫做“原假设”)。

    2. 然后观察实际值(也可以叫做观察值)与理论值(这个理论值是指“如果两者确实独立”的情况下应该有的值)的偏差程度。

    3. 如果偏差足够小,我们就认为误差是很自然的样本误差,是测量手段不够精确导致或者偶然发生的,两者确确实实是独立的,此时就接受原假设

  5. 如果偏差大到一定程度,使得这样的误差不太可能是偶然产生或者测量不精确所致,我们就认为两者实际上是相关的,即否定原假设,而接受备择假设。

  6. 那么用什么来衡量偏差程度呢?假设理论值为E(这也是数学期望的符号哦),实际值为x,如果仅仅使用所有样本的观察值与理论值的差值x-E之和

  7. 来衡量,单个的观察值还好说,当有多个观察值x1,x2,x3的时候,很可能x1-E,x2-E,x3-E的值有正有负,因而互相抵消,使得最终的结果看上好像偏差为0,但实际上每个都有偏差,而且都还不小!此时很直接的想法便是使用方差代替均值,这样就解决了正负抵消的问题,即使用:

  8. 这时又引来了新的问题,对于500的均值来说,相差5其实是很小的(相差1%),而对20的均值来说,5相当于25%的差异,这是使用方差也无法体现的。因此应该考虑改进上面的式子,让均值的大小不影响我们对差异程度的判断 式(1):

  9. 上面这个式子已经相当好了。实际上这个式子就是卡方检验使用的差值衡量公式。当提供了数个样本的观察值x1,x2,……xi ,……xn之后,代入到式(1)中就可以求得卡方值,用这个值与事先设定的阈值比较,如果大于阈值(即偏差很大),就认为原假设不成立,反之则认为原假设成立。

  10. 在文本分类问题的特征选择阶段,我们主要关心一个词t(一个随机变量)一个类别c(另一个随机变量)之间是否相互独立?如果独立,就可以说词t对类别c完全没有表征作用,即我们根本无法根据t出现与否来判断一篇文档是否属于c这个分类。但与最普通的卡方检验不同,我们不需要设定阈值,因为很难说词t和类别c关联到什么程度才算是有表征作用,我们只想借用这个方法来选出一些最最相关的即可。

  11. 此时我们仍然需要明白对特征选择来说原假设是什么,因为计算出的卡方值越大,说明对原假设的偏离越大,我们越倾向于认为原假设的反面情况是正确的。我们能不能把原假设定为“词t与类别c相关“?,但此时你会发现根本不知道此时的理论值该是多少!你会把自己绕进死胡同。所以我们一般都使用”词t与类别c不相关“来做原假设。选择的过程也变成了为每个词计算它与类别c的卡方值,从大到小排个序(此时卡方值越大越相关),取前k个就可以(k值可以根据自己的需要选)。

  12. 好,原理有了,该来个例子说说到底怎么算了。比如说现在有N篇文档,其中有M篇是关于体育的,我们想考察一个词“篮球”与类别“体育”之间的相关性。我们有四个观察值可以使用:

    1. 包含“篮球”且属于“体育”类别的文档数,命名为A

    2. 包含“篮球”但属于“体育”类别的文档数,命名为B

    3. 包含“篮球”但却属于“体育”类别的文档数,命名为C

  13. 包含“篮球”也属于“体育”类别的文档数,命名为D 用下面的表格更清晰:

    特征选择 1.属于“体育” 2.不属于“体育” 总 计
    1.包含“篮球” A B A+B
    2.不包含“篮球” C D C+D
    总 数 A+C B+D N
  14. 首先,A+B+C+D=N。其次,A+C的意思其实就是说“属于体育类的文章数量”,因此,它就等于M,同时,B+D就等于N-M。

  15. 那么理论值是什么呢?以包含“篮球”且属于“体育”类别的文档数为例。如果原假设是成立的,即“篮球”和体育类文章没什么关联性,那么在所有的文章中,“篮球”这个词都应该是等概率出现,而不管文章是不是体育类的。这个概率具体是多少,我们并不知道,但他应该体现在观察结果中(就好比抛硬币的概率是二分之一,可以通过观察多次抛的结果来大致确定),因此我们可以说这个概率接近

(因为A+B是包含“篮球”的文章数,除以总文档数就是“篮球”出现的概率,当然,这里认为在一篇文章中出现即可,而不管出现了几次)而属于体育类的文章数为A+C,在这些个文档中,应该有

篇包含“篮球”这个词(数量乘以概率嘛)。 此时对这种情况的差值就得出了(套用式(1)的公式),应该是

同样,我们还可以计算剩下三种情况的差值D12,D21,D22。有了所有观察值的差值,就可以计算“篮球”与“体育”类文章的卡方值 img 把D11,D12,D21,D22的值分别代入并化简,可以得到img 词t与类别c的卡方值更一般的形式可以写成

式(2) 接下来我们就可以计算其他词如“排球”,“产品”,“银行”等等与体育类别的卡方值,然后根据大小来排序,选择我们需要的最大的数个词汇作为特征项就可以了。实际上式(2)还可以进一步化简,注意如果给定了一个文档集合(例如我们的训练集)和一个类别,则N,M,N-M(即A+C和B+D)对同一类别文档中的所有词来说都是一样的,而我们只关心一堆词对某个类别的卡方值的大小顺序,而并不关心具体的值,因此把它们从式(2)中去掉是完全可以的,故实际计算的时候我们都使用式(3):

  1. 针对英文纯文本的实验结果表明:作为特征选择方法时,卡方检验和信息增益的效果最佳(相同的分类算法,使用不同的特征选择算法来得到比较结果);文档频率方法的性能同前两者大体相当,术语强度方法性能一般;互信息方法的性能最差。
  2. 但卡方检验也并非就十全十美了。回头想想A和B的值是怎么得出来的,它统计文档中是否出现词t,却不管t在该文档中出现了几次,这会使得他对低频词有所偏袒(因为它夸大了低频词的作用)。甚至会出现有些情况,一个词在一类文章的每篇文档中都只出现了一次,其卡方值却大过了在该类文章99%的文档中出现了10次的词,其实后面的词才是更具代表性的,但只因为它出现的文档数比前面的词少了“1”,特征选择的时候就可能筛掉后面的词而保留了前者。这就是卡方检验著名的“低频词缺陷“。因此卡方检验也经常同其他因素如词频综合考虑来扬长避短。