人工無脳を学習させる為に映画を観せてみました。ネタ投稿なので正しい機械学習に関するものではありません。あしからずご了承下さい。
こんな感じです。
Bots learn the words from the movie - YouTube
Raspberry Pi のマイクを通じて人工無脳「Reudy(ロイディ)」に映画の台詞を学習させています。
こんな感じで試してみた
絵面的にRaspberryPiを使ったほうが面白いと思ったので、クライアントサイドにラズパイを利用しています。
音声認識と音声発話に関しては下記投稿にまとめています。
ElectronとSocket.ioでBotと音声チャット - Qiita
サーバーサイドは先日iMacに設置した人口無脳ロイディを利用することにしました。
iMacでsocket.ioを利用してローカルサーバーをたてます。iMacのIPアドレスで表示するとhttp://192.168.0.x:3000
となります。このアドレスにラズパイから接続するという仕組みです。
ロイディはコマンドラインを利用してワンライナーで起動できるので
1
| 'echo ロイディに話す言葉 | ( cd \"ロイディのパス"; ruby -W0 stdio_reudy.rb -m)'
|
これをNode.jsのchild_process.exec
コマンドから起動させる仕組みです。
で、こんな感じ
まずはNetflixで絶賛公開中の映画「her/世界でひとつの彼女」(日本語吹き替え)をロイディに観せてみることにしました。
冒頭の動画はそれを撮影したものです。ラズパイ(無脳ロイディはiMacにあります。ややこしいな。)が記憶した単語を読み上げているのが解ると思います。
単語はこんな感じで覚えました。
words.yml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88
| - !ruby/object:Gimite::Word str: 桑名西 author: test mids: [] - !ruby/object:Gimite::Word str: セオドア author: test mids: [] - !ruby/object:Gimite::Word str: サマンサ author: test mids: [] - !ruby/object:Gimite::Word str: 手紙 author: test mids: [] - !ruby/object:Gimite::Word str: ウエスト author: test mids: [] - !ruby/object:Gimite::Word str: カタリナ author: test mids: [] - !ruby/object:Gimite::Word str: ただいま author: test mids: [] - !ruby/object:Gimite::Word str: ただ author: test mids: [] - !ruby/object:Gimite::Word str: もしかして author: test mids: [] - !ruby/object:Gimite::Word str: セックス author: test mids: [] - !ruby/object:Gimite::Word str: 赤ちゃん author: test mids: [] - !ruby/object:Gimite::Word str: 少女 author: test mids: [] - !ruby/object:Gimite::Word str: 会いたい author: test mids: [] - !ruby/object:Gimite::Word str: パズ author: test mids: [] - !ruby/object:Gimite::Word str: なぞなぞ author: test mids: [] - !ruby/object:Gimite::Word str: お腹 author: test mids: [] - !ruby/object:Gimite::Word str: 気持ち author: test mids: [] - !ruby/object:Gimite::Word str: あなたに author: test mids: [] - !ruby/object:Gimite::Word str: 言葉 author: test mids: [] - !ruby/object:Gimite::Word str: 愛してる author: test mids: [] - !ruby/object:Gimite::Word str: 知的 author: test mids: [] - !ruby/object:Gimite::Word str: 楽天 author: test mids: []
|
所々おかしな単語も混ざっていますが(「桑名西」ってなんだ?)名詞、形容詞、動詞をまんべんなく記憶しています。
続いてロイディが発言したログです。
log.yml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| --- :fromNick: test :body: 違うのあなたは悪くない --- :fromNick: '!' :body: 傷ついた日希望の槍 --- :fromNick: test :body: 知的でセクシーな僕が入り込め楽天 --- :fromNick: '!' :body: 後戻りできない --- :fromNick: test :body: 複雑なんだ --- :fromNick: '!' :body: ただちょっと念のため心配しないで後悔しないから --- :fromNick: test :body: 感情移入したくなるのはなぜ --- :fromNick: test :body: 申し訳ない --- :fromNick: test :body: ごめんなさい --- :fromNick: test :body: 愛してる --- :fromNick: '!' :body: さようなら ---
|
こちらも少々微妙な発言がありますが、最終的には「愛してる」「さようなら」と映画の主題にたどり着いた様です。(偶然)
まとめ
音声認識に関して、事前に想像していたよりも認識率がちょっと低かったです。(実際の台詞の大体5分の1位しか聞き取りが出来ていません。)
特に会話部分でお互いの台詞が重なる部分が認識できなかったのが残念でした。(主人公とヒロインの掛け合い部分が一番覚えさせたかった所なのですが)
今回は映画を1回見せただけなので、繰り返し見せれば覚える言葉も増えていきそうな気がします。
ともあれ、はじめてのなんちゃって機械学習は無事終了しました。現場からは以上です。