ツンデレ連鎖
目次
はじめに
こんにちは.
はんぺんです.
Kerasを用いたディープラーニング(LSTM)で新しいツンデレセリフを生成してみた
こちらで思ったよりいい感じのセリフが生成できなくてしょげてましたが,どうやらマルコフ連鎖の方が精度が高いとの情報を得たので,懲りずに試してみました.
データ収集
前回と同様のデータを用いました.
スクレイピングの方法をまとめたら記事にするつもりです.
文章データの集め方を記事にしました.
【Webスクレイピング】Pythonを使ってNAVERまとめから文章を抽出してみた
学習
Pythonリハビリのために文章自動生成プログラムを作ってみた
こちらを参考にさせていただきました.
ありがとうございました.
ファイルの読み込みをテキストファイルから行ったのでその説明を部分を変更したので書いておきます.
テキストファイルの読み込み
1 2 3 4 5 6 7 |
from PrepareChain import PrepareChain f = open('./text.txt') text = f.read() f.close() chain = PrepareChain(text) triplet_freqs = chain.make_triplet_freqs() chain.save(triplet_freqs, True) |
この時,私の実行環境ではテキストファイルの形式がutf-8以外だとエラーが出てしまったので,注意が必要です.
文章の生成と表示
1 2 3 4 5 |
from GenerateText import GenerateText generated_sentences = [] for i in range(5): generator = GenerateText() generated_sentences.append(generator.generate()) |
1 2 |
for i in range(len(generated_sentences)): print(generated_sentences[i]) |
実行結果
- うるさい!ニヤついてなんか無い!
- この鈍感男!何で私が困るじゃない、ないんだから。
- あんたなんて豆腐の角に頭ぶつけて死んじゃえばいいのよ!
- いいわ。変態、変態、バカ!
- 分かったわよ!早く食べなさいよっ!
- そんなことするなんて、全然嬉しくないんだから!!
- た、たまたま帰り道が同じだったわよ。
- ひ、膝枕!?あんたは、ふ、二人しかいないんだからね!
- ……嘘!大好き!
- 何いいよるんか分からんけど、て、て、雪だるまにでもなっちゃうところだったわよ。
- あ、あ、あんたじゃない? …ふーん。
- ほらっ!!ここからここまで全部下さいなんだからね!
- 分かったわよ!別にアンタの為に作ってあげないんだから!
- ちょっと待ちなさいよね!
- 目から汗が出てるだけなんだから。
- あ、あんたなんて豆腐の角に頭ぶつけて死んじゃえばいいのよ!
- 目から汗が出てるだけなんだから、あんたなんて豆腐の角に頭ぶつけて死んじゃえばいいのよ!
- バカはい、これ、プレゼント。
- チェッ、チェックメイトッ!…こっ、こんな恥ずかしいコト…言わせないでよ、
- 恥ずかしいじゃないわよ…手、繋ぎなさいよ。
- ついでだから…っ!前に進みなさい!
- あ、あ、あ、あああ、あんたじゃない///
- 目から汗が出てるだけなのッ!!
- ふんっ。し、仕方ないわよ!バカわ、私だけをみてればいいのよ!
赤い文章が新しく生成された文章で,他はオリジナル文章そのままのものです.
ディープラーニング(LSTM)を使ったときと比べて,かなり高い精度で文章が生成されていると思います.
セリフの厳選
せっかくなんで,いい感じのセリフが出るまで何度か試してみました.
以下は私が気に入ったセリフTOP3です.
第3位 「た、たまたま帰り道が同じだっただけなんだけど。」
このセリフは以下の3つのセリフの合作です.
- た、たまたま帰り道が同じだっただけよ!」
- 何考えてるのッ?!ご、ごみがついてたから言おうと思っただけなのッ!!ふんっ。
- はぁはぁはぁ…。き、奇遇ね、わ、私も今ちょうど帰るとこなんだけど、ぜぇぜぇ。
- あたしツンデレな奴って嫌いなの!・・・あんたは別だけど。
使用される場面としては,以下のようなシチュエーションを想定しています.
モブ男「お前らよく一緒に帰ってるけど仲よいよな〜」
まるこふ「は!?なんだよ」
ツン子「い、いきなり何を言い出すのよ!」
モブ男「え〜昨日も一緒に帰ってたじゃん!」
ツン子「た、たまたま帰り道が同じだっただけなんだけど。」
最初の「た、たまたま」で焦りが見えてると思いきや,後半の「だけなんだけど。」で読み取れるように,一文の中で冷静さを取り戻しています.
典型的なツンデレキャラというよりは,落ち着きのある委員長キャラの発言っぽいです.
第2位 「お弁当、多く作りすぎちゃったから言おうと思っただけなんだからッ!」
- お弁当、多く作りすぎちゃったから、あ、あんたも手伝いなさいよ!
- ご、ごみがついてたから言おうと思っただけなのッ!!
- ぐ、ぐぐ、偶然ハート型に出来ただけなんだからッ!
まるこふ「あ〜腹減った〜」
ツン子「(あ...まるこふがお腹すかしてる...!)」
ツン子「そんなにお腹すいてるなら,あ,あたしの弁当少しなら食べてもいいけど?」
まるこふ「お,マジで!?そんなこと言ってくれるなんてお前優しいとこあるじゃん!!!」
ツン子「お弁当、多く作りすぎちゃったから言おうと思っただけなんだからッ!」
お腹空いているからい弁当を分けてあげるという行為に対して「優しい」と言われ,恥ずかしくなって,弁当を分けてあげる理由を「弁当を多く作りすぎたから」にすり替える典型的なツンデレセリフですね.
第1位 「暑くたって手くらい繋いであげても全然良かったんだからね。」
- 暑くたって手くらい握りなさいよ! バカ
- 恥ずかしいけど、て、て、て、手くらい繋いであげてもいいわよ。ほらっ!
- わ、私結構記憶力いい方なんだよねw別にあげなくても全然良かったんだけどさw
- せっかくあんたの為に作ってあげたんだからね。
まるこふ「少し冷えてきたな...手つなぐか?」
ツン子「なによいまさら」
まるこふ「いや、昼間は暑かったから握らないほうがいいと思って。」
ツン子「暑くたって手くらい繋いであげても全然良かったんだからね。」
堂々の第1位です.
「暑くても手を繋ぎたかったな…今度からは暑くても手を繋ごうね」がセリフから滲み出ています.
かなりデレ寄りのセリフですね.
まとめ
マルコフ連鎖のほうがLSTMより非常に高い精度で文章が生成できていますが,これに関しては他の方々の文章作成記事をみても,同様なことが伺えます.
現状では生成された文章のいくつかは元データと全く同じものだったり,文法的におかしい物があるので,改善してくひつようそうです.
今後やっていきたいこととしては,ある特定の単語を使うことを前提でって新たな文章を生成できたら面白いと思っています.
例えば,ツンデレセリフでの二人称は「あんた」が用いられることが多いのですが,これを「おにいちゃん」に置き換えることでツンデレ妹の出来上がりです.
形態素解析で二人称の判別までできそうだったらやってみたいです.
参考
Pythonリハビリのために文章自動生成プログラムを作ってみた
【エヴァンゲリオン】アスカっぽいセリフをDeepLearningで自動生成してみる
Kerasを用いたディープラーニング(LSTM)で新しいツンデレセリフを生成してみた
【Webスクレイピング】Pythonを使ってNAVERまとめから文章を抽出してみた
[…] マルコフ連鎖で生成した萌えるツンデレセリフ3選 […]