距离上次更新已经 1778 天了,文章内容可能已经过时。

课程主页:http://www.cs.columbia.edu/~cs4705/

课程网盘地址:

链接:https://pan.baidu.com/s/1KijgO7yjL_MVCC9zKZ7Jdg
提取码:t1i3

这一讲主要介绍了标注问题和隐马尔可夫模型。

Chapter 2 标注问题和隐马尔可夫模型

2.1 介绍

在许多NLP问题中,我们希望对序列对进行建模。词性(POS)标注可能是此类问题中最早,最著名的例子。 在POS标注中,我们的目标是建立一个模型,其输入为句子,例如

the dog saw a cat

其输出是标注序列

(2.1)D N V D N

(这里我们使用D表示定冠词,N表示名词,V表示动词)。标签序列与输入句子的长度相同,因此为句子中的每个单词指定一个标签(在本例中D标注the,N标注dog,V标注saw,依此类推)。

​ 我们将使用x1xn来表示标注模型的输入:将其称为句子。在上面的例子中,我们的长度为n=5并且

x1=thex2= dogx3=sawx4=thex5=cat

我们使用y1yn来表示标注模型的输出:我们经常将其称为状态序列或标注序列。 在上面的例子中,我们有y1=D,y2=N,y3=V,依此类推。

​ 这种类型的问题,其任务是将句子x1xn映射到标签序列y1yn,通常被称为序列标签问题标注问题。来看一个具体例子:

​ 我们假设我们有一组训练样本,(x(i),y(i)),i=1m,其中每个x(i)是句子x1(i)xni(i),并且每个y(i)是标签序列y1(i)yni(i)(我们假设第i个样本具有长度ni)。 因此,xj(i)是第i个训练样本中的第j个单词,yj(i)是该单词的标注。 我们的任务是学习一个函数,它将训练样本中的句子映射到对应的标签序列。

2.2 两个标注问题的例子:词性标注和命名实体识别

我们首先讨论NLP中标注问题的两个重要例子,词性(POS)标注和命名实体识别。

​ 图2.1给出了一个词性问题的例子。 问题的输入是一个句子。 输出是带标注的句子,其中句子中的每个单词都用其词性标注。 我们的目标是构建一个能够高精度地恢复句子POS标签的模型。 POS标注是NLP中最基本的问题之一,在许多自然语言问题中都很有用。

​ 假设我们有一组训练样本:也就是说,我们有一组句子以及对应的正确POS标签序列。 作为一个示例,宾州树语料库包含大约100万个单词(大约40,000个句子)以及对应的POS标签。

​ POS标注的主要挑战之一是歧义性。 英语中的许多单词可以采用几种可能的词性——对于许多其他语言也是如此。 图2.1中的例句有几个含糊不清的词。 例如,句子中的第一个词,profits,在这种情况下是名词,但也可以是动词(例如,in the company profits from its endeavors)。 单词topping在这个特定句子中的动词,但也可以是名词(例如the topping on the cake,)。 forecasts和results这两个词在句子中都是名词,但也可以是其他语境中的动词。 如果我们进一步观察,我们会看到该句子中的quarter是一个名词,但它也可以作为一个动词(只是使用频率低很多)。从这个例句我们可以看出,词性歧义性数量多的令人惊讶。

​ 第二个挑战是存在罕见的单词,特别是在我们的训练样例中没有看到的单词。 即使训练数据有一百万个单词,新的句子中也会有很多单词在训练数据中没有出现过。 作为一个例子,诸如Mulally或topping之类的词语可能非常罕见,并且可能在我们的训练样例中未见过。 开发有效处理训练数据中未见过的单词的方法非常重要。

​ 在恢复POS标签时,考虑两种不同的信息来源是有用的。 首先,单个单词对其词性具有统计偏好:例如,quarter可以是名词或动词,但更可能是名词。 其次,语境对单词的词性有重要影响。 特别是,一些POS标签序列比其他序列更可能。 如果我们考虑POS三元组,序列D N V将在英语中频繁出现(例如,the/D dog/N saw/V),而序列D V N则不太可能出现。

​ 有时这两种来源的信息是冲突的:例如,在句子中

The trash can is hard to find

