我正在尝试使用Python中的spaCy模块进行POS标记。
这是我的密码
from spacy.en import English, LOCAL_DATA_DIR
import spacy.en
import os
data_dir = os.environ.get('SPACY_DATA', LOCAL_DATA_DIR)
nlp = English(parser=False, tagger=True, entity=False)
def print_fine_pos(token):
return (token.tag_)
def pos_tags(sentence):
sentence = unicode(sentence, "utf-8")
tokens = nlp(sentence)
tags = []
for tok in tokens:
tags.append((tok,print_fine_pos(tok)))
return tags
a = "we had crispy dosa"
print pos_tags(a)
输出:
[(We , u'PRP'), (had , u'VBD'), (crispy , u'NN'), (dosa, u'NN')]
在这里,它以名词而不是形容词的形式返回crispy。但是,如果我用一个测试句子
a="we had crispy fries"
它认识到crispy是一个形容词。输出如下:
[(we , u'PRP'), (had , u'VBD'), (crispy , u'JJ'), (fries, u'NNS')]
我认为第一种情况下crispy没有被标记为形容词的主要原因是dosa被标记为“NN”,而第二种情况下fries被标记为“NNS”。
在第二种情况下,我有没有办法把crispy也标记为形容词呢?
TL;DR: You should accept the occasional error.
详细信息:
Spacy的标签是统计的,这意味着你得到的标签是基于训练期间显示的数据的最佳估计。我猜这些数据中没有
dosa
这个词。标记人不得不猜测,而且猜错了。没有一种简单的方法可以更正它的输出,因为它没有使用规则或任何您可以轻松修改的内容。这个模型是在一个标准的英语语料库上训练的,它可能与你所使用的语言(领域)大不相同。如果错误率对于您的目的来说太高,您可以使用特定于域的数据重新训练模型。不过,这将非常辛苦。问问你自己你想达到什么目标,3%的词性标注错误率是否是你最糟糕的问题。一般来说,你不应该根据具体情况来判断统计系统的性能。现代英语词性标记的准确度是around 97%,与普通人大致相同。你不可避免地会犯一些错误。然而,模型中的错误并不等同于人为错误,因为两人已经“学会”了如何以不同的方式解决问题。有时模型会被你和我认为显而易见的事情弄糊涂,比如你的例子。这并不意味着它是坏的整体,或词性标记是你真正的问题。
相关问题 更多 >
编程相关推荐