LoginSignup
7
6

More than 5 years have passed since last update.

キズナアイっぽい言葉をマルコフ連鎖で喋らせるプログラム

Posted at

はじめに

近年バーチャル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を使ってしゃべらせてみました。

地下の解体室の犬・・・・・

課題

1.サンプルについて
 全部字幕があるわけではないので、上のコードでとってこられたサンプル動画数は100ぐらいしかない。(あとページングの問題で動画自体も200程度しかとってこれてない。)またキズナアイの動画はゲーム実況動画等など、文法的に正しくない言葉(「あー」「ちょ、やめてやめて!」「!!!」などの叫び声とか)が入ってるので、作成した辞書に変なつながりが入ってしまっている。
 →サンプルから使えるものと使えないものを選別すれば、もう少し精度がよくなるかも
2.生成方法について
 今のコードだとランダムに選択しているだけだが、どんなふうに単語を選べば自然な文書ができるのか。

今後の展望

 サンプルとなる字幕をうまく整形して、使えるものと使えないものに分けることができれば、もう少し精度は上がりそうな気がします。本人と同じように自由に考えて発言させるとなれば、別の工夫が必要になりますが。

参考サイト

マルコフ連鎖で生成したツンデレセリフ
[Python]マルコフ連鎖で自動文章を生成する
【エヴァンゲリオン】アスカっぽいセリフをDeepLearningで自動生成してみる
単語感情極性対応表
自作Python - Youtube検索プログラム
YouTube動画を字幕ごとダウンロード(保存)する方法

7
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
6