imageВ последнее время машины одержали ряд убедительных побед над людьми: они уже лучше играют в го, шахматы и даже в 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 мемов, которые мы разделили на два компонента: картинку и подпись. Мы использовали только мемы, в которых текст располагался строго над картинкой:
image

Мы попробовали два подхода:

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

Ниже подходы описаны более подробно.

Анализ базы


Любое исследование в машинном обучении всегда начинается с анализа данных. Прежде всего хотелось понять, какого рода изображения содержатся в базе. С помощью классификационной сети, обученной на https://github.com/openimages/dataset, для каждого изображения мы получили вектор с рейтингами для каждой категории и сделали кластеризацию на основе этих векторов. Выделили 5 крупных групп:

  1. Люди.
  2. Еда.
  3. Животные.
  4. Автомобили.
  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.

У нас есть картинки и подписи к ним. Мы хотим найти текст, который «близок» к изображению. Для того чтобы решить эту задачу, нам нужно:

  1. построить вектор, описывающий изображение;
  2. построить вектор, описывающий текст;
  3. построить векторное пространство, обладающее желаемыми свойствами (вектор текста «близок» к вектору изображения).

Для построения вектора, описывающего изображение, используем предобученную на 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


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

Вместо заключения


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

В целом после проведения всех перечисленных экспериментов можно сделать следующие выводы:

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

    • мемы, смысл которых можно понять только обладая априорной информацией. Такие мемы тяжело отделить от остальных, и если они попадут в базу, то качество шуток будет снижаться;
    • мемы, в которых необходимо понимать, что происходит на картинке: какое действие, какая обстановка. Такие мемы, опять же, попадая в базу, снижают качество.
  3. С инженерной точки зрения кажется, что на данном этапе подходящее решение — это тщательный подбор фраз редакторской группой под наиболее популярные категории. Это селфи (так как обычно люди проверяют систему на себе или на фото друзей и знакомых), фото знаменитостей (Трамп, Путин, Ким Кардашьян и др.), домашние питомцы, автомобили, еда, природа. Также можно ввести категорию «остальное» и иметь заготовленные шутки на тот случай, если система не распознала, что изображено на картинке.

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

Комментарии (17)


  1. sanrega
    19.03.2018 11:06
    +1

    Что за мода использовать картинки на английском? Если уж используете, так давайте перевод. В конце концов, хабр в зоне ru находится, статьи на русском, комментарии на русском, читатели и авторы русскоговорящие, но нет! — мы будем использовать английский там, где он нужен как зайцу стоп-сигнал.


    1. cepera_ang
      19.03.2018 11:14

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


      1. Mn0g0kratn0Ub1ennbIyNaGT
        19.03.2018 15:14
        +1

        Интересный подход. То есть любой автор может публиковать любую туфту, арифметические и орфографические ошибки и пр. А если тебе не нравится — то возьми за него и перепиши. А если не хочешь, значит тебе лень, хавай что дают! :-)
        На самом деле понимать шутки на иностранном не так-то просто, даже для хорошо владеющих языком, а статья именно про шутки. Теряется вообще весь смысл статьи.


        1. saboteur_kiev
          19.03.2018 20:04

          А если тебе не нравится — то возьми за него и перепиши. А если не хочешь, значит тебе лень, хавай что дают! :-)

          Есть кнопочки, которыми можно выразить отношение к любой статье.

          С другой стороны, если шутки на иностранном языке были сгенерированы нейросетью, то при переводе может потеряться нюанс. А ставить русскоязычный эксперимент — тут уже лень будет 99.9%


    1. synedra
      19.03.2018 12:04

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


      1. BugBingo
        19.03.2018 18:59

        К слову, машина на английской картинке вполне себе с российскими номерами. :)


    1. i86com
      19.03.2018 20:10

      но нет! — мы будем использовать английский там, где он нужен как зайцу стоп-сигнал.

      Вы имели в виду остановочное знамение? :)


  1. AlexShishin
    19.03.2018 11:27

    Во втором абзаце ясно описана причина использования английских подписей.


    1. sanrega
      19.03.2018 11:32
      -3

      Какая разница какой страны приложение, если отсутствие перевода — это элементарно неуважение к читателям? Или, по-вашему, если бы приложение было на суахили, то пояснение

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

      было бы достаточным оправданием для нежелания переводить на язык читателей?


      1. vg7
        19.03.2018 15:14

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


  1. besitzeruf
    19.03.2018 11:28

    А шутки про президентов других стран есть?


  1. perfect_genius
    19.03.2018 15:45

    И изобретут ИИшный юмор Гладос.


  1. EvilBeaver
    19.03.2018 15:57
    +1

    Мне одному кажется, что мемасики с картинками — это не совсем юмор?


    1. FiLunder7
      19.03.2018 18:58

      С чего-то нужно начинать.


  1. capslocky
    19.03.2018 19:44

    Многие исследователи считают, что чувство юмора — один из последних рубежей, который необходимо преодолеть искусственному интеллекту, чтобы максимально приблизиться к человеку.
    Категорически согласен. Вспомнился один специфический тип шуток — Russian reversal, описание на лурке. Можно погуглить и картинки.


    1. saboteur_kiev
      19.03.2018 20:18

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


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

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

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

      Если шутку сказать несколько раз, мозг уже создаст некоторое количество связей — и с каждым разом вам будет казаться все менее и менее смешно (правда, если затем долго не вспоминать, и связь не будет поддерживаться — часть связей разрушится, и через какое-то время шутку можно будет повторить. Но уже не с первоначальным эффектом).

      Если мозг уже возбужден, «зал разогрет», то и более слабые шутки пройдут лучше. Если же шуток было слишком много, мозг «устал», то рассмешить будет сложно.

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


  1. pulsatrix
    20.03.2018 00:27

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

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