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

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

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

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

О языковой креативности в период усвоения родного языка

Только накануне я с умным видом распинался о том, что мол одно из зримых отличий генеративных нейросеток от человека в период language acquisiton - отсутствие у сеток "языковой креативности".

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

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

И вот разгребаю сегодня лог беседы ботов, и вижу фрагмент для генерации ответа:

заданный вопрос: где растут одуванчики?
подобранный факт: одуванчики зацвели и затенили окно
сгенернированный ответ: около затенилища


Что тут должно привлечь внимание?

Слово "затенилища". Это существительное явно собрано нейросеткой из BPE-токенов на основе глагола "затенили". Сетка применила вполне валидную модель словообразования с суфиксом -ищ- и просклоняла получившееся существительное в правильный падеж, выбрав нужное окончание -а.

Это как раз такое поведение, которое есть у детей.

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

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

Будут ли у роботов психические болезни?

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

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

Collapse )


И даже Л - логика:


Collapse )

претрейнинг для seq2seq модели incomplete utterance restoration

В продолжение поста о модели интерпретатора.

Эксперименты с обучением seq2seq модели показывают, что имеющегося набора обучающих данных (~76 тысяч сэмплов) маловато.
Хотя по мере добавления новых сэмплов (особенно в ходе итераций active learning) качество растет.

Можно предположить, что часть проблем модели вытекает из редкости некоторых слов и n-грамм.

А что, если попробовать сначала "разогреть" сетку сырыми, невалидированными данными?

У меня есть код автогенерации сэмплов из реальных текстов. С помощью набора правил и синтаксического парсера можно для произвольного утвердительного предложения сгенерировать вопрос и ответ:
Collapse )

Эксперименты с использованием 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'шная инженерия и максимально далекая от нее философия.