Как Spacy NER проверяет рациональность сущностей?

#machine-learning #nlp #spacy #named-entity-recognition

#машинное обучение #nlp #spacy #распознавание именованных сущностей

Вопрос:

Когда я использую SpaCy NER, SpaCy распознает «TodoA» как PERSON. Это явно неразумно. Есть ли какой-либо способ проверить, является ли объект, извлеченный SpaCy, разумным? Спасибо!

Большая часть этих необоснованных сущностей извлекается с помощью поиска spacy beam. Код поиска луча:

 import spacy
import sys
from collections import defaultdict

nlp = spacy.load('en')
text = u'Will Japan join the European Union? If yes, we should  
move to United States. Fasten your belts, America we are coming'


with nlp.disable_pipes('ner'):
    doc = nlp(text)

threshold = 0.2
(beams, somethingelse) = nlp.entity.beam_parse([ doc ], beam_width = 16, beam_density = 0.0001)

entity_scores = defaultdict(float)
for beam in beams:
    for score, ents in nlp.entity.moves.get_beam_parses(beam):
        for start, end, label in ents:
            entity_scores[(start, end, label)]  = score

print ('Entities and scores (detected with beam search)')
for key in entity_scores:
    start, end, label = key
    score = entity_scores[key]
    if ( score > threshold):
        print ('Label: {}, Text: {}, Score: {}'.format(label, doc[start:end], score))
 

Комментарии:

1. В SpaCy есть нейронная сеть, которая обрабатывает атрибуты объектов для контролируемого обучения. Если вас интересует, какие функции используются, определенность назначения или многоклассовые вероятности, из вашего вопроса неясно. Пожалуйста, уточните.

2. Привет @SergeyBushmanov Это не имеет ничего общего с базовой нейронной сетью. Я просто использовал предварительно обученную модель en_core_web_lg в spacy для извлечения сущностей и использовал beam_search. Когда предложение содержит ‘TodoA’, spacy en_core_web_lg распознает ‘TodoA’ как person, а ‘TodoA’, очевидно, не является именем человека, поэтому ошибка идентификации spacy en_core_web_lg, что я хочу сделать сейчас, это оценить рациональность сущности, извлеченной spacy en_core_web_lg

Ответ №1:

«Необоснованная» аннотация, которую вы видите, напрямую связана с характером модели, которая используется для выполнения аннотации, и процессом ее получения.

Короче говоря, модель представляет собой приближение очень сложной функции (в математических терминах) от некоторых характеристик последовательностей слов (например, наличие определенных букв, прописных букв, использование определенных терминов и т. Д.) К замкнутому набору тегов (например PERSON ,). Это приближение, близкое к наилучшему для большого объема текста (например, нескольких гигабайт ASCII-текста), но, конечно, это не сопоставление отдельных фраз с тегами. Поэтому, даже если данные, используемые для обучения, точны, результат применения модели может быть не идеальным в некоторых обстоятельствах.

В вашем случае вполне вероятно, что модель цепляется за верхний регистр слова, и, возможно, в обучении использовалось большое количество слов с общим префиксом, которые были отмечены тегом PERSON ) — например, Toddy, toddler и т. Д. И Очень небольшое количество слов с таким префиксомэто были не PERSON s.

Это явление, которое мы наблюдаем, не было выбрано явно человеком, готовящим модель, это всего лишь побочный продукт сочетания процесса его подготовки (обучения) и используемых данных.

Комментарии:

1. Таким образом, spacy сам по себе не может решить эту проблему. После того, как spacy извлекает объект, есть ли какой-либо способ проверить, является ли объект, извлеченный spacy, разумным?

2. Как указал @sophros, машина изучает то, что она изучает. Конечно, в ближайшие годы это станет лучше, но пока модель делает то, что делает, и в целом работает хорошо . Это цель машинного обучения. Если вы чувствуете, что можете добавить эвристику для улучшения результатов, то это нужно будет сделать после того, как ML применит свое обучение.