一旦科学插上幻想的翅膀,它就能赢得胜利。—— 迈克尔·法拉第
词性标注简介
词性标注是在给定句子中判定每个词的语法范畴,确定其词性并加以标注的过程,即把每个词标注其为名词、动词、形容词等。如:“黑客帝国是部很好看的电影”,对其词性标注的结果如下:“黑客帝国/其他专名,是/动词,部/量词,很/副词,好看/形容词,的/结构助词,电影/名词”。
词性标注最简单的方法是从语料库中统计每个词所对应的高频词性,将其作为默认词性,这种显然还有很大提升空间。使用机器学习(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(隐马尔科夫模型)共同作用。词性标注的流程如下:
- 首先基于正则表达式进行汉字判断,jieba源代码posseg中正则表达式为:
re_han_internal = re.compile("([u4E00-u9FD5a-zA-Z0-9 #&._] )")
- 若符合上面的正则,则判定为汉字,然后基于前缀词典(如词“北京大学”的前缀分别是“北”、“北京”、“北京大”;词“大学”的前缀是“大”。)对句子进行切分,得到所有的切分可能,根据切分位置,构建一个有向无环图(对每个字都是通过在文本中的位置来标记的,因此可以构建一个以位置为key,相应划分的末尾词位置构成的列表为value的映射),再通过动态规划算法,计算得到最大概率路径,同时在前缀词典中找出它所分出的词性,若在词典中未找到,则赋予词性为“x”(代表未知)。在此过程中,若设置使用HMM,会对未登录词(即没有被收录在分词词表中但必须切分出来的词,包括各类专有名词(人名、地名、企业名等)、缩写词、新增词汇等等),会使用HMM的方式进行词性标注。
- 若不符合上面的正则,则继续通过其他正则进行类型匹配,分别赋予“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分词设置自定义词典时,尽量补齐词性。