can的词性是名词——但是,也可以是一个语气动词,事实上它更常被看作英语中的一个语气动词。在这句话中,语境已经覆盖了可以成为动词而不是名词的倾向。

​ 在本章的后面,我们将描述标注问题的模型,该模型在制定标注决策时同时考虑了局部和上下文两种信息来源。

​ 第二个重要的示例标注问题是命名实体识别。 图2.2给出了一个例子。 对于这个问题,输入又是一个句子。 输出是标有实体边界的句子。 在此示例中,我们假设有三种可能的实体类型:PERSON,LOCATION和COMPANY。 本例中的输出表明波音公司是一家公司,华尔街是一个地方,艾伦·穆拉利是一个人。 认识到诸如人,地点和组织等实体有许多应用,并且命名实体识别已经在NLP领域中被广泛研究。

​ 乍一看,命名实体问题与标注问题不同——在图2.2中,输出不包含句子中每个单词的标注。 但是,将命名实体识别映射到标注问题是很简单的。 基本方法如图2.3所示。 句子中的每个单词要么被标注为不是实体的一部分(标签NA),要么作为特定实体类型的开始(例如,标签SC对应Start Company),或作为特定实体类型的延续(例如,标签CC对应Continue Company)。

2.3 生成模型(Generative Models)和噪声信道模型(The Noisy Channel Model)

在本章中,我们将标注问题视为监督学习问题。 在本节中,我们描述了一种用于监督学习的重要模型:生成模型。 然后我们将继续描述一种特定类型的生成模型,隐马尔可夫模型,应用于标注问题。

​ 监督学习问题的设置如下。 我们假设训练样本为(x(1),y(1))(x(m),y(m)),其中每个样本包括输入x(i)和标签y(i)。 我们使用X来表示可能的输入集合,使用Y来表示可能的标签集合。 我们的任务是学习将x映射到标签f(x)的函数f:XY

​ 自然语言处理中的许多问题是监督学习问题。例如,在标注问题时,每个x(i)是单词序列x1(i)xni(i),并且每个y(i)将是标签序列y1(i)yni(i)(我们使用ni来指代第i个训练样本的长度)。 X表示所有序列x1xnY表示所有标注序列y1yn。我们的任务是学习函数f:XY将句子映射到标签序列。在机器翻译中,每个输入x将是源语言中的句子(例如,中文),并且每个“标签”将是目标语言中的句子(例如,英语)。在语音识别中,每个输入将是一些对话的记录——例如可能使用傅立叶变换进行预处理——并且每个标签是整个句子。我们在所有这些例子中的任务是利用(x(i),y(i)),i=1n来学习从输入x到标签y的函数。

​ 定义函数f(x)的一种方法是通过条件概率模型。 在这种方法中,我们定义了一个模型,该模型对任意(x,y)定义了条件概率

p(y|x)

模型的参数根据训练样本来估计。 给定一个新的测试样本x,模型的输出是

f(x)=argmaxyYp(y|x)

因此,我们简单地将最可能的标签y作为模型的输出。 如果我们的模型p(y|x)接近给定输入的真实条件分布,则函数f(x)将接近最优解。

​ 通常用于机器学习和自然语言处理的生成模型是另一个选择。 在生成模型中,我们不是直接估计条件分布p(y|x),而是对(x,y)的联合概率建模

p(x,y)

模型p(x,y)的参数从训练样本(x(i),y(i)),i=1n中估计。 在许多情况下,我们按如下方式分解概率p(x,y)

(2.2)p(x,y)=p(y)|p(x|y)

然后分别估计模型p(y)p(x|y)。 这两个模型具有以下解释:

  • p(y)是标签y的先验分布
  • p(x|y)是个给定标签y,输出x的概率

我们将看到,在许多情况下以这种方式分解模型非常方便;例如,语音识别的经典方法基于这种类型的分解。

​ 给定生成模型,我们可以使用贝叶斯法则来推导任何(x,y)的条件概率p(y|x)

p(y|x)=p(y)p(x|y)p(x)

其中

p(x)=yYp(x,y)=yYp(y)p(x|y)

因此,联合概率模型非常通用,这是因为我们也可以推导出概率p(x)p(y|x)

