Использование именованных сущностей (NE) в NLPCraft

Dmitriy Monakhov
5 min readJul 17, 2019

--

Первая задача, с решения которой начинается процесс работы каждой NLP системы, это необходимость максимально детального разбора пользовательского запроса и извлечения из него всей доступной в нем информации.

NLP система должна:

  • Разбить текст запроса на составляющие (слова, токены)
  • Привести их в базовую форму (леммы, стеммы). Получить, если это необходимо, сведения о частях речи и прочую низкоуровневую информацию.
  • Распознать слова и словосочетания, то есть вычленить из текста именованные сущности и попытаться извлечь из них так называемые нормализованные значения.

Этот процесс называется распознаванием именованных сущностей — NER, а модули, занимающиеся их извлечением — компонентами NER.

С первыми двумя задачами успешно справляется множество коммерческих и opensource продуктов, и в данной заметке мы не будем останавливаться на них подробно. Сегодня поговорим о NER компонентах.

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

Остановимся чуть подробнее на наиболее известных из них

Spacy

OpenNLP

StanfordNLP

Google Language API

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

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

  • 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 отсутствует.

Google

  • название — имя сущности
  • 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, от разработки семантических моделей до определения пользовательских интентов без отказа от использования привычных средств или с возможностью выбора предпочтительных.

--

--