Size: a a a

Natural Language Processing

2019 October 31

AK

Alex Klimov in Natural Language Processing
Хотелось бы дать такой же исчерпывающий ответ. Но отвечу покороче (дальше мое чистое имхо). В общем и целом - Rasa это такой фреймворк, который только призван структурировать твой код (четче деление по фаликам с кодом и с даткой на интенты, сущности, контекст и т.п.). При этом он включает в себя уже готовые модули для всего этого, ну прямо скажем не самого подходящего качества для русского языка…
Плюс, есть Rasa Core и Rasa X. Вторая добавляет минимальный UI, зародыш админки. И в целом правильное движение.
А вот в Rasa Core, самом ядре есть что:
nlu.md
nlu.md
Классификатор интентов (качество норм)
NER (на CRF, пойдет для перечислимых сущностей при наличии достаточного количества данных, но всякие даты, города - нужно прикручивать свой)
stories.mdstories.md
Имхо самая спорная часть. Учиться на реальных диалогах - хорошо, но плоский стейт это провал. Да и сам стейт трекер - словарик. Я пока выпилил и вся обработка отправялется в actions.py

Всякие коннекторы к разным сетям, слакам. Думаю тут ситуация не может быть лучше, чем у microsoft bot framework. Непонятно какими абстракицями надо все покрыть, если интерфейс настолько отличается. В одном месте комментарии ветвятся, в другом - нет. Где-то есть репосты, где-то нет. Для простого текстового функционала пойдет, но чем сложнее взаимодействие, тем тяжелее будет с коннектором работать.
источник

IP

Igor Panteleev in Natural Language Processing
по поводу коннекторов: по сравнению с бот фреймворком, раса более гибкая из-за возможности отправлять кастомный json, то есть в ней я хотя бы могу отправить ответ так как я хочу. в бот фреймворке вся кастомизация через карточки, которые вносят свои ограничения
но соглашусь с тем,  что все равно придется писать сложные вещи под каждый коннектор руками.

вопрос по поводу классификатора, есть ли возможность работать с динамическими данными, например:

Есть веб интерфейс где я гружу некоторые ресурсы. Каждый ресурс имеет название, задаваемое пользователем.

в боте есть возможность выбрать с каким именно ресурсом я хочу работать дальше:
кнопка Выбрать ресурс -> ответ от бота: Выберите ресурс и дальше список кнопок из произвольных загруженных ресурсов (получаем из апи)

Так как названия произвольные, получается, что я не могу подготовить модель, раса не сможет разобраться с этой историей, из коробки так точно?
источник

V

Vlad in Natural Language Processing
Igor Panteleev
Их просто такое количество, что я бы лучше в личку написал, но можно начать с фундоментального😄

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

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

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

На вопрос зачем мне это, если и раньше все работало: хочется расширить список каналов "одной кнопкой", а не писать оболочку под каждый мессенджер. Да и в принципе раса понравилась за пару дней использования, но вот вкатиться в нее после детерменированного решения не получается
1. Область применения у Расы разная, как и faq роботы, роботы для уведомлений, для подвинутого меню и, если позволяют ваши базовые модели для NER - прекрасно справится с первой линией техподдержки

2. Состояние так же можно хранить в расе. Там есть отдельный класс message для этого, он хранит все вопросы и ответы, сессию, и user id (который нужно передавать каждый раз при общении с ботом)

3. Переключение между историями нету, надо делать свою надстройку, которая будет рулить разными моделями

4. Что вы понимаете про "одной кнопкой" и "оболочку под каждый мессенджер"?
источник

V

Vlad in Natural Language Processing
Alex Klimov
Хотелось бы дать такой же исчерпывающий ответ. Но отвечу покороче (дальше мое чистое имхо). В общем и целом - Rasa это такой фреймворк, который только призван структурировать твой код (четче деление по фаликам с кодом и с даткой на интенты, сущности, контекст и т.п.). При этом он включает в себя уже готовые модули для всего этого, ну прямо скажем не самого подходящего качества для русского языка…
Плюс, есть Rasa Core и Rasa X. Вторая добавляет минимальный UI, зародыш админки. И в целом правильное движение.
А вот в Rasa Core, самом ядре есть что:
nlu.md
nlu.md
Классификатор интентов (качество норм)
NER (на CRF, пойдет для перечислимых сущностей при наличии достаточного количества данных, но всякие даты, города - нужно прикручивать свой)
stories.mdstories.md
Имхо самая спорная часть. Учиться на реальных диалогах - хорошо, но плоский стейт это провал. Да и сам стейт трекер - словарик. Я пока выпилил и вся обработка отправялется в actions.py

Всякие коннекторы к разным сетям, слакам. Думаю тут ситуация не может быть лучше, чем у microsoft bot framework. Непонятно какими абстракицями надо все покрыть, если интерфейс настолько отличается. В одном месте комментарии ветвятся, в другом - нет. Где-то есть репосты, где-то нет. Для простого текстового функционала пойдет, но чем сложнее взаимодействие, тем тяжелее будет с коннектором работать.
Для русского языка нужно многое менять и делать свой NER)

И да, под капотом у расы лютый говнокод, я успел уже в нём покапаться, пока русский прикручивал...
источник

AC

Alexey Chaley in Natural Language Processing
Vlad
Для русского языка нужно многое менять и делать свой NER)

