Главное Авторские колонки Вакансии Образование
Выбор редакции:
359 0 В избр. Сохранено
Авторизуйтесь
Вход с паролем

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

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

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

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

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

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

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

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

Spacy

  1. Сайт https://spacy.io
  2. Подробнее о NER https://spacy.io/usage/rule-based-matching#entityruler
  3. Список поддерживаемых распознаваемых сущностей (для одной из схем) https://spacy.io/api/annotation#named-entities. Поддерживается поиск таких распространенных NE как PERSON, PRODUCT, EVENT, MONEY и т. д.
  4. Поставка — pytnon библиотека

OpenNLP

  1. Сайт https://opennlp.apache.org
  2. Подробнее о NER https://www.tutorialspoint.com/opennlp/opennlp_named_entity_recognition.htm
  3. Список моделей http://opennlp.sourceforge.net/models-1.5 поможет распознать такие сущности как DATE, TIME, MONEY, LOCATION и т. д.
  4. Поставка — java библиотека

StanfordNLP

  1. Сайт https://nlp.stanford.edu/
  2. Подробнее о NER https://stanfordnlp.github.io/CoreNLP/ner.html
  3. Список поддерживаемых распознаваемых сущностей https://nlp.stanford.edu/software/CRF-NER.html очень широк и помимо знакомых DATE, MONEY и т. д. включает в себя ряд ранее не встречавшихся среди прочих решений, таких как EMAIL, URL, IDEOLOGY, NATIONALITY, RELIGION и т. д.
  4. Поставка — java библиотека

Google Language API

  1. Сайт https://cloud.google.com/natural-language
  2. Подробнее о NER https://cloud.google.com/natural-language/docs/analyzing-entities
  3. Доступный по ссылке https://cloud.google.com/natural-language/docs/reference/rest/v1/Entity список распознаваемых сущностей содержит уже знакомые PERSON, LOCATION, ORGANIZATION и т. д. а также ряд уникальных, таких как WORK_OF_ART, CONSUMER_GOOD и т. д.
  4. Поставка — SaaS решение. Доступ к нему осуществляется через REST API. Также доступны библиотеки доступа на множестве языков — Java, C#, Python, Go и т. д.

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

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

  1. OpenNLP привлекает свободной лицензией на использование и, как и почти любой продукт от Apache Software Foundation, проверенным качеством.
  2. Spacy — интересен прежде всего наличием большого числа готовых моделей для множества языков, а также привычной для аналитиков средой разработки (язык Python)
  3. StanfordNLP интересен значительным количеством готовых моделей, прежде всего для английского языка, а также поддержкой ими генерации нормализованных значений для ряда NE (Пример. Хорошо когда слово ‘tomorrow’ определяется как дата — но еще лучше, если дополнительно предоставляется значение даты относительно текущего времени)
  4. Google Language API — отличается высоким качеством распознавания, поддержкой нормализованных значений в готовых моделях и, несмотря на то, что решение от данной компании появилось относительно недавно, уже сейчас нет никаких сомнений в том, что оно будет одним из самых значимых на рынке.

NLPCraft

Помимо вышеперечисленных провайдеров NER компонентов, NLPCraft представляет собственный механизм распознавания таких элементов как DATE, GEO, NUM, COORDINATE и FUNCTION.

Последняя, FUNCTION — не имеющая аналогов сущность второго порядка, применяемая к другим ранее определенным сущностям. Например в тексте находится «сравнение» двух ранее найденных GEO объектов и т. д. Но, об этом подробнее за рамками данной заметки.

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

Немного подробнее об извлечении из текста информации о пользовательских сущностях.

Когда пользователю нужно извлечь из текста элементы, характерные для его бизнеса, он может:

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

Описание второго способа определения пользовательских элементов находится за рамками данной заметки, сейчас нас интересует работа именно с NER компонентами.

Так как же воспользоваться возможностями NER компонентов от всех вышеперечисленных провайдеров?

