Подтвердить что ты не робот

Пометка POS с помощью spaCy

Я пытаюсь выполнить маркировку POS с помощью модуля spaCy в Python.

Вот мой код для того же

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')]

Я думаю, что основной причиной, почему хрустящий не был помечен как прилагательное в первом случае, было то, что доса была помечена как "NN", тогда как фри был помечен как "NNS" во втором случае.

Есть ли способ, чтобы я мог хрустящим быть помеченным как прилагательное во втором случае?

4b9b3361

Ответ 1

TL;DR: You should accept the occasional error.

Подробнее:

Тег-тег Spacy является статистическим, что означает, что теги, которые вы получаете, являются его лучшей оценкой, основанной на данных, которые были показаны во время обучения. Я бы предположил, что эти данные не содержат слова dosa. Теггер должен был догадаться, и догадался. Существует не простой способ исправить его вывод, потому что он не использует правила или что-то, что вы можете легко изменить. Модель была обучена на стандартном корпусе английского языка, который может сильно отличаться от того, какой язык вы используете для (домена). Если частота ошибок слишком высока для ваших целей, вы можете повторно обучить модель, используя данные, относящиеся к домену. Это будет очень трудоемко. Спросите себя, чего вы пытаетесь достичь, и является ли 3% -ная ошибка в пометке PoS худшей из ваших проблем.

В целом, вы не должны оценивать эффективность статистической системы в каждом конкретном случае. Точность современных английских тегов PoS около 97%, что примерно совпадает с обычным человеком. Вы неизбежно получите некоторые ошибки. Однако ошибки модели не будут такими же, как человеческие ошибки, поскольку они "научились" решать проблему по-другому. Иногда модель путается с вещами, которые вы и я считаем очевидными, например. ваш пример. Это не значит, что это плохо в целом, или что пометка PoS - ваша настоящая проблема.