Apache NlpCraft — библиотека с открытым исходным кодом, предназначенная для интеграции языкового интерфейса в пользовательские приложения.
Подробнее с проектом можно ознакомиться на его сайте или, например, по ссылкам на хабре. Состояние проекта - Apache инкубация. Так как java NLP сообщество весьма ограничено, продукт имеет небольшое, но все же достаточно активное количество пользователей.
Изменения в структуре проекта и вызвавшие их причины
По отзывам пользователей текущей версии проекта его основными недостатками являлись:
Сложная архитектура в виде клиент-серверной платформы с 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 проект еще не появился, при желании его уже можно попробовать в использовании, составить первые впечатления и поделиться откликами с разработчиками.