定义
词性标注(Part-Of-Speech tagging, POS tagging)也被称为语法标注(grammatical tagging)或词类消疑(word-category disambiguation),是语料库语言学(corpus linguistics)中将语料库内单词的词性按其含义和上下文内容进行标记的文本数据处理技术 。
词性标注可以由人工或特定算法完成,使用机器学习(machine learning)方法实现词性标注是自然语言处理(Natural Language Processing, NLP)的研究内容。常见的词性标注算法包括隐马尔可夫模型(Hidden Markov Model, HMM)、条件随机场(Conditional random fields, CRFs)等 。
词性标注主要被应用于文本挖掘(text mining)和NLP领域,是各类基于文本的机器学习任务,例如语义分析(semantic analysis)和指代消解(coreference resolution)的预处理步骤。
算法
和分词一样,词性标注算法也分为两大类,基于字符串匹配的字典查找算法和基于统计的算法。jieba分词就综合了两种算法,对于分词后识别出来的词语,直接从字典中查找其词性。而对于未登录词,则采用HMM隐马尔科夫模型和viterbi算法来识别。
基于字符串匹配的字典查找算法 先对语句进行分词,然后从字典中查找每个词语的词性,对其进行标注即可。jieba词性标注中,对于识别出来的词语,就是采用了这种方法。这种方法比较简单,通俗易懂,但是不能解决一词多词性的问题,因此存在一定的误差。
下图即为jieba分词中的词典的一部分词语。每一行对应一个词语,分为三部分,分别为词语名 词数 词性。因此分词完成后只需要在字典中查找该词语的词性即可对其完成标注。 基于统计的词性标注算法 和分词一样,我们也可以通过HMM隐马尔科夫模型来进行词性标注。观测序列即为分词后的语句,隐藏序列即为经过标注后的词性标注序列。起始概率 发射概率和转移概率和分词中的含义大同小异,可以通过大规模语料统计得到。观测序列到隐藏序列的计算可以通过viterbi算法,利用统计得到的起始概率 发射概率和转移概率来得到。得到隐藏序列后,就完成了词性标注过程。
基于HMM、viterbi算法进行英文词性标注
一、准备训练数据
tag2id, id2tag = {
}, {
} # maps tag to id . tag2id: {
"VB": 0, "NNP":1,..} , id2tag: {
0: "VB", 1: "NNP"....}
word2id, id2word = {
}, {
} # maps word to id
for line in open('traindata.txt'):
items = line.split('/')
word, tag = items[0], items[1].rstrip() # 抽取每一行里的单词和词性
if word not in word2id:
word2id[word] = len(word2id)
id2word[len(id2word)] = word
if tag not in tag2id:
tag2id[tag] = len(tag2id)
id2tag[len(id2tag)] = tag
M = len(word2id) # M: 词典的大小、# of words in dictionary
N = len(tag2id) # N: 词性的种类个数 # of tags in tag set
print(word2id)
{
'Newsweek': 0,
',': 1,
'trying': 2,
'to': 3,
'keep': 4,
'pace': 5,
'with': 6,
'rival': 7,
'Time': 8,
'magazine': 9,
'announced': 10,
'new': 11,
'advertising': 12,
'rates': 13,
'for': 14,
'1990': 15,
'and': 16,
'said': 17,
'it': 18,
'will': 19,
'introduce': 20,
'a': 21,
'incentive': 22,
'plan': 23,
'advertisers': 24,
'.': 25,
'The': 26,
'ad': 27,
'from': 28,
'unit': 29,
'of': 30,
'the': 31,
'Washington': 32,
'Post': 33,
'Co.': 34
|