词性标注

2022-05-31 20:46:19 浏览数 (1)

一旦科学插上幻想的翅膀,它就能赢得胜利。—— 迈克尔·法拉第

词性标注简介

词性标注是在给定句子中判定每个词的语法范畴,确定其词性并加以标注的过程,即把每个词标注其为名词、动词、形容词等。如:“黑客帝国是部很好看的电影”,对其词性标注的结果如下:“黑客帝国/其他专名,是/动词,部/量词,很/副词,好看/形容词,的/结构助词,电影/名词”。

词性标注最简单的方法是从语料库中统计每个词所对应的高频词性,将其作为默认词性,这种显然还有很大提升空间。使用机器学习(machine learning)方法实现词性标注,常用的词性标注算法包括隐马尔可夫模型(Hidden Markov Model, HMM)、条件随机场(Conditional random fields, CRF)等。

词性标注规范

词性标注将一个个词标注成名词、动词、形容词、副词等,需要用字母标记,如“n”,“v”,“a”,“d”。

北大标准/中科院标准

词性编码

词性名称

注解

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。

vg

动语素

动词性语素。动词代码为 v。在语素的代码g前面置以v。

v

动词

取英语动词 verb的第一个字母。

vd

副动词

直接作状语的动词。动词和副词的代码并在一起。

vn

名动词

指具有名词功能的动词。动词和名词的代码并在一起。

w

标点符号

x

非语素字

非语素字只是一个符号,字母 x通常用于代表未知数、符号。

y

语气词

取汉字“语”的声母。

z

状态词

取汉字“状”的声母的前一个字母。

un

未知词

不可识别词及用户自定义词组。取英文Unkonwn首两个字母。(非北大标准,CSW分词中定义)

基于jieba的词性标注

前面说过jieba的分词功能,这块主要涉及jieba的词性标注功能。类似其分词流程,jieba的词性标注也是结合规则和统计的方式,其在词性标注过程中,词典匹配和HMM(隐马尔科夫模型)共同作用。词性标注的流程如下:

  1. 首先基于正则表达式进行汉字判断,jieba源代码posseg中正则表达式为:
代码语言:javascript复制
re_han_internal = re.compile("([u4E00-u9FD5a-zA-Z0-9 #&._] )")
  1. 若符合上面的正则,则判定为汉字,然后基于前缀词典(如词“北京大学”的前缀分别是“北”、“北京”、“北京大”;词“大学”的前缀是“大”。)对句子进行切分,得到所有的切分可能,根据切分位置,构建一个有向无环图(对每个字都是通过在文本中的位置来标记的,因此可以构建一个以位置为key,相应划分的末尾词位置构成的列表为value的映射),再通过动态规划算法,计算得到最大概率路径,同时在前缀词典中找出它所分出的词性,若在词典中未找到,则赋予词性为“x”(代表未知)。在此过程中,若设置使用HMM,会对未登录词(即没有被收录在分词词表中但必须切分出来的词,包括各类专有名词(人名、地名、企业名等)、缩写词、新增词汇等等),会使用HMM的方式进行词性标注。
  2. 若不符合上面的正则,则继续通过其他正则进行类型匹配,分别赋予“x”(未知)“m”(数词)和“eng”(英文)。

例子:

代码语言:javascript复制
>>> import jieba.posseg as pseg
>>> words = pseg.cut("去北京大学玩")
>>> print(['{}/{}'.format(word, flag) for word, flag in words])
Building prefix dict from the default dictionary ...
Loading model from cache /var/folders/z8/vyy4cxb5461_1tzkw0qjdk300000gn/T/jieba.cache
Loading model cost 0.643 seconds.
Prefix dict has been built succesfully.
['去/v', '北京大学/nt', '玩/v']

注:jieba支持自定义词典,其中词频和词性可以省略。但在词性标注中,若在自定义词典中省略词性,则最终切分词的词性将变成“x”(代表未知),对语法分析、词性统计等场景中的结果有一定影响,因此,使用jieba分词设置自定义词典时,尽量补齐词性。

0 人点赞