И да, под капотом у расы лютый говнокод, я успел уже в нём покапаться, пока русский прикручивал...
Это вы еще deeppavlov не смотрели :)))
источник

V

Vlad in Natural Language Processing
Мне хватило неудачной попытки его установки)))
источник

Ю

Юрий in Natural Language Processing
Alexey Chaley
Это вы еще deeppavlov не смотрели :)))
а что с ним? вроде в рейтинге мфти его высоко оценили
источник

V

Vlad in Natural Language Processing
Он про код под капотом)
источник

AC

Alexey Chaley in Natural Language Processing
Юрий
а что с ним? вроде в рейтинге мфти его высоко оценили
Там лютый ад.
источник

Ю

Юрий in Natural Language Processing
а Just AI кто нибудь тестил?
источник

V

Vlad in Natural Language Processing
Я лично нет, но это вроде же не опенсорсный фреймворк?
источник

Ю

Юрий in Natural Language Processing
нет, вроде нет
источник

V

Vlad in Natural Language Processing
Кстати, а кто-нибудь chatterbot тестил?
Он выглядит более интересным аналогом расы
источник

IP

Igor Panteleev in Natural Language Processing
Vlad
1. Область применения у Расы разная, как и faq роботы, роботы для уведомлений, для подвинутого меню и, если позволяют ваши базовые модели для NER - прекрасно справится с первой линией техподдержки

2. Состояние так же можно хранить в расе. Там есть отдельный класс message для этого, он хранит все вопросы и ответы, сессию, и user id (который нужно передавать каждый раз при общении с ботом)

3. Переключение между историями нету, надо делать свою надстройку, которая будет рулить разными моделями

4. Что вы понимаете про "одной кнопкой" и "оболочку под каждый мессенджер"?
спасибо за ответ)

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

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

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

V

Vlad in Natural Language Processing
Igor Panteleev
спасибо за ответ)

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

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

под оболочкой имел ввиду то, что текущем решение приходится под каждый мессенджер писать свой модуль, который будет прослойкой между самописной бот моделью и апи мессенджера
Такое только если вы сами сделаете дополнительно над расой)
И нужно постоянно поддерживать и обновлять эту надстройку, потому что у мессенджеров постоянно что-то меняется
источник

V

Vlad in Natural Language Processing
Я даже если честно и не встречал ничего готового в опенсорсе, которое может работать из коробки с разными мессенджерами сразу
источник

IP

Igor Panteleev in Natural Language Processing
Vlad
1. Область применения у Расы разная, как и faq роботы, роботы для уведомлений, для подвинутого меню и, если позволяют ваши базовые модели для NER - прекрасно справится с первой линией техподдержки

2. Состояние так же можно хранить в расе. Там есть отдельный класс message для этого, он хранит все вопросы и ответы, сессию, и user id (который нужно передавать каждый раз при общении с ботом)

3. Переключение между историями нету, надо делать свою надстройку, которая будет рулить разными моделями

4. Что вы понимаете про "одной кнопкой" и "оболочку под каждый мессенджер"?
а можете расшарить 3ий пункт? имеется ввиду написать свой модуль который встанет после Tracker и перед Policy и как-то переключит весь контекст
источник

AC

Alexey Chaley in Natural Language Processing
Vlad
Мне хватило неудачной попытки его установки)))
Я таки поставил, даже некоторые вещи попробовал.
Я честно хотел несколько раз попытаться на нем что-то рабочее сделать, но есть проблемы:
1. Адские конфиги, то есть, не программирование, а декларативное программирование на json. Имхо, это просто не подходит ни для продакшен кода, ни для исследований. Я не понимаю целевую аудиторию фреймворка.
2. Код очень соминтельного качества. Ну они вроде и не скрывают, что пишут студенты без опыта промышленной разработки.
3. Отсутствие внятной документации и комментариев по коду. Порог вход большой. Тут бы всем поучиться у IBM документацию писать.
4. Падения внутри моделей просто так от случая к случаю.

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

IP

Igor Panteleev in Natural Language Processing
Alexey Chaley
Я таки поставил, даже некоторые вещи попробовал.
Я честно хотел несколько раз попытаться на нем что-то рабочее сделать, но есть проблемы:
1. Адские конфиги, то есть, не программирование, а декларативное программирование на json. Имхо, это просто не подходит ни для продакшен кода, ни для исследований. Я не понимаю целевую аудиторию фреймворка.
2. Код очень соминтельного качества. Ну они вроде и не скрывают, что пишут студенты без опыта промышленной разработки.
3. Отсутствие внятной документации и комментариев по коду. Порог вход большой. Тут бы всем поучиться у IBM документацию писать.
4. Падения внутри моделей просто так от случая к случаю.

Я основные вещи писал руководителю разработки, кстати, он есть в телеге, возможно, его имеет смысл сюда пригласить. Он адекватно отвечает и пытается помочь.
кажется что сейчас декларативное программирование это тренд)
источник

AC

Alexey Chaley in Natural Language Processing
Igor Panteleev
кажется что сейчас декларативное программирование это тренд)
Я не знаю тред это или что-то иное, но то, что люди не понимают для кого и для какой цели они делают фрейворк -- это факт.
Я в таких случаях всегда прошу человека самого попробовать на этом фреймворке сделать что-то более-менее реальное, а не просто один сэмпл запилить.
источник