自然语言处理学习笔记-lecture06-词法分析与词性标注

英语的形态分析

单词识别

例如:
I’ll see prof. Zhang home after the concert.的识别结果:I/ will/ see/ prof./ Zhang/ home/ after/ the/ concert/.
常见的特殊形式的单词识别如下:
(1) prof., Mr., Ms. Co., Oct. 等放入词典;
(2) Let’s / let’s => let + us
(3) I’am => I + am
(4) {it, that, this, there, what, where}’s =>
{it, that, this, there, what, where} + is
(5) can’t => can + not;
won’t => will + not
(6) {is, was, are, were, has, have, had}n’t =>
{is, was, are, were, has, have, had} + not
(7) X’ve => X + have;
X’ll=> X + will; X’re => X + are
(8) he’s => he + is / has => ?
she’s => she + is / has => ?
(9) X’d Y => X + would (如果 Y 为单词原型)
=> X + had (如果 Y 为过去分词)

形态还原

  • 英语单词的形态还原
    (1) 有规律变化单词的形态还原
    (2) 动词、名词、形容词、副词不规则变化单词的形态还原-建立不规则变化词表
    (3) 对于表示年代、时间、百分数、货币、序数词的数字形态还原
    (4) 合成词的形态还原,例如state-of-the-art

形态分析的一般方法

  1. 查词典,如果词典中有该词,直接确定该词的原形;
  2. 根据不同情况查找相应规则对单词进行还原处理,如果还原后在词典中找到该词,则得到该词的原形;如果找不到相应变换规则或者变换后词典中仍查不到该词,则作为未登录词处理;
  3. 进入未登录词处理模块。

汉语自动分词概要

主要问题

汉语中词的定义界限不清晰,例如单字词与词素,词与短语,还有存在歧义,一种是交集型歧义,例如在组合成分子里面“结合”、“合成”、“成分”和“分子”均构成词,交集串的集合为{合,成,分},因此,链长为3。还有一种是组合型歧义,例如“将来”、“现在”、“才能”、 “学生会”等,都是组合型歧义字段。还有一个问题是未登录词的识别,包括人名、地名、组织机构名,新出现的词汇、术语、个别俗语等

汉语自动分词的基本原则

  • 语义上无法由组合成分直接相加而得到的字串应该合并为一个分词单位。(合并原则)例如:不管三七二十一(成语),或多或少(副词片语)
  • 语类无法由组合成分直接得到的字串应该合并为 一个分词单位。 (合并原则)如:好吃,好喝,好听,好看等

辅助性原则

  • 有明显分隔符标记的应该切分之 (切分原则),分隔标记指标点符号或一个词
  • 附着性语(词)素和前后词合并为一个分词单位 (合并原则)例如:“吝”是一个附着语素,“不吝”、“吝于”等合并成一个词;
  • 使用频率高或共现率高的字串尽量合并为一个分词单位 (合并原则)
  • 双音节加单音节的偏正式名词尽量合并为一个分词单位 (合并原则)
  • 双音节结构的偏正式动词应尽量合并为一个分词单位 (合并原则)
  • 内部结构复杂、合并起来过于冗长的词尽量切分

分词与词性标注结果评价方法

  • 两种测试:封闭测试 / 开放测试,专项测试 / 总体测试
  • 评价指标:
    正确率(Correct ratio/Precision, P ): 测试结果中正确切分或标注的个数占系统所有输出结果的比例。假设系统输出N 个,其中,正确的结果为n个,那么, p = n N × 100 % p = \frac nN \times 100\% p=Nn×100%
    召回率(找回率) (Recall ratio, R ): 测试结果中正确结果的个数占标准答案总数的比例。假设系统输出N 个结果,其中,正确的结果为 n个,而标准答案的个数为M 个,那么, R = n M × 100 % R = \frac nM \times 100\% R=Mn×100% R O O V R_{OOV} ROOV指集外词的召回率; R I V R_{IV} RIV指集内词的召回率;
    F-测度值(F-Measure): 正确率与找回率的综合值。 计算公式为:
    F − m e a s u r e = ( β 2 + 1 ) × P × R β 2 × P + R × 100 % F-measure = \frac{(\beta^2+1)\times P\times R}{\beta^2 \times P + R} \times 100\% Fmeasure=β2×P+R(β2+1)×P×R×100%
    一般取 β = 1 \beta = 1 β=1即:
    F 1 = 2 × P × R P + R × 100 % F1 = \frac{2\times P\times R}{P + R}\times 100\% F1=P+R2×P×R×100%

