4コマ漫画 Machine Learning 分析データを集めたかった話

15
Machine Learning #1 2017.02.04 @esuji

Transcript of 4コマ漫画 Machine Learning 分析データを集めたかった話

Page 1: 4コマ漫画 Machine Learning 分析データを集めたかった話

4コマ漫画 Machine Learning分析データを集めたかった話

オタク機械学習勉強会 #1

2017.02.04 @esuji

Page 2: 4コマ漫画 Machine Learning 分析データを集めたかった話

3行で分かる概要

4コマ漫画周辺の評論をやってます

コマ毎の画像が切り抜けたので分析用データを楽に作りたい

illustration2vecの結果を機械学習にかけることで精度を高めたデータが取れるような気がした(69% → 82%)

2

Page 3: 4コマ漫画 Machine Learning 分析データを集めたかった話

自己紹介

名前:S治/@esuji

仕事:PythonでWEB、分析基盤の開発

趣味:4コマ漫画の評論をしています

サークル名:ポストモダンのポリアネス

実績:アニメ『ゆゆ式』のかおり監督インタビュー

3

Page 4: 4コマ漫画 Machine Learning 分析データを集めたかった話

「評論」とは

4

Page 5: 4コマ漫画 Machine Learning 分析データを集めたかった話

作品への新しい読み方を

提示して、作品と作家と読者に、新しい道を拓く

(きづきあきら著『ヨイコノミライ』4巻より)

5

Page 6: 4コマ漫画 Machine Learning 分析データを集めたかった話

モチベーション作り手のプロにも話を聞けたし、もう少し多角的に分析していきたい

『ゆゆ式』8巻分の作業をちまちまやるのが大変なので、色んな作業を自動化したい!

6

Page 7: 4コマ漫画 Machine Learning 分析データを集めたかった話

前回までのあらすじ

コマ画像が切り抜けた

7

Page 8: 4コマ漫画 Machine Learning 分析データを集めたかった話

やりたいこと

各コマが持っている情報にラベリングする(後で分析に使用)

人物:誰が、どの順番で、どんな映り方

吹き出し:誰が、どの順番で、どんな形

セリフ:どんな内容、吹き出し外にあるものか

背景:無背景、スクリーントーン、場所

それぞれコマの繋がりはどうか

8

Page 9: 4コマ漫画 Machine Learning 分析データを集めたかった話

技術前提

試行回数が増やせる(計算時間少ない)とありがたい。冬コミまで時間がなかったが、なにかしら進捗を出して本を書かないといけない。

深層学習はデータ量、計算資源的に厳しい

OpenCVの学習機作成は学習進まない

dlibインストールできたけど呼び出し時にsegmentation faultで死ぬ

9

Page 10: 4コマ漫画 Machine Learning 分析データを集めたかった話

illustration2vecを使ってみる

画像に何人いるか分かるのでこれを集めてみよう

でも『ゆゆ式』だと後ろ向きで映ってるのも多いしそこまで精度出ない

取れるタグの1girl, 2girls, 3girls,...の中で一番値が高い人数と実際の人数の一致率は『ゆゆ式』5巻で69%

10

Page 11: 4コマ漫画 Machine Learning 分析データを集めたかった話

でもおしい値が出てるコマもある

本当は3人だけど2人と判定したコマ

5巻13ページ右の1コマ目

2girls: 0.39

3girls: 0.26

3人の気配も感じられている。これを「3人」だよと教えてあげればなんとかなるのでは

11

Page 12: 4コマ漫画 Machine Learning 分析データを集めたかった話

機械学習でやっていく

方針

1巻当たり900個くらいあるコマすべてにillustration2vecを適用してタグをゲット

タグはとりあえず全部使う(キャラクター144個、一般511個)

手法はランダムフォレストが精度良さそうだった

タグさえ取得すれば学習にそこまで時間かからな

いので良かった

12

Page 13: 4コマ漫画 Machine Learning 分析データを集めたかった話

結果

Accuracy: 0.82 (+/- 0.04)69%から82%に精度向上した

forest = RandomForestClassifier(n_estimators=340, random_state=0, n_jobs=-1 ,class_weight='balanced')forest.fit(X_train, y_train) def get_accuracy(clf, train_features, train_labels): scores = cross_val_score(clf, train_features, train_labels, cv= print("Accuracy: %0.2f (+/- %0.2f)" % (scores.mean(), scores.std()))

get_accuracy(forest, X_test, y_test)

13

Page 14: 4コマ漫画 Machine Learning 分析データを集めたかった話

まとめ

illustration2vecの結果を機械学習にかけることで更なる精度向上を実現できた(69%→82%)

分析用データを集めるのに82%が嬉しい数字化は別問題

試行錯誤するより手作業でデータを入力したほうが速いのでは?

はい

14