​ 我们在将联合模型应用于新的测试样本时直接使用贝叶斯法则。 给定输入x,我们模型的输出f(x)可以按如下方式推导:

f(x)=argmaxyp(y|x)(2.3)=argmaxyp(y)p(x|y)p(x)(2.4)=argmaxyp(y)p(x|y)

公式 2.3遵循贝叶斯法则。公式2.4成立因为分母p(x)不依赖于y,因此不会影响argmax。 这很方便,因为这意味着我们不需要计算p(x),而这可能是一项计算量很大的操作。

​ 将联合概率分布分解为p(y)p(x|y)项的模型通常称为噪声信道模型(noisy-channel models)。 直观地,当我们看到测试样本y时,我们假设数据是分两步生成的:首先,选择标签y的概率为p(y); 第二,样本x从分布p(x|y)生成。 模型p(x|y)可以解释为“通道”,它以标签y作为输入,并以x作为其输出。 我们的任务是给定观测到的x,找到最可能的标签y

​ 综上所述:

  • 我们的任务是学习从输入x映射到标签y=f(x)的函数。 我们假设训练样本为(x(i),y(i)),i=1n

  • 在噪声信道(noisy channel)方法中,我们使用训练样本来估计模型p(y)p(x|y)。 这些模型定义了一个联合(生成)模型

    p(x,y)=p(y)p(x|y)
  • 给定一个新的测试样本x,我们预测标签

    f(x)=argmaxyYp(y|x)

    找到输入x的输出f(x)通常被称为解码问题。

2.4 生成标注模型

我们现在看看如何将生成模型应用于标注问题。 我们假设我们有一个有限的词汇表V,例如V可能是英语中的一组单词,例如V={thedogsawcatlaughs}。 我们用K来表示可能的标签集;再次,我们假设这个集合是有限的。 然后我们给出以下定义:

定义 1 (生成标注模型)

假设一组有限的词汇表V和一组有限的标签K。将S定义为所有序列/标签——序列对x1xn,y1yn,它满足n0,xiV,i=1n以及yiK,i=1n。生成标注模型是函数p,它满足:

  • 1.对任意x1xn,y1ynS

    p(x1...xn,y1...yn)0
  • 2.此外,

    x1...xn,y1...ynSp(x1...xn,y1...yn)=1

因此,p(x1xn,y1yn)是序列对上的概率分布(即,集合S上的概率分布)。

​ 给定生成标注模型,从句子x1xn到标注序列y1yn的函数定义为

f(x1...xn)=argmaxy1...ynp(x1...xn,y1...yn)

其中argmax是所作用的范围是所有yiKi{1n}的序列。 因此,对于任何输入x1xn,我们将最高概率标签序列作为模型的输出。

​ 引入生成标注模型后,有三个关键问题:

  • 我们如何定义生成标注模型p(x1xn,y1yn)

  • 我们如何从训练样本中估计模型的参数?

  • 对于任意输入x1xn,我们如何有效地找到

    argmaxy1...ynp(x1...xn,y1...yn)

下一节将介绍如何使用三元隐马尔可夫模型来回答这三个问题。

2.5 三元隐马尔可夫模型(Trigram HMMs)

在本节中,我们将介绍了一种重要的生成标注模型,三元隐马尔可夫模型,描述了如何从训练样本中估计模型的参数,并描述如何为任何句子找到最可能的标签序列。

2.5.1 三元隐马尔可夫模型的定义

我们现在将给出三元隐马尔可夫模型(Trigram HMMs)的正式定义。下一节将展示这种模型是如何推导的,并给出模型背后的一些直觉。

定义 2 (三元隐马尔可夫模型(Trigram HMMs))

一个三元隐马尔可夫模型由表示词汇表的有限集合V和表示标签的有限集合K以及以下参数组成:

  • 对任何满足sK{STOP}u,vK{}

的三元组(u,v,s),定义参数

q(s|u,v)

该参数的值可以解释为在标签二元组(u,v)之后立即看到标签s的概率。

  • 对任意xV,sK定义参数e(x|s)e(x|s)的值可以解释为观测值x与状态s配对的概率。

​ 将S定义为所有序列/标签——序列对x1xn,y1yn的集合,序列对满足n0,xiV,i=1nyiK,i=1n并且yn+1=STOP

