Created
January 2, 2020 12:21
-
-
Save jshirius/a38ed0824e9adaea66e87811514b0b9f to your computer and use it in GitHub Desktop.
LSTMを使って文章を生成する、自然言語処理の例
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"cells": [ | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"# LSTMを使って文章を生成する、自然言語処理\n", | |
"LSTMを使って文章を自動生成(厳密に言うと、機械学習で元の文章が生成されるイメージ)する例。\n", | |
"\n", | |
"文章は、青空文庫にある「銀河鉄道の夜」を使っている。\n", | |
"\n", | |
"参考文献:\n", | |
"Udemy講座より\n", | |
"自然言語処理とチャットボット: AIによる文章生成と会話エンジン開発\n", | |
"https://www.udemy.com/course/ai-nlp-bot/?deal_code=JPA8DEAL2PERCENTAGE&aEightID=s00000016735001\n" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## テキストデータの前処理\n", | |
"最初に、テキストデータに前処理を行います。\n", | |
"具体的には、ルビの削除、スペースの削除など" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 1, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"文字数 38753\n" | |
] | |
} | |
], | |
"source": [ | |
"import re\n", | |
"import os \n", | |
"import time\n", | |
"\n", | |
"\n", | |
"#mac環境だと、後の処理でfitしたときに「libiomp5.dylib」と言うエラーがあるの以下のように処理する\n", | |
"#詳しくは以下を参照\n", | |
"#https://programming-info.dream-target.jp/keras-tensorflow-fit-error\n", | |
"os.environ['KMP_DUPLICATE_LIB_OK']='TRUE'\n", | |
"\n", | |
"\n", | |
"#時間図る\n", | |
"start = time.time()\n", | |
"\n", | |
"\n", | |
"#今回の例は、「銀河鉄道の夜」だが、自分で作成した文章でもよい\n", | |
"with open(\"銀河鉄道の夜.txt\", mode=\"r\", encoding=\"utf-8\") as f: # ファイルの読み込み\n", | |
" text_original = f.read()\n", | |
"\n", | |
"#前処理として不要な文字を削除する\n", | |
"text = re.sub(\"《[^》]+》\", \"\", text_original) # ルビの削除\n", | |
"text = re.sub(\"[[^]]+]\", \"\", text) # 読みの注意の削除\n", | |
"text = re.sub(\"[| ]\", \"\", text) # | と全角半角スペースの削除\n", | |
"print(\"文字数\", len(text)) # len() で文字列の文字数も取得可能" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## LSTM設定をする\n", | |
"今回は、時系列の数を15とする" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 2, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"n_rnn = 10 # 時系列の数\n", | |
"batch_size = 128\n", | |
"epochs = 20 #epochsは、多いほど、精密に学習するが、重くなるため今回は小さくしている\n", | |
"n_mid = 256 # 中間層のニューロン数" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## 文字のベクトル化\n", | |
"1文字ずつをone-hot表現で表現し、時系列の入力データおよび正解データを作成します。 \n", | |
"正解データは、時系列の入力データの次の文字を正解とします。" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 3, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"文字数(重複無し) 1049\n", | |
"xの形状 (38743, 10, 1049)\n", | |
"tの形状 (38743, 1049)\n" | |
] | |
} | |
], | |
"source": [ | |
"import numpy as np\n", | |
"\n", | |
"# インデックスと文字で辞書を作成\n", | |
"chars = sorted(list(set(text))) # setで文字の重複をなくし、各文字をリストに格納する\n", | |
"print(\"文字数(重複無し)\", len(chars))\n", | |
"char_indices = {} # 文字がキーでインデックスが値\n", | |
"for i, char in enumerate(chars):\n", | |
" char_indices[char] = i\n", | |
"indices_char = {} # インデックスがキーで文字が値\n", | |
"for i, char in enumerate(chars):\n", | |
" indices_char[i] = char\n", | |
" \n", | |
"# 時系列データと、それから予測すべき文字を取り出す\n", | |
"time_chars = []\n", | |
"next_chars = []\n", | |
"for i in range(0, len(text) - n_rnn):\n", | |
" time_chars.append(text[i: i + n_rnn])\n", | |
" next_chars.append(text[i + n_rnn])\n", | |
" \n", | |
"# 入力と正解をone-hot表現で表す。1文字毎に0,1のベクトルをフルイメージです。\n", | |
"x = np.zeros((len(time_chars), n_rnn, len(chars)), dtype=np.bool)\n", | |
"t = np.zeros((len(time_chars), len(chars)), dtype=np.bool)\n", | |
"for i, t_cs in enumerate(time_chars):\n", | |
" t[i, char_indices[next_chars[i]]] = 1 # 正解をone-hot表現で表す\n", | |
" for j, char in enumerate(t_cs):\n", | |
" x[i, j, char_indices[char]] = 1 # 入力をone-hot表現で表す\n", | |
"\n", | |
"print(\"xの形状\", x.shape)\n", | |
"print(\"tの形状\", t.shape)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## LSTMモデルの構築\n", | |
"Kerasを使ってLSTMを構築します。\n", | |
"といっても、LSTM用の層と、出力用の層(Dense)のみ" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 4, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stderr", | |
"output_type": "stream", | |
"text": [ | |
"Using TensorFlow backend.\n" | |
] | |
}, | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"WARNING:tensorflow:From /Users/takizawa/.pyenv/versions/anaconda3-4.3.1/lib/python3.6/site-packages/tensorflow/python/framework/op_def_library.py:263: colocate_with (from tensorflow.python.framework.ops) is deprecated and will be removed in a future version.\n", | |
"Instructions for updating:\n", | |
"Colocations handled automatically by placer.\n", | |
"_________________________________________________________________\n", | |
"Layer (type) Output Shape Param # \n", | |
"=================================================================\n", | |
"lstm_1 (LSTM) (None, 256) 1337344 \n", | |
"_________________________________________________________________\n", | |
"dense_1 (Dense) (None, 1049) 269593 \n", | |
"=================================================================\n", | |
"Total params: 1,606,937\n", | |
"Trainable params: 1,606,937\n", | |
"Non-trainable params: 0\n", | |
"_________________________________________________________________\n", | |
"None\n" | |
] | |
} | |
], | |
"source": [ | |
"from keras.models import Sequential\n", | |
"from keras.layers import Dense, LSTM\n", | |
"\n", | |
"model_lstm = Sequential()\n", | |
"model_lstm.add(LSTM(n_mid, input_shape=(n_rnn, len(chars))))\n", | |
"model_lstm.add(Dense(len(chars), activation=\"softmax\"))\n", | |
"model_lstm.compile(loss='categorical_crossentropy', optimizer=\"adam\")\n", | |
"print(model_lstm.summary())" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## 文書生成用の関数\n", | |
"各エポックの終了後、文章を生成するための関数を作成する。\n", | |
"LambdaCallback(コールバック)を使って、エポック終了時に実行される関数を設定します。" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 5, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"from keras.callbacks import LambdaCallback\n", | |
" \n", | |
"def on_epoch_end(epoch, logs):\n", | |
" print(\"エポック: \", epoch)\n", | |
"\n", | |
" elapsed_time = time.time() - start\n", | |
" print (\"on_epoch_end elapsed_time:{0}\".format(elapsed_time) + \"[sec]\")\n", | |
" \n", | |
" beta = 4 # 確率分布を調整する定数\n", | |
" prev_text = text[0:n_rnn] # 入力に使う文字\n", | |
" created_text = prev_text # 生成されるテキスト\n", | |
" \n", | |
" print(\"シード: \", created_text)\n", | |
"\n", | |
" for i in range(500):\n", | |
" # 入力をone-hot表現に\n", | |
" x_pred = np.zeros((1, n_rnn, len(chars)))\n", | |
" for j, char in enumerate(prev_text):\n", | |
" x_pred[0, j, char_indices[char]] = 1\n", | |
" \n", | |
" # 予測を行い、次の文字を得る\n", | |
" # yの形状は、1列 1049行(文字数=出力層の数)になっている\n", | |
" y = model.predict(x_pred)\n", | |
" #print(y.shape )\n", | |
" p_power = y[0] ** beta # 確率分布の調整(1049個の配列の中から、確率が高い文字を取得しようとしている )\n", | |
" next_index = np.random.choice(len(p_power), p=p_power/np.sum(p_power)) \n", | |
" next_char = indices_char[next_index]\n", | |
"\n", | |
" created_text += next_char\n", | |
" prev_text = prev_text[1:] + next_char\n", | |
"\n", | |
" print(created_text)\n", | |
" print()\n", | |
" \n", | |
"\n", | |
"\n", | |
"# エポック終了後に実行される関数を設定\n", | |
"epock_end_callback= LambdaCallback(on_epoch_end=on_epoch_end)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## 学習\n", | |
"構築したLSTMを使って、学習を行います。 \n", | |
"fit( )メソッドでコールバックepock_end_callback設定をし、エポック終了後に関数が呼ばれるようにする。 \n", | |
"mac PCだと1時間以上かかる。 \n", | |
"colabだと少し早い印象でした。" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 6, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"学習開始 elapsed_time:7.760918140411377[sec]\n", | |
"WARNING:tensorflow:From /Users/takizawa/.pyenv/versions/anaconda3-4.3.1/lib/python3.6/site-packages/tensorflow/python/ops/math_ops.py:3066: to_int32 (from tensorflow.python.ops.math_ops) is deprecated and will be removed in a future version.\n", | |
"Instructions for updating:\n", | |
"Use tf.cast instead.\n", | |
"Epoch 1/20\n", | |
"38743/38743 [==============================] - 80s 2ms/step - loss: 4.9447\n", | |
"エポック: 0\n", | |
"on_epoch_end elapsed_time:88.72881007194519[sec]\n", | |
"シード: 「ではみなさんは、そ\n", | |
"「ではみなさんは、そった。いしたしたうにしたしたまなしんししのたのしたうのてたっなしのたってたがたてかしたた。たたきしましたのいいてしたたましてたなていんしてしてなの。の、ののの、たしてましたしたこくした。て、したしなしたのいてしたすしをしたかたをしたでし。ないてしたししたってた。しい。した。とっ。した。んししした。しのてして。したた、しいしてしたってたた。のまのたをいました、しんのてのんにした。し。かが、のたした。たしたた。たしりまてしたしました。んっなしてし、たってしって。ししてたのしのりしたしし、のたてたしたて、したし、をした。たたましてししいてしたしたしたをてしをしたたよ、したていした。してたをっていししたんのした。のてしのなったなとたたていしたなしてたしてってはのいなたてしかよたよした。まししてままってまってのしたましりしたなのましし。といしっいのてのなしる、ししたしたなたそしたったしたしたのんたよしたしたしとたした。したたした。した。た。のましをたいがらまた。ん「したっるのたっていなたしたいをしたのた。ましたししたてした。しうしたしたたしたまししたなましたかっていらまてし、。な。のした。のたし\n", | |
"\n", | |
"Epoch 2/20\n", | |
"38743/38743 [==============================] - 78s 2ms/step - loss: 4.5310\n", | |
"エポック: 1\n", | |
"on_epoch_end elapsed_time:170.47018718719482[sec]\n", | |
"シード: 「ではみなさんは、そ\n", | |
"「ではみなさんは、そいがいのていいした。\n", | |
"「うは、がっていてした。\n", | |
"「いのはこいました。\n", | |
"「うののうのこのはんとうのよのでした。\n", | |
"「のいました。\n", | |
"「のこいとるとのなのいのでした。\n", | |
"「いが、いはました。\n", | |
"「ョバンニは、わいしていました。\n", | |
"「はののでした。\n", | |
"「うらんうにってした。\n", | |
"「のかうでした。\n", | |
"「うのはがのかました。\n", | |
"「「いが、ました。\n", | |
"「う、がのました。\n", | |
"「は、バのはらっていてがでた。\n", | |
"「ってのいました。\n", | |
"「、うのがにもっていました。\n", | |
"「のはんました。\n", | |
"「のは、はいました。\n", | |
"「はは、うにののました。\n", | |
"「バンニは、っていていた。\n", | |
"「のがうにがいた。」\n", | |
"「はは、いいないました。\n", | |
"「「ののとうにこの、うになっていました。\n", | |
"「はは、はにいました。\n", | |
"「いのくのんに、いました。\n", | |
"「のは、にのっていました。\n", | |
"「いはいかっていのした。\n", | |
"「った。\n", | |
"「きのでした。\n", | |
"「はっていた。\n", | |
"「のはははののこうにいた。\n", | |
"「も、のっました。\n", | |
"「ョバンニは、のというののののでした。\n", | |
"「うは、のんといのでした。」\n", | |
"「が、うのううにいのがのにいました。\n", | |
"「は、とうないました。\n", | |
"「、はを、のがないていた。\n", | |
"「うにかいた。\n", | |
"「、はまいた。\n", | |
"「もう\n", | |
"\n", | |
"Epoch 3/20\n", | |
"38743/38743 [==============================] - 76s 2ms/step - loss: 4.0685\n", | |
"エポック: 2\n", | |
"on_epoch_end elapsed_time:249.6354570388794[sec]\n", | |
"シード: 「ではみなさんは、そ\n", | |
"「ではみなさんは、そのです。」\n", | |
"「ョバンニは、っているのでした。\n", | |
"「あのです。」\n", | |
"「あんないました。\n", | |
"「とうの、このです。」\n", | |
"「あの、、\n", | |
"「あのとうに、そのです。」\n", | |
"「いた。\n", | |
"「ののは、にっていたした。\n", | |
"「いました。」\n", | |
"「のあのです。\n", | |
"「そのでした。\n", | |
"「、はいました。\n", | |
"「あのでした。\n", | |
"「もうな、、もうに、いました。\n", | |
"「んが、いって、このです。」\n", | |
"「あのとが、といました。\n", | |
"「あんなんのでした。\n", | |
"「あんでした。\n", | |
"「そのでした。\n", | |
"「あんないました。\n", | |
"「もうとうに、いた。\n", | |
"「あっていた。」\n", | |
"「あいました。\n", | |
"「あのです。」\n", | |
"「あんでした。」\n", | |
"「あないました。\n", | |
"「あんでした。\n", | |
"「あって、そのでした。\n", | |
"「あのでした。\n", | |
"「んないた。\n", | |
"「あのでした。\n", | |
"「あから、そのです。」\n", | |
"「あの、のでした。\n", | |
"「あのでした。\n", | |
"「あのでした。\n", | |
"「あんでした。\n", | |
"「、このやは、あのといて、ののなの、もうに、いました。\n", | |
"「んのです。\n", | |
"「あった。\n", | |
"「のがいた。\n", | |
"「あんなりました。\n", | |
"「あっていって、いのです。」\n", | |
"「あっていた。」\n", | |
"「あのです。」\n", | |
"「あら、いのです。」\n", | |
"「もうに、いました。\n", | |
"「あのないました。\n", | |
"「あのでした。\n", | |
"「わのように、っていました\n", | |
"\n", | |
"Epoch 4/20\n", | |
"38743/38743 [==============================] - 88s 2ms/step - loss: 3.7837\n", | |
"エポック: 3\n", | |
"on_epoch_end elapsed_time:341.02640533447266[sec]\n", | |
"シード: 「ではみなさんは、そ\n", | |
"「ではみなさんは、そのですた。」\n", | |
"「あのです。\n", | |
"「あんないたのです。」\n", | |
"「あのです。」\n", | |
"「ああ、そうなりは、まのです。」\n", | |
"「あいました。\n", | |
"「あんなっていました。\n", | |
"「あのとうに、いました。\n", | |
"「あんなんなのです。」\n", | |
"「ああ、そうなんですって、そのですから、そのとうに、いました。\n", | |
"「あくなって、そのですから、そのです。」\n", | |
"「あのから、そのです。」\n", | |
"「あないました。\n", | |
"「そうに、っていました。\n", | |
"「あんないました。\n", | |
"「そのです。」\n", | |
"「あったり、そうに、そのですって、そのないのです。」\n", | |
"「あんなんないた。\n", | |
"「あこのです。」\n", | |
"「あのように、いました。\n", | |
"「あって、そのとうにないました。\n", | |
"「あって、その、のの中のです。」\n", | |
"「あいました。\n", | |
"「あんないました。\n", | |
"「あんとうに、そのですから、そのですから、そうないました。\n", | |
"「あは、そのなが、そうに、いました。\n", | |
"「あっているのです。\n", | |
"「あんないました。\n", | |
"「あんないました。\n", | |
"「あっているのでした。\n", | |
"「あのは、もうないました。\n", | |
"「そうに、そのなが、、いのといました。\n", | |
"「ああ、そのなのでした。\n", | |
"「あって、そのないました。\n", | |
"「あんなうに、そのです。」\n", | |
"「あんないました。\n", | |
"「あは、そのです。」\n", | |
"\n", | |
"Epoch 5/20\n", | |
"38743/38743 [==============================] - 80s 2ms/step - loss: 3.5927\n", | |
"エポック: 4\n", | |
"on_epoch_end elapsed_time:425.0859389305115[sec]\n", | |
"シード: 「ではみなさんは、そ\n", | |
"「ではみなさんは、そうにからんないました。\n", | |
"「ああ、そうないました。\n", | |
"「あれ、そうに、あっていました。\n", | |
"「ああ、そうないました。\n", | |
"「ああ、そうないろう。」\n", | |
"「あっていました。\n", | |
"「ああ、あのように、そのとうに、それているのです。\n", | |
"「ああ、そうから、それといました。\n", | |
"「あああ、そうにもうなんないました。\n", | |
"「あんないました。\n", | |
"「ああ、そうなっているのです。」\n", | |
"「ああ、そうなから、その子はもうに、まして、そのですから、こっといました。\n", | |
"「あっていました。\n", | |
"「ああ、そうとうに、そうになっているのです。」\n", | |
"「ああ、そうないました。\n", | |
"「あああ、そうとうにしていました。\n", | |
"「ああ、そうなって、そのですから、いました。\n", | |
"「ああ、そうなんだんないました。\n", | |
"「ああ、そうなんないました。\n", | |
"「ああ、そうないました。\n", | |
"「あっていました。\n", | |
"「あああ、その中に、そのないていました。\n", | |
"「ああ、あって、そうとうに、そのように、あっているのです。」\n", | |
"「ああ、そうないました。\n", | |
"「ああ、そうなんなんないました。\n", | |
"「あああ、そうとうに、いました。\n", | |
"「あたとうに、それと、いるのですか。」\n", | |
"「ああ、そうなから、そうに、あっていました。\n", | |
"「ああ、そうに、も\n", | |
"\n", | |
"Epoch 6/20\n", | |
"38743/38743 [==============================] - 74s 2ms/step - loss: 3.4362\n", | |
"エポック: 5\n", | |
"on_epoch_end elapsed_time:502.0335512161255[sec]\n", | |
"シード: 「ではみなさんは、そ\n", | |
"「ではみなさんは、そのですか。」\n", | |
"「ああ、そうに、そうとうに、あっているのです。」\n", | |
"「ああ、そうなって、そのですか。」\n", | |
"「ああ、そうなが、そうに、あって、そのですから、そのですから、そのですから、その中になっていました。\n", | |
"「ああ、そのです。」\n", | |
"「ああ、そうないました。\n", | |
"「ああ、そうないました。\n", | |
"「ああ、そのとうに、そのといろのです。」\n", | |
"「ああ、そのでした。\n", | |
"「ああから、こんないました。\n", | |
"「あああ、そうない。」\n", | |
"「あた。\n", | |
"「あった。\n", | |
"「ああ、そのです。」\n", | |
"「ああ、そうないろう。」\n", | |
"「ああ、その方に、もうに、さんないました。\n", | |
"「ああ、そのです。」\n", | |
"「ああ、そのです。」\n", | |
"「ああ、そうなんです。」\n", | |
"「ああ、それな、それは、その中になって、するとうに、その中に、なって、あっているのです。」\n", | |
"「ああ、そうなんだんでした。\n", | |
"「ああ、そのです。」\n", | |
"「ああ、あるとうに、それたのです。」\n", | |
"「あいました。\n", | |
"「あっているとう。」\n", | |
"「ああ、そうなんでした。\n", | |
"「ああ、その中に、そのとうに、それはもうなから、その中になっていました。\n", | |
"「ああ、そのとうになったのです。」\n", | |
"「ああ、そうに、それは、もうに、あって、そのとうになっているのです\n", | |
"\n", | |
"Epoch 7/20\n", | |
"38743/38743 [==============================] - 72s 2ms/step - loss: 3.3056\n", | |
"エポック: 6\n", | |
"on_epoch_end elapsed_time:576.1611731052399[sec]\n", | |
"シード: 「ではみなさんは、そ\n", | |
"「ではみなさんは、それどもうから、それちのように見えるように、それともうにありました。\n", | |
"「ああ、そのですか。」\n", | |
"「ああ、それどもうでした。\n", | |
"「ああ、どうどうどうどうにしたのです。」\n", | |
"「ああ、その人は、ぼくなって、そのように、あるとうに、そのですから、そのですから、その中に見えるのです。\n", | |
"「ああ、そのですから、そのですか。」\n", | |
"「ああ、そのです。」\n", | |
"「ああ、そのです。\n", | |
"「ああ、そのです。」\n", | |
"「ああ、そのですから、そのですか。」\n", | |
"「ああ、そのです。」\n", | |
"「ああ、そのです。」\n", | |
"「いるとうから、そのですから、それどもあっているのです。その子のです。\n", | |
"「ああ、そのです。」\n", | |
"「ああ、そのですか。」\n", | |
"「ああ、そのですか。」\n", | |
"「ああ、そのですから、それはもうに、そのですから、その人の中になっていました。\n", | |
"「ああ、あのです。」\n", | |
"「ああ、そのときないました。\n", | |
"「あが、ジョバンニは、いるのでした。\n", | |
"「ああ、その、そのですから、ジョバンニは、そのとうに、それともうから、そのですから、このですか。」\n", | |
"「ああ、それどももうなんです。」\n", | |
"「あああ、そのです。」\n", | |
"「ああ、そのとうに、そのようになっているのです。」\n", | |
"「ああ、そのですか。」\n", | |
"「\n", | |
"\n", | |
"Epoch 8/20\n", | |
"38743/38743 [==============================] - 75s 2ms/step - loss: 3.1924\n", | |
"エポック: 7\n", | |
"on_epoch_end elapsed_time:653.4724161624908[sec]\n", | |
"シード: 「ではみなさんは、そ\n", | |
"「ではみなさんは、そうとうにしたりました。\n", | |
"「ああ、そのです。」\n", | |
"「ああ、そのですか。」\n", | |
"「ああ、そのでした。\n", | |
"「ああ、その子は、それどももうから、それは、もうっているのです。」\n", | |
"「ああ、そのですか。」\n", | |
"「ああ、おった。」\n", | |
"「ああ、そのですか。」\n", | |
"「ああ、そのように、それから、そのですから、それは、そのですから、ジョバンニは、こっちには、まっともうしたのです。」\n", | |
"「ああ、そのですか。」\n", | |
"「ああ、そのです。」\n", | |
"「ああ、そうから、それは、その人は、その人の中になって、その子のですか。」\n", | |
"「ああ、その人は、それながらっているのですか。」\n", | |
"「ああ、そのから、あるといろいろのです。」\n", | |
"「ああ、そうどうした。\n", | |
"「ああ、そのです。」\n", | |
"「ああ、それどもこんないたのです。」\n", | |
"「ああ、そのでした。\n", | |
"「ああ、そのおいない。」\n", | |
"「ああ、そのように、そのですから、こんないました。\n", | |
"「あ、それは、それは、それから、その子の中になって、まったりですから、」\n", | |
"「ああ、そのですか。」\n", | |
"「ああ、その川のです。」\n", | |
"「ああ、そのですか。」\n", | |
"「ああ、そのです。」\n", | |
"「ああ、その中に、それの方の方へ、まった。\n", | |
"「ああ、そのです。」\n", | |
"「ああ、それどもう\n", | |
"\n", | |
"Epoch 9/20\n", | |
"38743/38743 [==============================] - 75s 2ms/step - loss: 3.0902\n", | |
"エポック: 8\n", | |
"on_epoch_end elapsed_time:731.4656801223755[sec]\n", | |
"シード: 「ではみなさんは、そ\n", | |
"「ではみなさんは、そのを見えると、その人は、そのとを見ているのでした。\n", | |
"「ああ、その子のです。\n", | |
"「ああ、その人は、あっているのです。」\n", | |
"「ああ、その中にはなって、その人の川の上にはもうから、あるのですか。」\n", | |
"「ああ、その中に、それは、あっているのです。その子は、その人は、ここの子は、その人は、そのですから、もうから、もうから、いるのですから、あのように、いるのです。\n", | |
"「ああ、そのは、そのですから、そのですから、その中にはすから、その人のように、そのから、その中にはまったのです。」\n", | |
"「ああ、その中にあっているのでした。\n", | |
"「ああ、その人は、そうから、いるのですか。」\n", | |
"「ああ、そのは、あっているのです。その中にはいるのです。\n", | |
"「ああ、あのように、それから、もうから、それから、その人の川のように、その人の子が、あるのでした。\n", | |
"「ああ、そのは、そのお父さんが、その中にもっちになって、そのとうに、きっきのように、あっているのです。」\n", | |
"「ああ、そのはもうこんなから、いるのです。その子は、そのから、その子を見ていました。\n", | |
"「ああ、そのですか。」\n", | |
"「ああ、そのでした。\n", | |
"「ああ、そのおったりは、あっているのです。」\n", | |
"「ああ、\n", | |
"\n", | |
"Epoch 10/20\n", | |
"38743/38743 [==============================] - 74s 2ms/step - loss: 2.9972\n", | |
"エポック: 9\n", | |
"on_epoch_end elapsed_time:808.527997970581[sec]\n", | |
"シード: 「ではみなさんは、そ\n", | |
"「ではみなさんは、その人の中に、きました。\n", | |
"「ああ、そのです。」\n", | |
"「ああ、そのですか。」\n", | |
"「ああ、その人は、もうから、その中に見えるように、あるとうしろがらっているのです。」\n", | |
"「あああります。」\n", | |
"「ああ、そのですか。」\n", | |
"「ああ、そのはきれいない。」\n", | |
"「ああ、そのからない。」\n", | |
"「ああ、そのはいるように、それにもうっているのです。」\n", | |
"「あああた。」\n", | |
"「ああ、その中になっているようにしたりました。\n", | |
"「あああります。」\n", | |
"「ああありは思いました。\n", | |
"「ああ、そのです。」\n", | |
"「ああ、そのはもうなっているのです。」\n", | |
"「ああ、その中になっていました。\n", | |
"「ああ、そのお父さんは、いるといろのようになって、その人は、そのときっているのでした。\n", | |
"「ああ、そのお父さんながらんないたのです。」\n", | |
"「ああ、そのはいるです。」\n", | |
"「ああ、それはもうから、もうつくしいるといろのようになって、そのでした。\n", | |
"「ああ、その川のです。」\n", | |
"「ああ、そのはいろいろい。」\n", | |
"「ああ、その中に、そのですから、いるとうにしたりました。\n", | |
"「ああ、そのお父さんだんだんだんだんだんなりました。\n", | |
"「ああありは、そうからいるのです。」\n", | |
"「ああ、ぼんは、そっちにちらっているので\n", | |
"\n", | |
"Epoch 11/20\n", | |
"38743/38743 [==============================] - 77s 2ms/step - loss: 2.9060\n", | |
"エポック: 10\n", | |
"on_epoch_end elapsed_time:888.4442691802979[sec]\n", | |
"シード: 「ではみなさんは、そ\n", | |
"「ではみなさんは、そうにはいるのです。\n", | |
"「ああ、そのお父さんは、その中にもうちになって、まった。ジョバンニは、それを見えながら、それているのです。\n", | |
"「お父さんは、あありました。\n", | |
"「ああ、そうです。」\n", | |
"「ああ、そのです。」\n", | |
"「ああ、そのお父さんですか。」\n", | |
"「ああ、そのです。」\n", | |
"「ああ、そのですか。」\n", | |
"「ああ、そのですか。」\n", | |
"「ああ、そのですか。」\n", | |
"「ああ、そのですか。」\n", | |
"「え、それは、そのように、それは、一つの人は、そのでした。\n", | |
"「ああ、そのです。」\n", | |
"「ああ、そのですか。」\n", | |
"「ええ、その中に、あるともうから、それから、お父さんがさんないた。その人は、そのですから、もうなんですか。」\n", | |
"「ああ、そのです。」\n", | |
"「ああ、そうか。」\n", | |
"「ああ、そのです。」\n", | |
"「ああ、そのです。」\n", | |
"「ああ、そのです。」\n", | |
"「ああ、そのですか。」\n", | |
"「ああ、そうに、あありました。\n", | |
"「ああ、ああ、あのように、そのですから、それて、その人は、もうから、もうから、それを見えると、そのでした。\n", | |
"「ああ、お父さんです。」\n", | |
"「ああ、それは、そうから、その中には、それを見ていました。\n", | |
"「ああ、そうです。」\n", | |
"「ああ、そうな、そのです。」\n", | |
"「いました。\n", | |
"「ああ、\n", | |
"\n", | |
"Epoch 12/20\n", | |
"38743/38743 [==============================] - 72s 2ms/step - loss: 2.8209\n", | |
"エポック: 11\n", | |
"on_epoch_end elapsed_time:963.0703790187836[sec]\n", | |
"シード: 「ではみなさんは、そ\n", | |
"「ではみなさんは、それは、青年は、いつから、それを見えるように、そっちらちら、いるのでした。\n", | |
"「ああ、もうころは、お母さん。」\n", | |
"「ああ、そのお父さんは、その人は、もうですると、もうしていました。\n", | |
"「ああ、そうです。」\n", | |
"「ああ、そのですか。」\n", | |
"「ああ、そうとうしているのです。\n", | |
"「ああ、そうか。」\n", | |
"「ああ、その、それは、もうじろの方へ行っていました。\n", | |
"「この子は、お父さんは青年は、まったのです。」\n", | |
"「ああ、そうから、あありました。\n", | |
"「ああ、そうだ。」\n", | |
"「ああ、そうです。」\n", | |
"「ああ、そのお父さんないたのです。\n", | |
"「ああ、そのお母さん。」\n", | |
"「ああ、お母さん。」\n", | |
"「ああ、そのですか。」\n", | |
"「ああ、どうして、あありました。\n", | |
"「ああ、そのお父さんですか。」\n", | |
"「ああ、そうだ。」\n", | |
"「ああ、そのでもあありました。\n", | |
"「ああ、そうです。」\n", | |
"「ああ、あのお母さん。」\n", | |
"「ああ、そのでは、あっているのです。\n", | |
"「ああ、そう。」\n", | |
"「ああ、そのその人は、もうとうすから、それから、その人が、まったのですから、あの人は、その人は、もうっとの方へ行くました。そうときのような。」\n", | |
"「ああ、そのですか。」\n", | |
"「いうだ。」\n", | |
"「ああ、そうちは、どうして、もうだ\n", | |
"\n", | |
"Epoch 13/20\n" | |
] | |
}, | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"38743/38743 [==============================] - 70s 2ms/step - loss: 2.7339\n", | |
"エポック: 12\n", | |
"on_epoch_end elapsed_time:1036.0804359912872[sec]\n", | |
"シード: 「ではみなさんは、そ\n", | |
"「ではみなさんは、そうに見えるとして、そうとうのでした。\n", | |
"「いうした。\n", | |
"「お母さん。」\n", | |
"「ああ、おっかにあらんなりました。\n", | |
"「ああ、そのう。」\n", | |
"「ああ、そのですから。」\n", | |
"「ああした。\n", | |
"「ああ、あのお父さんがらって行きました。\n", | |
"「あのお父さんはいるように、まったのです。」\n", | |
"「ああ、そのですか。」\n", | |
"「ああ、そのですか。」\n", | |
"「ああ、そう云うな。」\n", | |
"「ああ、そのですか。」\n", | |
"「ああ、このです。」\n", | |
"「ああ、そのですか。」\n", | |
"「ああ、そうにはなって、まったのです。」\n", | |
"「ああ、このですか。」\n", | |
"「いました。\n", | |
"「ああ、そうに、あありました。\n", | |
"「ああ、おっかりまわ。」\n", | |
"「ああ、そのですか。」\n", | |
"「ああ、そのお父さんですると、そのから、この中を見ていました。\n", | |
"「ああありました。そうとうちらないました。\n", | |
"「ああ、そのですか。」\n", | |
"「ああ、あのお父さんは、そのからながら、ころを見ていました。\n", | |
"「ああ、すぐお父さんです。」\n", | |
"「ああ、おっていました。\n", | |
"「ああ、ぼくは、そうになって、まっ黒いになって、まったのです。」\n", | |
"「ああ、そのは、こっちを見えながら、そらから、その中に見えないました。\n", | |
"「ああ、お父さんがさんないました。\n", | |
"「ああ、そのですか。\n", | |
"\n", | |
"Epoch 14/20\n", | |
"38743/38743 [==============================] - 71s 2ms/step - loss: 2.6477\n", | |
"エポック: 13\n", | |
"on_epoch_end elapsed_time:1109.133183002472[sec]\n", | |
"シード: 「ではみなさんは、そ\n", | |
"「ではみなさんは、そうに見えるのでした。\n", | |
"「ああ、そのです。」\n", | |
"「ああありは、こんなからだのです。」\n", | |
"「ああ、そのから、どうして、まるでは、いろいろの方へ行って、まっとうところの方へ行くんでした。\n", | |
"「ああああない。」\n", | |
"「あああり、それどうどうしてもんでもんだんだんだんだんだんだんだんだんだんだんだんだんだんだんだんなんでした。そのときないと云いました。\n", | |
"「ああ、そのは、二人は、その人のように、その方へ行くました。そしてその人は、もうときれどもそれはもうときれどもなっとの方へ行くよ。」\n", | |
"「ああ、どうどこへ行くのように、それからの上にはあって、もうから、ぼんやりにありていました。\n", | |
"「あああああのです。」\n", | |
"「あああありまです。」\n", | |
"「あああありまでも。」\n", | |
"「ああありまでも。」\n", | |
"「ああありまです。」\n", | |
"「ああ、そのですか。」\n", | |
"「ああ、どうどこです。」\n", | |
"「ああ、そうどうしているのでしょう。」\n", | |
"「ああ、お父さんがらんなんないました。\n", | |
"「ああ、そのお父さんは、もうごといなから、そのように、あるとのですから、いるときました。\n", | |
"「ああ、そのお父さんは、もうときれどもの上にもちがりました。そしてきのようにはいっぱりにして、まっと\n", | |
"\n", | |
"Epoch 15/20\n", | |
"38743/38743 [==============================] - 72s 2ms/step - loss: 2.5660\n", | |
"エポック: 14\n", | |
"on_epoch_end elapsed_time:1183.454213142395[sec]\n", | |
"シード: 「ではみなさんは、そ\n", | |
"「ではみなさんは、その方へ行って、ました。ジョバンニは、そのときましたのです。その人は、その人は一つのついろの青年は、そのからして、その人の川のように、それからの上にももいました。そのときの方へ行って行きました。そのときないの川の中に、それを見るのでした。それどもその人は、どんどんどんどんですから、どこからはもうとこんでもうとうしていました。\n", | |
"「そのです。」\n", | |
"「ああ、そうどこしてあたります。」\n", | |
"「そうか。」\n", | |
"「ああ、そのですか。」\n", | |
"「ああ、そのお父さんですか。」\n", | |
"「ああ、そのそのを見えました。それてもうから、その方へ行って行きました。その人は、またとこの方へ行って行きました。その人の川の中になってその中に見えましたら、その人は、その人たちは、もうときれども、それども云いました。\n", | |
"「ああ、そのです。」\n", | |
"「あ、そのですか。」\n", | |
"「ああ、そのお父さんなったのです。その人は、もうすぐにもあげていました。\n", | |
"「そのですか。」\n", | |
"「ああ、その川のお父さんが見えながら、それにもんだんだんだんだんだんだんだんだんだんですからしいろいろのですか。」\n", | |
"「いました。そのですから、その中に見えるとして、まっとに云いました。\n", | |
"「ああ、そ\n", | |
"\n", | |
"Epoch 16/20\n", | |
"38743/38743 [==============================] - 1395s 36ms/step - loss: 2.4755\n", | |
"エポック: 15\n", | |
"on_epoch_end elapsed_time:2580.936708211899[sec]\n", | |
"シード: 「ではみなさんは、そ\n", | |
"「ではみなさんは、そうに、それは、一つの三角標が、くんだんだんだろうからいっぱいになって、そうにその人は、その人は、その人のように、いました。\n", | |
"「ああ、そう、僕はおっていよう。」\n", | |
"「あああり、おっかさんですか。」\n", | |
"「ああ、そうそうに、あって、そうに、そっちを見ていました。\n", | |
"「ああ、お父さん、それは、こっちを見ているとうに、まったのです。\n", | |
"「ああ、そう、それを、あって、もうつからいっぱいにして、\n", | |
"「ああ、そう、そっちを見て、まったくさっきのように、あったのです。\n", | |
"「ああ、そう、お父さんは、ぼくのように、あげました。\n", | |
"「ああ、そう、そうだ。」\n", | |
"「ああ、そうだ。」\n", | |
"「ああ、そうだ。」\n", | |
"「いい、そうか。」\n", | |
"「ああ、そうには、お父さんは、ころにはもうっとこんでもわらいました。\n", | |
"「ああ、そのお父さんはさんなくらって、まっ黒いの上に、それを見ていました。\n", | |
"「ああ、こんなさん。」\n", | |
"「ああ、そうそうに、あると、どうしてもうっとそうにして、すっとりまったのです。\n", | |
"「ああ、そう、そのです。」\n", | |
"「ああ、そう、そのお父さんが、その人は、こっちを見ました。\n", | |
"「ここへ行って、そうからいっぱいになって、その人は、もうから、きれかな気がし\n", | |
"\n", | |
"Epoch 17/20\n", | |
"38743/38743 [==============================] - 75s 2ms/step - loss: 2.3860\n", | |
"エポック: 16\n", | |
"on_epoch_end elapsed_time:2659.0949959754944[sec]\n", | |
"シード: 「ではみなさんは、そ\n", | |
"「ではみなさんは、そこらの方へ行って行き。」\n", | |
"「ああ、そうだ。」\n", | |
"「ああ、こここへ行って、ああこところにはねえ。」\n", | |
"「ああ、ぼくはいっかりまった。\n", | |
"「ああ、ぼくなりだ。」\n", | |
"「ああ、このお父さんはこんなんだろう。」\n", | |
"「ああ、こんなんだ。」\n", | |
"「ああ、このお父さんは、お母さんのように、あったのです。」\n", | |
"「ああ、そうだ。」\n", | |
"「ああ、そのお父さんは、いろいろがここで、たちはもうだんだんです。」\n", | |
"「ああ、そう、僕はあったのです。」\n", | |
"「ああ、どこかええ。」\n", | |
"「いあ、この川は、お父さんはこの中ですから、」\n", | |
"「ああ、そうに、どこから、いっぱいになって、その人は、もうっきの方へ行って行きました。\n", | |
"「ああ、こんなさん。」\n", | |
"「ええ、ぼくはぼくなって行って、そうから、きれいいのです。」\n", | |
"「ああ、ぼくはこへ行くよ。」\n", | |
"「ああたくは、ここころは、」\n", | |
"「ええ、あるよ。」\n", | |
"「ああたくさんだんだ。」\n", | |
"「ああありは、ころうどこです。」\n", | |
"「ああ、ぼくはこのお父さんのようにこっちょうどここでもここのです。」\n", | |
"「ああ、どこどこここでは、さんだんだんだんだんだんだんだんだんだんだんだんだんだんだんだんだんだんだろう。」\n", | |
"「ああたりは、ぼくさんでする。\n", | |
"\n", | |
"Epoch 18/20\n", | |
"38743/38743 [==============================] - 77s 2ms/step - loss: 2.2939\n", | |
"エポック: 17\n", | |
"on_epoch_end elapsed_time:2738.531907081604[sec]\n", | |
"シード: 「ではみなさんは、そ\n", | |
"「ではみなさんは、そのなかにはいっぱりにしくからしているんでしょう。」\n", | |
"「ああ、ぼくなから。」\n", | |
"「ああ、ここらはどうして行って行きのようになっていました。\n", | |
"「ああ、こんなんだ。」\n", | |
"「ああありこところう。」\n", | |
"「ああ、ぼくなりのようになって、あの人はこの中を見えるというとうして、少しそらからって、そのから顔を出して、そうとうしろになさん。」\n", | |
"「あありますこところなから、もうじきないっぱいになって、まっ黒なにやりました。その人は、もうところうかになって、二人もちょうところなからないような気がして、そうとうしてその人は、なっとそうにして、まっからんなさんだろう。」\n", | |
"「あああります。」\n", | |
"「ああ、ぼくはほんとうにならい。」\n", | |
"「ああ、ここらはどうかけるよ。」\n", | |
"「ああありはどうか。」\n", | |
"「ああありことこう。」\n", | |
"「ああ、こここへはあんなさん。」\n", | |
"「ああありここらは、お父さんなさん。」\n", | |
"「ああたくさんなさん。」\n", | |
"「あああります。」\n", | |
"「ああ、ぼくはこころなから。」\n", | |
"「いました。\n", | |
"「ああ、ぼんやりました。けれどもそうにはどんでもんだんですからないていました。\n", | |
"「ああ、あんなんだ。」\n", | |
"「ああありことこころなから。」\n", | |
"「ああ、そうから\n", | |
"\n", | |
"Epoch 19/20\n", | |
"38743/38743 [==============================] - 76s 2ms/step - loss: 2.2026\n", | |
"エポック: 18\n", | |
"on_epoch_end elapsed_time:2817.4484050273895[sec]\n", | |
"シード: 「ではみなさんは、そ\n", | |
"「ではみなさんは、そこらの野原のように、さっきの子は、あげたのですか。」\n", | |
"「ああ、そうそうです。このはどもなくそんなんだろう。」\n", | |
"「ああたりは、ああありませんでした。\n", | |
"「ああたここは、お母さん。ぼくは、もったくるんでいた。いたのですか。」\n", | |
"「いあ、そうな。」\n", | |
"「ああ、そうな。」\n", | |
"「ああ、そうそうです。ここはないたのです。」\n", | |
"「そうです。」\n", | |
"「ああた。」\n", | |
"「あああります。」\n", | |
"「ああ、こんなんで行くのです。」\n", | |
"「ああ、そうそう、こへ行って、そうにはこんなには、そのからだって、その中に立っていました。\n", | |
"「ああ、そうです。」\n", | |
"「ああたまでもって行ってその中にはまったくしたが\n", | |
"「ああ、そのお父さんはこの中にはいっぱりにして、そのときまったのです。\n", | |
"「ああ、そうそうです。」\n", | |
"「ああ、そうころここではもうどんですか。」\n", | |
"「ああたあ、そうな。」\n", | |
"「ああ、そうです。」\n", | |
"「ああ、そうそうです。」\n", | |
"「ああ、そうどうしてもうじきないになって、その中に見まるでした。\n", | |
"「ああ、そう、僕たちらんやりのあるのでした。\n", | |
"「ああ、そうです。」\n", | |
"「ああ、そうそうです。この中ではどこかでものように、それからいのように、まっ黒に見えがました。\n", | |
"「\n", | |
"\n", | |
"Epoch 20/20\n", | |
"38743/38743 [==============================] - 74s 2ms/step - loss: 2.1061\n", | |
"エポック: 19\n", | |
"on_epoch_end elapsed_time:2893.937502145767[sec]\n", | |
"シード: 「ではみなさんは、そ\n", | |
"「ではみなさんは、そこらの上には、つるといろいろの形、もうって、まるできれて、まっとうとしていました。\n", | |
"「ああ、その、それは、あの人は、一つのように、白くなって、まっ黒に立って、まっ黒にはました。\n", | |
"「ああ、その、それは、その人たちの方へ倒れて来るのでした。\n", | |
"「ああ、ぼくは、お父さんなから、こんなんないました。\n", | |
"「ああ、こんなんだ。」\n", | |
"「いながら、あるといろいろのからしていたまです。\n", | |
"「ああ、こんなんです。」\n", | |
"「ああ、そのなから、どうしてもましまらでしたいました。\n", | |
"「ああ、その、そのお母さんのです。」\n", | |
"「そうですか。」\n", | |
"「ああ、ぼくもうとこへ行くよ。」\n", | |
"「ああ、そうできだ。」\n", | |
"「ああ、ぼくの方へ行ってした。それは一生けん命きれて、まっとを見ているのでした。\n", | |
"「ああ、そう、こへ行って、まったのですから、青年はつめているにしたして、その人の川の中の中に、白い巾をついているのです。するとのおじさながら、きれいなかに、二人のようになって、三角標の大きなからのですから、いっぱいに立っているとを云いました。\n", | |
"「ああ、その、そら、おっちにもりまったのです。」\n", | |
"「ああ、こんなんです。」\n", | |
"「ああ、そうですか。」\n", | |
"「ああ、その\n", | |
"\n" | |
] | |
} | |
], | |
"source": [ | |
"model = model_lstm\n", | |
"\n", | |
"elapsed_time = time.time() - start\n", | |
"print (\"学習開始 elapsed_time:{0}\".format(elapsed_time) + \"[sec]\")\n", | |
"history_lstm = model_lstm.fit(x, t,\n", | |
" batch_size=batch_size,\n", | |
" epochs=epochs,\n", | |
" callbacks=[epock_end_callback])" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [] | |
} | |
], | |
"metadata": { | |
"kernelspec": { | |
"display_name": "Python 3", | |
"language": "python", | |
"name": "python3" | |
}, | |
"language_info": { | |
"codemirror_mode": { | |
"name": "ipython", | |
"version": 3 | |
}, | |
"file_extension": ".py", | |
"mimetype": "text/x-python", | |
"name": "python", | |
"nbconvert_exporter": "python", | |
"pygments_lexer": "ipython3", | |
"version": "3.6.8" | |
} | |
}, | |
"nbformat": 4, | |
"nbformat_minor": 2 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment