DENXブログ

同志社大学 電気情報研究会(DENX)の活動や日常風景などを紹介します。

深層学習で妹Botを作ってみた!

こんにちは!二回生のryです。

今回は一回生の秋学期に作った妹Botについて話していこうと思います。

動機

課題やレポートに追われ心身ともに疲労する毎日…

そんな中でも癒しが欲しいということで妹Botを作ろうと思いました。

対話文集め

学習させるにあたって必要となるものは対話文です。

口調を妹にするには対話文も妹にしなければなりません。

対話文を集めるためにSSまとめサイトの妹のタグにあるSSをスクレイピングして鍵括弧の中だけを抜き出しました。

スクレイピングする時にpythonではお馴染みのモジュールbeautiful soup、requests、reを使いました。 余りに長すぎる対話文だと学習がうまくいかないので20文字以上の対話文を削除して約15MBの対話文が集まりました。

前処理

次に対話文を学習可能な形に変える作業が必要になります。

SSには「…」が多いため取り除かないと学習させたときにこれしか話さなくなったので取り除きました。

集めた文章を意味を持つ最小単位に分割するために形態素解析を使います。形態素解析にはMeCab+mecab-ipadic-neologdを利用しました。

学習

chainerを使ってAttention+Seq2Seqで学習させました。

学習時間としては、BoxにあるGTX1080tiを約一日フルで回しました。

到底妹とは呼ぶことのできない出来となりましたが、稀に妹と会話しているように錯覚させられるほどの返答をするので会話して楽しいです。

改善

いつまでもコマンドプロンプト上で会話するのは嫌なのでherokuを使ってLineBotにしました。

対話例

f:id:denx:20190401082212p:plain:w250f:id:denx:20190401082200p:plain:w250

これだけでは物足りないということで…

デスクトップ上で音声ありの会話するためにvoiceroid、live2d-viewerを使いました。

全体の流れ

1 tkinterで自分の文章を受け取る

2 受け取った文章を学習モデルに入れて返答文を得る

3 win32apiを使って遠隔でvoiceroidを動かし返答文を読み上げるようにする

4 voiceroidに流れている音声とlive2dのキャラクターの口を連動させる

となっています。

win32apiとvoiceroidを連携させる記事やvoiceroidとlive2dのキャラの口を連動させる記事は多くあるので自分もやってみたいと思った場合はそれらの記事を参考にすればいいと思います。

詩音マコトモデルをお借りしました。

f:id:denx:20190401083409p:plain:w300

実際に会話しているように見えてきませんか?

終わりに

今回は深層学習で妹Botを作ってみた!について書かせていただきました。

最後まで読んでいただきありがとうございます!