Table of Contents
词性标注
简介
词性标注规范
jieba
命名实体识别
简介
基于条件随机场的命名实体识别
词性是词汇基本的语法属性,也称为词类。词性标注是在给定句子中判定每个词的语法范畴,确定其词性并加以标注的过程。词性标注是很多NLP任务的预处理步骤,如句法分析,经过词性标注后的文本会带来很大的便利性,但也不是不可或缺的步骤。整体上看在中文中,大多数词语,尤其是实词,一般只有一到两个词性,且其中一个词性的使用频率远大于另一个,即使每次都单纯选取最高频词性,也能实现80%准确率。
词性标注最简单的方法是从语料库中统计每个词所对应的高频词性,将其作为默认词性,这样显然还有上升空间。目前较主流的方法是同分词一样,将句子的词性标注作为一个序列标注问题来解决,同样分词中的常用方法,如HMM, CRF都可以在词性标注上使用。
词性需要有一定的规范,如将词分为名词、形容词、动词,然后用'n' 'adj' 'v'来表示。中文领域尚无统一的标注标准,较为主流的有北大词性标注集合宾州词性标注集。北大词性标注集部分标注词性如下表所示:
Ag 形语素 形容词性语素。形容词代码为a,语素代码g前面置以A。
a 形容词 取英语形容词adjective的第1个字母。
ad 副形词 直接作状语的形容词。形容词代码a和副词代码d并在一起。
an 名形词 具有名词功能的形容词。形容词代码a和名词代码n并在一起。
b 区别词 取汉字“别”的声母。
c 连词 取英语连词conjunction的第1个字母。
Dg 副语素 副词性语素。副词代码为d,语素代码g前面置以D。
d 副词 取adverb的第2个字母,因其第1个字母已用于形容词。
e 叹词 取英语叹词exclamation的第1个字母。
f 方位词 取汉字“方” 的声母。
g 语素 绝大多数语素都能作为合成词的“词根”,取汉字“根”的声母。
h 前接成分 取英语head的第1个字母。
i 成语 取英语成语idiom的第1个字母。
j 简称略语 取汉字“简”的声母。
k 后接成分
l 习用语 习用语尚未成为成语,有点“临时性”,取“临”的声母。
m 数词 取英语numeral的第3个字母,n,u已有他用。
Ng 名语素 名词性语素。名词代码为n,语素代码g前面置以N。
n 名词 取英语名词noun的第1个字母。
nr 人名 名词代码n和“人(ren)”的声母并在一起。
ns 地名 名词代码n和处所词代码s并在一起。
nt 机构团体 “团”的声母为t,名词代码n和t并在一起。
nz 其他专名 “专”的声母的第1个字母为z,名词代码n和z并在一起。
o 拟声词 取英语拟声词onomatopoeia的第1个字母。
p 介词 取英语介词prepositional的第1个字母。
q 量词 取英语quantity的第1个字母。
r 代词 取英语代词pronoun的第2个字母,因p已用于介词。
s 处所词 取英语space的第1个字母。
Tg 时语素 时间词性语素。时间词代码为t,在语素的代码g前面置以T。
t 时间词 取英语time的第1个字母。
u 助词 取英语助词auxiliary 的第2个字母,因a已用于形容词。
Vg 动语素 动词性语素。动词代码为v。在语素的代码g前面置以V。
v 动词 取英语动词verb的第一个字母。
vd 副动词 直接作状语的动词。动词和副词的代码并在一起。
vn 名动词 指具有名词功能的动词。动词和名词的代码并在一起。
w 标点符号
x 非语素字 非语素字只是一个符号,字母x通常用于代表未知数、符号。
y 语气词 取汉字“语”的声母。
z 状态词 取汉字“状”的声母的前一个字母。
类似jieba分词的分词流程,jiaba的词性标注同样是结合规则和统计的方式,词典匹配和HMM共同作用。大致流程如下:
首先基于正则表达式进行汉字判断。
如果判断是汉字,则基于前缀词典构建有向无环图,再基于有向无环图计算最大概率路径,同时在前缀词典中找到它所分出的词性。如果在词典中未找到,则赋予词性未'x'(未知),或者通过HMM方式进行词性标注。
如果不是汉字,则继续通过正则表达式进行类型判断,分别标记为'm'(数词)或'eng'(英文)。
HMM是如何应用在词性标注任务中的?
在分词任务中,设置了'B' 'S' 'M' 'E'四种标签,与句子中的每个字符一一对应。而在词性标注任务中,jieba分词采用了联合模型方法,即将基于字标注的分词方法和词性标注结合起来,使用复合标注集。例如,对于名词“人民”,分词的标注序列是“BE”,于是“人”的标注就是“B_n”,“民”的标注就是“E_n”,这样就与HMM分词的实现过程一样了,只需要更换合适的训练语料。
同自动分词、词性标注一样,命名实体识别(Named EntitiesRecognition,NER)也是自然语言处理的一个基础任务,是信息抽取、信息检索、机器翻译、问答系统等NLP技术重要组成部分。其目的是识别语料中人名、地名、组织机构名等命名实体。
命名实体是命名实体识别的研究主体,一般包括三大类(实体类、时间类和数字类)和七小类(人名、地名、机构名、时间、日期、货币和百分比)命名实体。其中人名、地名、机构名相对于其他实体识别较复杂,无法用模式匹配的方式获得较好的识别效果,是近年来研究的主要部分。评判一个命名实体是否被正确识别包括两个方面:实体的边界是否正确和实体的类型是否标注正确。中文命名实体识别的主要难点有:各类命名实体店数量多、构成规律复杂、嵌套情况复杂、长度不确定。
命名实体识别的主要技术方法也分为三类:基于规则的方法、基于统计的方法、混合方法等。
基于规则的方法
基于规则的方法多采用语言学专家手工构造规则模板,选用特征包括统计信息、标点符号、关键字、指示词和方向词、位置词(如尾字)、中心词等方法,以模式和字符串相匹配为主要手段,这类系统大多依赖于知识库和词典的建立。基于规则和词典的方法是命名实体识别中最早使用的方法,一般而言,当提取的规则能比较精确地反映语言现象时,基于规则的方法性能要优于基于统计的方法。
但是这些规则往往依赖于具体语言、领域和文本风格,编制过程耗时且难以涵盖所有的语言现象,特别容易产生错误,系统可移植性不好,对于不同的系统需要语言学专家重新书写规则。基于规则的方法的另外一个缺点是代价太大,存在系统建设周期长、移植性差而且需要建立不同领域知识库作为辅助以提高系统识别能力等问题。
基于统计的方法
基于统计机器学习的方法主要包括隐马尔可夫模型(HiddenMarkovMode,HMM)、最大熵(MaxmiumEntropy,ME)、支持向量机(Support VectorMachine,SVM)、条件随机场(ConditionalRandom Fields,CRF)等。
在基于统计的这四种学习方法中,最大熵模型结构紧凑,具有较好的通用性,主要缺点是训练时间长复杂性高,有时甚至导致训练代价难以承受,另外由于需要明确的归一化计算,导致开销比较大。而条件随机场为命名实体识别提供了一个特征灵活、全局最优的标注框架,但同时存在收敛速度慢、训练时间长的问题。一般说来,最大熵和支持向量机在正确率上要比隐马尔可夫模型高一些,但隐马尔可夫模型在训练和识别时的速度要快一些,主要是由于在利用 Viterbi 算法求解命名实体类别序列时的效率较高。隐马尔可夫模型更适用于一些对实时性有要求以及像信息检索这样需要处理大量文本的应用,如短文本命名实体识别。
基于统计的方法对特征选取的要求较高,需要从文本中选择对该项任务有影响的各种特征,并将这些特征加入到特征向量中。依据特定命名实体识别所面临的主要困难和所表现出的特性,考虑选择能有效反映该类实体特性的特征集合。主要做法是通过对训练语料所包含的语言信息进行统计和分析,从训练语料中挖掘出特征。有关特征可以分为具体的单词特征、上下文特征、词典及词性特征、停用词特征、核心词特征以及语义特征等。
基于统计的方法对语料库的依赖也比较大,而可以用来建设和评估命名实体识别系统的大规模通用语料库又比较少。
混合方法
自然语言处理并不完全是一个随机过程,单独使用基于统计的方法使状态搜索空间非常庞大,必须借助规则知识提前进行过滤修剪处理。目前几乎没有单纯使用统计模型而不使用规则知识的命名实体识别系统,在很多情况下是使用混合方法:
条件随机场(Conditional Random Fields,简称 CRF)是给定一组输入序列条件下另一组输出序列的条件概率分布模型,在自然语言处理中得到了广泛应用。
随机场
随机场是由若干个位置组成的整体,当按照某种分布给每一个位置随机赋予一个值之后,其全体就叫做随机场。假如我们有一个十个词形成的句子需要做词性标注。这十个词每个词的词性可以在我们已知的词性集合(名词,动词……)中去选择。当我们为每个词选择完词性后,这就形成了一个随机场。
马尔科夫随机场
马尔科夫随机场是随机场的特例,它假设随机场中某一个位置的赋值仅仅与和它相邻的位置的赋值有关,和与其不相邻的位置的赋值无关。拿十个词的句子词性标注为例,如果我们假设所有词的词性只和它相邻的词的词性有关时,这个随机场就特化成一个马尔科夫随机场。比如第三个词的词性除了与自己本身的位置有关外,还只与第二个词和第四个词的词性有关。
CRF条件随机场
CRF 是马尔科夫随机场的特例,它假设马尔科夫随机场中只有 X 和 Y 两种变量,X 一般是给定的,而 Y 一般是在给定 X 的条件下我们的输出。这样马尔科夫随机场就特化成了条件随机场。我们给出准确的数学语言描述:设 X 与 Y 是随机变量,P(Y|X) 是给定 X 时 Y 的条件概率分布,若随机变量 Y 构成的是一个马尔科夫随机场,则称条件概率分布 P(Y|X) 是条件随机场。
链式条件随机场
在CRF的定义中,我们并没有要求X和Y有相同的结构。而实现中,我们一般都假设X和Y有相同的结构,即:X=(X1,X2,...Xn),Y=(Y1,Y2,...Yn)。X和Y有相同的结构的CRF就构成了链式条件随机场(Chain-structured Conditional Random Fields)。下文默认CRF即为链式CRF。
机器学习模型
在CRF中,定义一个特征函数集合,然后使用这个特征函数集合为标注序列进行打分,据此选出最靠谱的标注序列。特征函数分为两类,第一类是定义在Y节点上的节点特征函数(状态函数),这类特征函数只和当前节点有关,记为:sl(yi,x,i),l=1,2,...L。第二类是定义在Y上下文的局部特征函数(转移函数),这类特征函数只和当前节点和上一个节点有关,记为:tk(yi−1,yi,x,i),k=1,2,...K。同时,我们可以为每个特征函数赋予一个权值,用以表达我们对这个特征函数的信任度,tk的权重系数是λk,sl的权重系数是μl。假设我们在某一节点我们有K1个局部特征函数和K2个节点特征函数,总共有K=K1+K2个特征函数。我们用一个特征函数fk(yi−1,yi,x,i)来统一表示,可得CRF参数化的简化形式:
使用CRF来做命名实体识别时,目标是求argmaxP(Y=y|x)。该问题与HMM求解最大可能序列路径一样,也是采用维特比算法。当解决标注问题时,HMM与CRF都是不错的选择。然而较于HMM,CRF能够捕捉全局的信息,并能够进行灵活的特征设计,因此,效果要比HMM好不少。当然,实现起来复杂度也会高很多。
实例:CRF++实体命名识别
参考链接
条件随机场CRF(一)从随机场到线性链条件随机场
Python自然语言处理实战