キャプチャ

マルコフ連鎖を使ってガクチカっぽい文章を自動生成する

ちょっとした出来心でTwitter上の「今朝見た夢」を集めている。
7万Tweet分くらい集まったので、眺めてフフッってなるだけじゃなくテキスト分析なり文章生成なんなりしたいと思っている中で練習がしたかった。
今回はそれだけ。

とはいえいきなり夢についての文章を自動生成するには気が引けた。
なぜなら

・まゆげが3倍くらいの太さになる夢をみた
・架空の彼氏と海からのお泊り修学旅行デートの夢をみた起きたら寝坊してた海で貝拾いが楽しかった。
・幼馴染みの姉がブルブルバナナっていう名前の会社に勤めてて、自分がくっそ笑ってる夢をみた。

こんなんばっかりで脈絡もへったくれもなく(夢だから当然か)、
これらを料理して文章っぽくするには時期尚早だとビビったからだ。


というわけでガクチカ400字

そういうわけで今回は別の文章を自動で生成することに。
選んだのは『学生時代力を入れたこと』。新卒就職活動ESあるあるのヤツ。
理由は3つくらい

ガクチカってやつは大抵「した事」→「状況説明・課題」→「がんばりました」→「結果・学びました!w」という具合に文章が書かれることが多い。
= 自動生成しやすそう。

ESでは字数指定があって学生はそれいっぱいに書こうとする
= どの文章も量が安定している。

個人的に就活で自動化したかったこと第三位

今回は某通信大手のエントリーシートから拝借して「学生時代力を入れたこと」(400字)をちょろっと集めて作ってみようと思う。

ESの中身は〇ne Careerから。
春先にエントリーシート公開とかやってたし
こういう使い方もいいよねきっと。
今回は手作業で30回答分をコピーしたけどこれスクレイピングできそう。


マルコフ連鎖で文章を生成する、とは

マルコフ連鎖はTwitterのしゅうまい君(https://twitter.com/shuumai)や
からしちゃん(https://twitter.com/karashichan)にも使われている。

何かというと、文章を生成するときに、
ある形態素に繋げられる形態素を選んで徐々に繋げていき文章を作成する

形態素、というのは意味を持つ表現要素の最小単位。これ以上区切ると意味をなさない単位、いわば言葉の素因数だと思っていただければOKだと思う。


マルコフ連鎖では文を読み込んで形態素に分け、
形態素を単位とするモデルを作成する。

例えば
「私はお金が欲しいです」と「私は連休が恋しいです」という2文を
読み込むと以下のようなモデルを組むことが出来る。

このモデルでは、「私」「は」に続けられる形態素は
「お金」「連休」の2つだからそのどちらかをランダムで選ぶ。

同様に「が」に続く形態素を「欲しい」「恋しい」からランダムで選ぶ。
したがって、選び方によっては

「私は連休が欲しいです」という新しい文をつくることができる。
これを繰り返して文章をつくっていくという試みらしい。


ガクチカもどきを自動生成する

自動生成の前に形態素解析ツールMeCabを導入する。
がこれが一苦労。Windows10で使うには準備が面倒なようです。
Pathを通したり、Pyhtonで動かすためにVisual C 2015 Build Toolsを導入したり......
先人が力を貸してくれました。

自動生成について、
今回は既に Python むけのパッケージがあったので、それを使いわせていただいた。

しかし生成段階で以下の部分でエラーが出たのでカット。
原因もわからず不勉強が祟っている。

#PrepareChain.py
#234行目

if __name__ == '__main__':
    # unittest.main()

    param = sys.argv
    if (len(param) != 2):
        print ("Usage: $ python " + param[0] + " sample.txt")
        quit()  
#GenerateText.py
#162行目

if __name__ == '__main__':
    param = sys.argv
    if (len(param) != 2):
        print ("Usage: $ python " + param[0] + " number")
        quit()  

    numb_sentence = int(param[1])

さあ準備は整った!!自動生成をしてみる。
コマンドプロンプトで

python PrepareChain.py
python GenerateText.py

の順でモデル作成→生成を行う

毎年尽力した事は合宿の改善で、逐一生徒の勉強意欲が無く◯◯指 導することは、授業中に聞くことができた。ゼミにおいて◯人に気に入ってもらい感動を共有するため、必ず練習後に話し合い、提携を解消すること」を大切にし、登録件数を前年より3%伸ばすことができた。学生 にイベントを認知していた旅行会社と話し合いを何度も意見を伝えていくことで最後まで同じベクトルを持 って研究に割ける時間が少ない」ということを認識させる事でチームを○倍にしました。インターンの学生 主体で運営する◯◯を抵抗があると痛感した。約◯人の部員全員と面談をしました。

こんな感じで「学生時代力を入れたこと」ぽい文章を無限につくれる。

そして、団体戦において私が勝利した当初一番下の実力からレギュラーとなり、チームは有効性が身に付き ました。結果として優勝という成果を出すということに否定的であった。その結果、誰一人のモチベーショ ン維持や学習計画策定と達成確認を頻繁に行い、懸念部分を共に解決し研究論文を作成することで、学業に おいても生かしたいです。この経験から私自身の向上を図っている。結果、インターン生側からの声をかけ た◯◯を、街で一番下の実力からスタートし、状況打開に挑戦する能力に優れている。


以上、「学生時代力を入れたこと」っぽい文章生成。
生成結果を見てみると、実はコレ文法が崩れていたほうがいいようにも見える。

ということで集めてた夢を少しだけ拝借して実行してみる。

ゴキブリが無限に迫る打撃戦。今日の夜にどこかにみえてさよならも言えずに終わった後の夢をみた。
挨拶の時、1人の養子的 立ち位置を教える先生という設定で、決闘の相手していたら、結局覚えてる?へいき!点滴してる夢みてんだけど全然懐かない男の子(宇宙救ってくれ一年になり体には痩せたら絶対魘されると思い、布団。夢で、シーツ二回も何も言えない夢をみた

夢の自動生成のほうがそれっぽいじゃねーか。

また次回。

この記事が気に入ったらサポートをしてみませんか?