Копирование моего ответа от этой проблемы :
Да, использование шаблонов совпадений для улучшения статистических моделей имеет большой смысл, и на самом деле это один из подходов, которые мы используем в нашихинструмент аннотации Prodigy для упрощения сбора данных о тренировках.Неоднозначные примеры, когда правила терпят неудачу (например, «быки»), на самом деле действительно интересны, потому что это те, которые вы хотите, чтобы статистическая модель обрабатывала.
С точки зрения практической реализации, вы все равно хотели бы, чтобы ваш рабочий процессиметь два шага:
- Используйте сопоставление, чтобы извлечь примеры кандидатов и выбрать те, которые вы хотите использовать.
- Обучите / обновите модель с новыми примерами и оцените ее.
Ваша модель не будет просто обновляться во время выполнения, потому что это не так полезно - вам обычно всегда требуется отдельный этап обучения и оценки, чтобы вы могли использовать некоторые приемы машинного обучения, а также убедиться, что ваша модельна самом деле улучшается.
Также не забудьте включить сущности, которые ранее получили правильные модели - например, если ваше предложение с «Чикаго Буллз» также включает в себя имя человека, вы хотите, чтобы это было включено в тренингданные также.Таким образом, ваш рабочий процесс выглядит следующим образом:
- Используйте правила шаблона для извлечения совпадений из ваших текстов.
- Для каждого текста также отметьте
doc.ents
и получите существующие сущности. - Объедините оба и убедитесь, что они правильные.
- Обновите вашу модель с помощью этих новых примеров.
Приятно то, что большинство из этого может бытьавтоматизировано скриптом Python.Также см. этот раздел документации для примера.
a Matcher \ PhraseMatcher \ EntityRuler (что более актуально для этого варианта использования?)
EntityRuler
- это в основном компонент более высокого уровня, который использует Matcher
и PhraseMatcher
для поиска совпадений в Doc
и автоматически добавляет их в doc.ents
.Он также поддерживает подачу больших файлов шаблонов и сериализует их с моделью при сохранении.Он также обрабатывает тот факт, что именованные объекты по определению не могут перекрываться, поскольку один токен может быть только частью одного объекта.Так что, если вы знаете, что вы ищете сущности, EntityRuler
может быть более удобным, потому что это означает, что вам придется самостоятельно писать меньше кода.