首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

NLP学习记录——序列标注

同名(浪漫主义AI)CSDN博客:github:

https://github.com/guanchongz

tagging problem

即序列标注问题。

给定一个词序列作为输入:the dog saw a cat。

要求输出其词性序列:D N V D N (D for a determiner, N for noun, and V for verb)。

有时输出序列会是这种形式:the/D dog/N saw/V a/D cat/N。

其中有两个重要具体分支任务:part-of-speech(POS) tagging和named-entity recognition.

POS tagging

INPUT:

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

OUTPUT:

Profits/N soared/V at/P Boeing/N Co./N ,/, easily/ADV topping/V forecasts/N on/P Wall/N Street/N ,/, as/P their/POSS CEO/N Alan/N Mulally/N announced/V first/ADJ quarter/N results/N ./.

KEY:

N = Noun

V = Verb

P = Preposition

Adv = Adverb

Adj = Adjective

pos tagging是NLP领域的基础问题之一,在很多领域发挥着重要作用。

pos tagging的一个难点在于歧义——许多单词可以是不同的pos。上例中的profits是名词,但是在其它地方可能是动词。想到高中政治中学到“人是社会中的人”,同样,“单词是语句中的单词”,单纯从单词本身出发去解决问题是很难的,而考虑上下文后会更容易一些,能够削弱歧义的影响。

另一个难点在于很多单词出现的频率很低,导致比较难训练。这一点在词向量这一概念出现之后就不再是很严重的问题了,因为就算很多单词很少出现,但是其词向量会跟近义词接近。

named entity recognition

例:

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

OUTPUT: Profits soared at [Company Boeing Co.], easily topping forecasts on [Location Wall Street], as their CEO [Person Alan Mulally] announced first quarter results.

该任务就是要从语句中找出命名实体来,如人名、地名、公司名等。

实际上,在处理此类任务时,通常会对每一个单词预测一个label:

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

OUTPUT: Profits/NA soared/NA at/NA Boeing/SC Co./CC ,/NA easily/NA topping/NA forecasts/NA on/NA Wall/SL Street/CL ,/NA as/NA their/NA CEO/NA Alan/SP Mulally/CP announced/NA first/NA quarter/NA results/NA ./NA

KEY:

NA = No entity

SC = Start Company

CC = Continue Company

SL = Start Location

CL = Continue Location

然后对这个半成品输出进行整理就可以得到完整的命名实体。

generative model

接下来要介绍利用监督学习处理pos tagging的方法,具体为隐马尔可夫模型,在此之前先来介绍生成模型。

给定训练集:(x1,y1)…(xm,ym),每一个训练集包括输入x和标注y,我们的任务是寻找一个函数f,使得对于给定的输入x得到尽可能准确的输出y——y=f(x)。

基于条件概率的判别模型:

而生成模型是基于联合概率p(x,y)的,并且我们常常会分解联合概率:

p(x,y)=p(y)p(xy)

然后分别对p(y)和p(xy)进行估计。这样做只是因为求解过程通常会比较便利。

应用贝叶斯公式,有:

于是

这个过程就是,先以概率p(y)选择某种输出y,然后在概率分布p(xy)上生成x。

然后让我们把生成模型应用到tagging上。

假定有限词库V和所有可能tag的集合K,由V中单词组成输入序列x1,x2…xn,由V中单词和对应的K中tag组成输出序列y1,y2…yn,两个序列组成一个序列对,定义所有的序列对的集合为S,那么,generative tagging model即为:

1.对于S中所有的序列对:

2.

3.

可以看到,generative tagging model实际上就是落在S上的一个概率分布,下面介绍求解这个分布的一种方法。

Trigram Hidden Markov Models

首先定义两个参数:

q(su,v):在观测到tags u,v之后,下一个tag是s的概率。

e(xs):观测到tag s后,对应位置的输入是x的概率。

则有:

其中y(n+1)=STOP,y0=y(-1)=*。这就是trigram HMM模型。

例如,输入序列为”the dog laughs”,输出tag序列为”D N V STOP”,则:

其中四个q的乘积即为观测到输出序列为”D N V STOP”的概率,即为p(y)。

三个e的乘积为输出序列为”D N V STOP”时,输入序列为”the dog laughs”的概率,即为p(xy)。

那么,以上模型是怎么来的呢?

我们将模型的核心问题写成:

首先,

对于前一项。与语言模型中的trigram类似,假设某位置的Y只与前两个Y有关:

再做一个假设,某位置的X只与序列位置对应的Y有关,则有:

与语言模型中的概率计算方法类似,依然采取频率估计概率的方法。

在训练集中,定义c(u,v)为tag序列u v出现的次数,c(u,v,s)为tag序列u v s出现的次数,c(s)为tag s出现的次数,c(s>x)为tag s 与单词x配对的次数,那么:

具体计算过程中还可以利用一些平滑方法提高准确率。

最后还有一个问题是如何求得

课上讲了一种算法叫做Viterbi Algorithm,个人认为没有必要细究,跳过。

named entity recognition using nerual natwork

以下为cs224n assignment3内容。

首先考虑基于基于窗口预测的NER:

设置窗口大小为w,即选取预测中心词加上上下各w个单词的窗口作为输入,输出为命名实体标识。上例中w=1

这是一个很简单的任务,可直接使用一个简单神经网络去做,并使用cross entropy损失函数:

也可以使用RNN来做NER:

每一时刻的输出都是该时刻输入的命名实体标识。

若同样使用cross entropy损失函数:

为改善性能,还可以更新cell,换为GRU或者LSTM。

emmmm。。。显然,用神经网络做要无脑得多。。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180218G0O3BA00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券