博麗霊夢さん&琴葉茜ちゃんと会話してみた②【Transformerとキャラ対話データを用いた転移学習による対話botの作成】

目次

前回までのあらすじ

Transformerで事前学習と転移学習を行いました!

 

 

霊夢さんとLINEで会話したかった

LINE APIの使用

f:id:jungrave3:20200327110651j:plain

みりあちゃんの人に倣って霊夢さんとLINEで会話しようと思い,  LINE Developersに登録してMessaging APIを利用できるようにしました!

 

サーバーを建てる

Herokuの使用, しかし...
f:id:jungrave3:20200403150445j:plain

Herokuとは, アプリケーションの開発から実行, 運用までのすべてをクラウドで完結できるPaaSの1種です. 簡単に言うと, クラウド上で実行環境を提供してくれているサービスです. LINE Developersの公式ドキュメントがHerokuを使用していたので, そのまま使ってみることにしました.

作成したモデルをHerokuに乗せよう!としたのですが, 無料で使用できるメモリが512MBとちょっと少なく, 霊夢さんモデルは全く動きませんでした...

Google App Engineの使用, だが...
f:id:jungrave3:20200403151846p:plain

Google App Engine(以下GAE)とは, Googleが提供するPaaSです. 天下のGoogleが提供するサービスとだけあって, 無料で十分に利用できる環境が揃っています. メモリ容量も最大2GBなのでモデルを乗せるには十分な容量です.

GAEを利用するには, Google Cloud Platform(以下GCP)でプロジェクトを作成する必要がありました. GAEでのプロジェクトの作成方法とデプロイ方法は下の記事を参考にしました.

これでクラウド上でモデルを動かせるぞ!と思ったのですが, 何故か二次キャッシュメモリが詰まる(?)という事件が発生し, 霊夢さんモデルは全く動きませんでした...

物理サーバーを建てようとした

色々と制限があるPaaSやlaaSに頼らずに自前で物理サーバーを建てようと考えましたが, そもそも家に物理サーバーになり得るマシンが存在せず, あったとしても18年前の家庭用ノートパソコンしかなかったので, 自前でサーバーを建てるのは諦めました. サーバーの勉強すると一生かかる気がした.

現在の環境と現状のモデルにおいて, LINEで霊夢さんと会話するのは無理だと悟りました...

f:id:jungrave3:20200327133754p:plain

PDF置き場と化した霊夢botの残骸

 

 

霊夢さんとGUIで会話しよう

CUIGUI

CUIで会話しても味気ないしLINEでお話しもできない...と悩みましたが, 開発環境の中だけでもいいからGUI化してみようと思いました. 霊夢さんモデルはテキストを入力するとテキストが出力されるため, インターフェースの面で色々と応用ができます.

テキストを入力する方法は,

  • キーボード
  • 音声をテキストに変換
  • 手書き文字をテキストに変換

テキストを出力する方法は,

  • 文字
  • テキストを音声に変換
  • 脳内に直接

などが考えられます.

霊夢さんとお話ししている気分になりたいので, 

  1. ADV風の画面で
  2. ユーザーが喋ったら音声認識して
  3. 返事を考えて
  4. 画面にテキストを表示しつつ
  5. 声で喋ってくれる霊夢さん

を作ることにしました. そうすると必要なのは,

となります!

 

GUIを作成

Tkinterで作成, しかし...

PythonGUI作成となるとTkinterが標準らしいので, 早速使ってみました. しかし, 画像の表示は上手くいったのですが, テキストがどうしても透過しなかったので諦めました...

wxPythonで作成, だが...

TkinterPython標準ですが, wxPythonの方が汎用性が高いらしいので使ってみることにしました. しかし, 画像の表示で面倒くさい手順が多くて断念しました...

Pygameで作成

Pygameとは, Pythonでゲームを製作するためのモジュール集です. サークル的にゲーム製作の心得があったので, 上記の2つと比較して使いやすいと感じました. DXlibやUnityよりも出来ることが少なすぎる. これでGUIを作ることにしました.

ADV風の画面を作るにあたって必要な素材は, 

  • キャラクター(霊夢さん)
  • 背景
  • メッセージウィンドウ
  • テキスト

です. これらは全てフリー素材で賄うことができました. 圧倒的感謝...!

