電笑戦 ~ AI は人を笑わせられるのか 3 新たな挑戦者

2020-08-03
日常生活で楽しむクラウドテクノロジー

Author : 針原 佳貴

logo_bokete_500x282

こんにちは、アマゾン ウェブ サービス ソリューションアーキテクトの針原です。この連載では画像で一言「ボケて」のデータを用いたボケ自動生成の取り組み「電笑戦」について紹介してきました。前回ご好評いただいた第 1 回第 2 回の記事に引き続き、今回は電笑戦の参加企業であるカラクリ株式会社の武藤さん・吉田さんと、吉本興業株式会社 田中さんの取り組みについて紹介いただきます。

なお、 9 月 8 日 (火) ~ 9 月 30 日 (水) に開催予定の AWS Summit Online では、「電笑戦 ~ AI は人を笑わせられるのか ?」というタイトルで技術セッションもご用意しています。参加企業の取り組みについてはそちらもぜひご覧ください。


カラクリ株式会社 武藤さん・吉田さんの挑戦

着想と前処理について

photo_haribara_s

針原 : 
それではまず、データサイエンティストの武藤さん・吉田さんにお話を伺っていきます、宜しくおねがいします。

photo_karakuri-muto.jpg

武藤氏:
武藤です、よろしくおねがいします。個人的にはボケてめっちゃ好きで、投稿したりもしてたんですよ。なかなか星は取れないんですが。

針原:
おっ、職人さん登場ですね、やはりこれまでのボケて投稿経験を生かしたアプローチをされているのでしょうか。

武藤氏:
はい。この連載の第 1 回目で紹介されていた石川さんのシンプルなモデルを見ながら戦略を練っていて、手元で試したところデータが少なかったせいかもしれませんが、画像の内容があまりボケに反映されていない印象を受けました。そこで、もう少し画像の中にどういう物がどういう位置関係で写ってるかを取得できるモデルの方が面白くなる気がして、やってみたのが今回紹介する手法です。

針原:
それはモデル作りを結構工夫したということでしょうか。石川さんも、この連載 2 回目で登場された森長さんも、基本は CNN (VGG or ResNet) + Bi-LSTM の Encoder-Decoder モデルだったかと思います。このあたりも工夫されましたか ?

武藤氏: 僕たちが使ったモデルは NeurIPS 2019 で発表された Object Relation Transformer というモデル (参考: S. Herdade, et al., “Image Captioning: Transforming Objects into Words”) です。物体の相対的な位置関係を取り出すことができるものとして提案されています。例えば論文中にあるように、「馬に乗る少女」と「馬の横に立つ少女」の画像を区別することができます。

針原:
なるほど、それは新しいですね。そしたら前処理も結構変わってくるんでしょうか ?

武藤氏:
データは、ボケ缶の中からボケに対する ★ の数が多いものとして、★ を付けた人が 4 人以上いるものを選びました。これで大体 20 万ボケぐらいだったかと思います。画像は、それぞれに対して Detectron2 を用いて物体検出と特徴抽出を行いました。これが案外時間が必要で、6 ~ 7 時間ほどかかりました。文章は MeCabNEologd で分かち書きを行いました。
 

Object Relation Transformer モデルについて

針原:
なるほど。もう少しモデルの詳細を伺ってもいいでしょうか ?

武藤氏:
このモデルは物体の相対的な位置関係を取得できる Transformer ベースの Encoder-Decoder モデルです。画像の特徴を捉えて、ボケに翻訳します。物体検出・特徴抽出では Faster R-CNN with ResNet-101 が使われています。バウンディングボックスは 36 個以下になるようにし、それぞれから 2048 次元の特徴を抽出しています。
 

photo_karakuri_yoshida

吉田氏:
詳細は論文の図 2 に書かれているので少し補足しますね。そもそも Encoder-Decoder モデルは不特定多数のトークン (単語) の列を受け取って、単語の列を出力します。
今回のモデルでは、入力として単語の列を与える代わりに、画像中のオブジェクトの列を入れている、というのが肝になります。そのためにバウンディングボックスを Faster R-CNN with ResNet-101 で取得して、それと物体の位置関係を一つのベクトルにエンコードします (図の左下のブロックです)。

img_bokete-3_01

Object Relation Transformer のアーキテクチャ (S. Herdade, et al., “Image Captioning: Transforming Objects into Words” 図 2より引用)

トレーニング

針原:
なるほど、Encoder がオブジェクトのバウンディングボックスと空間的な位置関係を読み込んで、Decoder で Transformer を使って文章に直しているということですか。トレーニングについても伺っていいですか ?