​ 然后我们定义任何x1xn,y1yn+1S的概率为

p(x1...xn,y1...yn+1)=i=1n+1q(yi|yi2,yi1)i=1ne(xi|yi)

这里我们假设

y0=y1=

​ 举个例子,如果我们有n=3x1x3等the dog laughs,而y1y4等于标签序列D N V STOP,那么

p(x1...xn,y1...yn)=q(D|,)×q(N|,D)×q(V|D,N)×q(STOP|N,V)×e(the| D)×e(dog| N)×e(laughs| V)

​ 请注意,此模型形式是噪声通道模型。 如下乘积

q(D|,)×q(N|,D)×q(V|D,N)×q(STOP|N,V)

是标签序列D N V STOP的先验概率,这里我们利用了二阶马尔可夫模型(三元模型),非常类似于我们在前一讲中得到的语言模型。如下乘积

e(the| D)×e(dog| N)×e(laughs| V)

可以解释为条件概率p(the dog laughs|D N V STOP):即条件概率p(x|y),其中x是句子the dog laughs,y是标签序列D N V STOP。

2.5.2 三元隐马尔可夫模型的独立假设

我们现在描述如何导出三元隐马尔可夫模型:特别的,我们描述了在模型中做出的独立性假设。 考虑一对随机变量序列X1XnY1Yn,其中n是序列的长度。 我们假设每个Xi可以在有限集合V中取任何值。 例如,V可能是英语单词,例如V={thedogsawcatlaughs}。 每个Yi可以在有限集合K中取任何值。 例如,K是用于英语的可能的词性标签的集合,例如, K={D,N,V}

​ 长度n本身是一个随机变量——即它可以在不同的句子中变化,我们将使用类似构建可变长马尔可夫过程的方法。

​ 我们的任务是对于任何观察序列x1xn与状态序列y1yn模拟联合概率

P(X1=x1...Xn=xn,Y1=y1...Yn=yn)

其中每个xiV的成员,并且每个yiK的成员。

​ 我们将发现定义一个额外的随机变量Yn+1会很方便,它的值总是STOP。 这将与可变长马尔可夫序列中看到的STOP符号起类似作用,如之前的讲义中所述。

​ 隐马尔可夫模型的关键思想是以下定义:

P(X1=x1...Xn=xn,Y1=y1...Yn+1=yn+1)(2.5)=i=1n+1P(Yi=yi|Yi2=yi2,Yi1=yi1)i=1nP(Xi=xi|Yi=yi)

其中

y0=y1=

*是特殊的开始符号。

​ 注意上式和我们对三元隐马尔可夫模型的定义的相似性。 在三元HMM中,我们假设联合概率如公式2.5所示,此外我们假设对于任何i以及任意yi2,yi1,yi

P(Yi=yi|Yi2=yi2,Yi1=yi1)=q(yi|yi2,yi1)

以及对于任何i以及任意xi,yi

P(Xi=xi|Yi=yi)=e(xi|yi)

​ 我们现在描述公式2.5是如何推导出来的,特别地,我们将关注模型中的独立假设。 首先,我们可以将联合概率写为

P(X1=x1...Xn=xn,Y1=y1...Yn+1=yn+1)(2.6)=P(Y1=y1...Yn+1=yn+1)×P(X1=x1...Xn=xn|Y1=y1...Yn+1=yn+1)

根据条件概率的定义,这一步是准确的。 因此,我们将联合概率分解为两个部分:第一个部分为选择标注序列y1yn+1的概率;第二个部分为给定标签序列,选择单词序列x1xn的概率。 请注意,这与噪声通道模型中的分解类型完全相同。

​ 现在考虑看到标签序列y1yn+1的概率。 我们作出如下的独立假设:我们假设对于任何序列y1yn+1

P(Y1=y1...Yn+1=yn+1)=i=1n+1P(Yi=yi|Yi2=yi2,Yi1=yi1)

也就是说,我们假设序列Y1Yn+1是二阶马尔可夫序列,即每个状态仅取决于序列中的前两个状态。

​ 接下来,考虑给定标签序列,选择单词序列x1xn的概率。 我们做出以下假设:

