AIはボケで人を笑わせられるのか?

針原佳貴氏(以下、針原):みなさま、お待たせいたしました。アマゾン ウェブ サービス ジャパン、ソリューションアーキテクトの針原です。「電笑戦 ~AIは人を笑わせられるのか? 挑戦を支える技術とAWS~」というセッションを始めてまいりたいと思います。

本技術セッションでは、「電笑戦」の概要説明のあと、電笑戦のサンプルモデルを構築していただいた電通デジタル・石川さんより技術解説をしていただき、その後、電笑戦参加企業の3社から、これまでのモデル開発と本戦に向けた意気込みを語っていただきます。

まず初めに、みなさんご存知でしょうか。『ボケて』は、株式会社オモロキが運営している国内最大級のお笑いメディアです。1枚の画像に対して一言ボケを投稿して、笑いをとります。

例えば、この画像を見てボケられるでしょうか。

「いなり寿司」。こちらが実際に『ボケて』に投稿されていた人気のボケです。このように「画像を見てボケを投稿する」というシンプルなルールで運営されているのが『ボケて』です。こうして2008年から運営されてきた『ボケて』には、今では8,000万を超えるボケが蓄積されています。

「ボケて 電笑戦」は、『ボケて』に蓄積されたボケデータをもとに機械学習・AIのモデルを学習させ、ボケの自動生成を競うバトルです。今回オーガナイザーは『ボケて』を運営しているオモロキ、電通デジタル、技術提供・AWSでお送りしております。

これから登壇いただく3社の参加企業の方には、電笑戦でのボケ生成AIモデルの作成、勘どころについて話していただきます。3社の戦略をうかがう前に、まずは電通デジタルさんからどうやってAIでボケを自動生成するのか、技術背景をうかがっていきましょう。

「AI×クリエイティブ」の応用を研究

石川隆一氏(以下、石川):ここからは電通デジタルの石川が、サンプルモデルの紹介をさせていただきます。

電通デジタルでAIエンジニアをやっている、石川隆一と申します。もともとはレコード会社でアーティストのマネージャーをしていたんですけれども、数学が好きなこともあって、2018年に電通デジタルに入社しました。実務ではデータ分析や画像の分類、自然言語処理など、さまざまなジャンルにおいて「AI×クリエイティブ」の応用を研究しております。今回作らせていただいたサンプルモデルの説明として、画像要約の技術をご紹介いたします。

今回「ボケて 電笑戦」のサンプルで使っている画像要約の技術は、もともとは2015年ごろから研究が始まった技術になっています。CNNという画像分類アルゴリズムと、RNNという時系列アルゴリズムを組み合わせることで、画像の要約が可能になりました。例なのですが、右の写真で言うと「a surfer riding on a wave(サーファーが波に乗っている)」のような返答を返してくれるAIになっております。

実際にアルゴリズムの説明をさせていただきます。画像要約では、2014年ごろからEncoder-Decoderモデルといった、入力と出力で別々のタスクをこなしているアルゴリズムが使われております。

具体的に右の図で言うと、今回は画像をCNNという犬・猫などを分類するためのニューラルネットワークに入力し、出力前のベクトルを抽出したあと、EncoderとしてLSTMなどの時系列データにベクトルを入力することで文章を生成する仕組みになっています。

今回僕が作ったモデルでは「VGG16」というCNNを用いて、画像をベクトル化しています。こちらがEncoderの部分にあたります。そこから全結合層の画像ベクトルを抽出して、次に双方向LSTMに入力することで文章を生成しております。一単語ごとに出力し、また出力された単語を入力として用いることで、文章を成立させる仕組みとなっています。

AIがボケるためのメカニズム

石川:実際にわかりやすく説明させていただきます。今回の手法では入力として猫の画像と、最初は何もテキストがない状態で出力させます。出力させる単語としては、文頭の単語を予測します。今回は「ご主人様」といった単語が出力されたのですが、この「ご主人様」という単語を今度は入力のテキストとして用います。1回目と同じ入力の画像データと、1回目の出力で出された単語を今度は入力として使うことで、次の単語を予測します。これらを繰り返すことで、1つの文章を作り上げます。

最後に、文章の出力部分の説明をさせていただきます。普通、画像要約の世界ではなかなかやらない手法なのですが、小説などの自動生成のタスクでは、原文がそのまま出力されることがないように工夫をすることが多々あります。今回の「ボケる」というタスクにおいても、学習データの過学習を起こしてそのまま同じ原文が出力されては意味がないので、今回のような手法を取り入れました。