武藤氏:
モデルのトレーニングは Softmax cross-entropy loss を用いて、Adam で最適化しました。難しかったのは面白いボケを評価する関数がない点で、そのため沢山のモデルを保存して挙動を確認しました。具体的には 1000 イテレーションごとにモデルを保存し、22 万イテレーションぐらい回しました。キャプション生成でよく使われる MSCOCO に比べてテキストのばらつきが大きい分、学習が難しかったと思います。学習率は 5 * 10^-5 (論文中は 10^-4) と、かなり小さくしました。

針原:
ちなみに環境はどういうものを使われましたか ?

武藤氏:
Amazon EC2 p3.2xlarge インスタンスを使いました。Deep Learning AMI には GPU (NVIDIA Tesla V100) ドライバーとソフトウェア、Python 環境の Anaconda が用意されているため、環境構築も容易でした。ちなみにフレームワークは PyTorch です。
 

結果

img_bokete-3_02

「お前、俺の事好きなんだ・・・」

針原:
シュールですね。

武藤氏:
次の例も見て下さい。学習が進むと、少しずつ位置関係を取得できて、複雑な言い回しが出てきていることが分かります。

img_bokete-3_03
イテレーション ボケ
24000 「この子は?」
40000 「パパ、ママの家に帰ってきたよ」
66000 「パパ、ママ、この子の方がいいの?」
86000 「お前、この子のこと好きなんだろ?」

武藤氏:
生成されたボケから、オブジェクトの空間的位置関係 (父親と子ども) を認識できているように見えます。

針原:
ほんとだ、これは本戦での活躍が楽しみですね。今後の展望などありますか ?

武藤氏:
細かなハイパーパラメータのチューニングは行う予定で、例えば学習率やバウンディングボックスの上限数 (今は 36 個だがそんなに要らないかも) を調整します。

吉田氏:
色々試行錯誤していると日本語の文章の生成が下手くそだな、と感じる時があります。カラクリでは普段チャットボットで使っている技術があるので、日本語で学習させて日本語の文章を出力するモデルをベースにすれば、自然な日本語を安定的に出力できるかもしれません。

針原:
なるほど。本番に向けて調整をおねがいします。ありがとうございました !


吉本興業 田中さん・山本さんの挑戦

ズレが生み出す笑い

針原:
それでは、本連載最後に登場するのは吉本興業 田中さんです。笑いを本業にしている企業の参加ということで期待が高まります。これまでは皆さん Encoder-Decoder モデルでのキャプション生成を行われていましたが、同様のアプローチをされましたか ?

photo_yoshimoto_tanaka

田中氏:
宜しくおねがいします、吉本興業テクノロジー開発本部の田中です。普段は社内デジタル案件のプロジェクトマネジメントをやっています。 

photo_yoshimoto_yamamoto

山本氏:
エンジニアの山本です。今回の AI 開発を担当しました。 

田中氏:
私達も最初は画像キャプションのモデルを作っていました。どこまでできるか試してみたくて石川さんのモデルをベースに試していたのですが同じような壁にぶつかり、我々は Deep Learning を本業にしてきたわけではないので方針転換しました。

針原:
壁、というと ?

田中氏:
キャプション生成のモデルはどこかで見たような単語を繋げてそれっぽいボケを出力してくるんですが、それで本当に面白いボケになるのかいまいちしっくりこずでして・・・。皆さん指摘されているように、笑いの評価関数を作って学習させているわけではないので、モデルが面白さを理解しているわけではないと思っています。

針原:
はい、面白さをどう定量的に評価するか、そして真に新しいボケを生成できるか、という点はたしかにこれまでのインタビューでも課題として話題に上がりました。もちろん、そこに切り込めると電笑戦としてもとても意義深いのですが、結構難しいのではという印象を持っているんですよね、正直。

田中氏:
吉本興業はお笑いのイメージを皆さんにお持ちいただいているので、どうしても「大喜利としての面白さ」というところに正面から挑戦しないとな・・・と考えました。そもそも「写真で一言」の「面白さ」て何なのかな・・・と。

針原:
そうですねえ、改めて考えると・・・。

田中氏:
構成作家さんに聞いたのですが、お客さんから見て写真から考えつくことから、回答が「ズレ」た時に笑いが起こりやすいそうです。なので、画像を正しく認識・解釈して抽出した特徴から適度にずらした回答を行うのが良いアプローチだと考えています。

針原:
ズレ、というのは仰るとおりですね。

田中氏:
今回、大喜利などお笑いに長けた構成作家さんやディレクターさんがボケての回答データにタグを付けて、どういう軸に沿ってズレると笑いが生まれているのかを分析しようと試みました。

お笑い構成作家さんによるアノテーション

針原:
それは面白い、まさに笑いの専門家によるアノテーションを行ったわけですね。実際は、お笑い構成作家さん・ディレクターさんってどんな感じでラベル付けされたんでしょうか ?

