[文章生成]マルコフ連鎖で文を生成してみよう作って試そう! ディープラーニング工作室(2/2 ページ)

» 2021年02月19日 05時00分 公開
[かわさきしんじDeep Insider編集部]
前のページへ 1|2       

梶井基次郎の著作から文を生成してみる

 梶井基次郎の著作データといっても、ここでは全文を使わずに以下のようなデータを使ってみます。これは前回の最後に紹介したコード(にもう少し手を加えたもの)を使って作成したkajii.txtファイルに含まれている『檸檬』の本文を抜粋したものです。このファイルを作成するコードは今回のノートブックの末尾に掲載しておきます。ノートブック実行時にkajii.txtファイルが必要であれば、最後の(2つの)コードを実行してください。

kajii_data = '''えたいの知れない不吉な塊が私の心を始終圧えつけていた。
焦躁と言おうか、嫌悪と言おうか――酒を飲んだあとに宿酔があるように、酒を毎日飲んでいると宿酔に相当した時期がやって来る。
それが来たのだ。
これはちょっといけなかった。
結果した肺尖カタルや神経衰弱がいけないのではない。
また背を焼くような借金などがいけないのではない。
いけないのはその不吉な塊だ。
以前私を喜ばせたどんな美しい音楽も、どんな美しい詩の一節も辛抱がならなくなった。
蓄音器を聴かせてもらいにわざわざ出かけて行っても、最初の二三小節で不意に立ち上がってしまいたくなる。
何かが私を居堪らずさせるのだ。
それで始終私は街から街を浮浪し続けていた。
何故だかその頃私は見すぼらしくて美しいものに強くひきつけられたのを覚えている。
風景にしても壊れかかった街だとか、その街にしてもよそよそしい表通りよりもどこか親しみのある、汚い洗濯物が干してあったりがらくたが転がしてあったりむさくるしい部屋が覗いていたりする裏通りが好きであった。
雨や風が蝕んでやがて土に帰ってしまう、と言ったような趣きのある街で、土塀が崩れていたり家並が傾きかかっていたり――勢いのいいのは植物だけで、時とするとびっくりさせるような向日葵があったりカンナが咲いていたりする。
時どき私はそんな路を歩きながら、ふと、そこが京都ではなくて京都から何百里も離れた仙台とか長崎とか――そのような市へ今自分が来ているのだ――という錯覚を起こそうと努める。
私は、できることなら京都から逃げ出して誰一人知らないような市へ行ってしまいたかった。'''

梶井基次郎の著作データの一部
底本:「檸檬・ある心の風景 他二十編」旺文社文庫、旺文社

   1972(昭和47)年12月10日初版発行

   1974(昭和49)年第4刷発行

初出:「青空 創刊号」青空社

   1925(大正14)年1月

表題は底本では、「檸檬れもん」となっています。

編集部による傍注は省略しました。

入力:j.utiyama

校正:野口英司

1998年8月31日公開

2016年7月5日修正

青空文庫作成ファイル:

このファイルは、インターネットの図書館、青空文庫(http://www.aozora.gr.jp/)で作られました。入力、校正、制作にあたったのは、ボランティアの皆さんです。


 このデータを使って、モデルを作成する前に筆者が以下の関数を定義しておきました。これはモデル作成の前にいろいろと前処理をしておくとよさそうだったからです。

def preprocess(txt_data):
    result = wakati.parse(txt_data)
    tbl = str.maketrans({'。': '。\n', '!': '!\n', '?': '?\n', ')': ')\n'})
    result = result.translate(tbl).replace('\n ', '\n')
    return result

前処理を行うコード

 この関数では、分かち書きを行った後に、不要な半角空白文字を削除したり、句点の直後に改行を挿入したりといった処理を行っています。この関数を呼び出した結果をmake_1state_model関数に渡してモデルを作成し、さらにそのモデルをgenerate_sentence関数に渡してみましょう。

tmp = preprocess(kajii_data)
model2 = make_onestate_model(tmp)

for _ in range(5):
    print(generate_sentence(model2))

梶井基次郎の著作データから文を生成

 実行結果を以下に示します。

実行結果 実行結果

 どうでしょう。正直、あまり文として意味があるものになっているとは思えません。そこで、次に2階マルコフ連鎖を行うコードを見てみます。

2階マルコフ連鎖で文を生成してみる

前のページへ 1|2       

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。