knaka Tech-Blog

AI, IoT, DIYエレクトロニクス, データサイエンスについて投稿予定です。

keras LSTM で、文章自動生成を行う。 自然言語処理(5)

index:

概要

前回の、自然言語処理の関連となります。
学習させた文章(書籍など)、を元にLSTM
で、文章を自動生成する仕組みの例です。

テストは、google colab で行いました。

環境

python 3.5.2
janome
keras

コード

github.com

python3 です。

データセット

参考ページと、同じですが。

青空文庫の、モルグ街の殺人事件
https://www.aozora.gr.jp/cards/000094/card605.html

処理など

参考ページと、ほぼ同じですが。
形態素解析は、 janome を使用しています。

・前処理、
before.py 、改行とかの削除

・学習

・評価
モデルを、ロードして。評価
学習データの、一部の文章を指定
その後は、文章の自動生成が可能でした。

#pred
for diversity in [0.2]:  # diversity は 0.2のみ使用 
    print('----- diversity:', diversity)
    generated = ''
    text= get_token("どんなつまらない仕事でも楽しんでやるのだ")
    sentence = text[start_index: start_index + maxlen]
    generated += "".join(sentence)
    print(sentence )
    print('----- Generating with seed: "' + "".join(sentence)+ '"')
    sys.stdout.write(generated)

    for i in range(400):
        x_pred = np.zeros((1, maxlen, len(chars)))
        for t, char in enumerate(sentence):
            x_pred[0, t, char_indices[char]] = 1.

        preds = model.predict(x_pred, verbose=0)[0]
        next_index = sample(preds, diversity)
        next_char = indices_char[next_index]

        generated += next_char
        sentence = sentence[1:]
        # sentence はリストなので append で結合する
        sentence.append(next_char)  

        sys.stdout.write(next_char)
        sys.stdout.flush()
    print()

評価の結果

どんなつまらない仕事でも得てももしそう事件ということを君はよくわかっている。
部屋の窓をそのときには言葉を、この注意をてで、――それに君を言うとおり、
証人たちは荒々しい声については意見が一致しているのに、あの鋭い、
あるいは一人の証人の言うところによれば耳ざわりな、声に関してはひどい意見のものであるたにちがいない。
窓はそこから出るときにしめて行ったのだろう。
その後、猩々は人自身の証人が『鋭いというよりも耳ざわりなものであった。
耳ざわりな声で――鋭いというよりも耳ざわりなものであった。鋭い声とは言えぬ。
荒々しい声のほうの数語は聞きとれた。それはフランス人の言葉だった。
女の声ではないことは確かだ。言った言葉は聞きとれなかった。鋭い声の言葉はわからなかった。
早くて死体た見つかっで、
被害者二人がまだこのときの通り人まだ少しのただ音のレスパネエ夫人を僕と家にうししを
すっかりデュパンがこのあとをほうてのだが)、猩々のたぶんの想像に得られた我々と
部屋の扉を押しあけたときとのあいだの時間については、
証人の言うと鋭い声のものではないがこのパリでは動物はその他考えている
――が『彼はこのこの事件についてはまだなにを錠はかかっていなかった。
その建物には四階のほかにはどこにも家具がないようであった。 
このフランス人は一人の数人の殺人をフランス語て部屋そしてにあいだにデュパン君と書いてぬというしまっと君を、
それから想像デュパンのつづけた「私」 デュパンがこのあとのほうは言葉を、
非常に低い調子で、非常に静かに言っ

・とりあえず、読めなくない程度の文章を
 自動生成して、くれました。

・学習 epochs =60で、
 google colab で、25分程、
 作業PCですと、数時間かかりそうでしたが。