よく使われる手法として、単純にsoftmaxから出力された確率の高いものを選ぶのではなく、しきい値を持たせ、そこから確率分布に従ってランダムで抽出する手法をやることで、原文をそのまま出力されることを抑えることができる仕組みになっています。

以上がサンプルモデルの一連の仕組みになっております。ありがとうございます。

約2万5,000語の語彙からボケを生成

森長誠氏(以下、森長):ここからは、ストックマークの森長が説明させていただきます。まずストックマークのご紹介をします。ストックマークは、自然言語処理技術を活用したビジネス意思決定サポートサービスの提供をしている会社です。

実際に解析しているのは、オープンデータであるビジネスニュースであったり、社内の文書メモといったものです。これらを自然言語処理の技術を活用して解析して、お客様にビジネスインサイトを提供するサービスを行っております。

では実際に、電笑戦モデルの概要を紹介させていただきます。今回は教師データとして『ボケて』の「ボケ缶」の、SPの300ボケとRedの8,500ボケ。さらに弊社の特色といたしまして、ビジネス記事のタイトルとその画像データ2万件を教師データとして使っております。

前処理といたしましては、このボケと記事タイトルをMeCabとNEologdで解析して、それをトークン化しています。そのため語彙数は約2万5,000語。新しいボケはこの約2万5,000語の語彙から生成されるかたちになります。

モデルとしましては、Encoder-Decoderモデルを活用しています。具体的にはResNet、双方向LSTM、Attention、Dropout、これらを用いて行っております。実際のトレーニングとしましては、EC2のp3.2xlargeで3時間程度学習をさせております。1回の学習は3時間程度ですが、これを何度もトライ&エラーを行うことでモデルを作成していきました。

最後に後処理につきましては、出力に対して一部の名詞をBERTという汎用言語モデルを使って、穴埋めを予測するかたちで文字列を置換しております。

「笑い」を作り出すさまざまな施策

森長:では実際にモデル開発で効果があった施策について、具体的にご説明させていただきます。1つが「教師データの水増し」。先ほどお話しさせていただきましたが、ボケデータだけではなくてビジネス記事のタイトルと、その画像データを教師データに含めて、真面目な文章とボケを組み合わせました。

この例では本当にビジネスニュースのタイトルになります。このように真面目な文章をボケと組み合わせることで、笑いのズレを作り出せないかと思いまして、教師データ水増しという手段をとっております。

2つ目が「学習の早期切り上げ」。今回、『ボケて』の教師データにはすごく特徴的なキーワードが使われるパターンが多いため、収束してしまうとほぼ教師データと同じ結果を出力してしまいます。

この例に書いているものに関しましては、実際に『ボケて』の既存のボケとなっています。例えば「ブルーハワイ」というふうに出してしまうと、だいたい「ブルーハワイって結局何味なんだろうね?」みたいなボケに収束してしまいますので。ある程度収束する前に切り上げることで、「ブルーハワイ」1個でもいろいろなボケのパターンが発生するように行いました。

3つ目が「BERTの穴埋めによる単語置換」というものになります。こちら、BERTは汎用言語モデルとして有名なものでして、事前学習で穴埋め問題を解いていきます。具体的には、ここの例に「原文」と書いてあるんですが、「本日は良い天気だ」というものがあった場合、その「天気」という単語をマスクしてしまいます。

マスクすると、2つ目の「本日は良い〇〇だ」というかたちになりますので、この「〇〇」を予測させていきます。今回BERTにつきましては、弊社のビジネスニュースのデータを使って学習させていますので、実際に例えばこの「本日は良い」と「〇〇だ」という文章を使うと、「本日は良い値動きだ」というように、ビジネスに関連したワードで単語を補完していきます。

これを利用して、一部の単語をマスクして、そのマスクされた単語を前後の文字列から予測して、ボケを少し変わったビジネス要素の強いボケに入れ替えるような手段をとっております。

うまくボケられない時の2つの要因

森長:このような施策をとっておりまして、ただ実際にこれらの施策を試した結果、モデル開発での気付きが2点ありました。1つが「どうしておもしろいかを、モデルがまずわかっていない」ということです。これは教師データがあるということなので、ボケのエッセンスを学習しているというよりは、正解に近いボケを生成している。やはり教師データに近いものをそのまま作り出すようなかたちになってしまっていると。

