



分类是智能体的一项关键功能,它涉及将输入内容归类到不同类别中。无论是识别字母、单词、图像、面部、声音,还是对邮件进行分类和作业评分,这些都是分类的典型应用。在自然语言处理中,分类有着广泛的实际应用,如垃圾邮件检测就是一个重要的商业案例。语言分类同样常见,因为社交媒体上的文本可能包含多种语言,因此需要识别和处理不同的语言。文本分类的一个经典任务是为文本分配图书馆主题标签,如决定一篇论文是关于物理还是数学的,这是信息检索中的重要部分。语言建模也被视作一种分类任务,因为每个单词都代表一个类别,所以预测下一个单词实际上是将上下文归类到可能的下一个单词中。
分类的目标是从单个观察结果中提取有用的特征,并将其归入一个特定的离散类别中。文本分类的一种方式是依靠规则,但这种规则往往会随着时间推移而变得不稳定。因此,在语言处理中,大多数分类任务采用的是监督式机器学习方法,以确保模型能够适应不断变化的文本特征。
在监督式机器学习中,数据集由一组输入观测组成,每个观测都配有一个对应的正确输出,称为“监督信号”。数据集用于训练机器学习算法,使其学会如何将新的、未见过的观测映射到正确的输出上。算法通过分析训练数据中的模式和关联来建立一种映射规则,从而在遇到新的数据时能够准确预测或分类。随着训练的进行,算法不断优化其性能,从而在处理未知数据时表现得更加精准。在文本的监督分类任务中,分类模型的目标是处理一个具有输入变量(通常表示为 x )和一组预定义的输出类别(通常表示为 Y= { y 1 , y 2 ,…, y N })的问题。任务的目标是通过学习输入与输出之间的映射关系,确保对新的、未见过的输入进行准确的类别预测。
对于文本分类而言,需要引入一些常用的替代符号以更好地适应文本处理的语境。具体而言,用 c (代表“类别”)替代 y 表示输出变量,用 d (代表“文档”)替代 x 表示输入变量。
在监督学习的情境下,一个训练集其中包含 N 个文档。每个文档都被人工标记了一个正确的类别,形成了一个对应关系的集合:{( d 1 , c 1 ),…,( d N , c N )}。目标是通过这个训练集来训练一个分类器,使其能够对新的文档 d 进行预测,并将其映射到正确的类别 c ∈ C ( C 表示一组文档类别)中。
构建分类器的方法有很多种,其中朴素贝叶斯是情感分析领域中备受推崇且高效的算法之一。由于其简单、易用,朴素贝叶斯常被用作入门算法,它通过计算单词和特征的频率来估算文档属于某种情感类别的概率。作为一种生成式分类器,朴素贝叶斯建立一个模型,用于描述某个类别是如何生成特定输入数据的。给定一条观测数据,朴素贝叶斯算法通过计算该数据在不同类别下的生成概率来选择概率最大的类别作为分类结果。
朴素贝叶斯分类器是一种基于贝叶斯定理的概率分类方法,其核心假设是特征之间的相互独立性。这种分类器之所以被称为“朴素”,是因为它在给定类别标签的情况下,假设某个特征的存在或缺失与其他特征是独立的。虽然这种独立性假设是简化的,但是在许多自然语言处理和机器学习任务中,朴素贝叶斯分类器依然表现出色。其核心思想是根据观测到的特征来计算实例属于某个特定类别的概率。正因为有了独立性假设,这一计算过程变得非常高效,这使得朴素贝叶斯在文本分类和垃圾邮件过滤等任务中尤为出色。
朴素贝叶斯分类器有几种变体,如多项式朴素贝叶斯分类器(Multinomial Naive Bayes Classifier)、高斯朴素贝叶斯分类器和伯努利朴素贝叶斯分类器。其中,多项式朴素贝叶斯分类器主要用于多类别文本分类,它基于多项分布模型来处理文本数据的词频特征。在这种分类器中,文档的特征向量是根据每个单词在文档中出现的次数来构建的。文档中的每个单词都被视为一个特征,而整个文档的特征向量则包含所有单词的词频信息。这样,通过多项分布就可以对文档的生成过程进行建模了。
本节将采用多项式朴素贝叶斯分类器进行情感分类。多项式朴素贝叶斯分类器通过分析文档中单词出现的频率来估算该文档属于某种情感类别的概率,从而实现准确的情感分类。
词频的基础计算是词袋模型:词袋模型是一种简化的文本表示方法,其中,文档被视为一个无序的词汇集合,忽略了单词在文档中的顺序。在词袋模型中,文档的特征向量是由文档中出现的单词及其频率组成的。
以下是一个词袋模型的简单例子,假设有两个文档:
文档1:I love natural language processing. Natural language processing is fascinating.
文档2:Text classification is an essential part of natural language processing.
构建词袋模型的步骤如下:
(1)构建词汇表:从所有文档中提取出现的所有单词构建一个词汇表。
词汇表:[I, love, natural, language, processing, is, fascinating, Text, classification, an, essential,part, of]
(2)构建特征向量:对每个文档构建一个特征向量,其中包含词汇表中每个单词的频率。
特征向量1:[1, 1, 2, 2, 2, 1, 1, 0, 0, 0, 0, 0, 0];
特征向量2:[0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1]。
这里的特征向量中的数字表示每个单词在文档中出现的次数。例如,"natural"在文档1中出现了两次,所以特征向量1中对应的位置为2。同样,"natural"在文档2中出现了一次,所以特征向量2中对应的位置为1。
对于文档
d
,假设有三个类别。概率分类器会在所有类别
c
∈
C
中选择一个具有最大后验概率的类别
。也就是说,分类器会在给定文档的情况下,返回最可能的类别(例如,如果文档主要讨论人工智能,那么返回的类别可能是“科技”)。其中,帽子符号
表示“对正确类别的估计”。
贝叶斯推断的思想自贝叶斯(1763年)的研究以来就为人所知,最早应用于文本分类是在1964年(Mosteller和Wallace)。在贝叶斯推断的框架中,贝叶斯分类是一种典型的应用形式,主要用于根据观测数据推断其所属类别。贝叶斯分类的基本思路是利用贝叶斯规则将
转换为一些其他概率的组合。贝叶斯规则如公式(3-2)所示,它提供了将任意条件概率
P
(
x
|
y
)拆分为其他三个概率的方法。
之后就可以将式(3-1)代入式(3-2),得到式(3-3)如下:
由于 P ( d )和 c 没有关系,对于每一个类别 c ,文档 d 都不会改变。所以分母部分可以直接被省略。所以式(3-3)可以被进一步简化为式(3-4)。
从式(3-4)中可以看出,在贝叶斯统计学中涉及两个关键概念:类别的先验概率 P ( c )和文档在给定类别下的似然概率 P ( d | c )。
P ( c )是类别 c 的先验概率,表示在没有观察到任何数据之前,类别 c 可能出现的概率。先验概率是在训练模型时根据训练数据进行估计的。
P ( d | c )是在给定类别 c 的条件下生成文档 d 的概率。换句话说,它表示在已知文档属于类别 c 的情况下,观察到该文档的可能性。
P ( d | c )中的文档 d 可以表示为一系列特征 f 1 , f 2 ,…, f n ,其中,每个特征 f i 代表文档中的一个具体属性(如词语、句子长度等)。因此,条件概率 P ( d | c )可以重写为:
也就是说,在类别 c 下,文档 d 是由这些特征组合生成的。
然而求所有这些特征的联合概率是一个非常庞杂的任务,比如单词的位置和单词词性相乘将是一个天文数字。这时就需要利用朴素贝叶斯的条件独立性假设将问题简化。在给定文档属于某个类别的情况下,文档中每个特征 f i 的出现概率是相互独立的。这种独立性假设可以将每个特征的概率独立考虑,而不需要考虑它们之间的相互作用。朴素贝叶斯模型因此得名为“朴素”,因为它在处理特征之间的独立性时采取了非常简单的假设。
在3.2.1节中,词袋模型已经将语言的其他特征消除(如位置)了,仅留下词频这一信息。因此可以将 f i 简化为词频 w i 。在朴素贝叶斯的条件独立性假设下,假设文档中的每个单词都是相互独立的,因此文档的生成概率 P ( d | c )可以拆解为每个单词生成概率的乘积,如式(3-6)所示。
其中, w 1 , w 2 ,…, w n 是文档 d 中的每个单词。
朴素贝叶斯分类器之所以被称为生成模式,来自可以把式(3-5)解释为生成数据的流程:首先从 P ( c )采样一个类别,然后通过 P ( d | c )采样生成单词。
朴素贝叶斯分类器(Naïve Bayes Classifier)最终选择的类别可以表示为式(3-7)。
为了得到最终结果,需要遍历文档中每一个位置上的所有单词,所以式(3-7)也改写为:
为了避免数值溢出问题,可以在式(3-7)的基础上加上log(单调递增函数,不会影响取极值的点),如式(3-8)所示。
通过对数空间中考虑特征,式(3-9)将预测的类别表达为输入特征的线性函数。线性分类器是一种利用输入的线性组合做出分类决策的分类器,朴素贝叶斯和逻辑回归都属于这一类。
训练的对象已经明确,即 P ( d | c )和 P ( c )。那么,如何求出这两者的值呢?
首先是 P ( c ):在文本分类任务中,类别通常是文档所属的类别,如“正面评价”或“负面评价”。 P ( c )表示在没有观察到具体文档信息的情况下,对文档属于类别 c 的先验概率(或初始假设)。 P ( c )的计算通常通过估计训练数据中属于类别 c 的文档数量占总文档数量的比例来完成。例如,如果训练数据中正面评价的文档占总文档的一半,那么在没有其他信息的情况下可以估计 P ("正面评价")=0.5。贝叶斯定理利用先验概率 P ( c )和观测数据的文档信息计算文档属于各类别的后验概率,从而实现对类别归属的更新判断。
如果设 N c 为训练数据中属于类别 c 的文档数量, N doc 为总文档数量,则公式可表示为(3-10):
P ( d | c )的基本组成部分为 P ( f i | c )。如3.2.2节所描述的, f i 可以被简化为词频 w i 。因此 P ( f i | c )可以表示为 P ( w i | c ),这个概率表示在给定类别 c 的情况下观察到单词 w i 的可能性。
P ( w i | c )的计算方式为:单词 w i 在主题 c 的所有文档中出现的次数与所有文档中所有单词的总次数之比。将所有属于类别 c 的文档连接成一个大的文本,称为“类别 c ”文本。然后,通过计算单词 w i 在这个连接文本中的频率,采用最大似然估计的方式来估计概率 P ( w i | c )。这种估计方法是通过该单词在属于类别 c 的文档中出现的相对频率得出的,即该单词在所有类别为 c 的文档中的总次数除以所有单词在这些文档中的总次数。公式如下:
词汇表 V 包括所有类别中所有词汇类型的并集,而不仅仅是一个类别 c 中的词汇。
在使用最大似然估计进行训练时可能会遇到一个问题。例如,当尝试估计正面类别中单词wonderful的概率时,如果在训练数据中没有包含单词wonderful且被标记为正面的文档,那么这个概率就会被估计为0。
在朴素贝叶斯中,对于给定类别,模型通过将各个特征的概率相乘来计算该类别的整体概率。如果某个特征的概率为0(如某个词在该类别中从未出现),那么整体概率也会被置为0。这是因为在概率计算中,任何数乘以0都等于0。这种问题的根源在于朴素贝叶斯模型的“朴素”假设,即假设各特征是独立的。因此,即使其他特征强烈支持某个类别,只要其中一个特征的概率为0,则最终的类别概率就会变为0。
这是朴素贝叶斯模型的一个局限性,特别是在处理稀有特征或训练数据中未出现的特征时。此时,模型可能忽略这些特征对类别的潜在贡献,从而导致概率估计失真,不准确,因为它没有考虑到这些特征在某个类别中出现的可能性。为避免整体概率为0的问题,可以使用平滑技术。其中,加一平滑(又称拉普拉斯平滑)是一种常用的方法。加一平滑通过在每个特征的计数上加一,并在分母上加上特征总数来调整概率估计。这种调整确保即使某个特征在训练数据中未出现,其概率也不为0。这样,在处理稀有特征时,模型可以更均衡地估计概率,从而提高其稳定性:
这种平滑策略的关键在于词汇表 V 包含所有类别中所有单词的并集,而不仅仅是某个类别的词汇。这确保模型在估计概率时不会遗漏任何类别的单词,避免估计失真。这种做法提高了模型的泛化能力,使其能更好地处理不同类别和特征。
在进行文本分类时,模型通常基于训练数据中的词汇表构建,该词汇表涵盖训练文档中出现的所有单词。然而,在测试阶段可能会出现一些训练数据中从未见过的单词,这些单词被称为“未知单词”。
对于这些未知单词,由于在训练数据中没有它们的出现频率信息,因此无法计算它们在某个类别中的条件概率。为了解决这一问题,可以采用简单的方法,即在测试文档中忽略这些未知单词,在计算概率时将它们移除,不予考虑。由于朴素贝叶斯模型假设各特征(单词)是独立的,这种处理方式通常不会对整体概率计算产生显著影响。尽管方法简单,但在实践中很有效。
在文本处理中,停用词(stop words)是常见且频繁出现的单词,如the和a。在文本分类任务中,有些系统会选择完全忽略这些停用词。
忽略停用词的方法可以通过以下步骤实现:
(1)对训练集中的词汇表进行词频排序。
(2)将词频排名前10~100的词定义为停用词,或者使用已有的在线停用词列表。
(3)在训练集和测试文档中删除这些停用词。
然而,在大多数文本分类应用中使用停用词列表并不一定能提高性能。因此,许多系统倾向于保留整个词汇表而不使用停用词列表,这是因为在某些任务中,停用词可能包含对分类有用的信息,移除它们可能会导致信息丢失。因此,是否使用停用词列表,通常根据具体任务和实验结果来调整。
根据上述内容,朴素贝叶斯分类器的代码实现如下:
下面给出示例进一步说明朴素贝叶斯分类的具体原理。以下示例选自情感分析任务,设定两个类别,分别是积极(+)和消极(-),采用以下从小说评论中简化的微型训练和测试文档。
注意:
为了简便性和通用性,本例会使用英文(英文的单词天然分开,在语料处理上更简便)。
下面给出小说文档的训练集和测试句。
训练集:
-slow-paced and uneventful(节奏缓慢且平淡无奇)
-lacks depth and character development(缺乏深度和角色发展)
-no twists and very little emotional impact(没有转折,情感影响很小)
+beautifully written prose(文笔优美)
+the most captivating novel of the year(是年度最引人入胜的小说)
测试句:
?beautifully written and captivating with emotional impact(文笔优美,引人入胜,具有情感冲击)
训练集包含两个正面评价,三个负面评价。根据式(3-11)计算出
:
现在使用加一平滑公式
来计算
。
分母部分的词汇表 V 的计算是收集所有训练文档中出现的所有单词。以下是伪代码:
在上述代码中使用了一个集合 V 来存储所有训练文档中出现的唯一单词。通过遍历训练文档,将每个文档中的单词拆分并添加到集合中,最终得到了词汇表 V ,从而确保 V 包含所有训练文档中的单词,而且每个单词都是唯一的。当前小说文档训练集的词汇表大小为22。
分母
表示类别
c
中所有单词的总出现次数。这实际上等同于类别
c
中所有文档的长度之和。
测试集中的词分别为'beautifully','written','and','captivating','with','emotional','impact'中除了with没有在训练集中出现(作为未知词删除),and作为stop_word去掉,其余的词频
分类计算如下:
对于测试句子S ="beautifully written and captivating with emotional impact",在移除单词with与停用词and后,通过等式(3-13)计算所选择的类别如下:
正面评价的概率高于负面评价的概率,所以测试句被预测为正面评价。正如这个例子所展示的,使用朴素贝叶斯分类器进行文本分类的好处在于它只需要较小的训练数据集。
3.2.3节使用Python代码说明了朴素贝叶斯分类器的调用方式。也可以直接使用sklearn内置函数来实现朴素贝叶斯分类的计算。
(1)收集带有情感标签的数据集:获取一个带有情感标签的数据集,其中每个数据点(如句子)都与一个情感标签配对。清理数据集中的噪声,如特殊字符、标点和停用词。
(2)将文本文档转换为特征向量:使用词袋模型将文本文档转换为特征向量,其中,单词作为特征,它们的频率或出现情况作为特征值。如果需要捕捉上下文,则可以使用 N -gram。
(3)将数据集分为训练集和测试集:将数据集分割为训练集和测试集。在训练集上训练朴素贝叶斯模型并使用测试集评估其性能。
(4)应用朴素贝叶斯算法:将朴素贝叶斯算法应用于训练集。该算法利用其在给定类标签的情况下特征独立的假设,简化了计算过程。
(5)评估训练模型:使用测试集对训练模型进行评估。
(6)找到分类器在测试集上的准确性:计算分类器在测试集上的准确性。
在情感分析中,朴素贝叶斯算法可以用两种方式将文本转换为特征:一是使用单词出现的频率,二是只关心单词是否出现。如果只考虑单词是否出现,就会将每个文档中的单词计数限制为1,即变成二元值(出现为1,未出现为0)。这种方法称为伯努力朴素贝叶斯(Bernoulli Naive Bayes)。在二元朴素贝叶斯中训练时会去除文档里重复的单词,将每个文档转换为一个只包含唯一单词的大文档。同样,在测试文档中也会去除重复的单词。这种处理方式不再关注单词的频率,而是强调单词的存在与否。二元朴素贝叶斯特别适合情感分析等任务,因为在这些任务中,单词的存在往往比它们的出现次数更能反映文档的情感倾向。
在进行情感分析时,处理否定语境是一项重要任务。考虑两个例子:I really enjoy this music(积极)和I didn’t enjoy this music(消极)。其中,didn’t表达了否定,完全改变了我们对动词enjoy所做的推断。类似地,否定语境可以改变一个本来消极的词,使其在评论中表达积极的含义。例如,don’t dismiss this album(别对这张专辑置之不理)。
为了应对否定语境,一种常见的简单方法是在文本标准化阶段,在逻辑否定标记(如not、no、never)之后的每个单词前加上前缀NOT,直到遇到下一个标点符号。例如,短语didn’t enjoy this music,but I将被转换为didn’t NOT_enjoy NOT_this NOT_music,but I。
这种处理方式的一个基本思想是:在否定词后面的单词都受到否定的影响,从而在模型中为否定语境建立线索。例如,NOT enjoy和NOT recommend这样新形成的“单词”在负面文档中会更频繁地出现,成为负面情感的线索。与此相反,像NOT bored和NOT dismiss这样的词会更容易被分类为积极评价。需要注意的是,这种简化的处理方式在实际应用中效果通常不错,但在更复杂的情况下则需要更准确地处理否定词与其影响范围的关系。
在进行情感分析的文本分类时,有时可能没有足够的标记训练数据来训练准确的朴素贝叶斯分类器,尤其是当使用所有单词来估计正面和负面情感时。在这种情况下,可以使用情感词汇表(包含预先标记为正面或负面情感的单词列表)来导出正面和负面单词的特征。4个常用的情感词汇表是General Inquirer(Stone等人,1966年)、Hu和Liu(2004年)、LIWC(Pennebaker等人,2007年)的意见词汇表以及MPQA主观词汇表(Wilson等人,2005年)。这些词汇表中的单词已经标注为积极或消极。例如,“美丽的”属于正面,而“恐怖的”则属于消极。在使用这些词汇表时,常见的方法是为每个词汇表添加一个特征,当文档中包含该词汇表中的单词时进行计数。可以添加一个名为“这个单词在正面词汇表中出现”的特征,并将该特征的计数视为包含该词汇表中任何单词的文档的数量,而不是分别计算每个单词。特别是在情感分析等文本分类任务中,这种方法具有显著优势:当训练数据有限或与测试差异较大时,使用这些密集的词汇特征而非稀疏的单词特征可以增强模型的泛化能力,从而提升其在测试集上的表现。
除了情感判别之外,朴素贝叶斯分类器在其他领域也被大量使用。在垃圾邮件检测中被广泛使用的原因之一是其简单和高效。它基于贝叶斯定理,通过计算给定某个特征的情况下某个类别的概率来进行分类。在垃圾邮件检测中,特征通常是单词出现的频率或者单词存在与否。
以下是朴素贝叶斯分类器在垃圾邮件检测中的应用举例。
单词频率:对于每个单词,朴素贝叶斯通过训练阶段计算在垃圾邮件和非垃圾邮件中的出现概率。例如,考虑单词"free",如果在训练阶段发现它在垃圾邮件中出现的概率较高,那么在测试阶段,如果测试邮件包含"free"这个单词,模型更可能会将其分类为垃圾邮件。
条件独立性:朴素贝叶斯分类器做了一个朴素的假设,即每个特征在给定类别的情况下都是独立的。在文本分类中,这意味着每个单词的出现都是相互独立的。虽然这个假设在实际文本中并不总是成立的,但它大大简化了模型的计算。
小数据集适用性:朴素贝叶斯分类器对于相对较小的数据集也能够表现出色,这对于垃圾邮件检测来说是一个优势。因为垃圾邮件的样本往往相对较小,使用朴素贝叶斯可以有效地进行分类。
例如,考虑以下两封邮件:
邮件1(垃圾邮件):"Congratulations! You've won a free iPhone. Click here to claim your prize!"。
邮件2(非垃圾邮件):"Meeting scheduled for tomorrow at 10 AM. Please be on time."。
在训练阶段,模型学习到"Congratulations","free","iPhone"等词在垃圾邮件中出现的概率较高。在测试阶段,如果有一封新的邮件包含类似的单词,那么模型可能会将其识别为垃圾邮件。这是因为这些词在垃圾邮件中的出现概率较高,符合模型的训练结果。这种简单的概率计算使得朴素贝叶斯算法成为垃圾邮件检测的一种有效方法。
除了垃圾邮件分类,朴素贝叶斯算法也常用于语言识别。在语言识别中,模型通常使用 N -gram(如'zin'、'an'等短语片段),而不是以单个单词为单位进行分析。朴素贝叶斯模型可以看作多个类别的“一元语言模型”的组合。一元语言模型是指只考虑单个词的概率分布的模型,而朴素贝叶斯则为每个类别创建一个这样的模型。每个类别的模型都会计算该类别中单词出现的概率。这使得朴素贝叶斯能够通过这些类别的单词概率模型判断一个文本最有可能属于哪个类别。由于这种方法简单、易于计算,朴素贝叶斯被广泛应用于文本分类和语言识别等任务中。
在朴素贝叶斯模型中,由于似然特征为每个单词在给定类别下的概率建模 P (word| c ),因此整个模型也能够为每个句子分配一个概率。这是因为句子中的每个单词都有其在模型中的概率表示,通过这些概率可以计算整个句子的概率。在实际应用中,句子的概率可以用于进一步地分类或执行其他任务。
其中,
P
(
s
|
c
)是在类别
c
下生成整个序列
s
的概率;
是在类别
c
下,序列
s
中每个位置上的单词
w
i
的条件概率的乘积,这里假设每个位置上的单词是相互独立的;
i
∈
positions
,表示遍历序列中每个位置的
i
;
P
(
w
i
|
c
)表示在类别
c
下单词
w
i
出现的概率。
在分类器产生了一系列结果之后,怎样评估模型的好坏呢?本节将继续沿用垃圾邮件分类的例子来说明分类任务的评价标准。在评价标准中有两套系统。第一个是模型的判断(是否垃圾邮件),第二个是人为的判断(被当作正确答案使用)。
这两套系统交织在一起就形成了混淆矩阵(Confusion Matrix),它是一种用于评估分类模型性能的表格,通常用于二元分类问题。
混淆矩阵的一般形式如图3-1所示。
图3-1 混淆矩阵
在混淆矩阵中,模型的预测结果与实际情况进行对比,得到以下4个关键指标:
真正例(True Positive,TP):模型正确地将正例(垃圾邮件)标记为正例的数量。
真负例(True Negative,TN):模型正确地将负例(非垃圾邮件)标记为负例的数量。
假正例(False Positive,FP):模型错误地将负例标记为正例的数量。
假负例(False Negative,FN):模型错误地将正例标记为负例的数量。
在垃圾邮件分类例子中,具体的混淆矩阵如表3-1所示。
表 3-1 混淆矩阵及评价指标
混淆矩阵包含4个关键指标:真正例(True Positive,TP)、真负例(True Negative,TN)、假正例(False Positive,FP)和假负例(False Negative,FN)。这4个指标可以用来计算以下几个评估指标:准确率(Accuracy)、精确度(Precision)、召回率(Recall)和F1分数。
准确率(Accuracy)是模型正确预测的样本数占总样本数的比例。它是最直观的评估指标,但在不平衡数据集中可能不是最好的选择,因为指标的不平衡性可能会导致准确率不再是一个能全面评估模型性能的好的指标。假设模型总是将所有邮件预测为非垃圾邮件,则混淆矩阵如表3-2所示。
表 3-2 无效模型的混淆矩阵
以表3-2数据为例,在这种情况下,混淆矩阵中没有True Positive(真正例)和False Positive(假正例),因为所有邮件都被预测为非垃圾邮件。
虽然模型的准确率看起来不错,但是它实际上存在一个问题:从未成功检测到任何垃圾邮件。在实际应用中,识别垃圾邮件的能力往往更重要。这表明,在处理不平衡数据集时,仅依赖准确率可能具有误导性。在这种情况下,更有价值的是查看其他指标,如召回率和精确度,以更全面地评估模型的表现。
精确度(Precision)衡量的是模型在预测为正例的情况下,有多少是真正的正例。具体而言,它关注的是模型所做的正例预测中有多少是正确的。这个指标在一些应用场景中非常重要,尤其是在希望最小化假正例的情况下,比如在医学诊断中,其中一个假正例可能会导致不必要的进一步检查或治疗。
召回率(Recall)衡量的是模型正确预测的正例占总正例的比例,它关注的是模型在所有实际正例中成功捕捉到的比例。这个指标在一些应用场景中非常关键,尤其是在希望最小化假负例的情况下,如垃圾邮件检测。
以垃圾邮件检测模型为例,其任务是在用户的收件箱中准确标记所有垃圾邮件。如果模型的召回率较低,则意味着它未能捕捉到许多实际存在的垃圾邮件,用户可能因此收到大量垃圾信息。因此,在这种情况下,应提高召回率,以确保模型能有效识别所有垃圾邮件,减少漏报的情况。
与准确率不同,精确度和召回率在评估模型性能时更关注对正例的准确捕捉。这两个指标专注于系统正确识别的目标,即确保系统能有效找到预期的事物。因此,精确度和召回率的结合提供了更全面的评估,更好地反映模型在特定目标上的表现,而不仅仅是模型在所有样本中预测正确的比例。
F1分数是一种在精确度和召回率之间提供综合评估的指标。在某些情况下,可能需要在精确度和召回率之间进行权衡,因为在某些应用中,既需要关注模型正确识别正例的能力(召回率),也需要关注被标记为正例的样本中有多少是真正的正例(精确度)。F1分数强调两者的平衡。当模型在精确度和召回率上均表现良好时,F1分数会达到较高值,表明模型的性能在这两方面都较为均衡。因此,F1分数是一个非常有用的工具,特别适用于需要综合考虑模型性能的场景,有助于更全面地评估模型在目标识别上的表现。
目前的讨论仅涉及两个类别的文本分类任务,但实际上,许多自然语言处理任务涉及多类别分类。例如在图书分类中,需要将图书划分为小说、科幻和历史等多个类别。在这种情况下,需要对精确度和召回率的定义进行调整,以适应多类别情境。
在多类别分类中,评价指标的计算方式有两种:微平均(Microaveraging)和宏平均(Macroaveraging),它们在综合评估模型性能时有所不同,主要区别在于对每个类别性能的处理方式。
微平均:将所有类别的正确分类、错误分类和漏分类总数相加,再计算精确度和召回率。这种方法更关注整体的样本数,对类别不平衡的影响更敏感。
宏平均:分别计算每个类别的精确度和召回率,然后对这些指标取平均值。它对每个类别一视同仁,不管类别的样本数量有多少。这种方法在评估各类别的性能时具有平等性,但对小类别的表现更加敏感。
微平均和宏平均提供了在多类别分类任务中更全面的评估方式,使得模型在处理多个类别时性能可以更清晰地展现出来。
(1)将所有类别的决策合并成一个混淆矩阵。
(2)计算总的True Positives(TP)、False Positives(FP)和False Negatives(FN)。
(3)计算总的精确度(Microaveraged Precision):
(4)计算总的召回率(Microaveraged Recall):
(1)计算每个类别的精确度和召回率。
(2)对每个类别的精确度和召回率取平均值。
(3)计算宏平均精确度(Macroaveraged Precision):
(4)计算宏平均召回率(Macroaveraged Recall):
例如,有一个虚构的图书分类任务,其中有3个类别,分别是小说、科幻、历史。混淆矩阵用于展示系统在每个类别中的正确和错误分类数量。下面是一个混淆矩阵示例,如表3-3所示。
表 3-3 多类别的混淆矩阵
1)微平均中的精确率计算方法
计算总的精确度(Total Precision):计算总的True Positives(TP)、False Positives(FP)和False Negatives(FN)。
TP total =TP 小说 +TP 科幻 +TP 历史 =15+12+18=45
FP total =FP 小说 +FP 科幻 +FP 历史 =3+3+1=7
计算总的精确度(Total Precision):
2)宏平均中的精确率计算方法
计算每个类别的精确度:
对于类别“小说”:
对于类别“科幻”:
对于类别“历史”:
计算精确度和召回率的平均值:
微平均和宏平均在权重分配和对类别不平衡的处理上存在显著差异。在权重分配方面,微平均将所有类别的样本混合在一起,每个样本对总体指标的权重相同,因此高频类别会对结果产生更大的影响。而宏平均则对每个类别赋予相等的权重,不论类别的样本数有多少,每个类别对总体指标的贡献都相同。在应对类别不平衡性方面,微平均更容易受到高频类别的影响,适用于强调整体样本性能的场景,但可能会掩盖少数类别的表现。相对而言,宏平均能平等地考虑每个类别的表现,更适合在关注少数类别表现时使用。因此,选择微平均或宏平均的方法取决于对不同类别性能的重视程度和具体应用场景的需求。
就像在3.2.3节中所讲的,训练模型最起码需要训练集和测试集。使用训练集完成训练之后,将模型应用到测试集中并查看结果。当使用了大量数据作为训练集时,剩下的测试集数据可能就不再具备代表性,因此模型的泛化能力不能得到有效评价。而交叉验证(Cross-validation,CV)可以解决这一问题。交叉验证能够在不牺牲训练数据量的情况下,通过迭代使用所有数据点进行模型的评估,这有助于更准确地估计模型在未参与训练的数据上的泛化性能,提高模型选择的可靠性。
交叉验证可以在训练过程中使用所有数据并在测试阶段充分利用所有数据的原因在于它的数据划分策略和迭代过程。
交叉验证的算法流程一般包括以下步骤:
(1)数据集拆分:将数据集分为训练集和测试集,训练集用于模型学习,测试集用于评估模型在未见数据中的表现。
(2)模型训练:使用训练集训练机器学习模型,使其学习数据中的模式和特征。
(3)模型验证:在测试集上评估训练好的模型,以衡量其泛化能力,即其在新数据中的表现。
(4)迭代优化:根据所采用的交叉验证方法重复以上步骤。常见的有 k 折交叉验证( k -fold cross-validation),其将数据集划分为 k 个子集,每次选取一个子集作为测试集,其余 k -1个子集用于训练,重复 k 次,可以获得更稳定的模型评估结果。
通过有系统地在不同的数据子集上循环进行训练和测试过程,交叉验证提供了对模型性能的健壮估计,帮助实践者做出关于模型选择的明智决策。
k 折交叉验证将数据集划分为 k 个大致相等的部分,这些部分称为折(folds),以便在模型训练和测试时更全面地评估性能,有助于克服“仅测试一次”的瓶颈问题。
k 折交叉验证的算法步骤如下:
(1)选择折数 k :通常, k 取5或10,但可以选择小于数据集长度的任何数字。
(2)将数据集分成 k 个部分:将数据集划分为 k 个大致相等的部分。
(3)选择训练集和测试集:在每次迭代中选择 k -1个折作为训练集,剩下的一个折作为测试集。
(4)训练模型:在每个训练集上训练模型。需要注意的是,每次迭代都要从头训练一个新模型,不依赖于前一次迭代的模型。
(5)进行验证:在测试集上验证模型的性能。
(6)保存验证结果:记录每次迭代的验证结果。
(7)重复步骤(3)至(6),共 k 次:每次选择不同的一个折作为测试集,确保每个折都验证一次。
(8)计算最终得分:对所有迭代的验证结果取平均值,得到模型的最终得分。
可以使用sklearn中的Kfold函数进行 k -fold交叉验证:
在直接比较中, k 折交叉验证提供了更稳定和可信赖的结果,因为训练和测试是在数据集的多个不同部分进行的。如果增加折数,让模型在更多不同的子数据集上进行测试,则可以使整体评分更加稳健和可靠。然而, k 折交叉验证也有一个缺点:随着折数的增加,需要训练更多的模型,这会使训练成本增加,训练过程拉长。在数据集较大或模型较复杂时这个缺点尤为明显。
留一法交叉验证(Leave-One-Out Cross-Validation,LOOCV)是 k 折交叉验证的一种极端情况。想象一下,如果 k 等于 n ,其中 n 是数据集中的样本数量,那么这种 k 折情况就等同于留一法技术。
留一法交叉验证技术的算法步骤:
(1)选择一个样本作为测试集:从数据集中选出一个样本,将其作为当前的测试集。(2)构建训练集:剩下的 n -1个样本将组成训练集。
(3)训练模型:在训练集上训练模型。在每次迭代中都需要从头训练一个新模型,不依赖之前的模型。
(4)验证模型:在测试集上进行模型验证,评估其性能。
(5)保存验证结果:记录每次迭代的验证结果。
(6)重复步骤(1)至(5)共 n 次:因为数据集中有 n 个样本,所以需要进行 n 次迭代,每次使用一个不同的样本作为测试集。
(7)计算最终得分:对所有迭代的验证结果求平均值,得到模型的最终得分。
留一法交叉验证在每次迭代中只使用一个样本进行测试,因此能够最大程度地利用数据进行训练,提供对模型性能的全面评估。然而,它的计算成本高,因为需要进行 n 次模型训练和验证,尤其在数据集较大时,训练成本非常高。
调用sklearn进行留一法交叉验证如下:
留一法交叉验证的最大优势在于,它最大程度地利用数据,只需要使用一个样本作为测试集,其余样本作为训练集。与 k 折交叉验证相比,它可以确保每个样本都能作为测试数据,并在其余样本上进行训练。然而,留一法交叉验证需要构建 n 个模型,而不是 k 个,其中, n 是样本数量,通常远大于 k 。因此,尽管留一法交叉验证能在模型评估所有样本的泛化能力方面提供全面和可靠的结果,但由于需要训练几个模型,其计算成本较高。基于实际经验和不同研究,5折或10折交叉验证常被优先选择,因为其在确保稳定评估的同时效率更高、成本更低。
交叉验证的一个潜在问题是,所有数据都会被用于测试和验证,这可能导致模型性能被高估。因为在这个过程中,开发者不可避免地会接触到测试集,可能会引入偏见。为了解决这个问题,可以采取固定训练集与测试集的策略。在这种设置中,在训练集内进行10折交叉验证,用于训练和调优模型,然后在固定的测试集上进行独立评估。这种方法不仅利用了交叉验证的优点,还能确保在测试过程中开发者未接触到测试数据,从而获得更客观的性能评估。这种策略在自然语言处理系统的设计中尤为有用,有助于更准确地了解系统的行为和性能。
像其他科学领域一样,自然语言处理的研究依赖于从实验中得出正确结论的能力。统计显著性测试是这一过程中的关键工具,用于判断实验结果是否具有实际意义和可推广性,或是否需要持保留态度。在比较新方法和已有方法时,性能指标的差异通常微小,因此研究人员会使用显著性测试来验证模型的改进是否真实有效。如果显著性测试选择不当、执行有误,或者在更适合的情况下无法检测到显著结果,那么这种推理就会失败,结果也会失去意义。这种误导性的结论不仅影响研究的进展,而且会导致研究人员在错误的方向上浪费时间和精力。为了确保评估的可靠性,自然语言处理研究人员必须避免这些陷阱,以得出更加稳健和准确的结论。
假设比较分类器A和B在召回率、准确率等评价指标中的性能,设 S A ( x )为系统A在测试集 x 上的得分,而 S B ( x )为系统B在同一测试集上的得分。定义性能差异为 δ ( x ),其计算方式为:
S A ( x )与 S B ( x )的差值就是效应大小( δ ( x )),用于表示分类器A和分类器B在特定测试集 x 上的性能差异。效应大小(effect size)是一种用于量化在研究中观察到的差异或效应的统计度量。 δ ( x )反映两个分类器在给定测试集上的表现差异,其值的正负和大小表明这种差异的方向和强度。如果 δ ( x )>0,就可以说明A分类器的效果相对更好吗?答案是否定的。这种差异可能是由于偶然因素造成的,而不是因为A在所有情境下都明显优于B。在某个特定的测试集 x 上,A的F1分数较高并不能确保A在其他测试集或不同情况下也同样优秀。考虑到数据的随机性以及特定测试集可能存在的特殊性质,单一测试结果并不足以全面评估模型的性能。因此,需要使用更多的测试集和不同的设置来验证模型 δ ( x )的表现是否一致。通过在多种环境下进行测试,可以更好地了解模型的稳健性和可推广性,从而确保评估结果更加可靠和准确。在这里引入一个新的概念:统计假设检验。
统计假设检验(Statistical Hypothesis Testing)是一种用于判断关于总体参数的陈述是否在样本数据中找到支持的统计方法。该过程基于两个假设:零假设( H 0 )和备择假设( H 1 )。零假设通常是一种表明没有效应或差异的假设,而备择假设则表明存在一定的效应或差异。
在进行统计假设检验时,首先假设零假设为真,然后通过样本数据来评估这一假设的合理性。回到比较A模型和B模型的场景,通过明确定义两个假设来进行测试:
零假设:被称为零假设的
H
0
假设
δ
(
x
)实际上是负值或0,这意味着A并不比B更好。而
H
1
备择假设则是推翻零假设,即A更好。
在假设检验中,重点在于观察某个统计量(如 δ ( x ))在不同抽样情境下的变化。通过对测试集合进行多次随机抽样,并在每次抽样中计算该统计量的值,可以构建一个随机变量 X ,用于描述统计量的变异性。
这种多次随机抽样的目的是模拟统计量在不同测试集下的变动情况。在零假设下,所有观察到的差异仅由随机性引起,而非系统性的真实差异。通过在测试集上进行多次随机抽样,可以更准确地模拟零假设成立的情况,从而更好地理解样本随机性如何影响观察结果。这种方法有助于判断观察到的差异是否超出随机变异的范围,从而得出更可靠的结论。
模拟变异性:不同的随机抽样会导致不同的观察值,因为样本的组合是随机的。
构建分布是指将多次随机抽样得到的观察值汇总成一个集合,形成一个随机变量。这个随机变量反映了在零假设下可能观察到的差异分布,即它描述了在假设差异仅由随机性引起的情况下,统计量的变异情况。通过这个分布,可以更清晰地理解观察到的差异是否超出了随机变动的范围,从而为后续的显著性检验提供依据。
计算
p
值是通过比较实际观察到的差异与随机抽样得到的分布来实现的。
p
值表示在零假设成立的情况下,观察到的当前差异或更极端情况的概率。换句话说,它衡量的是数据与零假设一致的可能性。如果
p
值足够小,则说明当前差异很可能不是由随机性引起的,这就为拒绝零假设、支持备择假设提供了足够的证据。
传统的参数检验方法既包括 t 检验(Student’s t-test)、方差分析(ANOVA)等参数检验,也包括卡方检验(Chi-squared test)等非参数检验。在自然语言处理等领域,它们往往因为数据分布、样本独立性等假设难以满足而受到限制,主要原因包括以下几点:
分布假设不成立:传统的参数检验方法通常会对数据的分布做出一些假设,如正态性。然而,在自然语言处理中,很多情况下数据的分布并不满足这些假设。例如,文本数据中的性能度量可能呈现出偏态分布、离散分布或非对称分布。
样本的非独立性:传统的参数检验通常假设样本是独立同分布的,但在自然语言处理中,文本数据的样本通常具有相关性。例如,文档之间可能存在主题上的相似性,这违反了独立性的假设。
文本分类准确度:在文本分类任务中,模型的性能通常以准确度(Accuracy)来衡量。准确度是指正确分类的文档数量与总文档数量之比。然而,由于文本分类任务的复杂性,准确度的分布可能并不符合标准正态分布,尤其是在类别不平衡或数据集中存在噪声时。类别不平衡会导致模型倾向于预测多数类,而噪声则可能影响分类结果的稳定性,使得准确度的变异性增大,从而偏离正态分布。
样本大小不一致:传统的参数检验通常要求样本大小一致,以确保结果的准确性。然而,在实际的自然语言处理任务中,由于数据的不均衡性,不同类别或子集的样本大小可能存在显著差异。这种不一致性会影响检验的有效性和结果的可靠性,需要采用更适应不均衡数据的非参数方法或加权调整方法,以更准确地评估模型的性能。
非参数性能度量:许多自然语言处理任务使用的性能度量是非参数的,不具有标准的分布形式。例如,BLEU分数、F1分数等在计算上并不满足正态性的要求。在自然语言处理任务中,许多性能度量并不一定遵循具有固定参数的传统分布,这使得传统的参数检验方法可能不太适用。
机器翻译的BLEU分数:在机器翻译任务中,BLEU分数用于衡量机器生成的翻译与参考翻译之间的相似度。BLEU分数的计算涉及多个组件,是一种非线性、非对称的性能度量。这使得BLEU分数的分布形式不一定符合常见的统计分布,也不满足传统参数检验的假设条件。因此,在对BLEU分数进行显著性分析时,需要采取适当的非参数检验方法,以确保结果的可靠性。
命名实体识别的F1分数:在命名实体识别任务中,F1分数通常用于评估模型识别命名实体的性能。F1分数是精确度和召回率的组合,因此它的分布可能会受到任务特定因素的影响,如类别不平衡或实体类型的多样性。这使得F1分数的分布不易通过传统参数检验方法进行建模,因此在分析F1分数时,通常需要采用非参数方法来评估其统计显著性和可靠性。
正因为如此,研究人员在自然语言处理中更倾向于使用非参数统计方法或基于抽样的方法统计显著性检验。这些方法更加灵活,对数据分布的假设较少,更适合应对文本数据等复杂场景。3.2.11节将介绍一种常用的非参数检验方法——配对Bootstrap检验。
配对Bootstrap检验(Paired Bootstrap Test)是一种使用自助法(Bootstrap)进行配对样本比较的统计检验。它适用于观察成对值的情况,如在同一实验条件下对两组测量值的比较。Bootstrap方法通过对原始样本进行有放回的随机抽样来生成多个重抽样样本。Bootstrap(自助法)一词来源于美国俚语,意为“通过自己的鞋带将自己拉起”,即通过自己的努力克服困难的意思。在统计学中,这一概念由统计学家Bradley Efron提出,用于解决通过数据自身生成更可靠统计推断的问题。
在自助法中,通过从原始数据集中有放回地抽取样本,可以构建多个自助样本。由于是有放回地进行抽样,所以每个样本都有可能被多次抽取,也有可能在某次抽样中完全没有被选择。这种方法模拟了从样本中反复抽样的情形,就像通过自身努力反复尝试克服困难一样,因此得名Bootstrap。
Bootstrap方法的核心思想是利用现有样本构建大量虚拟样本,从而估计总体参数的分布或评估统计量的抽样分布。它的唯一假设是:现有样本是总体的代表。这种方法在统计推断和假设检验中被广泛应用,尤其是在样本较小或难以获取更多数据的情况下,它为统计分析提供了一种灵活而有效的方式。
假设有一个简单的情境,两个自然语言处理模型(模型A和模型B)在垃圾邮件分类任务中的性能需要进行比较。测试集包含20个样本,每个样本都有一个真实标签(1或0),其中1表示垃圾邮件(正类别),0表示非垃圾邮件(负类别)。通过评估模型在这20个样本上的分类结果,可以判断它们的表现,并通过统计检验进一步比较两者的性能差异。
模型A和模型B分别对这20个样本进行了预测,结果如下:
在这个例子中,可以计算模型A和模型B在准确度(Accuracy)上的差异,即 δ ( x )。假设准确度是度量标准,那么:
模型A的准确度是18/20=0.9;
模型B的准确度是16/20=0.8。
因此, δ ( x )=0.9-0.8=0.1,表示模型A相对于模型B在准确度上的提升为0.1。
接下来,通过创建虚拟测试集可以评估模型A是否在某个性能指标上确实优于模型B,而不仅仅是在给定的测试集上表现更好。通过构建大量虚拟测试集,并在每个虚拟测试集上计算性能指标(如 δ ( x i )),可以获得一个模拟分布。这种分布提供了对模型A和B之间性能差异的更全面的理解,从而揭示它们在不同情境下的差异表现。
创建大量虚拟测试集 x i 的过程(每个虚拟测试集的大小为 n =20)的具体步骤如下:
(1)需要创建 b 个虚拟测试集,其中 b 是一个大的数据,如10 6 。
(2)每个虚拟测试集 x i 都包含 n =20个元素,模拟原始测试集的大小。
(3)为了创建每个虚拟测试集 x i 的每个元素,需要从原始测试集 x 的行中进行有放回地抽样,共进行 n =20次。也就是说随机选择一个样本,将其复制到虚拟测试集中,并且在下一次抽样时同一个样本有可能再次被选中,因为这是有放回的抽样。
(4)这个过程重复 b 次,每次都生成一个新的虚拟测试集。
这个过程通过模拟从原始测试集中随机选择样本的方式,生成了大量的虚拟测试集,为后续的统计显著性测试提供了数据基础。在假设 H 0 (即A不比B更好)的情况下,我们对于 δ ( X )的期望是0。如果在许多测试集上观察到的 δ ( x ( i ) )明显超过了0期望值,那么这是不寻常的。这种异常程度可以通过计算 p 值来量化,即在多个测试集上统计有多少次 δ ( x ( i ) )超过了0期望值。通过比较在虚拟测试集上观察到的性能差异和实际观察到的性能差异,可以计算出一个 p 值,该 p 值表示在零假设下,观察到的性能差异或更极端的差异的概率。如果 p 值很小,就有足够的证据拒绝零假设,即支持A在性能上优于B。这是统计显著性测试的基本思想。这一过程通过从原始测试集中随机抽样,从而生成大量虚拟测试集,为后续的统计显著性测试提供了数据基础。在假设(即模型A不优于模型B)的情况下,对 δ ( X )的期望是0。如果在许多虚拟测试集上观察到的 δ ( x ( i ) )明显超过了0期望值,则这种结果是异常的。
p-value(
x
)表示在观察到的测试集
x
上计算的
p
值。
b
是创建的虚拟测试集的数量。
δ
(
x
(
i
)
)是在第
i
个虚拟测试集上计算的性能差异。
δ
(
x
)是在实际测试集
x
上观察到的性能差异。
是指示函数,如果
δ
(
x
(
i
)
)大于或等于
δ
(
x
),则为1,否则为0。
假设A不比B更好,在许多测试集上的期望值是0,但对于我们创建的测试集并非如此,因为并没有从均值为0的分布中抽取这些样本;相反,虚拟测试集是从原始测试集 x 中创建的,而该测试集对A有一定的偏向(上例的偏差为0.1)。所以,需要在指示函数的不等式右端再加上这个偏向( δ ( x )):在假设A不比B更好的情况下, δ ( X )在许多测试集上的期望值应该是0。然而,对于通过Bootstrap创建的虚拟测试集而言,这个期望值可能并非如此。因为这些虚拟测试集并非从均值为0的理想分布中抽取的;相反,它们是从原始测试集 x 中创建的,而原始测试集对模型A可能有一定的偏向(如上例中的偏向为0.1)。
通过在指示函数中将不等式右端调整为2 δ ( x ),这一计算方法更准确地校正了原始测试集中可能存在的偏向,确保 p 值更合理地反映模型A和模型B之间的性能差异是否具有统计显著性。
在假设检验中,还有一个重要的概念是显著性水平(significance level),通常用 α 表示。显著性水平是我们在进行假设检验时所设定的一个阈值,用于决定 p 值的大小是否足够小,从而拒绝零假设。常见的显著性水平包括0.05或0.01。在假设检验中,显著性水平是一个关键概念,通常用 α 表示。显著性水平是一个预先设定的阈值,用于判断 p 值是否足够小,从而决定是否拒绝零假设。
如果
p
值小于或等于显著性水平
α
,则认为观察到的差异不可能是随机性引起的,从而有足够的证据拒绝零假设。
常见的显著性水平是0.05或0.01,对应于5%或1%的允许错误概率。
换句话说,显著性水平表示在零假设下犯错的最大容忍概率。如果 α =0.05,最多允许有5%的可能性是由于随机性而导致的错误结论。换句话说,当 p 值小于0.05时,即使可能存在5%的概率是由随机波动引起的差异,也会拒绝零假设,认为观察到的差异是显著的。
配对Bootstrap检验的Python代码如下:
[1] Aggarwal C C, Zhai C. A survey of text classification algorithms [M]//Aggarwal C C, Zhai C. Mining text data. New York: Springer, 2012: 163-222.
[2] Berg-Kirkpatrick T, Burkett D, Klein D. An empirical investigation of statistical significance in NLP [C]//Proceedings of the 2012 Joint Conference on Empirical Methods in Natural Language Processing and Computational Natural Language Learning (EMNLP-CoNLL). Jeju Island, South Korea: Association for Computational Linguistics, 2012: 995-1005.
[3] Hastie T, Tibshirani R J, Friedman J H. The elements of statistical learning [M]. 2nd ed.New York: Springer, 2001: 405-423.
[4] Pang B, Lee L. Opinion mining and sentiment analysis [J]. Foundations and Trends in Information Retrieval, 2008, 2 (1-2): 1-135.
[5] Søgaard A, Johannsen A, Plank B, Hovy D, Alonso H M. What’s in a p-value in NLP?[C]//Proceedings of the 18th Conference on Computational Natural Language Learning (CoNLL). Baltimore, MD: Association for Computational Linguistics, 2014: 20-28.