P(X1=x1...Xn=xn|Y1=y1...Yn+1=yn+1)=i=1nP(Xi=xi|X1=x1...Xi1=xi1,Y1=y1...Yn+1=yn+1)(2.7)=i=1nP(Xi=xi|Yi=yi)

由链式法则,上述推导的第一步是准确的。 第二步涉及独立性假设,即对于i=1n

P(Xi=xi|X1=x1...Xi1=xi1,Y1=y1...Yn+1=yn+1)=P(Xi=xi|Yi=yi)

因此,我们假设随机变量Xi的值仅取决于Yi的值。 更正式地说,给定Yi的值,Xi的值条件独立于先前的观测值X1Xi1,以及其他状态的值Y1Yi1Yi+1Yn

​ 考虑这个模型的一种有用的方法是考虑以下产生序列对y1yn+1,x1xn的随机过程:

  • 1.初始化i=1,以及

    y0=y1=
  • 2.从如下分布中生成yi

    q(yi|yi2,yi1)
  • 3.如果yi=STOP,那么返回y1yi,x1xi1。否则,从如下分布中产生xi

    e(xi|yi)

    i=i+1,返回步骤2

2.5.3 估计三元隐马尔可夫模型的参数

假设我们有一些训练数据。 训练数据由一组样本构成,其中每个样本是句子x1xn与标签序列y1yn。 给定这些数据,我们如何估计模型的参数? 我们将看到这个问题有一个简单而直观的答案。

​ 将c(u,v,s)定义为在训练数据中看到三个状态序列(u,v,s)的次数:例如,c(V,D,N)是训练语料库中标签序列V,D,N出现的次数。 类似地,将c(u,v)定义为看到标签二元组(u,v)的次数。 将c(s)定义为在语料库中看到状态s的次数。 最后,将c(sx)定义为语料库中状态s和观测值x同时出现的次数:例如,c( Ndog)将是看到与单词dog的标签为N的次数。

​ 根据上述定义,最大似然估计是

q(s|u,v)=c(u,v,s)c(u,v)

以及

e(x|s)=c(sx)c(s)

例如,我们将有估计

q(N|V,D)=c(V,D,N)c(V,D)

以及

e(dog|N)=c(Ndog)c(N)

因此,估计模型的参数很简单:我们只是从训练语料库中读取计数,然后如上所述计算最大似然估计。

​ 在某些情况下,使用第一章描述的技术来平滑我们对q(s|u,v)的估计是有用的。 例如定义

q(s|u,v)=λ1×qML(s|u,v)+λ2×qML(s|v)+λ3×qML(s)

其中qML项是从语料库中的计数得出的最大似然估计,λ1,λ2,λ3平滑参数,满足

λ10,λ20,λ30λ1+λ2+λ3=1

​ 这些估计的一个问题是,如果单词x出现的不频繁,则e(x|s)的值将是不可靠的:更糟糕的是,如果在训练数据中没有看到单词x,则我们有e(x|s)=0。 第2.7.1节描述了该问题的解决方案。

2.5.4 对HMM解码:维特比算法

我们现在转向查找输入句子x1xn的最可能的标注序列的问题。 该问题为找到

argmaxy1...yn+1p(x1...xn,y1...yn+1)

其中argmax所作用的范围是所有yiKi=1n以及yn+1=STOP 的序列。 我们假设p有如下形式

(2.8)p(x1...xn,y1...yn+1)=i=1n+1q(yi|yi2,yi1)i=1ne(xi|yi)

回想一下,我们在这个定义中假设

y0=y1=

以及

yn+1= STOP

​ 解决该问题的蛮力算法为简单地枚举所有可能的标签序列y1yn+1,然后在函数p下对它们进行评分,并获得最高的评分序列。 例如,给定输入句子

the dog barks

并假设可能的标签集是K={D,N,V},我们会考虑所有可能的标签序列:

DDDSTOPDDNSTOPDDVSTOPDNDSTOPDNNSTOPDNVSTOP...

在这种情况下,有33=27个可能的序列。

​ 然而,对于较长的句子,这种方法的效率非常低下。 对于长度为n的输入句子,存在|K|n种可能的标签序列。 关于于长度n的指数增长意味着对于任何合理长度的句子,蛮力搜索将不易处理。

基本算法

