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

Когда я использую SpaCy NER, SpaCy распознает TodoA как ЛИЦО. Это явно неразумно. Есть ли способ проверить, является ли сущность, извлеченная SpaCy, разумной? Спасибо!

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

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

person shaojie    schedule 17.12.2020    source источник
comment
У SpaCy есть нейронная сеть, которая обрабатывает атрибуты функций для контролируемого обучения. Если вам интересно, какие функции используются, определенность назначения или мультиклассовые вероятности, это неясно из вашего вопроса. Просьба уточнить.   -  person Sergey Bushmanov    schedule 17.12.2020
comment
Привет @SergeyBushmanov Это не имеет ничего общего с базовой нейронной сетью. Я просто использовал предварительно обученную модель en_core_web_lg для извлечения сущностей и использовал beam_search. Когда предложение содержит «TodoA», spacy en_core_web_lg распознает «TodoA» как личность, а «TodoA» явно не имя человека. Итак, простая ошибка идентификации en_core_web_lg, сейчас я хочу оценить рациональность сущность извлечена spacy en_core_web_lg   -  person shaojie    schedule 17.12.2020


Ответы (1)


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

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

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

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

person sophros    schedule 17.12.2020
comment
Так что простор сам по себе не может решить эту проблему. После того, как spacy извлечет объект, есть ли способ проверить, является ли объект, извлеченный с помощью spacy, разумным? - person shaojie; 18.12.2020
comment
Да, человеческая оценка. - person sophros; 18.12.2020
comment
Как заметил @sophros, машина учится тому, чему она учится. Конечно, в ближайшие годы это станет лучше, но на данный момент модель делает то, что делает, и хорошо работает in_general. Это цель машинного обучения. Если вы чувствуете, что можете добавить эвристику для улучшения результатов, то это нужно будет сделать после того, как ML применит свое обучение. - person Eric McLachlan; 18.12.2020