こんにちは。マネックス・ラボの田中です。
突然ですが、皆さんは独り言をよく言いますか?
私はあまり言いませんが、人の独り言を聞くのは結構好きです。
そのため、私には人の独り言を記録するというライフワークがあります。
これまでプロジェクトの都合や人の異動で、席替えが3ヶ月に1回くらいあったので、10人以上の独り言を記録してきました。
今は在宅勤務が増え、フリーアドレス制が導入されたので、独り言を聞く機会が少なくなりました。さみしいことです。
そこで、今まで記録してきた独り言から、2種類の方法で文章を自動生成してみることにしました。
目次
AIのべりすと
AIのべりすと(https://ai-novel.com/)という小説AIがあります。
ご存知の方も多いのではないでしょうか。今一番アツい文章自動生成ツールだと思います。
これにさきほどの独り言リストを入れて、「続きの文を書く」ボタンを押します。
下の方の青い文字が、AIの作成した文章です。大変それらしいものが出てきました。
「2022/7/26 16:51」など、実は未来予知で、本当にその時間に隣の人が言うかもしれません。(((( ;゚Д゚)))
マルコフ連鎖
エンジニアらしいこともしたいので、pythonで文章を自動生成してみます。
今回は、マルコフ連鎖のライブラリはmarkovify、形態素解析エンジンはMeCabを使います。
markovify(https://github.com/jsvine/markovify)
MeCab(https://taku910.github.io/mecab/)
$ brew install python $ pip install markovify $ pip install mecab-python3 $ brew install mecab mecab-ipadic # MeCabを使ってみる $ mecab こんにちは。マネックス・ラボの田中です。 こんにちは 感動詞,*,*,*,*,*,こんにちは,コンニチハ,コンニチワ 。 記号,句点,*,*,*,*,。,。,。 マネックス・ラボ 名詞,一般,*,*,*,*,* の 助詞,連体化,*,*,*,*,の,ノ,ノ 田中 名詞,固有名詞,人名,姓,*,*,田中,タナカ,タナカ です 助動詞,*,*,*,特殊・デス,基本形,です,デス,デス 。 記号,句点,*,*,*,*,。,。,。 EOS
日時を抜いた独り言のリストをdokuhaku.txtという名前で作成し、同じディレクトリに以下のファイルdokuhaku.pyを作成します。
import MeCab import markovify # テキストを読み込む text = "" with open('dokuhaku.txt', 'r') as f: text += f.read().strip() # Mecabで分かち書き mecab = MeCab.Tagger() splitted_text = "" for line in text.split(): mp = mecab.parseToNode(line) while mp: try: splitted_text += mp.surface if mp.surface != '。' and mp.surface != '、': splitted_text += ' ' # split words by space except UnicodeDecodeError as e: print(line) finally: mp = mp.next # markovifyで学習させる text_model = markovify.NewlineText(splitted_text, state_size=2, well_formed=False) # 生成した文章を出力する sentence = text_model.make_sentence() print(''.join(sentence.split()))
実行してみます!!実行結果は毎回変わります。
$ python3 dokuhaku.py さいあくだ~ううーんなんでやろなぁぬぅぅぅぅ~~~~~ン、んんっ?んん〜?あれ?どっちだ??
こちらも、それらしいものが出てきました。やたら苦しんでますね。
まとめ
いかがでしたか?
個人的には、自動生成したものよりも、実際の独り言の方が面白かったです。
独り言の分野では、まだAIより人間が勝っているようです。(独り言の分野とは??)