自动分词基本算法

有词典切分/ 无词典切分,基于规则的方法/ 基于统计的方法

最大匹配法 (Maximum Matching, MM)

有词典切分,机械切分,分为正向最大匹配算法 (Forward MM, FMM) 、逆向最大匹配算法 (Backward MM, BMM) 和双向最大匹配算法 (Bi-directional MM)

正向最大匹配算法 (Forward MM, FMM)

  • i = 0 i=0 i=0, 当前指针 p i p_i pi 指向输入字串初始位置,执行以下操作:
  • 计算当前指针 p i p_i pi 到字串末端的字数 n n n,如果 n = 1 n=1 n=1,转第4步,结束算法。 否则,令 m = m= m=词典中最长单词的字数,如果 n < m nn<m, 令 m = n m=n m=n;
  • 从当前 p i p_i pi 起取 m m m个汉字作为词 w i w_i wi,判断:
    ( a ) (a) (a) 如果 w i w_i wi 是词典中的词,则在 w i w_i wi 后添加一个切分标志,转 ( c ) (c) (c);
    ( b ) (b) (b) 如果 w i w_i wi 不是词典中的词且 w i w_i wi 的长度大于1,将 w i w_i wi 从右端去掉一个字,转 ( a ) (a) (a)步;否则( w i w_i wi 的长度等于1),则在 w i w_i wi 后添加一个切分标志,将 w i w_i wi 作为单字词添加到词典中,执行 ( c ) (c) (c) 步;
    ( c ) (c) (c) 根据 w i w_i wi 的长度修改指针 p i p_i pi 的位置,如果 p i p_i pi 指向字串末端, 转第4步, 否则, i = i + 1 i=i+1 i=i+1,返回 第2步;
  • 输出切分结果,结束分词程序。

优点:程序简单易行,开发周期短;仅需要很少的语言资源(词表),不需要任何词法、句法、语义资源;
弱点:歧义消解的能力差;切分正确率不高,一般在95%左右。

最少分词法(最短路径法)

设待切分字串 S = c 1 c 2 ⋯ c n S = c_1c_2\cdots c_n S=c1c2cn,其中 c i ( i = 1 , 2 , ⋯   , n ) c_i(i = 1,2,\cdots,n) ci(i=1,2,,n)为单个的字, n n n为串的长度, n ≥ 1 n \geq 1 n1,建立一个节点数为 n + 1 n + 1 n+1的有向无环图 G G G,各节点编号依次为 V 0 , V 1 , V 2 , ⋯   , V n V_0,V_1,V_2,\cdots,V_n V0,V1,V2,,Vn,算法描述如下:

  • 相邻节点 v k − 1 , v k v_{k -1},v_k vk1,vk之间建立有向边 < v k − 1 , v k > <vk1,vk>边对应的词默认为 c k , k = 1 , 2 , ⋯   , n c_k,k = 1,2,\cdots,n ck,k=1,2,,n
  • 如果 w = c i c i + 1 ⋯ c j ( 0 < i < j ≤ n ) w = c_ic_{i + 1}\cdots c_j(0\lt i \lt j \leq n) w=cici+1cj(0<i<jn)是一个词,则节点 v i − 1 , v j v_{i - 1},v_j vi1,vj之间建立有向边,边对应的词为 w w w
    最少分词法
  • 重复步骤(2),直到没有新路径(词序列)产生。
  • 从产生的所有路径中,选择路径最短的(词数最少的)作为最终分词结果。

优点:切分原则符合汉语自身规律;需要的语言资源(词表)也不多。
弱点:对许多歧义字段难以区分,最短路径有多条时,选择最终的输出结果缺乏应有的标准;字串长度较大和选取的最短路径数增大时,长度相同的路径数急剧增加,选择最终正确的结果困难越来越大。

