人工無脳を学習させる為に映画を観せてみました。ネタ投稿なので正しい機械学習に関するものではありません。あしからずご了承下さい。

こんな感じです。

Bots learn the words from the movie

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回見せただけなので、繰り返し見せれば覚える言葉も増えていきそうな気がします。

ともあれ、はじめてのなんちゃって機械学習は無事終了しました。現場からは以上です。