Использование именованных сущностей (NE) в NLPCraft
NLP система должна:
- Разбить текст запроса на составляющие (слова, токены)
- Привести их в базовую форму (леммы, стеммы). Получить, если это необходимо, сведения о частях речи и прочую низкоуровневую информацию.
- Распознать слова и словосочетания, то есть вычленить из текста именованные сущности и попытаться извлечь из них так называемые нормализованные значения.
Этот процесс называется распознаванием именованных сущностей — NER, а модули, занимающиеся их извлечением — компонентами NER.
С первыми двумя задачами успешно справляется множество коммерческих и opensource продуктов, и в данной заметке мы не будем останавливаться на них подробно. Сегодня поговорим о NER компонентах.
Существует целый ряд зарекомендовавших себя решений, предоставляющих весь необходимый инструментарий и наборы готовых моделей для распознавания множества стандартных сущностей (таких как дата, время или географические объекты), а также предоставляющих пользователям средства для формирования и обучения собственных моделей.
Остановимся чуть подробнее на наиболее известных из них
Spacy
- Сайт https://spacy.io
- Подробнее о NER https://spacy.io/usage/rule-based-matching#entityruler
- Список поддерживаемых распознаваемых сущностей (для одной из схем) https://spacy.io/api/annotation#named-entities. Поддерживается поиск таких распространенных NE как PERSON, PRODUCT, EVENT, MONEY и т. д.
- Поставка — pytnon библиотека
OpenNLP
- Сайт https://opennlp.apache.org
- Подробнее о NER https://www.tutorialspoint.com/opennlp/opennlp_named_entity_recognition.htm
- Список моделей http://opennlp.sourceforge.net/models-1.5 поможет распознать такие сущности как DATE, TIME, MONEY, LOCATION и т. д.
- Поставка — java библиотека
StanfordNLP
- Сайт https://nlp.stanford.edu/
- Подробнее о NER https://stanfordnlp.github.io/CoreNLP/ner.html
- Список поддерживаемых распознаваемых сущностей https://nlp.stanford.edu/software/CRF-NER.html очень широк и помимо знакомых DATE, MONEY и т. д. включает в себя ряд ранее не встречавшихся среди прочих решений, таких как EMAIL, URL, IDEOLOGY, NATIONALITY, RELIGION и т. д.
- Поставка — java библиотека
Google Language API
- Сайт https://cloud.google.com/natural-language
- Подробнее о NER https://cloud.google.com/natural-language/docs/analyzing-entities
- Доступный по ссылке https://cloud.google.com/natural-language/docs/reference/rest/v1/Entity список распознаваемых сущностей содержит уже знакомые PERSON, LOCATION, ORGANIZATION и т. д. а также ряд уникальных, таких как WORK_OF_ART, CONSUMER_GOOD и т. д.
- Поставка — SaaS решение. Доступ к нему осуществляется через REST API. Также доступны библиотеки доступа на множестве языков — Java, C#, Python, Go и т. д.
Кроме поставки обученных модулей распознавания стандартных сущностей, каждая из вышеперечисленных систем позволяет создавать и тренировать собственные модели, служащие для распознавания собственных пользовательских элементов.
Не будем заниматься детальным сравнением и оценкой вышеперечисленных систем, остановимся кратко на их основных отличительных особенностях.
- OpenNLP привлекает свободной лицензией на использование и, как и почти любой продукт от Apache Software Foundation, проверенным качеством.
- Spacy — интересен прежде всего наличием большого числа готовых моделей для множества языков, а также привычной для аналитиков средой разработки (язык Python)
- StanfordNLP интересен значительным количеством готовых моделей, прежде всего для английского языка, а также поддержкой ими генерации нормализованных значений для ряда NE (Пример. Хорошо когда слово ‘tomorrow’ определяется как дата — но еще лучше, если дополнительно предоставляется значение даты относительно текущего времени)
- Google Language API — отличается высоким качеством распознавания, поддержкой нормализованных значений в готовых моделях и, несмотря на то, что решение от данной компании появилось относительно недавно, уже сейчас нет никаких сомнений в том, что оно будет одним из самых значимых на рынке.
NLPCraft
Помимо вышеперечисленных провайдеров NER компонентов, NLPCraft представляет собственный механизм распознавания таких элементов как DATE, GEO, NUM, COORDINATE и FUNCTION.
Последняя, FUNCTION — не имеющая аналогов сущность второго порядка, применяемая к другим ранее определенным сущностям. Например в тексте находится «сравнение» двух ранее найденных GEO объектов и т. д. Но, об этом подробнее за рамками данной заметки.
Причина по которой NLPCraft создала ряд своих собственных NER модулей — желание предоставить наилучшее качество для самых распространенных из них, а также удовлетворить потребность в наличии ряда дополнительных атрибутов (нормализованных значений), без которых даже распознанная сущность представляет собой ограниченную ценность при дальнейшем использовании.
Немного подробнее об извлечении из текста информации о пользовательских сущностях.
Когда пользователю нужно извлечь из текста элементы, характерные для его бизнеса, он может:
- Разработать и обучить свою собственную модель при помощи одного из вышеперечисленных продуктов (вероятностная модель, необходимость в значительном обучающем корпусе)
- Создать семантическую модель NLPCraft, определив наборы синонимов, регулярных выражений и правил основанных на предикатах для слов и словосочетаний или предложений в целом (быстрый старт проекта, корпус не требуется)
Описание второго способа определения пользовательских элементов находится за рамками данной заметки, сейчас нас интересует работа именно с NER компонентами.
Так как же воспользоваться возможностями NER компонентов от всех вышеперечисленных провайдеров?
Последняя версия NLPCraft позволяет своим пользователям объединить всю мощь готовых решений и использовать любую из вышеперечисленных систем распознавания именованных сущностей или даже все сразу.
Пользователь может настроить свою цепочку обработки текста, конфигурируя лишь те NER модули, которые должны участвовать в его разборе.
Например, если пользователем сконфигурирована следующая цепочка: «nlpcraft:num», «spacy:money», «opennlp:organization», то в тексте будет осуществляться лишь поиск
- NUM элементов (NER компонентами от NLPCraft),
- MONEY элементов (NER компонентами от Spacy),
- ORGANIZATION элементов (NER компонентами от OpenNLP)
Практический совет — выбирайте лишь те сущности, в которых вы непосредственно нуждаетесь при работе над вашей задачей. Нет никакого смысла заставлять программу искать в тексте, например, элементы PERCENTAGE, если вам нет до них никакого дела в рамках вашей задачи. Не усложняйте структуру разобранных предложений, не загружайте без надобности ресурсы системы.
Выбор используемых NER компонентов зависит
- от потребностей и предпочтений пользователя,
- от наличия уже существующих у него наработок, то есть собственных обученных моделей, или же просто
- от наличия тех или иных специалистов компании, которым проще и привычнее работать со знакомым средством.
Остановимся чуть детальнее на том, какую информацию мы предоставляем для каждого NE по всем упомянутым провайдерам NER
OpenNLP
- Название — имя сущности
- Probability — вероятностная оценка правильности определения найденной сущности
- Пример. Слово ‘today’ определится в тесте как сущность ‘opennlp:date’ со значением ‘probability’ равным 0.9987.
Spacy
- название — имя сущности
- vector — численная характеристика обнаруженной в тексте сущности (подробнее https://spacy.io/api/span#vector_norm)
- sentiment — оценка настроения предоставляемая для токена системой Spacy
- meta — набор пар (ключ/значение) пользовательских атрибутов обнаруженных NE
- Пример. Слово ‘$299’ определится в тесте как сущность ‘spacy:money’ со значением vector равным 27.3814.
Stanford
- название — имя сущности -
- confidence — вероятностная оценка правильности определения обнаруженной в тексте сущности
- nne — нормализованное значение сущности (23:00 значение времени для найденной сущности ‘11PM’)
- Пример. Слово ‘http://nlpcraft.org’ определится в тесте как сущность ‘stanford:url’ со значением confidence равным 0.9993, NNE отсутствует.
- название — имя сущности
- salience — численная характеристика обнаруженной в тексте сущности (подробнее https://cloud.google.com/natural-language/docs/basics)
- meta — набор пар (ключ/значение) атрибутов характерных для данной сущности
- mentionsBeginOffsets, mentionsContents, mentionsTypes- параметры, указывающие на ссылки на данную сущность в обрабатываемом тексте.
- Пример. Слово ‘Hewlett-Packard’ определится в тесте как сущность ‘google:organization’ со значением salience равным 0.12638 и дополнительной информацией в виде ссылки на описание компании wikipedia_url=https://en.wikipedia.org/wiki/Hewlett-Packard
NLPCraft
- Название — имя сущности.
- Атрибуты. Подробно расписывать все атрибуты элементов, возвращаемые NER компонентами системы NLPCraft мы не будем, а лишь ограничимся ссылкой на соответствующий раздел документации https://nlpcraft.apache.org/apis/latest/org/apache/nlpcraft/model/NCToken.html
- Пример. Словосочетание ’21 meter’ определится в тесте как nlpcraft:num’ со значением равным ‘27’, типом ‘metr’ и группой ‘length’.
Вы могли обратить внимание на то, что некоторые однотипные атрибуты имеют различающиеся имена в разных системах, так произошло оттого, что мы постарались сохранить принятую в них терминологию.
Итак, NLPCraft, начиная с версии 0.7.0, позволяет разработчикам распознавать именованные сущности в тексте без ограничений на использование той или иной библиотеки. Выберите лучшую для своих целей или просто пользуйтесь той, к которой привыкли. Мы уже добавили поддержку самых известных NER систем и планируем расширять этот список постоянно.
Вы можете задействовать всю мощь инструментов NLPCraft, от разработки семантических моделей до определения пользовательских интентов без отказа от использования привычных средств или с возможностью выбора предпочтительных.