Вычисление точности и отзыва в распознавании имен
Теперь я собираюсь сообщить результаты с помощью Named Entity Recognition. Одна вещь, которую я нахожу немного запутанной, заключается в том, что мое понимание точности и напоминания состоит в том, что мы просто суммируем истинные положительные результаты, истинные негативы, ложные срабатывания и ложные негативы по всем классам.
Но теперь мне кажется неправдоподобным, что я думаю об этом, поскольку каждая ошибочная классификация давала бы одновременно одно ложное положительное и одно ложное отрицание (например, токен, который должен был быть помечен как "А", но был помечен как "В", является false для "A" и false для "B" ). Таким образом, количество ложных срабатываний и ложных негативов над всеми классами будет одинаковым, что означает, что точность (всегда!) Равна отзыву. Это просто не может быть правдой, так что в моих рассуждениях есть ошибка, и мне интересно, где это. Это, безусловно, что-то совершенно очевидное и прямолинейное, но оно ускользает от меня прямо сейчас.
Ответы
Ответ 1
Точность и отзыв, как правило, вычисляются (это то, что я использую в своих документах) - это измерение объектов друг против друга. Предположим, что основная истина имеет следующее (без каких-либо различий относительно того, к какому типу сущностей они относятся)
[Microsoft Corp.] CEO [Steve Ballmer] announced the release of [Windows 7] today
У этого объекта есть 3 объекта.
Предполагая, что ваше фактическое извлечение имеет следующий
[Microsoft Corp.] [CEO] [Steve] Ballmer announced the release of Windows 7 [today]
У вас есть точное соответствие для Microsoft Corp
, ложных срабатываний для CEO
и today
, ложного отрицательного значения для Windows 7
и соответствия подстроки для Steve
Мы вычисляем точность и отзыв, сначала определяя критерии соответствия. Например, они должны быть точным соответствием? Это совпадение, если они перекрываются вообще? Имеют ли сущность типы? Обычно мы хотим обеспечить точность и отзыв для нескольких из этих критериев.
Точное соответствие: True Positives = 1 (Microsoft Corp.
, единственное точное совпадение), False Positives = 3 (CEO
, today
и Steve
, что не точное совпадение), False Negatives = 2 (Steve Ballmer
и Windows 7
)
Precision = True Positives / (True Positives + False Positives) = 1/(1+3) = 0.25
Recall = True Positives / (True Positives + False Negatives) = 1/(1+2) = 0.33
Любое перекрытие OK: True Positives = 2 (Microsoft Corp.
и Steve
, который перекрывает Steve Ballmer
), False Positives = 2 (CEO
и today
), False Отрицательные = 1 (Windows 7
)
Precision = True Positives / (True Positives + False Positives) = 2/(2+2) = 0.55
Recall = True Positives / (True Positives + False Negatives) = 2/(2+1) = 0.66
Затем читателю следует сделать вывод о том, что "реальная производительность" (точность и напоминание о том, что непредвзятый человеческий чекер даст, когда разрешено использовать суждение человека, чтобы решить, какие совпадения несоответствия значительны, а какие нет) находится где-то между два.
Также часто полезно сообщать о измерении F1, которое является гармоническим средним точности и отзыва, и которое дает некоторое представление о "производительности", когда вам приходится торговать точностью против отзыва.
Ответ 2
В задаче NER CoNLL-2003 оценка была основана на правильно помеченных объектах, а не на токенах, как описано в документе "Введение в общую задачу CoNLL-2003: независимое от языка распознавание именованных объектов". Объект помечается правильно, если система идентифицирует объект правильного типа с правильной начальной и конечной точкой в документе. Я предпочитаю этот подход в оценке, потому что он ближе к измерению производительности по фактической задаче; Пользователь системы NER заботится о сущностях, а не об отдельных токенах.
Однако описанная вами проблема все еще существует. Если вы помечаете сущность типа ORG типом LOC, вы получаете ложный положительный результат для LOC и ложный отрицательный для ORG. В этом посте есть интересное обсуждение проблемы.
Ответ 3
Как упоминалось ранее, существуют различные способы измерения производительности NER. Можно отдельно оценить, насколько точно сущности обнаруживаются с точки зрения позиции в тексте и с точки зрения их класса (человека, местоположения, организации и т.д.). Или объединить оба аспекта в одну меру.
Вы найдете хороший обзор в следующем тезисе: D. Надеу, полунаправленное именованное распознавание сущностей: обучение распознаванию 100 типов сущностей с небольшим наблюдением (2007). Взгляните на раздел 2.6. Оценка NER.
Ответ 4
Нет простого правильного ответа на этот вопрос. Существует множество способов подсчета ошибок. Соревнования MUC использовали один, другие люди использовали других.
Однако, чтобы помочь вам с вашей непосредственной путаницей:
У вас есть набор тегов, нет? Что-то вроде НЕТ, ЧЕЛОВЕК, ЖИВОТНЫХ, ОВОЩНО?
Если токен должен быть человеком, и вы помечаете его NONE, то это ложное положительное значение для NONE и ложное отрицание для PERSON. Если токен должен быть NONE, и вы помечаете его PERSON, это наоборот.
Итак, вы получаете оценку для каждого типа сущности.
Вы также можете агрегировать эти баллы.
Ответ 5
Чтобы быть ясными, это определения:
Точность = TP/(TP + FP) = Какая часть того, что вы нашли, была истиной?
Recall = TP/(TP + FN) = Какую часть истины вы восстановили?
Не обязательно всегда будет равным, так как количество ложных негативов не обязательно будет равным числу ложных срабатываний.
Если я правильно понимаю вашу проблему, вы назначаете каждому токену одну из двух возможных меток. Чтобы точность и отзыв имели смысл, вам нужно иметь двоичный классификатор. Таким образом, вы можете использовать точность и отзыв, если вы сформулировали классификатор как токен в группе "А" или нет, а затем повторите для каждой группы. В этом случае пропущенная классификация будет считаться дважды ложным отрицательным для одной группы и ложным положительным для другого.
Если вы делаете такую классификацию, когда она не является бинарной (назначая каждому токену группе), может быть полезно вместо этого посмотреть пары токенов. Разделите вашу проблему как "Являются ли токены X и Y в той же группе классификации?". Это позволяет вам вычислять точность и запоминать все пары узлов. Это не подходит, если ваши классификационные группы помечены или имеют связанные значения. Например, если ваши классификационные группы являются "Фрукты" и "Овощи", и вы классифицируете как "Яблоки", так и "Апельсины" как "Овощи", тогда этот алгоритм оценил бы его как истинный позитив, даже если была назначена неправильная группа. Но если ваши группы недоступны, например "А" и "В", то если яблоки и апельсины были классифицированы как "А", то после этого вы могли бы сказать, что "А" соответствует "Фрукты".
Ответ 6
Если вы тренируете простую модель, то используйте их Scorer.py API, который дает вам точность, отзыв и отзыв о вашем нерве.
Код и выходные данные будут в следующем формате:
17
Для тех, у кого такой же вопрос по следующей ссылке:
spaCy/scorer.py '' 'python
Пространство импорта
из spacy.gold импортировать GoldParse
из spacy.scorer импортировать Scorer
defvaluate (ner_model, примеры):
scorer = Scorer()
for input_, annot in examples:
doc_gold_text = ner_model.make_doc(input_)
gold = GoldParse(doc_gold_text, entities=annot)
pred_value = ner_model(input_)
scorer.score(pred_value, gold)
return scorer.scores
пример запуска
examples = [("Кто такой Шака Хан?", [(7, 17, "ЧЕЛОВЕК")]), ("Мне нравится Лондон и Берлин.", [(7, 13, "LOC"), (18, 24, 'LOC')])]
ner_model = spacy.load(ner_model_path) # для предварительно обученного использования spaCy 'en_core_web_sm' results =valuate (ner_model, examples) '' 'Вывод будет в следующем формате: - {' uas ': 0.0,' las ': 0.0, ' ents_p ': 43.75, ' ents_r ': 35.59322033898305, ' ents_f ': 39.252336448598136,' tags_acc ': 0.0,' token_acc ': 100.0} сильный текст