Последняя версия NLPCraft позволяет своим пользователям объединить всю мощь готовых решений и использовать любую из вышеперечисленных систем распознавания именованных сущностей или даже все сразу.

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

Например, если пользователем сконфигурирована следующая цепочка: «nlpcraft:num», «spacy:money», «opennlp:organization», то в тексте будет осуществляться лишь поиск

  1. NUM элементов (NER компонентами от NLPCraft),
  2. MONEY элементов (NER компонентами от Spacy),
  3. ORGANIZATION элементов (NER компонентами от OpenNLP)

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

Выбор используемых NER компонентов зависит

  1. от потребностей и предпочтений пользователя,
  2. от наличия уже существующих у него наработок, то есть собственных обученных моделей, или же просто
  3. от наличия тех или иных специалистов компании, которым проще и привычнее работать со знакомым средством.

Остановимся чуть детальнее на том, какую информацию мы предоставляем для каждого NE по всем упомянутым провайдерам NER

OpenNLP

  1. Название — имя сущности
  2. Probability — вероятностная оценка правильности определения найденной сущности
  3. Пример. Слово ‘today’ определится в тесте как сущность ‘opennlp:date’ со значением ‘probability’ равным 0.9987.

Spacy

  1. название — имя сущности
  2. vector — численная характеристика обнаруженной в тексте сущности (подробнее https://spacy.io/api/span#vector_norm)
  3. sentiment — оценка настроения предоставляемая для токена системой Spacy
  4. meta — набор пар (ключ/значение) пользовательских атрибутов обнаруженных NE
  5. Пример. Слово ‘$299’ определится в тесте как сущность ‘spacy:money’ со значением vector равным 27.3814.

Stanford

  1. название — имя сущности -
  2. confidence — вероятностная оценка правильности определения обнаруженной в тексте сущности
  3. nne — нормализованное значение сущности (23:00 значение времени для найденной сущности ‘11PM’)
  4. Пример. Слово ‘http://nlpcraft.org’ определится в тесте как сущность ‘stanford:url’ со значением confidence равным 0.9993, NNE отсутствует.

Google

  1. название — имя сущности
  2. salience — численная характеристика обнаруженной в тексте сущности (подробнее https://cloud.google.com/natural-language/docs/basics)
  3. meta — набор пар (ключ/значение) атрибутов характерных для данной сущности
  4. mentionsBeginOffsets, mentionsContents, mentionsTypes- параметры, указывающие на ссылки на данную сущность в обрабатываемом тексте.
  5. Пример. Слово ‘Hewlett-Packard’ определится в тесте как сущность ‘google:organization’ со значением salience равным 0.12638 и дополнительной информацией в виде ссылки на описание компании wikipedia_url=https://en.wikipedia.org/wiki/Hewlett-Packard

NLPCraft

  1. Название — имя сущности.
  2. Атрибуты. Подробно расписывать все атрибуты элементов, возвращаемые NER компонентами системы NLPCraft мы не будем, а лишь ограничимся ссылкой на соответствующий раздел документации https://nlpcraft.apache.org/apis/latest/org/apache/nlpcraft/model/NCToken.html
  3. Пример. Словосочетание ’21 meter’ определится в тесте как nlpcraft:num’ со значением равным ‘27’, типом ‘metr’ и группой ‘length’.

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

Итак, NLPCraft, начиная с версии 0.7.0, позволяет разработчикам распознавать именованные сущности в тексте без ограничений на использование той или иной библиотеки. Выберите лучшую для своих целей или просто пользуйтесь той, к которой привыкли. Мы уже добавили поддержку самых известных NER систем и планируем расширять этот список постоянно.

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

0
В избр. Сохранено
Авторизуйтесь
Вход с паролем
Комментарии
Выбрать файл
Блог проекта
Расскажите историю о создании или развитии проекта, поиске команды, проблемах и решениях
Написать
Личный блог
Продвигайте свои услуги или личный бренд через интересные кейсы и статьи
Написать

Spark использует cookie-файлы. С их помощью мы улучшаем работу нашего сайта и ваше взаимодействие с ним.