基于语言模型的分词方法

对于待切分的句子 S S S W = w 1 w 2 ⋯ w k ( 1 ≤ k ≤ n ) W = w_1w_2\cdots w_k(1 \leq k \leq n) W=w1w2wk(1kn)是一种可能的切分:
W ∗ = a r g   m a x W p ( W ∣ S ) = a r g   m a x W p ( W ) p ( S ∣ W ) \begin{aligned} W^* &= \mathop{arg\ max}\limits_Wp(W|S) \\ &= \mathop{arg\ max}\limits_Wp(W)p(S|W) \\ \end{aligned} W=Warg maxp(WS)=Warg maxp(W)p(SW)
优点:在训练语料规模足够大和覆盖领域足够多时,可以获得较高的切分正确率。
弱点:模型性能较多地依赖于训练语料的规模和质量,训练语料的规模和覆盖领域不好把握; 计算量较大。

基于HMM的分词方法

把输入字串(句子) S S S作为HMM μ \mu μ的输入;切分后的单词串 S w S_w Sw为状态的输出,即观察序列 S w = w 1 w 2 ⋯ w n , n ≥ 1 S_w = w_1w_2\cdots w_n,n \geq 1 Sw=w1w2wn,n1,词性序列 S c S_c Sc为状态序列,每个词性标记 c i c_i ci对应HMM中的一个状态 q i q_i qi S c = c 1 c 2 ⋯ c n S_c = c_1c_2\cdots c_n Sc=c1c2cn
优点:在训练语料规模足够大和覆盖领域足够多时,可以获得较高的切分正确率。
弱点:模型性能较多地依赖于训练语料的规模和质量,训练语料的规模和覆盖领域不好把握; 模型实现复杂、计算量较大。

由字构词 (基于字标注)的分词方法(Character-based tagging )

基本思想:将分词过程看作是字的分类问题。该方法认为,每个字在构造一个特定的词语时都占据着一个确定的构词位置(即词位)。假定每个字只有4个词位:词首(B)、词中(M)、词尾(E)和单独成词(S),那么,每个字归属一特定的词位。
该方法的重要优势在于,它能够平衡地看待词表词和未登录词的识别问题,文本中的词表词和未登录词都是用统一的字标注过程来实现的。在学习构架上,既可以不必专门强调词表词信息,也不用专门设计特定的未登录词识别模块,因此,大大地简化了分词系统的设计

生成式方法与区分式方法的结合

大部分基于词的分词方法采用的是生成式模型(Generativemodel),建立在统计学 和 Bayes 理论的基础之上,而基于字的分词方法采用区分式模型(Discriminative model)(假定每个字只有4个词位:词首(B)、词中(M)、词尾(E)和单独成词(S)),基于字的区分模型有利于处理集外词,而基于词的生成模型更多地考虑了词汇之间以及词汇内部字与字之间的依存关系。因此,可以将两者的优势结合起来。

  • 结合方法1:
    自然语言处理学习笔记-lecture06-词法分析与词性标注_第1张图片
  • 结合方法2:使用插值法
    S c o r e ( t k ) = α × log ⁡ ( P ( [ c , t ] k ∣ [ c , t ] k − 2 k − 1 ) ) + ( 1 − α ) × log ⁡ ( P ( t k ∣ c k − 2 k + 2 ) ) Score(t_k) = \alpha \times\log(P([c,t]_k|[c,t]^{k - 1}_{k - 2})) + (1 - \alpha)\times \log(P(t_k|c_{k - 2}^{k + 2})) Score(tk)=α×log(P([c,t]k[c,t]k2k1))+(1α)×log(P(tkck2k+2))
    前面是生成式模型,后面是判别式模型

未登录词识别

包含命名实体(Named Entity, NE)人名(中国人名和外国译名)、地名、组织机构名、数字、日期、货币数量;其他新词,专业术语、新的普通词汇等。

姓名的识别

