company_banner

Смарт-реплай стикерами



    Привет, Хабр! Сегодня мы перезапустили ICQ. Ключевые функции нового мессенджера основаны на технологиях искусственного интеллекта: система быстрых подсказок стикеров и текста Smart Reply для ответа на пришедшее сообщение, предложение стикеров по введенным фразам, распознавание голосовых сообщений и другие.

    В этой статье я расскажу про одну из них — Smart Reply. Данная фича позволит экономить время пользователей, так как им надо будет всего лишь кликнуть по понравившемуся стикеру из предложенных. Заодно фича будет популяризировать использование разнообразных стикеров и повышать эмоциональность общения.

    Подготовка данных


    Задача из области NLP и решалась с помощью машинного обучения и нейросетей. Обучение проводилось на специально подготовленных данных из публичных чатов. Использовались пары: фрагмент диалога и стикер, который присылался одним из пользователей в ответ на последнее сообщение собеседника. Для лучшего учета контекста фрагмент диалога состоит из последних сообщений собеседника, которые склеиваются, и из сообщений пользователя до них. С числом сообщений можно экспериментировать, например, в Google ML Kit используется контекст из 10 сообщений [1].

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


    Частоты использования 4000 наиболее популярных стикеров по убыванию.

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

    Выбор модели


    Для предсказания используется сиамская модель DSSM, по аналогии с моделью для Smart Reply в Почте Mail.ru (близкая архитектура описывается в [2]), но с определенными отличиями. Преимущество сиамской модели в эффективности для инференса, так как часть, соответствующая стикерам, вычисляется заранее. Для ответа на письма в оригинальной модели используется мешок n-gram слов для представления текста, что для письма является оправданным: текст может быть большим, и нам надо уловить общую специфику и дать некоторый стандартный короткий ответ. В случае с чатами и стикерами текст короткий, и здесь важнее отдельные слова. Поэтому было решено использовать в качестве фич эмбединги отдельных слов и добавить для них LSTM-слой. Подобная идея использования LSTM-слоя в случае коротких текстов применялась, например, для текстовых ответов в мессенджере Google Allo [3] и в модели предсказания смайлов, соответствующих коротким сообщениям DeepMoji [4]. Ниже на рисунке схематически показана модель.


    Архитектура модели.

    На рисунке начальные слои — это эмбединги входящих токенизированных слов (слева) и стикеров (справа). Для токенизации слов использовался словарь, в который попали 100К наиболее популярных слов. Для разделения сообщений разных пользователей использовался специальный выделенный токен. Обучение идет end-to-end. После вычисления эмбедингов для последовательности слов идем LSTM-слой, состояние которого затем передается в полносвязные слои с тангенс-активацией. В итоге, в левом энкодере на выходе получаем вектор, который представляет текст, а в правом — вектор, соответствующий стикеру. Скалярное произведение векторов определяет, насколько подходят друг другу текст и стикер. Размерность эмбедингов, вектора внутреннего состояния LSTM и выходного вектора бралась равной 300.

    Целевая функция для обучения выглядит так:



    где K — это размер батча,

    S(xi, yi) — скалярное произведение результирующих векторов для позитивных примеров пар текст-стикер,

    S(xi, yj) — скалярное произведение векторов для негативных примеров пар текст-стикер. Негативные примеры пар текст-стикер генерировались за счет случайного перемешивания исходных корректных пар. Так как для популярных универсальных стикеров велика вероятность при перемешивании опять оказаться корректной парой, то на этапе дообучения применялся дополнительный контроль в рамках батча, чтобы не было похожих текстов для позитивных и негативных пар с одним стикером. В ходе экспериментов лучше работало, если негативных примеров использовать меньше, чем K. В виду шумности данных обучение большими батчами работало лучше. Усложнение модели и добавление attention-слоя заметного улучшения точности не дали, что, скорее, говорит об ограничениях, связанных с данными, и их качеством.

    Из-за того что выбран подход со словарем из отдельных слов, а не character n-gram, теряется гибкость модели по отношению к опечаткам. Проводился с эксперимент с обучением fastText-эмбединга, который обучается непосредственно в сети, что позволило снизить влияние ошибок. В данном случае обучение шло хуже, и заметно помогло добавление attention-слоя. Взвесив показатели качества и другие факторы, решено было остановиться пока на более простой модели. В этом случае проблема опечаток решается применением спелчекера в ситуации, если слова нет в словаре. В обычном режиме спелчекер не применяется, так как некоторые слова с ошибками являются особенностью неформального общения в чатах.

    Получение ответов


    Как работает модель на стадии инференса?

    Векторы для стикеров, вычисляемые правым энкодером, считаем заранее. На этапе обработки запроса используется только левый энкодер для получения вектора для входящего текста. Далее нужно получить список стикеров в порядке убывания скалярного произведения вектора текста и стикера. Это можно делать напрямую, перемножая все векторы стикеров, или использовать алгоритмы поиска ближайших соседей по данной метрике. Например, в [2] предлагается использовать Hierarchical Quantization для Maximum Inner Product Search (MIPS). Мы применили алгоритм поиска HNSW, и это дало существенное ускорение по сравнению с полным перебором.

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


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

    Три предлагаемых стикера на фразу «Привет»: без диверсификации и с диверсификацией.

    Было проверено несколько вариантов для диверсификации. Самый простой — это выбрать топ N стикеров с учетом ограничения на score, далее выбрать топовый стикер, а остальные два выбрать с максимальным расстоянием между друг другом, при ограничении на допустимое различие расстояний до топового стикера. Данный подход можно комбинировать с использованием результатов ручной разметки стикеров по эмоциональной окраске (положительная, негативная, нейтральная), и выбирать из топ N стикеры с разной окраской, если такие присутствуют.

    Другой вариант — кластеризация стикеров по их эмбедингам, и при выдаче результатов выбирать не более одного стикера из кластера. Для кластеризации использовалась связка UMAP + HDBSCAN. UMAP — это новый эффективный алгоритм снижения размерности, превосходящий уже зарекомендовавший себя t-SNE. Применялось снижение размерности до двух, а затем использовался алгоритм кластеризации HDBSCAN. Было выделено около 100 кластеров. Полностью автоматически данная задача не решается, при различных настройках удавалось добиваться кластеризации до 70 % стикеров, но далее требуется ручная доработка, проверка. Поэтому остановились на описанных выше более простых вариантах, так как их результат оказался хорошим.


    Кластеризация стикеров по эмбедингам.

    Результаты


    В итоге мы получили простой и эффективный смарт-реплай стикерами, который продемонстрировал очень хорошее качество ответов. По тестам на 1000 различных фраз, от простых до относительно сложных, по оценкам респондентов топовый стикер назвали полностью подходящим более чем в 75 % случаев. На тесте по 100 более простым и популярным фразам результат еще более впечатляющий: топовый стикер назвали полностью подходящим в 93 % случаев.

    Примеры предлагаемых моделью ответов стикером.

    Какие имеются недостатки?

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

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

    Литература


    1. Google updates ML Kit with Smart Reply API for third-party Android and iOS apps. 9to5google.com/2019/04/05/ml-kit-smart-reply
    2. Matthew Henderson, Rami Al-Rfou, Brian Strope, Yun-Hsuan Sung, Laszlo Lukacs, Ruiqi Guo, Sanjiv Kumar, Balint Miklos, and Ray Kurzweil. Efficient Natural Language Response Suggestion for Smart Reply. arXiv:1705.00652v1, 2017.
    3. Pranav Khaitan. Chat Smarter with Allo. ai.googleblog.com/2016/05/chat-smarter-with-allo.html
    4. Bjarke Felbo, Alan Mislove, Anders Søgaard, Iyad Rahwan, Sune Lehmann. Using millions of emoji occurrences to learn any-domain representations for detecting sentiment, emotion and sarcasm. arXiv:1708.00524v2, 2017.
    Mail.ru Group
    Строим Интернет

    Комментарии 23

      +1
      Нет, спасибо, все равно никто не будет пользоваться аськой
        +19
        Круто-круто, ага. А какую проблему пользователя это решало вообще?
          +1
          Я бы с огромным интересом логи custdev интервью по этой истории почитал бы, да)
            +2
            Вообще, поразмыслив, сгенерировал гипотезу. Вспомнил рассказы о том, что есть люди, которые дико обижаются, если им хотя бы как-то не ответить. И вроде бы и ссориться не хочется — потом не оберёшься, и отвлекаться нафиг надо.

            Такой перекос в общении, конечно, в принципе нездоровая ситуация. И её надо не стикерами заклеивать, а не-IT методами, вплоть до психотерапии и/или прекращения отношений. Но — боль есть, факт.
            +5
            Я пользуюсь аськой. Мало, но все-таки — десяток контактов еще живые.
            Вопрос асечникам — как эту вашу хрень отключить? желательно навсегда? Ибо это стало последней каплей…
              +3
              Предлагаю юще одну автореакцию:
              — директор
              — Пошел ты в жопу, директор!
                +1
                Вы, конечно, будете смеяться, но…
                давным-давно (году примерно в 2002) я поставил эту фразу на пробуждение компа от мышки (тогда поветрие было какое-то. Насколько помню, самой популярной была «слушаю тебя, о повелитель!» из каког-то мультика или фильма-сказки...).
                Ну, дальше, как обычно — заходит директор, подсаживается к моему столу, и желая что-то мне показать — дергает мышкой… :-)
                +3
                В следующем релизе добавьте Smart Question. Будете 100% самодостаточны.
                  0
                  а если у меня лет 15 назад украли семизнак, то есть ли возможность его вернуть?
                    +4
                    Они теперь вообще начали удалять старые аккаунты. Мой девятизнак удалили.
                    +8
                    Во время коронавируса экология так улучшилась что на компы вернулась ICQ?
                      –5
                      Извините
                      image
                        +5
                        Как-то странно после последнего решения об удалении старых аккаунтов и пробросе пользователей (сорри, номера аськи — это не номера мобильных телефонов, можно генерить сколько хочешь), сразу предлагать какие-то стикеры. Не думаю, что от смерти спасут стикеры.
                          +5

                          Что, правда? Стикеры? Нет… Реально? Это то, ради чего так громко возвращаться?
                          Это типа какой-то 60-летний депутат сказал "нам нужна молодежь! Что она там любит, стикеры? Вот давайте их!"
                          Зачем?
                          Я всё понимаю… Тема "вернуть былое" сейчас в тренде. Всякие RAZR мотороллы, консоли старые там за кучу денег. Но разлагающийся труп героя 90-х вынимать ради стикеров! Умных!
                          Ох… Где там моя валерьянка…

                            +1
                            — сроки горят
                            — я тоже

                            После такого смарт ответа человек может быть уволен, если ответ улетел его руководителю
                              +7
                              Идите, пожалуйста, лесом со своими смарт-ответами. Туда же дорога «быстрым ответам» и мессенджерам, поощряющим примитивизм в общении. Достало уже получать на содержательный текст картинку — наверное, я стал слишком стар, но если человек отвечает на моё сообщение стикером, у меня отпадает всякое желание продолжать с ним диалог. Будто ему настолько наплевать на переписку со мной, что он наотвали, побыстрее ответил стикером, лишь бы отвязался.
                                +2

                                Смарт-ответы конечно лесом, но стикеры сами по себе — неплохой способ ёмко передать эмоции человеку, который с тобой на одной понятийной волне и может интерпретировать их идентичным с тобой способом. Они как и графические/текстовые смайлы появились как решение вполне реальной проблемы — быстро и ёмко передать эмоциональный настрой, без необходимости при этом иметь хорошо прокачанный писательский скилл.

                                  +2
                                  Я сам очень люблю использовать стикеры, особенно когда хорошее настроение. В этом плане Телеграм, позволивший пользователям создавать свои стикеры наравне со стандартными, сделал очень удобную вещь. Но, к сожалению, в большинстве случаев стикеры не дополняют, а заменяют текст. И вот тогда становится грустно, особенно в переписках тет-а-тет.
                                +1
                                Анонимность регистрации и шифрование по дефолту завезите пожалуйста, полагаю это киллер фичи. Я даже с телеги к вам уйду. А смайлики и уж тем более стикеры можете выпилить совсем.
                                  +2
                                  Кажется, кто-то из продактов мейла начал проходить онлайн-курс GoPractice, но бросил на середине…

                                  p.s. Там обучение строится на разборе кейса выдуманного месседжера, у которого главная фича — функция Smart Reply. Но по ходу действия оказывается, что подобное приложение никому не нужно, продакты решаются на pivot, отказываются от этой фичи и… профит!
                                    +1
                                    Умерла, так умерла. Зачем палочкой трогать хладный труп?
                                      0
                                      Так они недавно ещё этому трупу голову отрезали. А теперь ему макияж делают.
                                      0
                                      Комментарии интереснее самой статьи.

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

                                      Самое читаемое