[Open source, Java, Scala, Apache, Natural Language Processing] Программируемые NER компоненты
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
В данной заметке мы продолжим говорить о NER компонентах и попытаемся определить условия, в которых нам начинает недоставать функционала стандартных компонентов и стоит задуматься о программировании своих собственных.В подавляющем большинстве случаев для поиска пользовательских сущностей достаточно найти и настроить какой-либо уже существующий компонент, сконфигурировать или обучить его модель. Лишь иногда, в достаточно специфичных ситуациях, возможностей существующих решений оказывается недостаточным, и нам приходится начинать программировать. Но выделение ресурсов, кодирование, тесты, поддержка - все это стоит затевать лишь когда без всего этого просто не обойтись.
Самый очевидный критерий необходимости создания собственного компонента - если нужный элемент модели невозможно определить через синонимы, regex и т.д., а создание правил поиска по сложности превосходит программирование логики. Рассмотрим несколько примеров имплементаций, это может помочь определиться с необходимостью разработки собственных компонентов. В проекте Apache NlpCraft созданы и поддерживаются следующие встроенные NER компоненты:
- Quote, Stopword, SuspiciousNouns, Dictionary
- Date
- Numeric
- Geo
- Coordinate
- Limit
- Sort
- Relation
Date NER компонент Date NER компонент ищет даты в тексте и назначает каждой найденной сущности численные значения “from“ and “to“ для найденного диапазона. Я бы не стал рекомендовать имплементацию этого модуля в качестве референсной для написания собственного NER компонента, так как он сам нуждается в существенной переработке (неплохой вызов для новых коммитеров ), но подход к разработке данного компонента довольно интересен. В основе его простейший кеш. Его модель - это сгенерированные относительно текущей даты шаблоны вроде
- 2002, fourth quarter | 2002y, 4q
- 2020 11st july | 2020y, 7m, 11d
- first 19 day of 2000 | 2000y, 1m, 1d:2000y, 19d
- september 26 2011 | 2011y, 9m, 26d
- …..
То есть базовая модель - это обычный словарь, где ключи - словосочетания, определяющие всевозможные варианты задания дат в запросе (от обычных до достаточно маловероятных комбинаций), а значения - то, как их следует интерпретировать. Таким образом модель хранит в себе все возможные для модели обозначения всех возможных дат! Сама эта мысль изначально кажется немного странной, но тем не менее данная модель хранит данные в диапазоне 100 лет, занимающие в текстовом, несжатом и неоптимизированном виде менее 200М. Диапазон 100 лет с лихвой перекрывает требования бизнес логики большинства систем, скорость доступа при таком подходе - Q(1), качество распознавания дат впечатляет. Надеюсь скепсис отступает. Кроме того - это же open-source! Сгенерируйте свою модель с нужным временным диапазоном и вариантами задания дат. Ниже пример использования (значение закрывающее временной диапазон интерпретируется как бесконечность)
Отличие от большинства существующих решений - компонент старается разобрать даты в любом формате, правильно или неправильно сформулированные. Numeric NER компонент Numeric NER компонент ищет в тексте числовые значения, периоды и условия по ним, с учетом единиц измерения, если число или диапазон относятся к какой-то измеряемой величине. По сравнению с Date NER компонентом, модель по своим размерам здесь заметно скромнее и содержит в себе лишь числа, представленные словами и словосочетаниями:
- ….
- 99993=ninety nine thousand nine hundred ninety three
- ….
Предпосылки к использованию такого лобового подхода все те же - такую конфигурацию просто поддерживать, доступ к кешу мгновенен, использование памяти сохраняется в допустимых пределах.Ниже пример получения numeric range из текста
Отличие от большинства существующих решений - кроме непосредственно самого числового значения находятся условия его использования (отношения) и единицы измерения. При использовании числовых значений для построения фильтров - это 99% всей работы. Geo NER компонентыПри использовании географических компонентов распознаются континенты, страны, города и области. Ключевые особенности:
- Компонент воспринимает уточнения. Так, например, для запроса “Saint Petersburg data” - предпочтение будет отдано более крупному городу из России, а для “Saint Petersburg, USA data” - его американскому тезке.
- Компонент старается ”жадно” поглотить уточняющие слова, сокращая таким образом количество неразобранных слов в запросе.
- Компонент добавляет достаточно подробную метадату для заданных сущностей (население, площадь для городов и т. д.), что упрощает использование обнаруженных географических сущностей в фильтрах.
Модель основана на данных от GeoNames, википедии и т.д.Coordinate NET компонент может быть рассмотрен как частный случай систем распознавания географических сущностей, представленных с помощью всевозможных способов задания координат. Ниже пример работы
Отличие от большинства существующих решений по поиску географических данных - адаптация для работы с поисковыми и диалоговыми системами, улучшенная точность распознавания. Quote, Stopword, SuspiciousNouns, Dictionary КомпонентыДанные компоненты не создают собственных токенов, а лишь расширяют стандартное NLP представление (раздел “Token ID nlpcraft:nlp”) токенов из запроса.
- Quote - проверяет заключено ли слово в кавычки и выставляет соответствующий признак.
- Stopword - выставляет признак является ли слово stop word.Это полезно для моделей, ограничивающих возможное количество нераспознанных слов в запросах, так как stop слова в данном ограничении можно не учитывать. Система содержит сконфигурированный список stop слов, который может быть расширен или сужен на уровне конкретной модели.
- SuspiciousNouns - помечает слова из списка бранных и оскорбительных слов, ваша модель может игнорировать запросы, содержащие такие слова.
- Dictionary - отмечает содержится ли слово в английском словаре. Вы можете игнорировать запросы с большим количеством неизвестных слов.
Обратите внимание, все вышеописанные компоненты имеют широкий ряд аналогов и являются лишь попыткой улучшения качества распознавания и самое главное для библиотеки - удобства использования диалоговыми системами. Конечному пользователю в большинстве случаев вряд ли стоит тратить ресурсы на написание собственных компонентов в данных областях. Следующие поисковые модули уникальны в своем роде, так как являются мета-компонентами и применяются лишь в отношении других компонентов, найденных на более ранних этапах обработки (см. раздел “Token DSL”). Если для вашей модели потребуется что-то подобное - вам просто придется создавать собственные компоненты, а способ, то есть программирование, обучение сетей или создание правил - это уже отдельный вопрос. Limit NER компонент Ищет и помечает ссылки на ранее найденные компоненты, определяющие ограничение их выборки. Работают как с конкретными числами (“give me first 25 orders”) так и с определенными неявным образом (“show me top few customers”) Ниже приведен пример сформированного ”limit”, ссылающегося на найденную сущность “customer”.
Sort NER компонент Ищет и помечает ссылки на ранее найденные компоненты, определяющие принцип их сортировки.
В многострочных отчетах порядок сортировки весьма важен, в противном случае ваш UI должен обеспечивать возможность пользовательской сортировки результатов, а если количество возвращаемых строк ограничено - знание о необходимом типе сортировки просто обязательно, иначе ваша система вернет совершенно не тот набор данных, что от нее ожидали. Relation NER компонент Выявляет признак сопоставления 2х и более однотипных компонентов, что просто необходимо при составлении большого количества стандартных запросов.
Заключение Надеюсь, что краткое описание встроенных Apache NlpCraft NER компонентов поможет определиться в каких случаях вам может понадобиться программирование своих собственных компонентов. В свободном доступе представлено уже достаточно большое количество хорошо зарекомендовавших себя поисковых модулей с возможностью конфигурирования и обучения их моделей под свои нужды, и задача создания новых NER компонентов никогда не была высокоприоритетной для Apache NlpCraft. Но в рамках проекта всегда есть потребность в специальных, адаптированных компонентах, сокращающих время построения и разработки диалоговых и поисковых систем. В дополнение к вышеперечисленным, в настоящее время еще целый ряд таких компонентов находятся в процессе разработки. Кроме того стоит отметить, что программирование таких изолированных элементов как NER компоненты - неплохой старт для новых членов коммьюнити.
===========
Источник:
habr.com
===========
Похожие новости:
- [Python, API, Программирование микроконтроллеров, Разработка для интернета вещей] Опыт написания IDL для embedded
- [JavaScript, ООП] Создание квадратизированной галереи проектов на JS v 2.0
- [Совершенный код, .NET, API, C#, Микросервисы] Паттерн CQRS: теория и практика в рамках ASP.Net Core 5
- [Ненормальное программирование, JavaScript, Разработка игр] Свежий взгляд на честное 3D в браузере
- [JavaScript, Программирование] Полезные расширения VS Code для JavaScript-разработчиков (перевод)
- [Разработка веб-сайтов, Python, API] Как я сделал веб-фреймворк без MVC — Pipe Framework
- [JavaScript, Программирование, Управление проектами, Управление продуктом, Карьера в IT-индустрии] Pet-проект для джуна. Или зачем и как выбрать pet project. (+личный опыт)
- [Развитие стартапа, Управление продуктом, Финансы в IT] Нужно ли стартапу в 2021 выдавать опционы сотрудникам? Разбираем что это и как оформить
- [Информационная безопасность, Антивирусная защита, Разработка под MacOS] На 30 тысячах компьютеров с macOS нашли странный зловред, который ждёт команду
- [Программирование, Хакатоны, Машинное обучение, Natural Language Processing] Культурные рекомендации: опыт московского хакатона
Теги для поиска: #_open_source, #_java, #_scala, #_apache, #_natural_language_processing, #_natural_language_processing, #_api, #_open_source, #_nlpcraft, #_apache, #_ner, #_open_source, #_java, #_scala, #_apache, #_natural_language_processing
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 23-Ноя 00:13
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
В данной заметке мы продолжим говорить о NER компонентах и попытаемся определить условия, в которых нам начинает недоставать функционала стандартных компонентов и стоит задуматься о программировании своих собственных.В подавляющем большинстве случаев для поиска пользовательских сущностей достаточно найти и настроить какой-либо уже существующий компонент, сконфигурировать или обучить его модель. Лишь иногда, в достаточно специфичных ситуациях, возможностей существующих решений оказывается недостаточным, и нам приходится начинать программировать. Но выделение ресурсов, кодирование, тесты, поддержка - все это стоит затевать лишь когда без всего этого просто не обойтись. Самый очевидный критерий необходимости создания собственного компонента - если нужный элемент модели невозможно определить через синонимы, regex и т.д., а создание правил поиска по сложности превосходит программирование логики. Рассмотрим несколько примеров имплементаций, это может помочь определиться с необходимостью разработки собственных компонентов. В проекте Apache NlpCraft созданы и поддерживаются следующие встроенные NER компоненты:
Отличие от большинства существующих решений - компонент старается разобрать даты в любом формате, правильно или неправильно сформулированные. Numeric NER компонент Numeric NER компонент ищет в тексте числовые значения, периоды и условия по ним, с учетом единиц измерения, если число или диапазон относятся к какой-то измеряемой величине. По сравнению с Date NER компонентом, модель по своим размерам здесь заметно скромнее и содержит в себе лишь числа, представленные словами и словосочетаниями:
Отличие от большинства существующих решений - кроме непосредственно самого числового значения находятся условия его использования (отношения) и единицы измерения. При использовании числовых значений для построения фильтров - это 99% всей работы. Geo NER компонентыПри использовании географических компонентов распознаются континенты, страны, города и области. Ключевые особенности:
Отличие от большинства существующих решений по поиску географических данных - адаптация для работы с поисковыми и диалоговыми системами, улучшенная точность распознавания. Quote, Stopword, SuspiciousNouns, Dictionary КомпонентыДанные компоненты не создают собственных токенов, а лишь расширяют стандартное NLP представление (раздел “Token ID nlpcraft:nlp”) токенов из запроса.
Sort NER компонент Ищет и помечает ссылки на ранее найденные компоненты, определяющие принцип их сортировки. В многострочных отчетах порядок сортировки весьма важен, в противном случае ваш UI должен обеспечивать возможность пользовательской сортировки результатов, а если количество возвращаемых строк ограничено - знание о необходимом типе сортировки просто обязательно, иначе ваша система вернет совершенно не тот набор данных, что от нее ожидали. Relation NER компонент Выявляет признак сопоставления 2х и более однотипных компонентов, что просто необходимо при составлении большого количества стандартных запросов. Заключение Надеюсь, что краткое описание встроенных Apache NlpCraft NER компонентов поможет определиться в каких случаях вам может понадобиться программирование своих собственных компонентов. В свободном доступе представлено уже достаточно большое количество хорошо зарекомендовавших себя поисковых модулей с возможностью конфигурирования и обучения их моделей под свои нужды, и задача создания новых NER компонентов никогда не была высокоприоритетной для Apache NlpCraft. Но в рамках проекта всегда есть потребность в специальных, адаптированных компонентах, сокращающих время построения и разработки диалоговых и поисковых систем. В дополнение к вышеперечисленным, в настоящее время еще целый ряд таких компонентов находятся в процессе разработки. Кроме того стоит отметить, что программирование таких изолированных элементов как NER компоненты - неплохой старт для новых членов коммьюнити. =========== Источник: habr.com =========== Похожие новости:
|
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 23-Ноя 00:13
Часовой пояс: UTC + 5