少し違う文章にはなるんですが、やはり「ボケとは何か、何がおもしろいのか」ということまではわかっていないところが問題と思われます。なので数を打てば、その中でおもしろいのがいくつか出てくるかな、というイメージです。

2つめが「画像の細かな特徴を活かせていない」ということです。こちらは右側に猫の画像を例として出していますが、画像自体の大きな特徴はResNetで捉えているので、「この画像は猫だな」と出ますので、猫から連想するボケにはすごく良いモデルにはなっているんですが。

この猫が少し眠そうな顔をしているようなボケに対しても、「眠そう」というよりは「猫」というところの特徴しかとれていないので、その画像に対して本当に適切なボケを選べていない・生成できていないことが問題かなと思っております。

特に画像自体がすごくおもしろくて、細かなものがいろいろ記載されているものに関しては、うまくボケれていないケースが多々ありました。

教師データを超える「ボケ」を目指す

森長:こうした気付きはあったのですが、次で弊社の渾身のボケを表示させていただきます。それでは、いきます。

……はい。こちらが弊社の渾身のボケになります。見ていただくとわかるのですが、どちらかというとビジネス文章寄りのボケになっているのがわかるかと思います。今回、弊社の特色として、やはりビジネスデータを取り扱っているところもありますので。「ビジネスマンがボケたようにしたいな」という思いがまずありまして、このようなボケを作成してみました。

細かいボケの説明は恥ずかしいのでさせていただきませんが(笑)、このようなボケが生成されていて。どこかビジネスのキャプション、ニュースデータのタイトルのようなボケがたくさん出てきています。

ただニュースデータを使っているので、ここには出せなかった、本当にもっとおもしろいボケもたくさんありました。しかしちょっとブラックジョークのような、あまりオープンにできないようなボケが多数できてしまいましたので……(笑)。今回は公開できるようなボケを選ばせていただきました。

それでは本戦への意気込みというところで。先ほどお見せしたようなボケのように、まだまだ「ボケ缶」の教師データのデータは超えられていないとは思っています。ですので、提供されている教師データから本当に「ボケの特徴」を取り出してボケを生成できるように、本戦までにほかにもいろんな手法でチャレンジしていきたいと思います。以上で説明は終わります。

機械学習モデルの3つのステップ

武藤健介氏(以下、武藤):それではここからは、カラクリ株式会社がお話しさせていただきます。私、武藤がお話しさせていただきます。

まずカラクリ株式会社のモデルのお話の前に、会社紹介をさせていただきたいと思います。我々カラクリ株式会社では、AI技術を用いたカスタマーサポートのデジタル化を行っております。例えばチャットボットを用いた問い合わせ対応や、チャットログを分析してサービスの改善提案を行っております。

そして最近のエンタメ的な取り組みとしましては、YouTubeチャンネルの配信を行っています。「CS Tech」チャンネルと「オンラインAI大学」という2つのチャンネルをやっております。「CS Tech」は「カスタマーサポート×テクノロジー」で、弊社のテックリード・吉田がお話ししております。そして「オンラインAI大学」は、私がAIの仕組みとビジネスへの活用といった感じでお話ししております。

それでは機械学習モデルのお話にいきたいんですけれども、3つのステップがあります。前処理、モデル、トレーニングのお話です。

まず前処理としましては、「4人以上が『いいね』をつけたボケ」を抽出しました。これが全体で20万件あります。そして画像から複数の物体を検出することを前処理として行いました。

我々が用いたモデルは、翻訳ベースになっておりまして、画像からボケのテキストへの翻訳のモデルとなっております。具体的には、画像から抽出した物体の特徴、それからボケのテキストへの翻訳を行うものです。これはヤフーのリサーチチームが2019年の「NeurIPS」、機械学習のトップカンファレンスに出して採択された手法になっております。トレーニング、学習に関しましては、ディープラーニングを簡単に使えるDeep Learning AMIを用いました。

画像に対して適切にボケる難しさ

武藤:開発の試行錯誤ですね。開発をする際に我々が「難しいな」と感じた点なんですけれども、画像の状況を適切に表してボケを生成することが非常に難しいなと感じました。ポイントは2つありまして、画像中に複数の物体がある場合、まず何が映っているのかを正確に認識する必要があります。そして2点目に、物体の間の関係。これを正しく認識する必要があるかなと思っております。

