使用spaCy进行POS标记

pd176

我正在尝试使用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')]

在这里,它作为名词而不是形容词返回酥脆。但是,如果我使用像

a="we had crispy fries"

它认识到香脆是一个形容词。这是输出:

[(we , u'PRP'), (had , u'VBD'), (crispy , u'JJ'), (fries, u'NNS')]

我认为,在第一种情况下未将脆皮标记为形容词的主要原因是,在第二种情况下,将dosa标记为“ NN”,而将薯条标记为“ NNS”。

在第二种情况下,还有什么方法可以使我变得酥脆而被标记为形容词?

姆巴特卡罗夫

TL;DR: You should accept the occasional error.

细节:

Spacy的标记器是统计性的,这意味着您所获得的标记是根据训练期间显示的数据得出的最佳估计。我猜这些数据中没有这个词dosa标记者必须猜测,并猜测错误。没有一种简单的方法可以纠正其输出,因为它没有使用规则或您可以轻松修改的任何内容。该模型已经过标准英语语料库的训练,这可能与您用于(域)的语言种类完全不同。如果错误率对于您的目的而言太高,则可以使用特定于域的数据来重新训练模型。但是,这将非常费力。问问自己您要达到的目标,以及PoS标记中3%的错误率是否是最严重的问题。

通常,您不应根据具体情况来判断统计系统的性能。现代英语PoS标记器的准确性约为97%,与普通人大致相同。您不可避免地会得到一些错误。但是,模型的错误将与人为错误不同,因为两者都“学习”了如何以不同方式解决问题。有时,您和我认为很明显的事情(例如您的例子)会使模型感到困惑。这并不意味着总体上不好,也不是PoS标记是您真正的问题。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章