Category: еда

Category was added automatically. Read all entries about "еда".

Чатбот: полная переделка модели генерации ответа на seq2seq with attention

Репозиторий проекта чатбота: https://github.com/Koziev/chatbot
Докер-образ: https://github.com/Koziev/chatbot/releases/tag/0.0.2.10-alpha

Доработки в новом релизе чатбота

1. Полностью переработан код, строящий ответ на основе вопроса и предпосылок. Вместо нескольких моделей, делавших это для разных типов вопросов, теперь оставлена единственная sequence2sequence модель с "классическим" attention. На текущем датасете из ~81000 троек предпосылка-вопрос-ответ эта модель учится около 10 часов, что намного меньше суммарного времени старого ансамбля моделей. К тому же, качество новой модели выше.
Collapse )
Тестовый диалог с ботом

Вопросы идут без особого порядка, только для тестирования отдельных частей пайплайна бота и моделей. Реплики бота идут с префиксом B, фразы человека предваряются префиксом H.

Collapse )

Текущие концептуальные проблемы, над которыми предстоить серьезно поработать

1. У чатбота нет психического (эмоционального) состояния. Поэтому он не может устать от однотипных вопросов, обидиться на оскорбительные замечания, удивиться необычному факту и так далее. Ответы бота зачастую стереотипны.

2. В дополнение к предыдущему, бот не умеет предсказывать психическое состояние собеседника по его ответам. Поэтому он не знает, доволен ли собеседник его ответами, не сердится ли он и т.д.

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

4. Движок бота имеет ограниченные возможности по интерпретации неполных ответов человека, анафоры, элипсиса. Вопросы типа "зачем?", "почему?", "а еще?", а также местоимения 3-го лица (он, она etc) обычно ставят его в тупик, выражающийся в нерелевантном ответе.

5. В диалоговый движок заложена возможность строить ответ на основе 2х и более предпосылок. Таким образом, бот теоретически может выполнять сложные рассуждения, используя части и взаимосвязь множества фактов. Но текущая реализация механизма подбора релевантных фактов нормально работает только для случая, когда для ответа вообще не нужны дополнительные предпосылки (Чему равно 2 плюс 2?) или достаточно найти одну релевантную предпосылку в базе данных.

Малые стихотворные формы в генераторе текста

Стихогенератор - из лучшего на актуальные темы:

Где родился, там и заразился

Щи да каша чума наша

Новое брюхо к лечению глухо

И напоминание для аллергиков (лето ведь еще не отменили):

На каждый цветок не накинешь платок

 

Новый набор с русскоязычными паттернами noun+NP,gen

Побочный результат подготовки датасета для генеративной модели - список из почти миллиона словосочетаний Noun+NP,gen:
Collapse )
Архив выложен в репозиторий NLP Datasets. Паттерны собирались автоматически без модерации и предобработки спеллчеком, поэтому там есть некоторое количество мусора типа "кожа лица кофе".

Аугментация и генерация NLP датасетов с помощью ruword2tags.RuFlexer

В библиотеку ruword2tags добавлен новый класс RuFlexer, содержащий инструменты для генеративных текстовых моделей. Сейчас этот класс предоставляет единственный метод find_forms_by_tags для подбора форм слова с заданными тегами. Например, чтобы найти форму слова "кошка" для творительного падежа множественного числа, надо написать примерно такой код:
Collapse )
PS: Юрий Бабуров подкинул еще хорошую статью по теме аугментации в NLP: https://towardsdatascience.com/these-are-the-easiest-data-augmentation-techniques-in-natural-language-processing-you-can-think-of-88e393fd610
Касательно упоминаемой в этой статье подстановки синонимов для русскоязычных датасетов я, возможно, выложу и свой примерчик.

Как SentencePiece токенизирует русскоязычный текст

SentencePiece - питоновская библиотека для unsupervised tokenization. Для японского и и китайского, видимо, является очень хорошей альтернативой токенизаторам с handcrafted rules (типа MeCab, который и я когда-то использовал). А для английского языка дает в нейросетевых моделях (гугловский трансформер и BERT) такую приятную вещь, как заранее фиксированный размер словаря.

А как выглядит результат токенизации для русскоязычного текста, учитывая темную сторону русского языка - слишком богатое словоизменение? Далее - краткие результаты эксперимента.
Collapse )

Небольшое сравнение качества двух сетевых моделей определения синонимичности фраз

Модель №1 - нейросетка с triple loss nn_synonymy_tripleloss.py
Модель №2 - нейросетевой бинарный классификатор nn_synonymy.py
Модели обучаются на идентичном датасете, содержащем ~60 тысяч пар синонимичных предложений.
При тестировании каждая модель ранжирует предложения из тестового списка по близости к вводимой строке. Выводится 10 ближайших предложений.

Результаты для модели №1

Collapse )

Результаты для модели №2
Collapse )

небольшое ручное сравнение vanilla w2v и fasttext на русском 10Гб корпусе

Обучил word2vector и fasttext модели на одном и том же текстовом корпусе:10 Гб всяких текстов, включая социальные медиа, изобилующие опечатками и словообразовательным творчеством масс.
Параметры для w2v: CBOW=0 WIN=5 DIM=32 MIN_COUNT=1
Параметры для fasttext: SIZE=64 WINDOW=5 CBOW=0 MIN_COUNT=1
Далее сравниваю выдаваемую похожесть для нескольких пар слов с помощью 1 и 2.
Результаты под катом. Можно заметить, что в некоторых случаях fasttext дает намного лучшие результаты (борщ и борщец), корректнее учитывая русские продуктивные суффиксы. Но исправление опечаток fasttext не тянет (трактор и тракктор).

Collapse )

Collapse )

Зачем нужна декомпозиция оценки сентимента на полярность и упоминание аспекта (и еще facets)

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

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

Collapse )

PS:

Collapse )

Вторая часть для системы оценки сентимента в отзывах - детектор аспектов

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

Чистота, красивая территория, номера точь-в точь как на фото, аниматоры не дают скучать детям.

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