当前位置:  开发笔记 > 编程语言 > 正文

使用spaCy进行POS标记

如何解决《使用spaCy进行POS标记》经验,为你挑选了1个好方法。

我正在尝试使用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"

它认识到脆皮是一个形容词.这是输出:

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

我认为在第一种情况下,脆皮没有被标记为形容词的主要原因是因为dosa被标记为'NN'而薯条在第二种情况下被标记为'NNS'.

在第二种情况下,有什么方法可以让我很难被标记为形容词吗?



1> mbatchkarov..:

TL;DR: You should accept the occasional error.

细节:

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

一般而言,您不应根据具体情况判断统计系统的表现.现代英语PoS标签的准确率约为97%,与普通人类大致相同.你将不可避免地得到一些错误.然而,模型的错误将与人为错误不同,因为两者已"学会"如何以不同的方式解决问题.有时模型会被你和我认为显而易见的事情弄糊涂,例如你的例子.这并不意味着它总体上很糟糕,或者PoS标记是您真正的问题.

推荐阅读
落单鸟人
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有