Apache NLPCraft, подготовка к выходу мультиязычной версии 1.0

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!

Apache NlpCraft — библиотека с открытым исходным кодом, предназначенная для интеграции языкового интерфейса в пользовательские приложения. 

Подробнее с проектом можно ознакомиться на его сайте или, напрмер, по ссылкам на хабре. Состояние проекта - Apache инкубация. Так как java NLP сообщество весьма ограничено, продукт имеет небольшое, но достаточно активное количество пользователей.    

<cut>

Изменения в структуре проекта и вызвавшие их причины

По отзывам пользователей текущей версии проекта его основными недостатками являлись:

  • Сложная архитектура в виде клиент-серверной платформы с REST доступом.  

  • Сложность конфигурации отдельных частей.

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

  • Отсутствие поддержки каких-либо других языков помимо английского.  

При разработке версии 1.0 все эти замечания были приняты во внимание. 

Как следствие в Apache NLPCraft 1.0 произведены следующие изменения:

Удалено:

  • Поддержка клиент-серверного подхода.   

  • Поддержка кластера. 

  • Использование базы данных. 

  • Возможность управления приложением с помощью CLI.  

  • Поддержка docker.  

Теперь Apache NLPCraft - это просто библиотека. Удаленные возможности хотя и были полезны при построении enterprise систем, но имели весьма отдаленное отношение к основной задаче проекта.  

Добавлено: 

  • Полностью плагабильный дизайн системы. 

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

  • Как следствие, возможность разработки мульти-языковых компонентов. 

Исправлены: куча мелочей, улучшена производительность и т.д.  

Версия 1. 0 не будет обратно совместима с последним рабочим maven релизом.  

API - Java  11.

Реализация - по большей части Scala 3. 

Порядок использования

Как с помощью Apache NLPCraft распознать пользовательский ввод и вызвать какую-то команду с параметрами полученными из разобранного текста?

1. Определить для требуемого языка единственный обязательный компонент - tokenizer. 

  • Для английского в основном коде определены 2 версии, основанные на логике компонентов OpenNLP и Stanford. 

  • Для русского и французского, компоненты доступны в коде примеров. Лицензия реализации базовых компонентов LGPL помешала добавить их в основной код. 

  • Собственные реализации. Как правило, самому писать парсер не придется, это лишь оболочка над каким-то одним из широко представленных generic NLP решений. Так, например, версия для французского языка это всего лишь обертка в 20 строк кода над org.languagetool.tokenizers.fr.FrenchWordTokenizer. Пример кода по ссылке.  

2. Определить NER компоненты для сущностей, которые вы хотите обнаружить в тексте. 

Чем можно воспользоваться:

  • Выбрать из готовых NER сущностей общего типа java библиотек: Stanford, OpeNlp

  • Обучить собственные модели, пользуясь теми же библиотеками: Stanford, OpeNlp.

  • Подключить, реализовав простейший интерфейс с одним методом, google NER, Spacy или любое самописное или ML решение. 

  • Воспользоваться мощным семантическим builtin NER от Apache NlpCraft. В нем вы просто определяете синонимы для каждого элемента. Пример.  

3. Опционально. Вы можете определить некоторые вспомогательные компоненты, которые могут пригодиться для улучшения качества ваших NER или интентов. 

Так, например, разобранные леммы и стоп слова в запросе существенно улучшат работу семантического NER парсера.   

Реализация определителей лемм и стоп слов для английского языка доступна в основной поставке, для русского и французского - в коде примеров

4. Определяем колбеки для срабатывания (код пишем на java, scala, groovy или kotlin) и пишем интенты для них на Intent DSL. 

Пример всей модели с интентом на scala. 

Вот и все. Все предыдущие примеры, описанные на хабре по данной тематике, тоже будут полезны для понимания. Более подробный пример, шаг за шагом, будет приведен в отдельной статье после релиза на maven central.  

Состояние проекта в версии 1.0. 

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

Текущие работы: документация, примеры, тесты и website. 

Несмотря на то что в maven central проект еще не появился, при желании его уже можно попробовать в использовании, составить первые впечатления и поделиться откликами с разработчиками.   

  

Источник: https://habr.com/ru/post/657343/


Интересные статьи

Интересные статьи

Иногда мне попадаются статьи о будущем технологий, в которых это будущее выглядит ясно и непротиворечиво.Недавно это была статья восход дата инжиниринга от Maxime Beauchemin – инженера данных из Airbn...
Почему Курс по стартапам и бизнесу от Стэнфордского Университета, является одним из самых лучших в мире для стартаперов? Дело в том, что лекторами данного курса являются ...
Что такое Kafka? Где стоит, а где не стоит применять этот инструмент? Чем Kafka отличается от RabbitMQ и других брокеров сообщений? Как её правильно эксплуатировать? Всё это обсудили на м...
Возможно вы читали первую часть статьи про код ревью со стороны ревьювера (кстати, мы уже успели ее обсудить в последнем выпуске подкаста "Цинковый прод"). Так как статья набрала много лайков...
Автокэширование в 1с-Битрикс — хорошо развитая и довольно сложная система, позволяющая в разы уменьшить число обращений к базе данных и ускорить выполнение страниц.