電笑戦 ~ AIは人を笑わせられるのか 第 2 回 電笑戦の背景と挑戦者
Author : 針原 佳貴
みなさんこんにちは、アマゾン ウェブ サービス ソリューションアーキテクトの針原です。
前回ご好評いただいた第一回目の電笑戦記事に続いて、第二回目は電笑戦のもととなった国内最大級のお笑いメディア『ボケて』を運営する株式会社オモロキ CEO の鎌田さんと、電笑戦に出場するストックマーク株式会社の森長さんからお話を伺いたいと思います。
また、 9 月 8 日 (火) ~ 9 月 30 日 (水)で AWS Summit Online の開催が決定しました !「電笑戦 ~ AI は人を笑わせられるのか ?」の参加企業による技術解説セッションもございますので、ぜひチェックしてみてください。
針原 :
それではまず鎌田さんにお話を伺いたいと思います ! 鎌田さんよろしくおねがいします。
鎌田 :
はい ! よろしくおねがいいたします !
針原 :
最初に、皆さんも一度は笑ったことがあるのではないかと思う、『ボケて』のサービスがどのように生まれたかについて教えてください。
鎌田 :
僕は音楽番組の制作をしていたテレビ局を退社した 2008 年当時、集合知で新たな笑い作り出してみたいという気持ちが強くありました。Web を使ってネット特有の笑いを生み出したいと考えていて、そのために写真と文章や単語を組合せてボケる方法を採用しました。皆さんも経験あるかもしれませんが、学生時代に先生のモノマネをしたり、授業中、教科書にいたずら書きをしたり、小ネタを書いてちぎった紙を友達に投げて笑わせたり。その子供時代の教室の熱量をそのままに、教室の小さな笑いを誰でも投稿できて誰もがおもしろいものに出会える場所を!と思って始めた Web サービスです。
針原 :
たしかに小中学校の教室は様々な笑いの形がありましたね。ちなみに長年ボケてを運営している鎌田さんのお気に入りボケ TOP3 をぜひ知りたいんですが、教えてもらっても良いですか ?
鎌田 :
まず 3 位は、これは、なんというか衝撃だったんですよね。pepper とのコラボ企画のボケで裁判時の緊張感漂う中、今は意味のない機能をただ述べるロボットに人間味あふれる悲哀さを感じ考えさせられました。
2 位は、日曜の朝お母さんが息子を起こすも一向に起きないから不貞腐れてマットレスと格闘しはじめた...ようなストーリーを想像してしまいます。学校は休みだから小一時間格闘してそうです。
1 位は、とんでもなく馬鹿げた世界観で大好きです。ただただ素晴らしいです。笑
針原 :
画像と一言ボケだけですが、読み手の感性でそのボケの世界観が広がっていきますね。pepper の顔が切ないけれど笑えます。笑 そのボケてのサービスは AWS 上で動いてるんですよね。せっかくなので構成についても教えてもらっていいでしょうか。
鎌田 :
はい。僕はエンジニアではないので、AWS 構成の説明はエンジニアの直江さんにバトンタッチします 笑
直江 :
よろしくお願いいたします ! ちょうど昨年大規模な AWS 構成の刷新を行い以下の図のようになっています。現在アプリケーション基盤には Amazon Elastic Kubernetes Service (EKS) を使い、データベースに Amazon Aurora、検索エンジンに Amazon Elasticsearch Service、画像ストレージに Amazon Simple Storage Service (S3) とマネージドサービスを中心に構成しています。Amazon Aurora をはじめ、マネージドサービスのおかげで運用負荷が減らせてアプリケーションの開発に専念できています。また Amazon EKS によってサーバー稼働率を上げてリソースを有効利用し Spot インスタンスも活用することで、サーバコストを以前の 2 分の 1 まで削減しました。
針原 :
EKS で Spot 使われてるんですね。ちなみに CI/CD はどうしてます?
直江 :
コンテナ化によってデリバリツールの選択肢が増えて頻繁にリリースを行うことが可能になりました。以前は Ansible を活用し EC2 にプロビジョニングしていましたが、今は Git にバージョンタグをつけて Push すると自動的に AWS CodeBuild が動き出し、ECR にバージョン名で Docker イメージを保存、その後 Spinnaker というデリバリツールを使ってブラウザの UI からステージングや本番にデプロイを実行するという仕組みで運用しています。エンジニア以外のメンバーも簡単な修正とリリースを行うことができるようになりボケてサービスの改善が加速しています。
鎌田 :
僕も本番環境へのデプロイができるようになりました。
針原 :
素晴らしいですね。ちなみに今回の電笑戦のデータ提供に関して色々工夫されたと伺っております。
直江 :
電笑戦でのデータソースとなる「ボケ缶」を生成するために、数百万件のボケやお題画像データを整理して数種類にパッケージングすることになりました。はじめはローカルで小規模のデータを使ってボケ缶生成プログラムを開発していましたが、本番用のデータで実行するとなると画像のダウンロード数が膨大なため S3 との通信に時間がかかることと、ネットワーク通信料を考えると気軽に実行できないなと思いました。
AWS 内でプログラムを実行すれば S3 との通信のオーバーヘッドやネットワーク通信料がゼロになるため、この問題は次のように解決しました。高スペックのインスタンスを Job 形式で実行したかったため、AWS BatchをSpot インスタンスで利用しました。これにより高いスペックのインスタンス (c5.4xlarge (16 vCPU、32 GiB Memory)) を気軽に使うことができて、ローカルで十数時間かかる予定だったものが 1 時間以内で生成できるようになりました。これで今後のデータソースのアップデートにも対応しやすい開発基盤を整えることができました。
針原 :
なるほど。ボケ缶のデータは出場企業の皆さんが扱いやすいようにこうやって自動生成されてるんですね。直江さんありがとうございます !
それでは改めて鎌田さんに電笑戦のことを伺いたいと思います。電笑戦を企画した目的などを教えてください。
鎌田 :
今って面白い人が限られていて、特殊なスキルになってると思うんです。ただこれって、幼少期や学生時代に「ウケた」経験があるかどうかで大きく変わるスキルですよね。この「ウケる」という経験を誰もがもっと簡単に出来るようになればいいなと。
針原 :
たしかにそうですね。僕も大阪出身なのでよく分かりますが、笑いを取るというのは勇気とスキルがいりますよね。そこで鎌田さんがAIを使ってそのハードルをもっと下げようと考えたんですね。
鎌田 :
はい。AI がボケてそれを人間が選ぶだけでいいとすると、もっと多くの人が AI のせいにしてボケられると思いました。ボケてはサービスを始めて 12 年になり、投稿されたボケは 8000 万ボケを超えました。これだけの笑いに関するビッグデータが集まってるのっておそらく世界的にも珍しいのではないかと思います。そのデータを活用して、ベテランエンジニアも、若手エンジニアも横一線で自らの作った AI を開発して競い合う電笑戦での熱い戦いが、100 年後の世界が今より面白くなるための礎になればと思いました。その流れで電通デジタルさんと企画を練り、エンジニアの方々とタッチポイントの多い AWS さんと一緒に盛り上げられればと考えました。
ボケて」のウェブサイト。サービス開始から 12 年経過し、8000 万を超えるボケが投稿されいている。
針原 :
いやー、めっちゃ熱い話ですね、僕もささやかながら協力できて光栄です。既に電通デジタル石川さんが作った AI が繰り出すボケを見られたと思いますが、どのような感想を持たれましたか?
鎌田 :
石川さんの作成した bokete AI のデモでは、「もう一声」ボタンを押して同じ画像のボケを繰り返す中で、個人的には初期のデモでは 30 回に 1 回くらい笑えるボケが出ていました。これすごいなと。中毒性がありました。ずっとクリックしちゃう。で 100 回に 1 回くらい大笑いするんですよ。
針原 :
たまに当たりが出てくる確率が絶妙でしたね。
鎌田 :
AI が笑いを作りだす遠かった未来、もししんどい時にこういう感じで AI に笑わされたらもう AI に対する見え方が変わります。仲間かのような感覚も芽生えますよね。AI やロボットというとなんか怖いなというイメージを持っている方も多いかもしれませんが、こういうくだらない試みが心の壁を超えてコミュニケーションを取るきっかけになるかもと期待しています。
針原 :
映画や小説では、AI が近い未来に人類に対して反乱を起こすというストーリーもありますが、たしかに AI が紛争よりも笑いを作り出す未来の方が平和で良いですね。
鎌田 :
本当にそうなんですよ ! pepper のボケをベスト3にあげましたが、いつか、ロボット同士で大喜利しているのを人間が見て笑うという世界が来るかもしれません。そこに僕は関わりたいです。
針原 :
そういう未来を作っていきましょう。最後になりますが、鎌田さんの電笑戦への想いを教えてください。
鎌田 :
電笑戦はいろいろなご縁と偶然が重なって生まれました。こうした試みを楽しんでいただける方たちと巡り会えたことに本当に感謝しています。ありがとうございます。
ボケビックデータを使ってAIでボケる…なんてテクノロジーの無駄遣いなんだとわくわくします。エンジニアの方々が競い合う中で生まれる笑いは今まで見たことないものだろうし楽しみで仕方ないです。
そして間違いなく思うのは、電笑戦は AI に笑いを実装する未来、AI と人間が共生する未来につながってるのだということです。おこがましい気持ちもありますが、僕自身もその未来に向かって携われることがめちゃくちゃ楽しいです。
ぜひ自分の作った AI に笑わされながら、電笑戦に腕を振るってください。楽しい未来を作りましょう。
テクノロジー説明「AI はどのように人を笑わせるのか」
後半は電笑戦参加企業からストックマーク森長さんをお呼びして、実際の取り組みについて話を伺ってみたいと思います。
針原 :
それではまず森長さんにお話を伺いたいと思います ! 森長さんよろしくおねがいします。
森長氏 :
はい、よろしくお願いしますー
針原 :
この度は電笑戦にエントリー頂きありがとうございます。まずはじめに、今回参加されたきっかけについて教えて頂いてもいいですか?
森長氏 :
ストックマークはビジネスニュースとビジネス資料の分析を行っている会社です。普段から AWS を使ってプロダクトを開発しているのですが、ちょうど担当の豊川さんから今回の話を頂きました。普段は自然言語、すなわちテキストを扱うことが多いので画像はあまり使う機会がないのですが、今回の取り組みは面白いなと思ったので参加させて頂きました。
データ・前処理・モデルについて
針原 :
本業で自然言語処理をやっている方の参戦ということで期待が高まります。電笑戦ではデータセットがボケ缶の形で配布されますが、データはボケ缶のものを全部使われたんですか?
森長氏 :
ボケ缶では、ボケてでの星の数を基準に評価の高いものから SP (300ボケ)、Red (8,500ボケ)、Green (38,000ボケ)、Yellow (90万ボケ) というふうに分けられています。Yellow は玉石混合だったので除外しました。さらに、一つの画像に対して異なるグレード(RedやGreen)のボケデータが入っているので、グレードの高いボケを使うよう重複排除を行いました。また、それぞれの画像には “シュール” や “バカ” などの複数カテゴリに分かれており、今回は多様なボケを実現するため、全てのカテゴリを使って学習させました。
針原 :
前処理の部分はどういうことをされたか、紹介頂いても良いでしょうか。
森長 :
ボケとして長ったらしく説明しているものは画像に対して忠実な描写をしているものが多く、見た感じあまり面白いものは多くなかったので、文字数は短めのものに絞りました。最終的なデータサイズとしては、Train 26,900 件と Test 3,000 件なので、だいたい 3 万件のボケを 9:1 に分割して使っています。形態素解析エンジンの MeCab で新語が多く含まれる辞書の NEologd を使ってトークン化し、語彙数は 2 万 5 千件になりました。ですので、これらの語彙を組み合わせてボケを生成した、ということになります。
針原 :
ありがとうございます。それではモデルについて伺ってもいいですか?
森長 :
画像のキャプション生成でよくある手法を使いました。画像の特徴量は ResNet で取得し、文章は Bidirectional-LSTM に入れていて、Attention も取り入れています。基本的には前回の石川さんのモデルと大きくは変わらないと思います。
針原 :
たしかにそうですね、VGG の代わりに ResNet を使っているぐらいで。
結果
針原 :
結果が気になるんですが、実際にどういうボケが生成されているか見せて頂いてもいいですか?
森長 :
はい、もちろん。Beam Search で検索して系列を生成していて、分かりやすいように候補を複数表示しています。
針原 :
割とレベル高くないですか?
森長 :
ちなみにモデルを学習させるのは Amazon EC2 の p3.2xlarge で12 時間ぐらいかかりました。赤い字で出ているのは、教師データに存在する似た画像の既存ボケと同じ文章が生成されたものです。
森長 :
ちなみに画像をアップロードすることもできるので良かったらお好きなやつで試してみて下さい。
針原 :
じゃあ過去の AWS Summit の画像を検索したやつで。
針原 :
うーん、合格発表ではないが、分かりやすい雰囲気はあるかも。
針原 :
イベントごとは学校行事に見えてるみたいですね。鎌田さんのインタビューであった「教室の隅っこの笑い」というコンセプトを理解しているかのようなボケですね。
森長 :
Attention の可視化もできるので、画像のどの部分を見てボケているかも確認できます。
考察
針原 :
これは分かりやすくて良いですね。ピザをお金だと思ってそうですが、ネコはちゃんと注視してますね。ここまでいくつか例を見せて頂きましたが、色々試行錯誤はされました ?
森長 :
実は結構色々試したんですが、あまり上手くいったものがありませんでした。文章の Embedding のところにビジネスニュースで学習させた BERT や fastText を入れてみたのですが、それは全然ボケてくれなくて変な文章になったので廃案になりました。あと、ボケた言葉に対して、例えば「打合せ」→「ミーティング」のように単語を置き換えてビジネス感を出そうと試みたんですが、それも全然笑えたもんじゃなかったですね。
針原 :
アイディアとしてはビジネスニュースの要素が入って「頑張ってボケてる感」が出ると面白そうな気がしますが、なかなか難しいものなんですね。
森長 :
やっぱり教師データが面白すぎるんですよ。なので、そこから少しずらそうとしても上手くボケられなかったんだと思います。色々試してみたものも、教師データからかけ離れてしまって、本来のボケに上手くハマらなかったのが難しいポイントだったなと思います。ここは本戦までにもう少し頑張りたいところではあります。
針原 :
なるほど。画像の特徴空間に対してボケがスパースすぎるので、そこからずれると不安定になるということですかね。
森長 :
よく見るとわかるとおり、元の文章を切りはりしてボケを生成しているものが多いですよね。ストックマークでも文章の生成は記事の要約など色々やっているのですが、そこでも同じ課題があります。完全に新しい文章を生成するのは難しく、どこかで見たものを切り貼りしているのが実情だと思います。ここは別の研究で取り組もうと考えているところです。
針原 :
ちなみにここまで森長さん一人で実装されたんですか?
森長 :
はい、一人で作りましたが PyTorch Lightning で書いたので、コードを読めば社内の誰が見ても分かるような構成になっています。これからは社内のメンバーで面白いアイディアを募っていければ良いなと思ってます。
針原 :
今でも十分面白いと思ったんですが、電笑戦に向けて今後更なる笑いを追求して頂きたいですね。
森長 :
教師データが面白かったからここまでは比較的簡単に来れました。でもやっぱり教師データは越えられなかったと思うんですよ。それがとにかく悔しいです。
まとめ
この記事では、前半でオモロキ鎌田さんよりボケて誕生秘話と電笑戦への想いを話して頂きました。教室の小さな笑いを誰でも投稿できて誰もがおもしろいものに出会える場所、そうして生まれたボケてのサービスには、12 年で 8000 万を超えるボケが蓄積されました。
この笑いに関するビッグデータを用いてエンジニアがボケ生成 AI で競い合う電笑戦は、100 年後の世界が今より面白くなるよう、エンジニアが笑いの未来を変えられる大きなチャンスになるかもしれません。後半のストックマーク森長さんのインタビューでは、実際に AI が繰り出すボケをいくつか紹介しました。既に十分面白いが、元々のボケが面白いだけでまだそれを越えられたとは言えない、そう話す森長さんには悔しさが滲み出ていました。さて、ブレイクスルーは起きるのでしょうか。今後の挑戦に期待です。
筆者プロフィール
針原 佳貴 (はりばら よしたか)
アマゾン ウェブ サービス ジャパン合同会社
スタートアップ ML ソリューションアーキテクト
大阪出身。好きなサービスは Amazon SageMaker と Amazon Braket です。
AWS を無料でお試しいただけます