Category: it

Category was added automatically. Read all entries about "it".

Какой он на самом деле современный "Диалоговый Искусственный Интеллект"

Разницу между тем,

1) что позволено видеть потребителю (а для корпоративного маркетолога все мы - "кастомеры"),
2) и как на самом деле все это работает,

хорошо иллюстрирует вот этот клипчик про съемки фильма "Automata":
Collapse )В диалоговых системах роль зеленых человечков играют те, кто составляют сценарии бесед, определяют ключевые темы и переходы, прописывают "эмоции", которые чатботы будут "проявлять".

Зачем нужна генерация фактов под заданный вопрос?

Примеры такой генерации были тут.
Уместно спросить, зачем кому-то в здравом уме может понадобиться такая конфабуляция?
Ответ - на слайде №25 в презентации для коллег из ВШЭ :)

Эксперименты с использованием ruGPT для incomplete utterance restoration

В чатботе задача восстановления полной реплики по контексту (заполнение эллипсисов, раскрытие анафоры и т.д.) сейчас решается одной seq2seq моделью, которая обучается в режиме teacher forcing на ~75 тысячах сэмплов. Эта модель на валидации дает примерно качество  ~0.95 (посимвольный jaccard).

Я решил посмотреть, что можно получить файнтюнингом ruGPT на этих же данных.

Модель sberbank-ai/rugpt3small_based_on_gpt2
batch_size = 12
epochs = 10
время обучения – около 15 минут на эпоху
jaccard score = 0.90
Collapse )
Модель sberbank-ai/rugpt3large_based_on_gpt2
batch_size = 12
epochs = 10
время обучения – около часа на эпоху
jaccard score = 0.925
Collapse )

isanlp - еще один NLP фреймворк с поддержкой русского языка

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

"ISANLP is a Python 3 library that encompasses several open-source natural language processing tools for English and Russian"

Среди прочего там есть "Russian semantic role labeler (SRL) based on FrameBank and neural network models.", что делает этот пакет потенциально интересным.

И чтобы два раза не вставать. Коллеги на работе погоняли текущий русскоязычный dependency парсер в Stanza. Получилось, что он немного лучше UDPipe (а оба они лучше Spacy), особенно на предложениях с неканоничным порядком слов и с несловарной лексикой.

Два вида знаний в боте: "опытное" и "трансцедентальное"

В этом проекте чатбота есть несколько мест, где хранятся "знания о мире".

1. База знаний. В текущей реализации это просто plain text файл, в котором знания записаны в максимально читабельном виде. Часть знаний задана априори для удобства эксплуатации, другие факты попадают туда по мере развития диалога, то есть в ходе *приобретения опыта*. Оба эти свойства БЗ позволяют, к слову, численно измерять качество диалогов - см. https://kelijah.livejournal.com/282407.html.

Пайплайн бота устроен так, что бот постоянно обращается к этой памяти не только для ответа на вопросы собеседника, но и в рамках некоторого "внутреннего диалога". Например, бот бот проверяет, знает ли он уже сообщаемую собеседником информацию, не противоречит ли она известной. Кроме того, в этой же памяти бот запоминает, о чем он только что говорил с собеседником.

Думаю, не будет большой натяжкой назвать эту память СЕМАНТИЧЕСКОЙ, а знания - опытными.

2. Эмбеддинги слов (точнее BPE-юнитов). Несколько нейросетевых моделей в пайплане работают с представлением текста через byte pair encoding, например, модель вывода текста ответа из предпосылки и вопроса. В ходе обучения эти модели "утрясают" векторы эмбеддингов BPE юнитов, благодаря чему и обеспечивается некоторая обобщающая способность моделей. При словаре в 24000 bpe-юнитов и размере вектора 64 float32 получаем примерно 6 Мб информации. Это больше, чем данных в базе знаний!


Что хранится в этих эмбеддингах? Как обычно - некая онтология в той предметной области, где работает модель. Для модели генерации ответа, например, эти эмбеддинги позволяют модели видеть близость юнитов "_сегодня" и "_сейчас" и т.д.

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

Забавный момент, когда соприкасаются наша NLP'шная инженерия и максимально далекая от нее философия.

Метрики precision/recall для оценки качества моделей чатботов

Оценка модели чатбота чещь непростая, но очень нужная.

С одной стороны, хочется иметь объективную оценку качества диалога, а не делать это на глазок.

Но отдавать диалоги асессорам на ручную оценку после каждого эксперимента довольно затратно.

А для reinforcement learning этот подход возможен только в виде лайков/дизлайков, которые будут ставить содеседники. Это слишком запаздывающая оценка, чтобы быть практичной в стадии ресёча.

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

Во-первых, это как-то работает только на закрытых доменах. Обычный диалог "о жизни" настолько вариативен, что даже похожий контекст не всегда можно подобрать в листинге. Да и разные ответы не всегда означают, что бот ответил плохо!

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

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


Collapse )

Регулярки против BERT'а

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

на задаче классификации интентов (и вообще на большинстве задач классификации текста) по метрике precision регулярные выражения безусловно бьют любое distributed представление (BERT, ELMO etc).

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

На метрике recall ситуация может быть разной, но обычно нужна именно точность в ущерб полноте, иначе бот начинает отвечать про Ерему, когда его спрашивают про Фому.

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

Мир несправедлив, в том числе в объеме доступных русскоязычных датасетов для NLP.
В связи с ростом качества нейросетевых систем машинного перевода возникает мысль прогонять тексты через такой переводчик.
Я взял OpenNMT и en-ru модель отсюда.
На входе - англоязычные диалоги.

Результаты:

- Hello!
- Hi! How are you?
- Not bad! And You?
- I'm doing well. Just got engaged to my high school sweetheart.
- Wowowowow! Congratulations! Is she pretty?
- She 's pretty cute. She invited me to dinner tonight. 🙂
- Cool! Have a good time you both! And what is your hobby?
- I love music! I love Taylor swift. 😉
- Me too. And what about Iggy Pop?
- I love Ziggy! He is my favorite. Are you and your wife millennial too?
- I have no wife. And I'm not millenial, I'm X generation. Hey? Where are you?
- I am sorry to hear that. What do you do for fun?
- I'm playing pipe organ.
- That sounds impressive. I like to go out to eat with my friends.
- Cool! See ya!
----------------------------------------------------
- Здравствуйте!
- Привет! Как дела?
- Неплохо!
- У меня все хорошо.
- Воовы! Поздравляем!
- Она довольно симпатичная.
- Классно провели время вместе!
- Я люблю музыку! Я люблю Тейлор Свифт.
А что насчет Игги Попа?
- Я люблю Зигги! Он мой любимый.
- У меня нет жены. И я не милленал, я - Х поколение.
- Мне очень жаль это слышать.
- Я играю на органе.
- Звучит впечатляюще.
- Круто!



Временами появляется бред, но его не так уж много, так что ручная модерация должна помочь:

- Я разработчик программного обеспечения.
- О, круто.
- Я танцую барабан и базу!