そして、この2つをうまく実現するために工夫した点は、それぞれの画像から複数の物体を検出するという前処理を行いました。そして検出した物体の間の相対的な位置やサイズ、大きさの情報を用いて学習を行いました。この2点目、後者に関してこれからもう少し掘り下げて、詳しくお話しいたします。

まず物体の空間的な関係なんですけれども、2つの画像のうち、左側が画像中から物体を検出する際のものだと思ってください。今見せている写真は、お父さんが赤ちゃんを抱きかかえているんですけれども、画像中のいろんな物体に対して色付きのボックスが付与されているかなと思います。そしてこのボックスには、実は右の図のようなかたちで、そのボックス内の物体が何なのか、何の特徴を持っているのかという情報と、それの確信度、割合が紐付いています。

そうすると模式的に、機械の認識のようなかたちで、右の図のように機械が認識しているということがわかります。これを見ると、大きなボックスの中に男の人っぽい特徴があって、そこに重なるかたちで赤ちゃんの特徴があって、そしてまた小さく時計の特徴が90パーセント、かなり高い確信度である。というようなことがわかるので、ここで大きさや位置といった空間的な関係がしっかりと認識できていれば、「お父さんが赤ちゃんを抱きかかえているのかな」という状況が推測できるかなと思います。

例えば悪い例として、物体の空間的な関係を間違ってしまうとどうなるのかというお話です。2つ絵があって、左側は先ほどの機械の認識をそのまま映したもので、右側は「お父さん」と「時計」の位置を完全に入れ替えたものになっております。

そうすると右側が表す情報はまったく違っていて、大きな時計の前に赤ちゃんがいて、その横にそれよりもずっと小さな男の人がいるという、かなりシュールで、ぜんぜん違う状況を表してしまうので、物体間の空間的な関係は非常に重要です。

おもしろさを判断するのは結局は人

武藤:それらを踏まえて我々のモデルの概略をお話しいたしますと、画像をインプットにします。そして前処理として画像からいろいろな特徴を抽出して、その物体間の空間的な位置関係や大きさの関係を取り出してあげて、それらを全部モデルに入れて、単語の列を生成します。その単語の列をギュッとくっつけてつなげると、それがボケのテキストになります。

それでは個人的におもしろいなと思ったボケをお話ししたいんですけれども。料理をやめて、すごい過度な上目遣いでこちらを見ている男の人に対して「お前、俺のこと好きなんだ……」という感じでボケている画像になっています。

それで、次は先ほどのお父さんが赤ちゃんを抱えているやつなんですけれども。「パパ、ママ、この子のほうがいいの?」。これはたぶん、お父さんがある日知らない子を連れてきて抱えていて、子どもがすごく不安になって「お父さん、その子のほうがいいの?」と聞いてるんですけれども。よく見るとお父さんはちょっとすっとぼけた顔をしていて、ちょっと緊張と緩和が見られるのかな、というふうなものでおもしろいかなと思いました。

また学習を行うごとにモデルが変わるので、生成されるボケがどんどん変化していくんですね。それで今回ボケというものは、何がおもしろいかというのは結局、人が判断することになると思うので。一番おもしろいボケを生成したモデルを用いて、本戦に挑もうかなと考えております。

我々カラクリ株式会社は、本戦に向けて全力で笑いの仕組み、「カラクリ」を探求していきたいなと思っております。ご清聴ありがとうございました。

吉本興業がAIでのお笑いに挑む

田中爽太氏(以下、田中):ここからは、吉本興業株式会社からまいりました、田中爽太がご紹介させていただきます。どうぞよろしくお願いいたします。

まず弊社、知っていただいている方、多数いらっしゃるかと思いますけれども。100年以上お笑いに関わってきた企業になります(笑)。タレントマネジメントのみならず、エンタメ全般やっておりますけれども、そうはいっても他社様と違って開発には疎いところがございますので。くれぐれも期待せず、ハードルを下げてご覧いただければと思っております(笑)。

さっそくシステムの紹介をさせていただければと思います。今回、我々が制作したシステムは、他社さんのような生成ベースではなくて、ボケデータをとってくる抽出ベースのシステムになります。

画像入力をするとAmazon Rekognitionを利用して、人の感情や表情を読み取ったり、SageMakerで物体認識や、今まで似た写真があったかどうかを調べます。そして、似たものがあったらそのボケを取ってくる。類似度を出すようにしています。それらの出力されたパラメータから、タグ付けされた『ボケて』の回答データを選択して、回答を出力するといった流れになっております。