计算潜在姓名的概率估值及相应姓氏的姓名阈值(threshold value),根据姓名概率评价函数和修饰规则对潜在的姓名进 行筛选。
计算概率估计值,设姓名 Cname = Xm1m2,其中 X 表示姓,m1m2分别表示名字首字和名字尾字。分别用下列公式计算姓氏和名字的使用频率:
F ( X ) = X 用作姓氏 X 出现的总次数 F ( m 1 ) = m 1 作为名字首字出现的次数 m 1 出现的总次数 F ( m 2 ) = m 2 作为名字尾字出现的次数 m 2 出现的总次数 P ( C n a m e ) = { F ( X ) × F ( m 1 ) × F ( m 2 ) 复名情况 F ( X ) × F ( m 2 ) 单名情况 F(X) = \frac{X用作姓氏}{X出现的总次数} \\ F(m_1) = \frac{m_1作为名字首字出现的次数}{m_1出现的总次数} \\ F(m_2) = \frac{m_2作为名字尾字出现的次数}{m_2出现的总次数} \\ P(Cname) = \begin{cases} F(X)\times F(m_1)\times F(m_2) & 复名情况 \\ F(X)\times F(m_2) & 单名情况 \end{cases} F(X)=X出现的总次数X用作姓氏F(m1)=m1出现的总次数m1作为名字首字出现的次数F(m2)=m2出现的总次数m2作为名字尾字出现的次数P(Cname)={F(X)×F(m1)×F(m2)F(X)×F(m2)复名情况单名情况
姓氏 X X X构成姓名的最小阈值:
T m i n ( X ) = { F ( X ) × M i n ( F ( m 1 ) × F ( m 2 ) ) 复名情况 F ( X ) × M i n ( F ( m 2 ) ) 单名情况 T_{min}(X) = \begin{cases} F(X)\times Min( F(m_1)\times F(m_2)) & 复名情况 \\ F(X)\times Min (F(m_2)) & 单名情况 \end{cases} Tmin(X)={F(X)×Min(F(m1)×F(m2))F(X)×Min(F(m2))复名情况单名情况
姓名的评价函数:
f = ln ⁡ P ( C n a m e ) f = \ln P(Cname) f=lnP(Cname)
对于特定的姓氏 X X X 通过训练语料得到一阈值 β X \beta_X βX ,当 f f f 大于 β X \beta_X βX 时,该识别的汉字串确定为中文姓名。下面是姓名的修饰规则:
如果姓名前是一个数字,或者与“.”字符的距离小于 2个字节,则否定此姓名。左界规则:若潜在姓名前面是一称谓,或一标点符号,或者潜在姓名在句首,或者潜在的姓名的姓氏使用频率为100%,则姓名的左界确定。右界规则:若姓名后面是一称谓,或者是一指界动词(如,说,是,指出,认为等)或标点符号,或者潜在的姓名在句尾,或者潜在姓名的尾字使用频率为100%,则姓名的右界确定。含重合部分的潜在姓名不可能同时成立。利用各种规则消除冲突的潜在姓名。

词性标注概述

词性(part-of-speech, POS)标注(tagging)的主要任务是消除词性兼类歧义。在汉语中会出现形同音不同,同形、同音,但意义毫不相干等情况

词性标注方法

基于规则的词性标注方法

  • TAGGIT 词性标注系统 (Brown University)手工编写词性歧义消除规则
  • 山西大学的词性标注系统 [刘开瑛,2000]手工编写消歧规则,建立兼类词典,词性可能出现的概率高低排列,构造兼类词识别规则
  • 根据词语的结构建立词性标注规则

基于错误驱动的机器学习方法

  • 初始词性赋值
  • 对比正确标注的句子,自动学习结构转换规则
  • 利用转换规则调整初始赋值

基于 HMM 的词性标注方法

  • 词序列作为观察输出;
  • 词性作为隐含状态,每个候选词都是某种词性的输出;
  • 词性的种类数目就是状态的个数(N),每一种词性对应的词数,就是该对应状态的输出符号数(M);
  • 通过 Viterbi 搜索求解观察输出与隐含状态的最优路径。 可通过大规模训练样本(如北京大学标注语料)学习模型的参数。

你可能感兴趣的:(自然语言处理,自然语言处理,学习,人工智能)