Рубрики
Без рубрики

Как легко добавить анализ настроений в любое Java-приложение

Вероятно, вы хотите, чтобы ваш бот выглядел как можно более человечно. И ключевой характеристикой (многих) людей является… С тегами: анализ настроений, нлп, чат-боты, java.

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

Я хочу, чтобы мои чат-боты демонстрировали такой же уровень эмпатии . И для этого ключевым компонентом является функция анализа настроений, которая помогает боту определить, доволен пользователь или нет. Или, в более технических терминах, имеют ли предложения, которые она пишет, положительный или отрицательный оттенок. Было бы еще лучше, если бы мы могли также определить, грустит ли он, шутит или…. но, как обычно в задачах любого типа классификации, чем больше категорий вы определяете, тем сложнее классификация.

То же самое относится к большому разнообразию программных приложений, которые требуют определенной степени взаимодействия с пользователем. Мы будем использовать чат-ботов в остальной части поста как наиболее очевидный случай интенсивного текстового взаимодействия, но все, что мы объясняем, также может быть полезно в любом другом сценарии, где вам нужно обработать какой-то вводимый текст и ответить на основе настроения, которое вы можете обнаружить в нем.

Теперь мы добавили возможности анализа настроений в Katkit . Цель этого поста – объяснить, как мы это сделали, надеясь, что наш опыт будет полезен любому из вас, кто думает сделать то же самое. Если мне удастся убедить вас в том, насколько легким был этот процесс, я буду достаточно счастлив!

В Katkit анализ настроений реализован как один из наших совершенно новых механизмов Processor . Процессоры – это дополнительные элементы логики, которые могут быть подключены для настройки процесса распознавания намерений. Предварительные процессоры работают с пользовательским вводом, чтобы оптимизировать его перед извлечением намерения. Постпроцессоры предназначены для работы после процесса распознавания намерения, обычно для установки дополнительных параметров контекста. Анализ настроений – один из таких постпроцессоров (о других процессорах мы поговорим в будущих постах). Это позволяет нам настраивать реакцию чат-бота на то, что чувствует пользователь.

Но мы не хотели внедрять такую сложную функцию с нуля. Вместо этого, поскольку ядро Xatkit написано на Java, мы искали существующие библиотеки Java, которые мы могли бы использовать повторно. И вот тут на помощь пришел замечательный проект Stanford CoreNLP и, в частности, компонент SentimentAnnnotator . Стэнфордский НЛП аннотирует входной текст с помощью 5 классов классификации настроений: очень негативный , негативный , нейтральный , положительный и очень положительный . Для этого он полагается на Рекурсивную нейронную сеть, предварительно обученную с помощью собственного банка деревьев настроений .

Это может показаться сложным но я обещаю, что это не так. Весь код, показывающий, как мы интегрировали Stanford NLP в Xat kit, доступен в this Java class . Давайте посмотрим выдержки из ключевого кода, чтобы вы могли создать аналогичную интеграцию для своего собственного инструмента.

Следующий фрагмент показывает, как мы создаем объект Аннотации из входной текстовой строки (предоставленной получите соответствующий ввод в примере; этот и объекты session являются внутренними элементами Katkit, хранящими данные пользовательского высказывания и сеанса соответственно). Из экземпляра annotation мы затем получаем набор аннотированных предложений (Стэнфорд предполагает, что мы хотим определить настроение в блоке текста, а не только в отдельных предложениях, поскольку там может быть недостаточно контекста, хотя в наших тестах он вел себя довольно впечатляюще даже с короткими предложениями). Наконец, с помощью get(SentimentCoreAnnotations. SentimentClass.class ) , мы отфильтровываем другие типы аннотаций и сохраняем только аннотацию для анализа настроений. Затем это значение добавляется к информации session , чтобы мы могли использовать его позже для принятия решения об ответном действии.

Метод getAnnotation является наиболее важным, поскольку именно здесь мы фактически просим Stanford NLP провести анализ наших входных данных. В нашем коде мы обернули вызов в наш собственный класс постпроцессора Stanford NLP по соображениям производительности. Аннотирование текста требует времени, и мы хотели убедиться, что делаем это только один раз, даже если у нас было несколько процессоров, работающих над текстом по разным причинам. Как показано в следующем фрагменте кода, мы обязательно вызываем этот метод тогда и только тогда, когда нет другого Аннотация объект, уже доступный для того же текста.

Наконец, к результату анализа можно получить доступ через переменную context на языке выполнения бота, которая содержит специальный nlp контекст, содержащий результаты различных постпроцессоров, связанных с StanfordNLP (анализ настроений, а также вопрос о том, является ли вопрос да/нет вопрос и т.д.). Приведенный ниже код на самом деле является реальным примером из нашего собственного бота !

Не забывайте, что вы можете попробовать, просто перейдя на нашу домашнюю страницу. Смотрите анимацию теста настроений в нашей демонстрации:

Я надеюсь, что нам удалось убедить вас в том, что добавление возможности анализа настроений в ваш инструмент стоит вашего времени. И это только начало, помимо анализа настроений (и других доступных процессоров ), мы считаем, что существует множество других возможностей, которые могли бы значительно улучшить понимание чат-ботов пользователями. Даже для того, чтобы бот вообще не пытался сопоставить высказывание. Я имею в виду, например, в препроцессоре для ядовитых комментариев (например, см. one для комментариев WordPress ) или детектор троллей . Это также может помешать вам тратить впустую ценные ресурсы (включая деньги, если вы используете облачный API для этапа сопоставления), НЕ обрабатывая высказывания пользователя, которые можно просто выбросить.

Избранное изображение от Тайлер Никс на Unsplash

Оригинал: “https://dev.to/jcabot/how-to-easily-add-sentiment-analysis-to-any-application-55nj”