#はじめに
近年バーチャルyoutuberは大変な流行を見せていますが。このジャンルの草分け的存在であったのが、キズナアイです。
キズナアイはAIを自称していますが、その実態は人間の声優が3Dモデルに声を当てているだけです(無慈悲)。VTuberはネット上のメジャーな表現技法となりましたが、あくまで人間のYouTuberの延長線上にあるジャンルと見ることもできます。
しかし、大阪大学の石黒浩教授が自分そっくりのイシグロイドをつくり、それを通して喋る実験をした時のように、キズナアイは人ではないものを人間っぽく感じさせるための、重要な要素を持っているように感じます。彼女は(彼女というキャラクターは)いわば人間と機械の中間にいる存在なのかもしれません。
そんなAIを自称する彼女のキャラクター自体を本当にAI化したら、面白いんじゃないかなと思ってはじめてみました。
#方針
とはいうものの、いきなり本人っぽく自由に考えて、発言させるなど、いくらなんでもハードルが高すぎます。そこで、まず本人っぽい発言を生成することから始めたいと思います。
手法としては、最近流行りのディープラーニングを使うという手もありますが、下記リンクのとおり、
マルコフ連鎖で生成したツンデレセリフ
【エヴァンゲリオン】アスカっぽいセリフをDeepLearningで自動生成してみる
その人の発言っぽい言葉を話させるのに、ディープラーニングを使う場合、あまり正しい文ができないとのこと(文法を学ばせるのが難しいため?)。
マルコフ連鎖を使用したほうが、比較的文法的に正しい、それっぽい文章を生成しやすいようです。
そこでyoutube上のキズナアイの動画から、マルコフ連鎖を使い文章を自動生成しようと思います。
#マルコフ連鎖でキズナアイの発言内容を真似する
順序としては、
①キズナアイのyoutubeの動画の字幕を取得
②Mecabをつかってわかち書きにし、マルコフ辞書を作成する
③辞書を元にランダムに文章を生成する
④ついでですが、
単語感情極性対応表
を使って、生成した文章の感情極性も出してみました。極性を合計して平均値を出すようにしています。(数字がプラスなほどポジティブな文、数字がマイナスなほどネガティブな文)
*固定のデータセットを作らず、毎回動画についての情報を取得するようにしています。(最新の情報を反映するため)
*マルコフ連鎖のアルゴリズムは、参考サイトの「[Python]マルコフ連鎖で自動文章を生成する」を参考にしました。
*youtubeからの字幕の取得方法等は、参考サイトの「自作Python - Youtube検索プログラム」、「YouTube動画を字幕ごとダウンロード(保存)する方法」を参考にしました。
#コード
バージョン:Python 3.5.3
コード全文(github)
*使用するにはこのリンクの単語感情極性対応表が必要です。
#結果
何回か実行してみた結果できた文 *長さは10~40単語でランダムに決まります
生成文:ぉ♪トマト~♪ト トマトジュースだよなー!ホントにふざけんな!やっぱ天才
極性ありのワード:4
極性合計:-0.27703999999999995
極性平均:-0.06925999999999999
生成文:ここで、なんにもなーい!逃げよう!はい!怖いよぅなんにも…
極性ありのワード:1
極性合計:-0.997999
極性平均:-0.997999
生成文:!あーえっと、今はそれどころではないというねぇ…あ!凄いグッズも可愛い
極性ありのワード:6
極性合計:0.33217885
極性平均:0.05536314166666667
生成文:?まあだからねど~もう!ジャカジャカジャーン!ふざけんな!
極性ありのワード:1
極性合計:-0.443848
極性平均:-0.443848
生成文:DiscordforallAI-channews!https://discord.gg/
極性ありのワード:0
生成文:たい!それでは!リベンジマーーーーーー!!オレノ トマトジュースは!
極性ありのワード:2
極性合計:-0.829083
極性平均:-0.4145415
生成文:!あの!"ぁ"ァ"あまり指摘されているといい
極性ありのワード:3
極性合計:-1.5994290000000002
極性平均:-0.533143
生成文:もうヤダーっ!あ余裕のよっちゃんですね
極性ありのワード:2
極性合計:-1.096621
極性平均:-0.5483105
四つ目はdiscordサーバーか何かの紹介だったんですかね。
ただ生成するだけだとつまらないのでPyJtalkを使ってしゃべらせてみました。
自作スマートスピーカー用に、vtuberの発言を真似して文章を自動生成するプログラムを書いた。こわい pic.twitter.com/RJSiGMtIAL
— しなしなびたびたキャベツ (@wilted_cabbage) 2018年7月29日
地下の解体室の犬・・・・・
#課題
1.サンプルについて
全部字幕があるわけではないので、上のコードでとってこられたサンプル動画数は100ぐらいしかない。(あとページングの問題で動画自体も200程度しかとってこれてない。)またキズナアイの動画はゲーム実況動画等など、文法的に正しくない言葉(「あー」「ちょ、やめてやめて!」「!!!」などの叫び声とか)が入ってるので、作成した辞書に変なつながりが入ってしまっている。
→サンプルから使えるものと使えないものを選別すれば、もう少し精度がよくなるかも
2.生成方法について
今のコードだとランダムに選択しているだけだが、どんなふうに単語を選べば自然な文書ができるのか。
#今後の展望
サンプルとなる字幕をうまく整形して、使えるものと使えないものに分けることができれば、もう少し精度は上がりそうな気がします。本人と同じように自由に考えて発言させるとなれば、別の工夫が必要になりますが。
#参考サイト
マルコフ連鎖で生成したツンデレセリフ
[Python]マルコフ連鎖で自動文章を生成する
【エヴァンゲリオン】アスカっぽいセリフをDeepLearningで自動生成してみる
単語感情極性対応表
自作Python - Youtube検索プログラム
YouTube動画を字幕ごとダウンロード(保存)する方法