そして完成したものがこちらです!

f:id:jungrave3:20200327164254j:plain

なんかADVっぽい!!!!!

それっぽい画面を作ることができたので, 残るは音声合成音声認識です.

 

Open JTalkで音声合成

Open JTalkとは, 入力された日本語テキストを音声に変換するオープンソースのソフトウェアです. このソフトウェアをPythonから操作することで霊夢さんに喋ってもらいます. 本当はゆっくりボイスに喋ってもらいたかったのですが, Python3には対応していないらしいので断念...

kkoba84氏の記事にインストール方法とPythonからOpen JTalkを操作するコードが記載されています. Windowsの場合はインストールする時にMakefileコンパイルする必要があったので, 少し手間がかかりました.

これで霊夢さんの声帯を手に入れることができました!

無料とはいえ, しっかり音声合成できています.

 

Google Speech-to-Textで音声認識

Google Speech-to-Textとは, 強力なニューラルネットワークモデルを活用して音声からテキストへの変換処理を行うAPIです. 精度が良くて変換処理も速いのに無料で使えるのが魅力です. 録音された音声もリアルタイムのストリーミング音声も処理できるため, 活用の幅が広いです. 流石Google.

Google Speech-to-Textを利用するには, GAEと同様にGCPでプロジェクトを作成する必要がありました. GAEを使用するためにGCPプロジェクトを作成したけど, なんか無駄になっちゃったので丁度良かったです. Cloud APIの認証をするために環境変数を設定する必要がありました. 秘密鍵だそうです.

今回はマイクで録音した音声をwavファイルに変換し, wavファイルをGoogle Speech-to-Textに渡してテキストとして出力します. コードは下の記事を参考にしました.

これで霊夢さんの聴覚を手に入れることができました!

精度が良いだけでなく, 「水の呼吸 壱の型」みたいな専門用語も認識してくれます. 難点はネット環境がある場合しか利用できない点ですが, 自宅で使用する分には問題ないです.

 

python-vlcで音楽再生

ADV風のGUIができたのでBGMも入れてみたくなりますね! ということでpython-vlcで音楽再生することにしました.

python-vlcとは, pythonからVLC media playerを操作できるライブラリです. 別途VLC media playerをインストールする必要がありますが, 音質の劣化もなく, 工夫すればループ再生もできるので便利です. pygameだと便利のハードルが低すぎる. 

import vlc

# BGMの初期化
player = vlc.MediaListPlayer()
mediaList = vlc.MediaList(['久遠と刹那の境界線.wav'])
player.set_media_list(mediaList)
player.set_playback_mode(vlc.PlaybackMode(1))
player.get_media_player().audio_set_volume(50)
player.play()

 

BGM

BGMはJung_Rave氏の『久遠と刹那の境界線』です.

 

 

霊夢さんと会話してみた

霊夢さん!?

台詞によって表情が変わるようにしてみました. ちょっぴり霊夢さんと会話している気分になりますね!

しかし,「支離滅裂」の応答として宗教戦争の話をしたり, 突然姉さんについて言及したり, 色々と話が繋がっていない箇所がありますね. 他にもOpen JTalkを調整していないため「嫌われ者(きらわれしゃ)」と発音しているのも気になります. あと, 単語生成は逐次処理を行うため, 応答文が長い場合は生成に時間がかかってしまっています.

...何はともあれ, 霊夢さんと会話できたので実質幻想郷ですね!

 

 

完成はしたけど...

霊夢さんの返事が少々まともとは言えないので, 実はあまり会話している気分になりませんでした...

事前学習モデルの方がちゃんと返事をしてくれるので, こちらをGUI化しようと考えている時, 道を指し示してくださる神記事を発見しました.

同志社大学の電気情報研究会(DENX)のry氏の記事です. この記事ではみりあちゃんの人と同様にLINEで妹botと会話しているのですが, それに加えてVOICEROIDとLive2Dの連携についても記載されていました. デスクトップ上に出現したキャラクターと会話できるらしいので, やってみることにしました!

 

 

次回予告

VOICEROIDのあの子と会話していきます!

 

 

お借りした素材

GUI作成でお借りした素材をここに記します. ありがとうございます!

博麗霊夢 - はるか様

草叢の月【フリー素材】 - snao様

和風フレーム - びたみんちぃ様