山本氏:
初めは SageMaker Ground Truth の利用も検討したんですが、画像とテキストのペアを評価するというタスクだったため使うことができず、元々作っていたツールをベースに AWS Lambda + Amazon DynamoDB + Amazon API Gateway で構築しまた。タグは初めに決めずにアノテータ (構成作家さん) が自由に付与できるようにしました。データは、 評価の高い Red (1001 ≦ ★ の数 ≦ 10000) と、少ない Yellow (★ の数 ≦ 100) 、両方で試しました。

針原:
具体的にはどういうタグが付いたんでしょうか ?

田中氏:
「人」「セリフ」「状況」「表情」「ポーズ」とか、「ないない」「あるある」とか「おじさん」「大人数」といったものがありました。これらのタグを集計してみて得られた洞察としては、ボケてでは全体的に人の写真が多く、その表情やセリフを生かしたボケが多いことに気づきました。ですので人物の認識と人の表情・口の開閉を捉えるのがボケるためには重要だと考えています。 

img_bokete-3_04

針原:
たしかに微妙にズレた人間味を感じるボケが多いのは、実際人の表情やセリフを上手いこと活かしてるからなんですね。それは納得感あります。

山本氏:
ズレがボケを生み出す、という意味では、「ないない」タグは低評価 (★が少ない) のボケより高評価 (★が多い) のボケで出現頻度が高い、となっていました。逆に「あるある」は、高評価での頻度が低かったです。

img_bokete-3_05

針原:
「あるある」よりも「ないない」の方がお題からズレてるから笑いが起きやすいということですか。

田中氏:
そのようです。評価の高いボケにはそういう傾向がありました。また、ボケてでは長文・説明調の回答が高評価なことがありますが、これは Web の媒体と相性がいいためだと思われます。普段から大喜利イベントをされている構成作家さんに言わせると、実際のイベント会場での笑いは簡潔なものがウケやすいそうです。ボケての長文ボケをそのまま大喜利イベントに持ち込むと瞬発力に欠けるという話もありました。

針原:
なるほど、電笑戦の本戦も時機を見て会場に集っての開催を予定しているので、笑いの相性は考慮する必要があるということですね。ありがとうございます。今回の知見をまとめると、人の表情をよく捉えた、簡潔な、「ないない」ボケは傾向として人気が高い、ということですね。

データ・モデル

田中氏:
はじめ生成モデルで上手くいかなかった原因は、このズレを正しく表現できていなかったためだと考えています。写真から連想するものとのズレを表現するためには、そもそも写真に写っているものが人間から見て常識的にどうなのかという基準が必要だからです。そのため学習データとして、説明系の回答には日本語画像キャプションデータセット STAIR Captions を、セリフ系の回答としては青空文庫のセリフを取り入れることもしてみました。

img_bokete-3_06
img_bokete-3_07

結果

針原:
なるほど。いくつか結果も見せて頂いていいでしょうか ?

田中氏:
LINE アプリとして社内で簡単に試せるようにしています。画像に写っているもののカテゴリや人の表情を検出するためには、Amazon Rekognition を使っています。キャプション生成のモデルを Amazon SageMaker でホスティングして、複数モデルのアンサンブル結果をもとにボケを選択する、という手法を用いました。以下は Amazon Rekognition が検出した物体のカテゴリ分布に近いボケを拾ってきているものです。

img_bokete-3_08

田中氏:
こちらが社内で比較的評価の高かったボケです。

img_bokete-3_09

「二次会の王様ゲームでゴリラになれと言われたところまでは覚えている」

まとめ

本記事では、前半でカラクリ株式会社 武藤さん・吉田さんによる物体の位置関係を考慮した画像キャプションのモデルによるボケ生成、後半では吉本興業 田中さんより笑いの分析と複数モデルのアンサンブルによるボケ選択について紹介いただきました。どちらも、手法の着想において笑いのドメイン知識を生かしている点が重要かなと感じました。

本連載をお読み頂いた読者の皆様、最後までお付き合い頂きありがとうございました。電笑戦の試みは、AWS Summit Online での技術セッション「電笑戦 ~ AI は人を笑わせられるのか ?」および、その後開催予定 (日時未定) の電笑戦本戦へと継続します。引き続きお楽しみ頂けると幸いです。

筆者プロフィール

photo_haribara_yoshitaka_2

針原 佳貴 (はりばら よしたか)
アマゾン ウェブ サービス ジャパン株式会社
スタートアップ ML ソリューションアーキテクト

大阪出身。好きなサービスは Amazon SageMaker と Amazon Braket です。

さらに最新記事・デベロッパー向けイベントを検索

下記の項目で絞り込む
絞り込みを解除 ≫
フィルタ
1

AWS を無料でお試しいただけます

AWS 無料利用枠の詳細はこちら ≫
5 ステップでアカウント作成できます
無料サインアップ ≫
ご不明な点がおありですか?
日本担当チームへ相談する