初心者プログラマのひとり勉強部屋

若葉マークのプログラマー☺️

【python入門】マルコフ連鎖の簡単な文章作成

こんにちは。

今回はPythonMecab形態素解析・markovifyのマルコフ連鎖で簡単な自動作文をしようと奮闘中です。
とりあえずwikiから最近の語句で自動作文してみました。


◾️環境
・Jupyter notebook
MeCabをpipインストール済み
・markovifyをpipインストール済み


1.インストールしたライブラリ
2.マルコフ連鎖とは
3.形態素解析やってみた
4.マルコフ連鎖やってみた
wikiから自動作文した結果



1.インストールしたライブラリ
◾️MeCab
形態素解析のライブラリです。
taku910.github.io
($ pip install mecab-python3 でmecab-python3をインストールしています。)


◾️markovify
マルコフ連鎖のライブラリです。
github.com




2.マルコフ連鎖とは
マルコフ連鎖は、未来の挙動が現在の値だけで決定され、過去の挙動と無関係である(マルコフ性)。各時刻において起こる状態変化(遷移または推移)に関して、マルコフ連鎖は遷移確率が過去の状態によらず、現在の状態のみによる系列である。特に重要な確率過程として、様々な分野に応用される。
wikipediaより)
マルコフ連鎖 - Wikipedia

簡単に言うと、「私 は ネコ で ある」と「私 は イヌ で は ない」という文章から「私 は ネコ で は ない」など、形態素解析した結果からランダムに次に繋がる語ができるというイメージでしょうか。



3.形態素解析やってみた

f:id:mocomo012:20201115023710p:plain
MeCab形態素解析

うんうん。。
スペースで区切られているのがMeCab形態素解析した1単語です。


4.マルコフ連鎖やってみた

元の文はこちら

f:id:mocomo012:20201115024200p:plain
元の文章

ではやってみましょう。
(コードはmarkovifyのgithubのコードと先ほどのMeCabのコードの組み合わせです。)

f:id:mocomo012:20201115023810p:plain
マルコフ連鎖(5文)

同じ文が何度も、、
これは英語だと.(カンマ)で区切られているが日本語だと。句読点などを認識しないことによるらしいです。
また()や[]など特定の文字列を解析することでもmarkovifyが動かないようです。
Cannot combine Text models if they contain ()"'[] in the string · Issue #84 · jsvine/markovify · GitHub

そのためMeCab形態素解析後 → markovifyでマルコフ連鎖で文を作成する前に、
それらの文字があれば削除し「。」の後に半角スペースを入れたり解析文を整えてあげないといけないようです。

しかし自分でごりごりコードを書くにはまだ至っていないので、こちらの方のコードを参考にさせていただき正規表現や排除文字のところを少し変更して再チャレンジしました。
qiita.com


◾️結果

f:id:mocomo012:20201115135125p:plain
作成された文章

「明日 は 早く 起き て ラジオ 体操 を し まし た が 、なかなか うまく いか ず 悲しい です 。」

あんまり変わっていなくて私が悲しいです。。

形態素解析はうまくいっているので、MeCabで作成された文章からマルコフ連鎖で自動作文するときにうまくいっていないようです。
wikiから「コロナ感染症」「鬼滅の刃」「ルパンの娘」の文章を繋げて元の文章を作成しても、マルコフ連鎖の結果がほぼ同じ内容(形態素解析したのに文単位で文章を作成してしまう)になり、ダメでした。


もう少し解析してみます☺️



【追記】
元の文章を増やすと良かったみたいです。それなりに変な文章が生成されました。
wikiの「コロナ感染症」「鬼滅の刃」「ルパンの娘」「エヴァンゲリオン」「野球」「サブスプリクション」の”概要”だけ抜き取りました。文字数だと3924文字ほどです。)


◾️結果
”放送 時 の 視聴 率 は 低かっ た 上 に 、放送 終了 後 に は 、ヒト に 感染 する コロナ ウイルス HCoV 229 E 、HCoVOC 43 、HCoVNL 63 、HCoVHKU 1 による 感染 症 を 指す こと が ほとんど で ある 。”

”大 災害 「 セカンド インパクト 」 が 起き た 世界 2015 年 8 月 26 日 まで フジテレビ 系 木曜 劇場 で テレビ ドラマ 化 さ れ て いる 456 。”

”略称 は 鬼 滅 の 刃 きめ つ の チーム が 守備 側 と 攻撃 側 に 分かれ 、守備 側 の 打者 が バット で 打ち 、設置 さ れ た 。”


思えば形態素解析して同じ単語がなければ次の単語をマルコフ連鎖できなかったですね。
うまくいって良かったです☺️