相反,我们可以使用通常称为维特比算法的动态规划算法有效地找到最高概率对应的标签序列。算法的输入是句子x1xn。 给定这个句子,对于任何k{1n},对于任意满足

yiK,i=1...ky0=y1=

的序列y1,y0,y1yk,我们定义函数

(2.9)r(y1,y0,y1...yk)=i=1kq(yi|yi2,yi1)i=1ke(xi|yi)

这只是公式2.8定义的p的截断版本,这里我们只考虑前k项。特别的,注意到

p(x1...xn,y1...yn+1)=r(,,y1...yn)×q(yn+1|yn1,yn)=r(,,y1...yn)×q(STOP|yn1,yn)

​ 使用Kk来表示序列中位置k处的允许标注集合将很方便(k{1n}):更准确地说,定义

K1=K0={}

以及

Kk=K,k{1...n}

​ 接下来,对于任何k{1n},uKk1,vKk,将S(k,u,v)定义为满足yk1=u,yk=v,yiKi,i{1k}y1,y0,,yk构成的序列集合。 因此,S(k,u,v)是长度为k的所有以二元组(u,v)为结尾的标签序列的集合。定义

(2.11)π(k,u,v)=maxy1,y0,y1,...,ykS(k,u,v)r(y1,y0,...,yk)

因此,π(k,u,v)是任何长度为k且以二元组(u,v)为结尾的序列的最大概率。

​ 我们现在发现可以按如下方式有效地计算所有(k,u,v)对应的π(k,u,v)。 首先,作为基础情形定义

π(0,,)=1

​ 接下来,我们给出递归定义。

命题 1

对于任何k{1n},uKk1,vKk,我们给出如下递归定义:

(2.12)π(k,u,v)=maxwKk2(π(k1,w,u)×q(v|w,u)×e(xk|v))

该定义是递归的,因为该定义使用了π(k1,u,v)。 这个定义将是我们的动态规划算法的关键。

​ 我们怎样才能证明这种递归的合理性? 回想一下,π(k,u,v)是任何以二元组(u,v)结尾的序列y1yk的最高galvanized。 任何此类序列必须具有yk2=w(对于某个w)。任何长度为k1,以二元组(w,u)结尾的序列的最高概率是π(k1,w,u),因此任何长度为k,以三元组(w,u,v)结尾的序列的概率最高是

π(k1,w,u)×q(v|w,u)×e(xk|v)

在公式2.12中我们只是关于w搜索上式所有可能值,并返回最大值。

​ 我们的第二个命题如下:

命题 2
(2.13)maxy1...yn+1p(x1...xn,y1...yn+1)=maxuKn1,vKn(π(n,u,v)×q(STOP|u,v))

上述命题从公式2.10可以直接推出。

​ 图2.4展示了将这些想法放在一起的算法。 该算法将句子x1xn作为输入,并返回下式作为输出

maxy1...yn+1p(x1...xn,y1...yn+1)

该算法首先使用递归定义得到π(k,u,v)。 然后它使用公式2.13计算任何序列的最高概率。

​ 上述算法一共要迭代n次,每次遍历的标签为(w,u,v),所以时间复杂度为O(n|K|3),因此算法关于序列的长度是线性的,关于标签的数量是立方的。

带有反向指针的维特比算法

我们刚刚描述的算法将句子x1xn作为输入,然后返回下式作为输出

maxy1...yn+1p(x1...xn,y1...yn+1)

然而,我们真正想要的是返回最高概率序列的算法,即对任意x1xn,返回

argmaxy1...yn+1p(x1...xn,y1...yn+1)

​ 图2.5显示了实现此目标的修改算法。 关键步骤是在每一步存储反向指针bp(k,u,v),该指针记录u,v之前的状态ww使在位置k(u,v)结束的序列达到最大概率。 在算法结束时,我们解开反向针以找到最高概率序列,然后返回此序列。 该算法依然在O(n|K|3)时间内运行。

2.6 总结

