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

Вычисление точности и отзыва в распознавании имен

Теперь я собираюсь сообщить результаты с помощью Named Entity Recognition. Одна вещь, которую я нахожу немного запутанной, заключается в том, что мое понимание точности и напоминания состоит в том, что мы просто суммируем истинные положительные результаты, истинные негативы, ложные срабатывания и ложные негативы по всем классам.

Но теперь мне кажется неправдоподобным, что я думаю об этом, поскольку каждая ошибочная классификация давала бы одновременно одно ложное положительное и одно ложное отрицание (например, токен, который должен был быть помечен как "А", но был помечен как "В", является false для "A" и false для "B" ). Таким образом, количество ложных срабатываний и ложных негативов над всеми классами будет одинаковым, что означает, что точность (всегда!) Равна отзыву. Это просто не может быть правдой, так что в моих рассуждениях есть ошибка, и мне интересно, где это. Это, безусловно, что-то совершенно очевидное и прямолинейное, но оно ускользает от меня прямо сейчас.

4b9b3361

Ответ 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} сильный текст