Параметры для расчета точности части речевого тегера

Я новичок в обработке естественного языка, и у меня есть этот базовый вопрос о расчете точности POS Tagger (тегер использует корпус):

(Не путайте слово "набор" ниже с математическим определением набора. Я просто использую его как обычное английское слово для обозначения некоторого "группы" или "сопоставления")

Существуют различные метрики точности, такие как точность / повторный вызов и матрица путаницы. Оба из них требуют следующие две вещи в качестве входного параметра:
1. Прогнозируемый набор результатов: после запуска POS Tagger на входе у нас есть прогноз тегов для входных слов. Этот параметр я понимаю; это в основном то, что сгенерировал теггер, используя корпус и некоторые статистические методы. Этот набор - наш прогноз
2. Фактический набор результатов. Этот набор представляет собой фактический тег каждого слова. Этот набор является реальностью.
Мой вопрос об этом втором параметре: как этот набор должен быть "построен". Я должен вручную создать набор, который сопоставляет каждое входное слово с правильным тегом? Под ручным я имею в виду чтение корпуса, а затем нахождение соответствующего тега для каждого входного слова.

Поэтому мой вопрос в основном таков: если есть какой-то код, который вычисляет точность POS-тегера, на какую точность рассчитывается? Как этот код узнает, как правильно сопоставить слова с тегами? И если он знает правильное сопоставление слов с тегами, то почему этот код не используется для выполнения самого тегирования? (Я надеюсь, что читатель понимает мое замешательство здесь).

Я приведу этот пример:
Входное предложение: я мальчик.
Предсказанные теги: I_Pronoun am_Noun a_Article boy_Verb. (упрощенные имена для тегов, и, очевидно, тегирование было сделано неправильно)

Фактическая пометка должна быть: I_Pronoun am_Verb a_Article boy_Noun
Я знаю, какой должна быть маркировка, но как код калькулятора точности узнает, какой должна быть метка? Должен ли я вручную подготовить сопоставление правильных тегов для каждого входного предложения, а затем передать его в качестве параметра?

Обратите внимание, что я знаю, как работает расчет для Precision/Recall. Я просто спрашиваю: как мне сказать, какой правильный набор тегов?

1 ответ

Как сказал Всеволод Дёмкин, если вы хотите протестировать свою программу, вам нужно иметь предварительно помеченные данные, соответствующие реальности. Вы можете создать свой собственный вручную или использовать доступный, например, коричневый корпус. Так как один из ваших тегов scikit-learn Я предполагаю, что вы используете NLTK, который позволяет использовать его напрямую через nltk.download(),

Хотя мне не известны подробности реализации, как только вы избавитесь от прогнозируемых и фактических наборов, вы сможете использовать предоставленные функции scikit-learn, такие как confusion_matrix, Например,

predicted_tags = ['NOUN', 'VERB']
real_tags = ['NOUN', 'PRONOUN']
confusion_matrix(y_true, y_pred)

вернусь

array([[1, 0, 0],
       [0, 0, 1],
       [0, 0, 0]])
Другие вопросы по тегам