やはりお笑いの会社なので、コンセプトとしては技術的な部分を追い求めるよりも、まずAIでどれだけ大喜利としてちゃんとおもしろい答えが出せるのか、というところに注力いたしました。

ここで言う「そもそも『おもしろい』って何だっけ」というところになるんですけれども。もちろん私はお笑い芸人ではなく、ただの社員なので(笑)。「これが正しい」とは言えるわけではないんですけれども、お笑いの1つの理論で「ズレ理論」というものがあります。

例えばここに表示されている写真は、普通に見たら「赤ちゃんが帽子をかぶっているな」とお客さんが想像をする中で、答えが「わかった、俺が行く。表に乳母車回しとけ」という、想像してたよりもちょっとカッコいいセリフを言うと、お客さんの想像とズレていておもしろみを感じるということになります。

それで、この時の答えがお客さんのイメージと完全に離れたものではなくて、その答えを言われたら「あ、確かにわかるわ」と。「その雰囲気あるな」という、共感というのも重要なポイントになってきます。

そこで、Rekognitionを利用して、正しい認識をさせて、生成ベースではなくて抽出ベースで、この「ズレ」と「共感」を表現しています。

『ボケて』で高評価が出るボケの特徴

田中:技術的な特徴としましては、弊社には構成作家さんやディレクターさんがおりますので、大喜利やお笑いに長けた方にまず回答データを分析してもらって、分類しました。そしてもう1つ、その方々とエンジニアが一緒にPDCAを回せるような仕組み、ツールを開発しております。

そのツールなんですけれども、アノテーションツールをAWS上で作成して、ディレクターさんにタグ付けしていただきました。516件の画像とボケのペアをタグ付けしております。もう1つは、システムとチャットを連携させて、誰でも気軽に現状のシステムを評価できるようにしております。

このアノテーションツールから得られた結果が、こちらになります。この右上の表がタグ付けされたランキングなんですけれども、『ボケて』データというのは人の写真が多く、表情やそれに合わせたセリフを言わせたボケが多くありました。そこで今回はRekognitionで、その部分の認識を重視しております。

また右下の表が、タグの頻度を表しています。左が評価が低いもので、右が評価が高いものになります。『ボケて』さんのサービスは、Web上という特徴がありますので、答えが長文だったり説明調のものが多く、またその評価も高いんですけれども。実際の大喜利のイベントというところを考えたときに、そのような回答は笑いが起きにくい傾向があるので除外するなどの精査が必要になってきます。

またこれは通常の大喜利イベントなどでも同じ傾向にあるんですけれども、外国人の写真は「答えが日本語のセリフ」ということだけでもズレを生めるので回答しやすく、良い答えが出やすい傾向があります。

また、ちゃんとズレていることが評価につながるという示唆として、「ないない」のタグがつけられたもの。これは高評価のものが多くありました。

笑いの要素は「ズレ」と「共感」を表現すること

田中:本戦に向けて、弊社としても生成ベースを試してはいるんですけれども、現状はうまくいっていない状況です。やはり『ボケて』データだけでボケ生成というのは、ズレや共感をちょっと表現できないんじゃないかな、というふうに考えています。

試しに「ズレ」をするための「常識」をAIに教えるために、画像キャプションデータセットや青空文庫のセリフを入れてみたんですけれども、文章っぽいものはできているものの、やはり「おもしろい」と確約できない部分があるのかな、と考えています。

今後は抽出したカテゴリーから、どう最適な回答を出すか。また、『ボケて』回答データから新たな回答を生成できないかを検討予定です。

では最後に、渾身のボケをさせていただきたいと思います。この写真の回答が、こちらになります。「二次会の王様ゲームで『ゴリラになれ』と言われたところまでは覚えている」。これが、ズレと共感を生む素晴らしい答えとなっております(笑)。

本選では一生懸命がんばります。弊社としては以上になります、ありがとうございました。

針原:どうもありがとうございました。冒頭で紹介したように、電笑戦では『ボケて』のデータで学習したAIにより自動生成されたボケを競い合います。本技術セッションでは三者三様のアプローチについて紹介いただきました。短い時間の中では説明しきれなかった部分含め、詳細はビルダーズフラッシュのブログをご覧ください。

それではみなさんと笑顔でお会いできるタイミングでの電笑戦開催、楽しみにしていますので、どうぞよろしくお願いいたします。