В последнее время машины одержали ряд убедительных побед над людьми: они уже лучше играют в го, шахматы и даже в Dota 2. Алгоритмы сочиняют музыку и пишут стихи. Учёные и предприниматели всего мира дают прогнозы по поводу будущего, в котором искусственный интеллект сильно превзойдёт человека. С большой вероятностью через несколько десятков лет мы будем жить в мире, в котором роботы не только водят автомобили и работают на заводах, но и развлекают нас. Одна из важных составляющих нашей жизни — юмор. Принято считать, что только человек может придумывать шутки. Несмотря на это, многие ученые, инженеры и даже простые обыватели задаются вопросом: можно ли научить компьютер шутить?
Компания Gentleminds, разработчик систем машинного обучения и компьютерного зрения, совместно с FunCorp попробовали создать генератор весёлых подписей к картинкам, используя базу мемов iFunny. Поскольку приложение англоязычное и используется преимущественно в США, подписи будут на английском. Подробности под катом.
В отличие от сочинения музыки, в которой есть законы гармонии, природу того, что нас смешит, очень сложно описать. Мы иногда сами с трудом можем объяснить, что же нас рассмешило. Многие исследователи считают, что чувство юмора — один из последних рубежей, который необходимо преодолеть искусственному интеллекту, чтобы максимально приблизиться к человеку. Исследования показывают, что чувство юмора формировалось у людей долгое время под действием полового отбора. Это можно объяснить тем, что между интеллектом и чувством юмора есть положительная корреляция. Даже сейчас в нашем понимании юмор — это хороший маркер интеллекта человека. Умение шутить включает в себя такие сложные элементы, как искусное владение языком и кругозор. Ведь владение языком важно для некоторых видов юмора, (например, британского), которые во многом построены на игре слов. В общем, научить алгоритм шутить — не самая простая задача.
Исследователи со всего мира пробовали научить компьютер придумывать шутки. Так, Жанель Шейн (Janelle Shane) создала нейронную сеть, которая пишет шутки в стиле «Тук-тук! Кто там?» (knock-knock jokes). Для обучения этой сети использовался набор данных из 200 knock-knock jokes. С одной стороны, это довольно простая задача для ИИ, так как все шутки в данном наборе имеют одинаковую структуру. С другой — нейронная сеть просто находит ассоциации между словами в небольшом наборе исходных данных и не придаёт этим словам никакого смысла. В результате получаются шутки, заточенные под один и тот же шаблон, которые в большинстве своем трудно назвать смешными.
В свою очередь, исследователи из Университета Эдинбурга представили успешный метод обучения компьютера шуткам I like my X like I like my Y, Z. Основной вклад этой работы — создание первой fully unsupervised humor generation system. Полученная модель значительно превосходит базовую и генерирует забавные шутки, которые считаются людьми смешными в 16% случаев. Авторы используют только большое количество неразмеченных данных, а это указывает на то, что генерация шутки не всегда требует глубокого семантического понимания.
Учёные из Университета Вашингтона создали систему, которая может придумывать пошлые шутки по шаблону that's what she said — TWSS (дословно: вот что она сказала; на русский можно перевести примерно как «если вы понимаете, о чём я»). «Вот что она сказала» — это хорошо известная группа шуток, ставшая вновь популярной после сериала The Office. Задача TWSS — проблема с двумя отличительными характеристиками: во-первых, использование существительных, которые являются эвфемизмами для откровенно сексуального характера существительных и, во-вторых, двусмысленность. Для решения TWSS использовалась система Double Entendre via Noun Transfer (DEviaNT). В результате в 72% случаев система DEviaNT знала, когда нужно сказать that's what she said — отличное достижение для этого типа программы на естественном языке.
Авторы статьи представляют модель генерации шуток на основе нейронных сетей. Модель может генерировать короткую шутку, относящуюся к заранее указанной теме. Используется кодировщик для представления пользовательской информации о теме и декодер RNN для генерации шуток. Модель обучена на коротких шутках Конана О'Брайена (Conan Christopher O'Brien) с помощью POS Tagger. Качество оценивалось пятью англоговорящими людьми. В среднем данная модель превосходит вероятностную, обученную написанию шуток фиксированной структуры (описанный выше подход из Университета Эдинбурга).
Исследователи из Microsoft также попытались научить компьютер шутить. Используя конкурс мультфильмов журнала The New Yorker в качестве данных для обучения, они разработали алгоритм выбора из тысяч самых смешных надписей, предоставленных читателями.
Как видно из всех приведённых примеров, научить машину шутить — задача не из лёгких. Тем более у неё нет универсальной метрики качества, так как каждый может воспринять одну и ту же шутку по-разному. Да и сама формулировка «придумать смешную шутку» не выглядит конкретной.
В нашем эксперименте мы решили немного облегчить задачу и добавить контекст — изображение. Системе требовалась придумать забавную подпись к ней. Но, с другой стороны, задача немного усложнилась, так как добавилось ещё одно пространство и требовалось научить алгоритм сопоставлять текст и картинку.
Задачу создания смешной подписи к картинке можно свести к выбору подходящей из существующей базы или генерации новой подписи посредством какого-либо метода. В данном эксперименте мы попробовали оба подхода.
Мы полагались на базу, предоставленную iFunny. В ней было 17 000 мемов, которые мы разделили на два компонента: картинку и подпись. Мы использовали только мемы, в которых текст располагался строго над картинкой:
Мы попробовали два подхода:
- генерация подписи (в одном случае марковской цепью, в другом — рекуррентной нейронной сетью);
- подбор наиболее подходящей к изображению подписи из базы. Он осуществлялся на основании визуальной составляющей. В первом подходе для изображения искали подпись внутри кластеров, построенных на базе мемов. В подходе Word2VisualVec, который в данной работе получил название Membedding, пробовали перенести изображения и текст в одно векторное пространство, в котором релевантная подпись была бы близка к изображению.
Ниже подходы описаны более подробно.
Анализ базы
Любое исследование в машинном обучении всегда начинается с анализа данных. Прежде всего хотелось понять, какого рода изображения содержатся в базе. С помощью классификационной сети, обученной на https://github.com/openimages/dataset, для каждого изображения мы получили вектор с рейтингами для каждой категории и сделали кластеризацию на основе этих векторов. Выделили 5 крупных групп:
- Люди.
- Еда.
- Животные.
- Автомобили.
- Анимация.
Результаты кластеризации в дальнейшем использовались при построении базового решения.
Для оценки качества экспериментов была вручную собрана тестовая база из 50 изображений, которые покрывали основные категории. Качество оценивалось «экспертным» советом, определяющим, смешно или нет.
Поиск по кластерам
В основе подхода было определение ближайшего к картинке кластера, в котором подпись выбиралась случайным образом. Дескриптор изображения определялся с помощью категоризационной нейронной сети. Мы использовали 5 кластеров, выделенных ранее, с помощью алгоритма k-means: люди, еда, животные, анимация, автомобили.
Примеры полученных результатов приведены ниже. Так как кластеры были довольно большими, а содержимое в них по-прежнему могло сильно отличаться по смыслу, то количество фраз, подходящих к картинке, в соотношении к неподходящим было примерно 1 к 5. Может показаться, что это связано с тем, что кластеров было 5, но на самом деле, даже если кластер определился правильно, то внутри него ещё остаётся большое количество неподходящих подписей.
Me buying food vs Me buying textbooks | |
Boss: It says here that you love science Guy: Ya, I love to experiment Boss: What do you experiment with? Guy: Mostly just drugs and alcohol |
|
Cop: Did you get a good look at the suspect? Guy: Yes Cop: Was it a man or a woman? Guy: I don't know I didn't ask them |
|
hillary: why didn‘t you tell me they were reopening the investigation? obama: bitch, we emailed you |
«Ma'am do you have a permit for this business» Girl: does it look like I'm selling fucking donuts?! |
|
A swarm of 20,000 bees once followed a car for two days because their queen was trapped inside the car. | |
I found the guy in those math problems with all the watermelons... | |
So that's what those orange cones were for |
Поиск по визуальной похожести
Попытка кластеризации натолкнула на мысль, что нужно попробовать сузить пространство для поиска. И если кластеры внутри себя оставались очень разнообразными, то поиск картинки, наиболее похожей на входящую, мог принести результат. В рамках этого эксперимента мы всё так же использовали нейронную сеть, обученную на 7880 категориях. На первом этапе мы пропустили через сеть все изображения и сохранили 5 лучших по рейтингу категорий, а также значения с предпоследнего слоя (он хранит в себе как визуальную информацию, так и информацию о категориях). На этапе поиска подписи для картинки мы получали 5 лучших категорий и по всей базе искали изображения с наиболее похожими категориями. Из них мы брали 10 ближайших, и из этого набора случайно выбирали подпись. Также был проведён эксперимент поиска по значениям из предпоследнего слоя сети. Результаты у обоих методов были похожими. В среднем на 1-2 удачных подписи приходилось 5 неудачных. Это может быть связано с тем, что в подписи для визуально похожих фотографий людей многое играли эмоции человека на фото и сама ситуация. Примеры приведены ниже.
Me buying food vs Me buying textbooks | |
Don't Act Like You Know Politics If You Don't Know Who This Is Q |
|
when u tell a joke and no one else laughs | |
When good looking people have no sense of humour #whatawaste |
Assholes, meet your king. | |
Free my boy he didn't do nothing | |
I guess they didn't read the license plate |
|
When someone starts telling you how to drive from the backseat |
Membedding, или нахождение наиболее подходящей подписи через приведение дескриптора изображения в векторное пространство текстовых дескрипторов
Цель построения Membedding — пространство, в котором интересные нам векторы находились бы «близко». Попробуем подход из статьи Word2VisualVec.
У нас есть картинки и подписи к ним. Мы хотим найти текст, который «близок» к изображению. Для того чтобы решить эту задачу, нам нужно:
- построить вектор, описывающий изображение;
- построить вектор, описывающий текст;
- построить векторное пространство, обладающее желаемыми свойствами (вектор текста «близок» к вектору изображения).
Для построения вектора, описывающего изображение, используем предобученную на 6000+ классов нейронную сеть https://github.com/openimages/dataset. В качестве вектора будем брать выход с предпоследнего слоя этой сети размерностью 2048.
Для векторизации текста применялись два подхода: Bag Of Words и Word2Vec. Word2Vec обучался на словах из всех подписей к изображениям. Подпись преобразовалась следующим образом: каждое слово текста переводилось в вектор с помощью Word2Vec, и потом находился общий вектор по правилу среднего арифметического — усреднённый вектор. Таким образом, на вход нейронной сети подавалось изображение, а на выходе предсказывался усреднённый вектор. Для «встраивания» векторов текста в векторное пространство дескрипторов изображений использовалась трехслойная полносвязная нейронная сеть.
С помощью обученной нейронной сети посчитаем векторы для базы подписей.
Затем, используя свёрточную нейронную сеть, получаем дескриптор для поиска подписи к изображению и ищем самый близкий по косинусному расстоянию вектор подписей. Можно выбирать ближайший, можно случайно из n ближайших.
Хорошие примеры | Плохие примеры |
---|---|
How you show up to your ex's funeral
|
Being a teacher in 2018 summed up in one image.
|
You shall not pass me
|
Me: Be gentle closing the door Passenger:
|
Для построения вектора методом Bag of Words, описывающего текст, воспользуемся следующим способом: подсчитаем частоту трёхбуквенных сочетаний в подписях, отбросим те, которые встречаются менее трёх раз, и составим словарь из оставшихся сочетаний.
Для преобразования текста в вектор посчитаем количество вхождений трёхбуквенных сочетаний из словаря в тексте. Получим вектор размерности 5322.
Результат (5 «ближайших» подписей):
When she sends nudes but you wanted a better America | |
when ur enjoying the warm weather in december but deep down u know it's because of global warming |
|
The stress of not winning an Oscar is beginning to take its toll on Leo |
|
Dear God, please make our the next American president as strong as this yellow button. Amen. |
|
My laptop is set up to take a picture after 3 incorrect password attempts. |
My cat isn't thrilled with his new bird saving bib... | |
jokebud tell your cat “he”s a fucking pussy” |
|
This cat looks just like Kylo Ren from Star Wars |
|
Ugly guys winning bruh QC |
Single mom dresses as dad so her son wouldn't miss «Donuts With Dad» day at school |
|
Steak man gotta relax.... | |
My friend went to prom with two dates. It didn't go as planned... |
Для похожих изображений подписи почти одинаковые:
|
My girlfriend can take beautiful photos of our cat. I seemingly can't... |
My laptop is set up to take a picture after 3 incorrect password attempts. |
|
This cat looks just like Kylo Ren from Star Wars |
|
Cats constantly look at you like you just asked them for a ride to the airport |
My laptop is set up to take a picture after 3 incorrect password attempts. |
|
Here's my cat, sitting on the best wedding gift we received, a blanket with a picture of his face on it... |
В итоге соотношение удачных примеров к плохим получилось приблизительно 1 к 10. С большой долей вероятности это можно объяснить малым количеством универсальных подписей, а также наличием в обучающей выборке большого процента мемов, подпись которых имеет смысл, если пользователь обладает неким априорным знанием.
Генерация подписей: подход WordRNN
Основой этого метода является двухслойная рекуррентная нейронная сеть, каждый слой которой представляет собой LSTM. Основным свойством таких сетей является способность экстраполировать временные ряды, в которых следующее значение зависит от предыдущего. Подпись, в свою очередь, является таким временным рядом.
Данная сеть обучалась предсказывать каждое следующее слово в тексте. За обучающую выборку был взят весь корпус подписей. Предполагалось, что такая сеть сможет обучиться генерировать некоторым образом осмысленные или хотя бы смешные из-за своей несуразности подписи.
Задавалось только первое слово, остальное генерировались. Результаты получились следующие:
Trump: trump cats” got friends almost scared about the only thing in the universe
Obama: obama LAUGHING dropping FAVORITE 4rd FAVORITE 4rd fucking long
Asian: asian RR I I look looks Me: much before you think u got gray candy technology that wore it
Cat: cat That when you only giving but the waiter said *hears feeling a cake with his bun
Car: Car Crispy “Emma: please" BUS 89% Starter be disappointed my mom being this out of pizza penises?
Teacher: teacher it'll and and felt not to get out because ppl keep not like: he failed so sweet my girl: has
Вопреки ожиданиям, полученные подписи скорее представляли собой набор слов. Хотя в некоторых местах довольно неплохо имитировалась структура предложений и отдельные куски были осмысленными.
Генерация подписей с помощью марковских цепей
Марковские цепи являются популярным подходом для моделирования естественного языка. Для построения марковской цепи корпус текста разбивается на токены, например слова. Группы токенов назначаются состояниями и вычисляются вероятности переходов между ними и следующим словом в корпусе текста. При генерации следующее слово выбирается семплированием из вероятностного распределения, полученного при анализе корпуса.
Для реализации использовалась эта библиотека, а в качестве обучающей базы — подписи, очищенные от диалогов.
Новая строка — новая подпись.
Результат (состояние — 2 слова):
when your homies told you m 90 to
dwayne johnson & the rock are twins. like if they own the turtle has a good can of beer & a patriotic flag tan.
this guy shows up on you, but you tryna get the joke your parents vs me as much as accidentally ‘
getting ready to go to work in 5 mins to figure out if your party isn't this lit. please don't be sewing supplies…
justin hanging with his legos
when ya mom finds the report card in her mind is smoking 9h and calling weed
texting a girl that can save meek
Результат (состояние — 3 слова):
when you graduate but you don't like asks for the answers for the homework
when u ugly so u gotta get creative
my dog is gonna die one day vs when you sit down and your thighs do the thing
when you hear a christmas song on the radio but it's ending
your girl goes out and you actually cleaned like she asked you to
chuck voted blair for prom queen 150 times and you decide to start making healthier choices.
when you think you finished washing the dishes and turn around and there are more on the stove
when you see the same memes so many times it asks for your passcode trust nobody not even yourself
При состоянии с тремя словами текст получается более осмысленным, чем с двумя, но вряд ли годится для прямого использования. Вероятно, его можно применять для генерации подписей с последующей модерацией человеком.
Вместо заключения
Научить алгоритм писать шутки — задача невероятно сложная, но очень интересная. Её решение позволит сделать интеллектуальных помощников более «человечными». В качестве примера можно представить себе робота из фильма «Интерстеллар», чей бы уровень юмора регулировался, а шутки были бы непредсказуемыми в отличие от текущих версий помощников.
В целом после проведения всех перечисленных экспериментов можно сделать следующие выводы:
- Подход, заключающийся в генерации подписи, требует очень сложной и трудозатратной работы с корпусом текста, методом обучения, архитектурой модели; также в таком подходе очень трудно предсказать результат.
- Более предсказуемым с точки зрения результата является подход с подбором подписи из существующей базы. Но и это таит в себе трудности:
- мемы, смысл которых можно понять только обладая априорной информацией. Такие мемы тяжело отделить от остальных, и если они попадут в базу, то качество шуток будет снижаться;
- мемы, в которых необходимо понимать, что происходит на картинке: какое действие, какая обстановка. Такие мемы, опять же, попадая в базу, снижают качество.
- С инженерной точки зрения кажется, что на данном этапе подходящее решение — это тщательный подбор фраз редакторской группой под наиболее популярные категории. Это селфи (так как обычно люди проверяют систему на себе или на фото друзей и знакомых), фото знаменитостей (Трамп, Путин, Ким Кардашьян и др.), домашние питомцы, автомобили, еда, природа. Также можно ввести категорию «остальное» и иметь заготовленные шутки на тот случай, если система не распознала, что изображено на картинке.
В общем, на сегодняшний день искусственный интеллект шутки генерировать не умеет (хотя и не все люди с этим справляются), а вот выбирать подходящую вполне может. Будем следить за развитием событий и участвовать в них!
Автор: alexeykurov