语料库分析
既然你已经成功地为自己定义的目标建立了一个语料库,那么接下来的一个重要工作就是探究这个语料库包含了哪些信息。本章的目的是为你介绍一些可用于分析语料库的语言学内容的工具。因此,我们将为你介绍各种可用于在语料库上完成各种统计分析的技术和工具。
为此,我们将从语言学的角度介绍一些统计和概率知识。我们称这个领域为语料库分析(corpus analytics)。具体包括以下内容:
如何计算单词出现的基本频率,分别根据词型和词例(token)。
如何把要分析的数据标准化。
如何测量语料库中单词与短语之间的相关性(即分布)。
了解语料库中所包含的信息能帮助你创建模型来自动识别标签(它们将在下一章创建)。我们将尽可能使用语言学方面的例子引入这些概念。在本章中,我们将使用一个电影评论语料库,它是从IMDb.com(IMDb)上收集的。这个语料库将为我们介绍本章中的概念和方法带来便利。
统计之所以重要有多方面的原因,但最重要的是能给我们以下两种能力:
数据分析
发现数据集合中的潜在性质。
推断统计的重要性
允许我们根据语料库的内容做出判断并获得信息。
本章的确会提供用于分析语料库的统计知识的概要介绍,但不会给出完整的统计或概率教程。如果你想了解更多的相关知识,尤其是语料库语言学方面的知识,我们为你推荐下列书籍和论文:
Probability for Linguists. John Goldsmith. Math. & Sci. hum. / Mathematics and Social Sciences (45e année, no. 180, 2007(4)). http://hum.uchicago.edu/~jagoldsm/Papers/probabilityProofs.pdf
Analyzing Linguistic Data: A Practical Introduction to Statistics using R. R.H. Baayen. Cambridge University Press; 1st edition, 2008.
Statistics for Linguistics with R: A Practical Introduction. Stefan Th. Gries. De Gruyter Mouton; 1st edition, 2010.
3.1 语料库分析中的基本概率知识
首先,让我们来了解几个概率的基本原理。
状态/样本空间
当我们进行一项试验或考虑可以赋予某个属性的可能值(比如将电子邮件标注为垃圾或非垃圾)时,我们所指的就是属性的状态空间,即{垃圾,非垃圾}。同样,掷硬币的可能结果是正面或反面,对应的状态空间为{正面,反面}。
随机变量
这是一个不指向固定值的变量,可以是来自定义域中的任何可能值。例如,上面所提到的状态空间中的值。
概率
来自状态空间的一个具体取值x的概率,用函数P(x)表示。我们说P(x)是“x的概率”,这里x是随机变量X的某个具体取值,x蝀。
概率有两个重要性质:
其取值一定在0~1之间,表示为:
x:0 ≤ p(x) ≤ 1
所有可能事件的概率之和必须为1:
假设你对电影评论感兴趣。也许你的目的是收集语料库并训练一个算法去识别电影题材,例如语料库主要是基于IMDb.com上类似的剧情摘要。为了训练算法来进行文本分类和标注,你需要了解语料库的一些性质。
假设有500个电影的简介,共涉及5种题材,每种题材的电影数量相等,即,
Action(动作):100个文档。
Comedy(喜剧):100个文档。
Drama(戏剧):100个文档。
Sci-fi(科幻):100个文档。
Family(家庭):100个文档。
给定该语料库,我们可以定义随机变量G(题材),上述列表中的题材值构成G的状态空间(样本空间)。这是一个平衡语料库,任意g蜧都有相等的概率。例如,P(Drama)=0.20,P(Action)=0.20等。
注意: 如果你想用Python来查找语料库中的某一个具体变量的概率,你可以很容易地使用列表得到它。如果你有一个存有所有评论的列表以及一个存有喜剧类评论的列表,那么你就可以使用对应列表的长度来计算随机选择某种题材的概率值。假设all是所有评论的文件名列表,comedy是喜剧类评论的文件名列表:
>>> p_com = float(len(comedy))/float(len(all))
由于函数len()返回一个整数,所以为了得到概率,需要把整数转化为浮点数;否则,得到的概率为0。
3.1.1 联合概率分布
我们经常想问的关于语料库的问题不仅仅涉及一个随机变量,而且可能同时涉及多个随机变量。回到IMDb语料库,我们注意到有两种类型的剧情介绍:短的(short)和长的(long)。我们可以在样本空间{short,long}上定义随机变量S(摘要)。如果每种题材有50个短的和长的摘要,那么P(short)=0.5,P(long)=0.5。
现在,我们有两个随机变量:G(题材)和S(摘要)。我们用P(G,S)表示这些变量的联合概率分布(joint probability distribution)。如果G和S是独立变量,则可将P(G,S)定义为:
P(G ?S)=P(G) ?P(S)
假设两个变量彼此独立,则随机选择“短的喜剧类”评论的概率是:
P(comedy ?short)=P(comedy) ?P(short)
= 0.20?.50
= 0.10
但是这两个随机变量真的相互独立吗?直觉上,如果一个事件的发生不会改变另一个事件发生的可能性,那么这两个事件是相互独立的。
因此,我们可以假设先把短评论分离出来,然后再从中选择一个喜剧类评论,或者反之。一共有250个短影评,包含5种题材,每种题材有50条评论。或者,喜剧类共涉及100条,其中50条短的,50条长的。这种看问题的方式等同于计算条件概率。这个概率是已知B发生的条件下A发生的概率(读作“给定B后A的概率”),定义如下:
这是B发生且A也发生的部分。对于我们的例子,在已知评论为短类型的条件下选择一个喜剧类评论的概率为:
很快就可以知道返回值为0.20,这与P(comedy)相等。事实上,独立性意味着,如果G和S是独立的,那么:
类似地,因为P(S | G)=P(S),所以P(short | comedy)=P(short),其值为0.50。
请注意,从上式可以推出下面的等价公式,这称为概率的乘法法则(multiplication rule):
当需要计算多于两个的随机变量的联合概率分布时,这个等式可以泛化为所谓的链式法则(chain rule):
当我们在自己的标注语料库上建立第一个语言模型时,这个法则将变得尤为重要。
上述条件概率的计算方法对于我们将在第7章中介绍的机器学习算法也非常重要。特别地,朴素贝叶斯分类器依赖于语料库的条件概率计算。
注意: 理解语料库中不同属性之间的关系有助于判断数据集的哪些方面应该包含到标注任务中。如果事实表明短评论出现的概率与某一个或多个电影题材有关,那么将这个信息加入标注任务(或者在之后为机器学习算法构造特征集时)将会非常有用。
与此同时,评论的长度与题材之间的关联也可能纯属巧合,或者恰好是因为语料库在某些方面是不平衡的。因此,从联合概率分布的角度审视语料库也能确保语料库更准确地代表你正在使用的数据。
3.1.2 贝叶斯定理
对条件概率的计算做出说明后,我们就能给出一个与之等价的公式,称为贝叶斯定理(Bayes Theorem),如下所述:
该定理允许我们在事件之间变换依赖关系的顺序。它将条件概率P(A|B)转换为另外3个概率,后者的估值一般来说更易于获取。当我们想要设计一个机器学习算法来对语料库中的各种实体进行自动分类时,这一点非常重要,而且还能容易地获取与算法中正在使用的不同判断相关联的概率的统计。第7章将再次讨论这个问题。