我们在本章中已经介绍了许多重点,但最终结果相当简单:我们已经推导出一个从训练语料库中学习标注的完整方法,并将其应用于新的句子。 主要内容如下:

  • 三元隐马尔可夫模型有参数q(s|u,v)e(x|s),并且定义任何句子x1xn与标签序列y1yn+1(其中yn+1=STOP) 对应的联合概率

    p(x1...xn,y1...yn+1)=i=1n+1q(yi|yi2,yi1)i=1ne(xi|yi)
  • 给定一个训练语料库,我们可以从中得出计数,参数的最大似然估计是

    q(s|u,v)=c(u,v,s)c(u,v)

    以及

    e(x|s)=c(sx)c(s)
  • 给定一个新的句子x1xn,以及我们从训练语料库中估计的参数qe,我们可以使用图2.5中的算法(维特比算法)找到x1xn的最高概率标签序列。

2.7 更进一步的材料

2.7.1 处理未知的单词

回忆一下,我们对HMM中概率的参数估计是

e(x|s)=c(sx)c(s)

其中c(sx)为语料库中状态s和观测值x同时出现的次数,c(s)为在语料库中看到状态s的次数。

​ 该估计的一个主要问题是,对于训练数据中未见过的任何单词x,对于所有状态se(x|s)将等于0。 因此,对于任何包含训练数据中从未见过的单词的测试句x1xn,很容易验证对任意y1yn+1

p(x1...xn,y1...yn+1)=0

因此,模型将在测试句子上完全失败。 特别的,对下式取argmax将没有意义

argmaxy1...yn+1p(x1...xn,y1...yn+1)=0

因为每个标签序列有同样的最大值0

​ 这是一个棘手的问题,因为无论我们的训练数据多么大,测试句中都不可避免地会出现训练数据中从未见过的单词。 例如,英语的词汇量非常大; 但在测试数据中总是遇到新单词。 以图2.2和2.3中使用的句子为例:

Profits soared at Boeing Co., easily topping forecasts on Wall Street,as their CEO Alan Mulally announced first quarter results.

在这句话中,很可能在训练数据中没有看到Mulally这个词。 同样地,在英语中,topping是一个相对不常见的单词,在训练语料中可能没有看到过。

​ 在本节中,我们将描述一个简单但非常有效的方法来解决这个问题。关键的想法是将训练数据中的低频词,以及在测试数据中看到但在训练中从未见过的词,映射到相对较小的一组伪单词,例如,我们可以将单词Mulally映射到伪单词initCap,将单词1990映射到伪单词fourDigitNum,依此类推。 这里伪单词initCap用于第一个字母是大写字母,其余字母是小写字母的任何单词。 伪单词fourDigitNum用于任何四位数字。

​ 图2.6显示了一组伪单词的例子,它将HMM标注符应用于命名实体识别问题。 这组伪单词是手工选择的,并且是为了保留关于不同单词的拼写特征的一些有用信息而明确选择的:例如单词的大小写特征,以及不同数字类型的子分类(主要为了处理日期)。

​ 一旦定义了从单词到伪单词的映射,我们进行如下操作。 将f(x)定义为将单词x映射到其伪单词f(x)的函数。 我们定义了计数截断参数γ:一个典型的值是γ=5。该参数的作用是,对于训练数据中看到的任何出现次数少于γ的单词,我们只需将单词x替换为伪单词f(x)。 此映射适用于训练和测试样本中的单词:因此,在训练数据中从未见过但在测试数据中看到的单词也会映射到其伪单词。 一旦执行了这种映射,我们就可以用与之前完全相同的方式估计HMM的参数,我们在训练数据中的一些单词现在是伪单词。 类似地,如果输入句子中的一些单词是伪单词,我们依然可以应用维特比算法进行模型解码。

​ 将低频词映射到伪单词具有“关闭词汇表”的效果:通过这种映射,测试数据中的每个词在训练数据中至少会被看到一次(通常,我们可以假设每个伪单词在训练集中至少出现一次)。 因此,对于测试数据中的某些单词x,我们永远不会遇到e(x|s)=0的问题。 此外,通过仔细选择伪单词集,将保留有关不同单词拼写的重要信息。 有关应用映射之前和之后的示例句子,请参见图2.7。

​ 该方法的缺点是在定义到伪词的映射时需要人为选择,并且该映射会根据所考虑的任务而变化(例如,不同的映射可以用于命名实体识别而不是POS标注)。 在后面的章节中,我们将看到基于对数线性模型的想法,可以说是低频率和未知单词问题的更清晰的解决方案。

