Необработанный текст из пользовательского ввода разбивается на пробельные символы, аналогично text.split ('').Затем токенизатор обрабатывает текст слева направо.Для каждой подстроки выполняется две проверки:
Соответствует ли подстрока правилу исключений токенизатора?Например, «не» не содержит пробелов, но должно быть разделено на два токена, «делать» и «не делать», в то время как «Великобритания» всегда должен оставаться одним токеном.
Можно ли разделить префикс, суффикс или инфикс?Например, знаки препинания, такие как запятые, точки, дефисы или кавычки.
Так что, если ваш пользователь введет: Looking for Deep Learning experts
Он будет размечен как: ('Looking', 'for, 'Deep', 'Learning', 'experts')
Spacy не знает, что Deep Learning
- это отдельная сущность.Если вы хотите, чтобы spaCy распознал Deep Learning
как единое целое, вам нужно научить этому.Если у вас есть предопределенный список слов, которые вы бы хотели, чтобы spaCy распознал как единый объект, вы можете использовать PhraseMatcher
для этого.
Вы можете проверить детали использования PhraseMatcher
здесь
ОБНОВЛЕНИЕ - Ответ на комментарий ОП ниже
Я не думаю, что есть какой-то способ, которым spaCy может узнать о сущности, которую вы ищете, не обучаясь в контексте вашего домена или не предоставляя предопределенное подмножество сущностей.
Единственное решение, которое я могу придумать, - это использовать инструмент аннотирования для обучения spaCy - возьмите подмножество ваших пользовательских вводов и аннотируйте их вручную (вы можете использовать этот вундеркинд создателями spaCy или Брат - это бесплатно) - Используйте аннотации для обучения новой или существующей модели NER.Подробную информацию об обучении модели можно найти [здесь] ( здесь
Учитывая текст, такой как «Поиск экспертов по глубокому обучению», вы можете пометить «Глубокое обучение» с помощью такой надписиFIELD ". Затем обучите новый тип сущности 'FIELD'.
Как только вы обучите модель в контексте, spaCy научится обнаруживать интересующие вас сущности.