辻野あかりがマルコフ連鎖で変なことを喋るbotを作ってみた
Twitterには星の数ほどのbotがありますが、最近お気に入りなのが学習する佐城雪美bot(@YukimiLearning)です。
雪美ちゃんが絶対言わなそうなことをあの口調で喋るだけでめちゃくちゃ面白く、TLで見かけるたびに笑顔になってしまいます。………オタクが………キモすぎて………、涙が………出て……きて…しまった。
— 学習する佐城雪美bot (@YukimiLearning) 2020年7月13日
ある日、自分の担当アイドルである辻野あかりにもこんなbotがあったら面白いなあ、作ってみようかなあとふと思い立ちました。こうして作ったのが辻野あかりっぽいbot (@akaringo_bot)です。こんな感じのことをつぶやいています。
あのっ、私、なんかソワソワしちゃいますね!猛烈にトイレいきてえ
— 辻野あかりっぽいbot (@akaringo_bot) 2020年10月26日
botの仕様について
botにどんなツイートをさせるかですが、今回自分はマルコフ連鎖を使ってツイートを生成することにしました。マルコフ連鎖により、既存の文章を元にした、それっぽい文を新しく生成することができます。マルコフ連鎖は、みんな大好きしゅうまい君 (@shuumai)に使われていることで有名です。
マルコフ連鎖について非常に分かりやすく解説されているサイトがありますので、詳細な説明はそちらに譲りたいと思います。
マルコフ連鎖を使って〇〇っぽい文章を自動生成してみた | パソコン工房 NEXMAG
TLの言葉を元データにしてツイートを生成するのみだと、あかりが本人とは何も関係がない支離滅裂な言葉を喋り続けるだけになってしまいます。あかりっぽさを出すために、今回はあかり自身のセリフも組み合わせて文章を生成することにしました。具体的には、TLから新しい順に200ツイート取得したものと、あかりのセリフからランダムに200個を抽出した合計400個の文章を形態素解析し、マルコフ連鎖で文章を生成しています(本当はもっとサンプルを多くしたいのですが、Twitter APIの仕様上200個が限界)。
その際の辻野あかりのセリフのデータはこちらからいただきました。
辻野あかりのあらゆるセリフが網羅されている素晴らしいサイトです。ものすごいテキスト量で、編集者の皆様には頭が上がりません。心より尊敬と感謝申し上げます。
実装について
実装にあたっては、こちらの記事に大変お世話になりました。
PythonでTwitterのマルコフ連鎖bot(多重人格)を作った話[1/3] - はるすえすしーのぶろぐ
マルコフ連鎖でツイートを生成する際や、自動ツイートする際のコードを参考にさせていただきました。非常に丁寧に解説されており、この記事なくしてはbot作成は不可能でした(プログラミング初心者)。心より感謝申し上げます。
HerokuにDeployして動かす際、記事中では
$ heroku run:detached python clock.py
というコマンドを使用していましたが、これを使用して動かした場合24時間経過した時点でスリープモードに入って止まってしまいました。
一方で、
$ heroku ps:scale web=0 clock=1
というコマンドで動かした際には、1ヶ月以上経過した現在でも止まることなく動き続けているのでこちらの使用を推奨します。
またHerokuの初期の無料のdyno時間は550時間/月で1ヶ月(720時間くらい)に微妙に足りないので、常に動かし続けるためにはクレジットカードを登録し、無料枠を1000時間にする必要があります(登録するのみで枠が追加されるので、追加料金は不要です)。
今回は自分のプログラミングの勉強も兼ねてこんな感じのbotを作ってみました。実際に作ってみると結構楽しかったので、そのうちネタを思いついたらまた何か新しいbotを作るかもしれません。
これからこの「辻野あかりっぽいbot」が「辻野あかりbot」になれるのか、期待したいと思います。
これはBrand new!イベントの直後につぶやかれた奇跡のツイート
おつりんごでした!私、なんかアイドルっぽくなって、大勢の人の前で歌えるようになってきました!
— 辻野あかりっぽいbot (@akaringo_bot) 2020年10月8日