本讲测验题

Coursera部分

1.

Jane为人名,所以选b(回顾课件的例子)

2.

利用乘法原理可得可能的标签序列数量为

2×1×3×3×2=36

3.

由转移概率参数可得,标签序列必然为

D ,N ,STOP

由发射参数可得,可能的序列有2×1=2

dog dogthe dog

4.

利用公式

p(x1...xn,y1...yn+1)=i=1n+1q(yi|yi2,yi1)i=1ne(xi|yi)

此处n=4,所以选c

5.

只要将

q(yi|yi2,yi1)

修改为

q(yi|yi1)

所以选b

6.

e(x|s)=c(sx)c(s)

可得,

c(N)=2,c(Ncat)=1e(cat|N)=12

7.

注意公式为

q(s|u,v)=λ1×qML(s|u,v)+λ2×qML(s|v)+λ3×qML(s)qML(w|u,v)=c(u,v,w)c(u,v)qML(w|v)=c(v,w)c(v)qML(w)=c(w)c()

所以

c(N,V)=2,c(N,V,STOP)=2c(V,STOP)=2,c(V)=2c()=8,c(STOP)=2q(STOP|N,V)=13×(1+1+28)=34

8.

回顾公式为

π(0,,)=1π(k,u,v)=maxwKk2(π(k1,w,u)×q(v|w,u)×e(xk|v))

因为

q(D|,)=1

所以

π(1,*,D)=maxwK1(π(0,w,)×q(D|w,)×e(the|D))=π(0,,)×q(D|,)×e(the|D)=0.8π(2,D,N)=maxwK0(π(1,w,D)×q(N|w,D)×e(dog|N))=π(1,*,D)×q(N|,D)×e(dog|N)=0.64π(3,N,V)=maxwK1(π(2,w,N)×q(V|w,N)×e(barks|V))=π(2,D,N)×q(V|D,N)×e(barks|V)=0.64

9.

利用

π(k,u,v)=maxwKk2(π(k1,w,u)×q(v|w,u)×e(xk|v))

可得

π(4,P,D)=maxwK2(π(3,w,P)×q(D|w,P)×e(the|D))=π(3,N,P)×q(D|N,P)×e(the|D)=0.2×0.4×0.6=0.048

课内部分

1.

显然标注序列必然为

D,N,V,STOP

单词序列为

the dog dogthe dog barksthe barks dogthe barks barks

2.

part 1

初始化:

π(0,,,)=1

算法:

  • k=1n,

    • uKk2,vKk1,wKk,π(k,u,v,w)=maxsKk3(π(k1,s,u,v)×q(w|s,u,v)×e(xk|w))
  • 返回

    maxuKn2,vKn1,wKn(π(n,u,v,w)×q(STOP|u,v,w))
part 2

只要对每个e(x|w)中的x也进行搜索即可,算法如下:

初始化:

π(0,,)=1

算法:

  • k=1n,

    • uKk1,vKk,π(k,u,v)=maxwKk2,xV(π(k1,w,u)×q(v|w,u)×e(x|v))
  • 返回

    maxuKn1,vKn(π(n,u,v)×q(STOP|u,v))

3.

初始化:

π(0,,)=1

算法:

  • k=1n,

    • uKk1,vKk,π(k,u,v)=maxwKk2(π(k1,w,u)×q(v|w)×e(xk|v))
  • 返回

    maxuKn1,vKn(π(n,u,v)×q(STOP|u,v))

4.

首先回顾维特比算法:

从训练数据的特点,前三个标签必然为(注意其余情形概率为0

DT,NN,VB

对于k=4,因为

q(u|VB)e(in|u)={u=IN0

第一个句子的y4=IN,同理第二个句子的y4=VB。最后从训练数据的特点可以确定其余标签。

5.

考虑如下例子(来自参考解答):

the/DT the/NN the/DT the/DT the/DT the/DT

最大似然估计为

e(the |DT)=e(the |NN)=1q(NN|DT)=1/5q(DT|DT)=3/5q(STOP|DT)=1/5

因为q(DT|DT)最大,所以概率最大的标签序列为

DT DT DT DT DT DT STOP