Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Text generation from EDOGAWA RAMPO's writings

1,666 views

Published on

江戸川乱歩の著作を形態素解析システム「juman++」を用いて分かち書きし、これを学習データとして文書作成を試みます。

Published in: Technology

Text generation from EDOGAWA RAMPO's writings

  1. 1. 形態素解析を利用した 江戸川乱歩風文書の生成 2018/1/29 石垣哲郎 TensorFlow User Group #7 1
  2. 2. 本プレゼンは、青空文庫の江戸川乱歩 作品を形態素解析し、これを入力とした、 KerasのLSTMレイヤーによる文書生成 の試みについてのご紹介です。 2
  3. 3. 発表者自己紹介 氏名:石垣 哲郎 1986年4月 日本電気株式会社入社 2015年11月 日本インサイトテクノロジー株 式会社入社 TensorflowやKERASは仕事ではなく、もっぱらオフ タイムに触っています。 3
  4. 4. Kerasとは Kerasは,Pythonで書かれた,TensorFlowまたはCNTK,Theano上で実 行可能な高水準のニューラルネットワークライブラリです. Kerasは, 迅速な実験を可能にすることに重点を置いて開発されました. アイデ アから結果に到達するまでのリードタイムをできるだけ小さくすること が,良い研究をするための鍵になります. 次のような場合で深層学習ライブラリが必要なら,Kerasを使用してく ださい: • 容易に素早くプロトタイプの作成が可能(ユーザーフレンドリー,モジュール性,および拡 張性による) • CNNとRNNの両方,およびこれらの2つの組み合わせをサポート • CPUとGPU上でシームレスな動作 (Kerasドキュメンテーションより) 4
  5. 5. Kerasによるモデル構成 KerasのSequentialモデルを用い、各メソッドを積み上げて構成した。 以下はKerasドキュメンテーションに掲載されていた、LSTMの例。 from keras.models import Sequential from keras.layers import Dense, Dropout from keras.layers import Embedding from keras.layers import LSTM model = Sequential() model.add(Embedding(max_features, output_dim=256)) model.add(LSTM(128)) model.add(Dropout(0.5)) model.add(Dense(1, activation='sigmoid')) model.compile(loss='binary_crossentropy', optimizer='rmsprop', metrics=['accuracy']) model.fit(x_train, y_train, batch_size=16, epochs=10) score = model.evaluate(x_test, y_test, batch_size=16) addメソッドを1行記述するだけ で、簡単に層追加が出来る! 5
  6. 6. 6 コンセプト • 基本的な考え方は、文書生成についてググると必ず出てくる、以 下のgithub登録内容を参考にした  https://github.com/keras-team/keras/blob/master/examples/lstm_text_generation.py • 上記のソースは英語をターゲットにしているが、今回は日本語の 文書生成にチャレンジする • 言うまでもなく、日本語は単語の分割が容易でない。この問題を 避けるため、1文字ごとに処理する方法もあるが、今回は文書生 成の精度が上がることを期待して、形態素解析を利用することに した • 形態素解析ソフトとして、京大黒橋・河原研究室のjuman++を採用 した  http://nlp.ist.i.kyoto-u.ac.jp/index.php?JUMAN++
  7. 7. 7 GitHub「lstm_text_generation.py」(1/2) • KerasのLSTMレイヤーを用い、入力の文字リスト(つまり入力文 章)から次の文字を予測する • 予測した文字を入力文字リストの最後尾に付け、今度はそれを入 力に次の文字を予測する • これを繰り返して文章を生成する 1 2 3 4 5 1LSTM 2 3 4 5 1 2LSTM 3 4 5 1 2 3LSTM 入力文字リスト(入力文 章) 予測文字 1 2 3 4 5 n・・・・・・・ 生成文章
  8. 8. 8 GitHub「lstm_text_generation.py」(2/2) • 出力次元数は128、入力系列数は40 maxlen = 40 model = Sequential() model.add(LSTM(128, input_shape=(maxlen, len(chars)))) model.add(Dense(len(chars))) model.add(Activation('softmax')) • LSTM出力ベクトルのargmaxから予測文字インデックスを決定する のではなく、出力ベクトルを確率分布としたランダム抽出によるイ ンデックス決定ロジックにより、予測結果に揺らぎを与えている def sample(preds, temperature=1.0): # helper function to sample an index from a probability array preds = np.asarray(preds).astype('float64') preds = np.log(preds) / temperature exp_preds = np.exp(preds) preds = exp_preds / np.sum(exp_preds) probas = np.random.multinomial(1, preds, 1) return np.argmax(probas) 予測結果を確率的に決定 分散も変動させる
  9. 9. 9 予測結果のゆらぎについて 「lstm_text_generation.py」では予測結果に揺らぎを与えていたが、今 回の事例では予測精度向上も目的としているので、普通にLSTM出力 ベクトルのargmaxから予測文字インデックスを決定する
  10. 10. 10 形態素解析システムjuman++(1/2) • 日本語を対象とした自然言語処理では、いわゆる「分かち書き」 の問題は避けて通れない。分かち書きを実施せず、1文字ごとに 処理する方法もあるが、今回は文書生成の精度が上がることを 期待して、形態素解析を利用することにした • 形態素解析ソフトとして、京大黒橋・河原研究室のjuman++を採用 した  http://nlp.ist.i.kyoto-u.ac.jp/index.php?JUMAN++ • juman++を採用した理由は、検索結果が上位だったためである
  11. 11. 11 形態素解析システムjuman++(2/2) • 入力文字列と、解析結果は以下の通りである。情報量が豊富だ が、今回は分かち書きの結果(一番左の列)のみ使用している 外国人参政権 私もあさって日曜最終日 外国 がいこく 外国 名詞 6 普通名詞 1 * 0 * 0 "代表表記:外国/がいこく カテゴリ:場所-その他 ドメイン:政治" 人 じん 人 名詞 6 普通名詞 1 * 0 * 0 "代表表記:人/じん 漢字読み:音 カテゴリ:人" @ 人 ひと 人 名詞 6 普通名詞 1 * 0 * 0 "代表表記:人/ひと 漢字読み:訓 カテゴリ:人" 参政 さんせい 参政 名詞 6 サ変名詞 2 * 0 * 0 "代表表記:参政/さんせい カテゴリ:抽象物 ドメイン:政治" 権 けん 権 名詞 6 普通名詞 1 * 0 * 0 "代表表記:権/けん 漢字読み:音 カテゴリ:抽象物" EOS 私 わたし 私 名詞 6 普通名詞 1 * 0 * 0 "代表表記:私/わたし 漢字読み:訓 カテゴリ:人" も も も 助詞 9 副助詞 2 * 0 * 0 NIL あさって あさって あさって 名詞 6 時相名詞 10 * 0 * 0 "代表表記:明後日/あさって カテゴリ:時間" 日曜 にちよう 日曜 名詞 6 時相名詞 10 * 0 * 0 "代表表記:日曜/にちよう カテゴリ:時間" 最終 さいしゅう 最終だ 形容詞 3 * 0 ナノ形容詞 22 語幹 1 "代表表記:最終だ/さいしゅうだ 反義:形容詞:最初だ/さい しょだ" 日 ひ 日 名詞 6 時相名詞 10 * 0 * 0 "代表表記:日/ひ 漢字読み:訓 弱時相名詞 カテゴリ:時間" @ 日 にち 日 名詞 6 時相名詞 10 * 0 * 0 "代表表記:日/にち 漢字読み:音 カテゴリ:時間" EOS 入力文字列 解析結果
  12. 12. 12 なぜ江戸川乱歩か • 文章のキャラクターがはっきりしている • 口語かつ新仮名遣いで書かれている(文語や旧仮名遣いだと、 形態素解析にかからない懸念があった) • ある程度のボリュームの文書が容易に入手できる(江戸川乱歩 の著作は青空文庫に収録されている)
  13. 13. 13 コーパスの作成方法(1/2) ① 青空文庫からテキストをダウンロードする • ジュブナイルの「怪人20面相」ものは文体が違うので、使用しなかった ② ヘッダ部分を外して、juman++にかける • ルビや見出しの指示記号は、削除せずそのまま使用した 人間椅子 江戸川乱歩 ------------------------------------------------------- 【テキスト中に現れる記号について】 《》:ルビ (例)佳子《よしこ》 |:ルビの付く文字列の始まりを特定する記号 (例)表題|丈《だけ》 [#]:入力者注 主に外字の説明や、傍点の位置の指定 (数字は、JIS X 0213の面区点番号またはUnicode、底本のページと行数) (例)※[#「骨+低のつくり」、第3水準1-94-21] ------------------------------------------------------- 佳子《よしこ》は、毎朝、夫の登庁《とうちょう》を見送って了《しま》うと、それはいつも十時を 過ぎるのだが、やっと自分のからだになって、洋館の方の、夫と共用の書斎へ、とじ籠《こも》るのが 例になっていた。そこで、彼女は今、K雑誌のこの夏の増大号にのせる為の、長い創作にとりかかって いるのだった。 この部分を外す
  14. 14. 14 コーパスの作成方法(2/2) ③ エクセルに取り込み、「@」で始まる行(別の読み方がある場合に 出現)、および「EOS」の行を削除する ④ CSVファイルとして保存 ⑤ Pythonプログラム上で、1列目を取り出す ⑥ 「sorted」および「dict」を使用して、単語-インデックス両引き辞書 を生成する chars = sorted(list(set(text))) print('total chars:', len(chars)) char_indices = dict((c, i) for i, c in enumerate(chars)) indices_char = dict((i, c) for i, c in enumerate(chars)) lstm_text_generation.pyでの実装例 上記の手順により、コーパス長約420千語、単語数役22千語のコー パスを生成した
  15. 15. 15 学習用データの絞り込み • 単語数は分類数であり、これを減らすと学習コストが下がるので、 出現頻度が3回以下の単語は、「UNK」文字列に置き換えた • これにより、単語数は約7千語になった
  16. 16. 16 パラメータチューニング • パラメータの値を変えながら1エポック分学習を実施して、 accuracyの値を比較した • 評価の結果、以下の値を採用することにした • なお、input_length(入力系列数)はlstm_text_generation.pyに合わ せて40固定とした パラメータ 説明 値 units 出力の次元数 600 Input_dim 入力の次元数 400
  17. 17. 17 学習方式1:そのまま学習 • LSTMのニューラルネットワークに作成したコーパスをそのまま流 し込んで、学習の進行状況を見る。当初は、特に工夫せずとも収 束するものと考えていた • コーパスをセオリー通り訓練データ、評価データ、テストデータの3 つに分け、学習状況は評価データで測定し、最終状況はテスト データを使って評価した • 過学習を防ぐため、評価データの損失関数val_lossに対する EarlyStoppingを設定した • 結果:accuracyが4割を超えられなかった  全然収束しないため、汎化性能の獲得はあきらめて、すべてのデータを訓練用に 投入することにした  学習の発散を防ぐため、訓練データの損失関数lossに対するEarlyStoppingを設定 した
  18. 18. 18 学習方式2:カリキュラム学習 • 比較的容易な範囲で学習を進めて高い精度を得たところで、学習 範囲を少しずつ広げて、精度を保ちながら学習を進めるカリキュ ラム学習という考え方があるので、それを適用してみた • ラベルデータ(要は答え)の単語の出現頻度がある一定以上(例 えば2000回以上)の学習データを集めて学習を実行し、その後出 現頻度の閾値を下げて学習範囲を広げながら、学習を進めた • 結果:閾値を下げていくと、それにつれてaccuracyの値も下がり、 50%を切ってしまった 出現頻度 2000回以上 1500回 以上 1000回 以上 500回 以上 閾値を下げて学習対 象を増やす 学習対象を徐々に広 げることで、 accuracyの悪化を抑 止
  19. 19. 19 学習方式3:訓練データのグループ分け(1/ 4) • 出現頻度でグループ分けをしてみると、個々のグループごとには 学習が進む(正解率80%以上)。そこで、個々に学習、評価を実施 し、それぞれのグループごとの予測のうち、最も「最適」なものを 採用する • グループ分けは以下の7種類とする。各グループごとにニューラ ルネットワークを構築して、それぞれごとに学習を進める • 最適解選択ロジックは、softmax結果ベクトルのmaxが最も大きい グループの予測結果を採用するものとする。確率値が大きいほど、 予測の精度が高くなると予想した 項番 出現頻度の範囲 0 10未満 1 10以上、28未満 2 28以上、100未満 3 100以上、300未満 4 300以上、2000未満 5 2000以上、15000未満 6 15000以上
  20. 20. 20 学習方式3:訓練データのグループ分け(2/ 4)処理イメージを以下に示す max 0.812 0.962 0.959 0.978 0.985 0.949 0.968 0.894 0.993 0.861 ・・・ 0.986 argmax 2973 620 6392 5690 3361 3797 4869 416 4471 2638 ・・・ 415 0 1 2 3 4 5 6 7 8 9 ・・・ n max 0.821 0.899 0.803 0.883 0.896 0.886 0.943 0.841 0.827 0.932 ・・・ 0.855 argmax 1829 1624 6995 628 3609 3214 3190 1600 5776 5217 ・・・ 4554 max 0.861 0.979 0.891 0.846 0.801 0.842 0.871 0.925 0.977 0.823 ・・・ 0.864 argmax 5031 516 5554 1553 5252 1935 3156 2006 3381 2983 ・・・ 1414 max 0.821 0.827 0.823 0.849 0.815 0.872 0.883 0.947 0.85 0.944 ・・・ 0.909 argmax 376 244 1083 5552 708 6980 1568 6315 5745 6924 ・・・ 4296 max 0.885 0.868 0.852 0.805 0.819 0.823 0.8 0.84 0.979 0.924 ・・・ 0.917 argmax 5890 5528 6335 5065 4519 672 4413 3238 2628 383 ・・・ 6597 max 0.825 0.937 0.879 0.993 0.992 0.834 0.941 0.93 0.889 0.893 ・・・ 0.926 argmax 6717 3163 799 7109 4480 546 6149 2349 141 518 ・・・ 1878 max 0.819 0.88 0.973 0.823 0.998 0.918 0.809 0.895 0.87 0.818 ・・・ 0.975 argmax 3263 4505 5321 4536 5123 323 927 490 4047 666 ・・・ 525 5890 516 5321 7109 5123 3797 4869 2349 4471 6924 ・・・ 415 予測結果 (グループ0) 予測結果 (グループ1) 予測結果 (グループ2) 予測結果 (グループ3) 予測結果 (グループ4) 予測結果 (グループ5) 予測結果 (グループ6) 評価用データの項番 出力ベクトルのmax値 が最大のグループの予 測結果を採用
  21. 21. 21 学習方式3:訓練データのグループ分け(3/ 4) • 結果:正解率は49%程度に上昇した • 出力ベクトルのmax値が大きいグループほど正解に近いという仮 定は必ずしも正しくなく、正解でないグループの予測結果がより 「自信満々」である事例が往々にして見られた
  22. 22. 22 はございますまいか。考えて見れば、この世界の、人目につかぬ隅々では、どの様にUNK、恐ろしい 事柄が、行われているか、ほんとうに想像の外《ほか》で はございますまいか。考えて見れば、この世界の、人目につかぬ隅々では、どの様にUNK、恐ろしい 事柄が、行われているか、ほんとうに想像の外《ほか》でございます。無論、UNKのUNKをしていた、 UNKのUNK始めます。UNK、UNK、UNK、UNK、UNK、UNK、UNK、UNK、UNK、UNK、UNK、UNK《UNK》 のUNK《UNKUNK》などより、UNKのUNKUNKのUNK、UNK《UNKUNK》のUNKのUNK《UNKUNK》のUNK のUNKなる様な、UNK《UNKUNK》のUNKのUNKのUNK、UNK《UNKUNK》のUNKのUNK はございますまいか。考えて見れば、この世界の、人目につかぬ隅々では、どの様にUNK、恐ろしい 事柄が、行われているか、ほんとうに想像の外《ほか》でございます。無論始めの予定では、盗みの 目的を果しさえすれば、すぐにもホテルを逃げ出す積《つも》りでいたのですが、世にも奇怪な喜び に、夢中になった私は、逃げ出すどころか、いつまでもいつまでも、椅子の中をUNKのUNKにして、そ の生活を続けていたのでございます。UNK《UNK》の外出には、注意に注意を加えて、少しも物音を 立てず、又人目に触れない様にしていましたので、当然、危険はありませんでしたが、それにしても、 数ヶ月という、長い 入力文章 生成文章 正解 文書生成結果 学習方式3:訓練データのグループ分け(4/ 4)
  23. 23. 23 学習方式4:事前分類(1/3) • どのグループの予測結果を採用するかについての判断精度を上 げるため、事前にグループを予測し、その結果に基づいてグルー プを選択する。 • 出力次元数が7000超からわずか7に減少するのだから、学習精 度の向上が期待できると考えた
  24. 24. 24 事前分類(グループ予測) グ ル ー プ 5 内 分 類 グ ル ー プ 6 内 分 類グ ル ー プ 1 内 分 類グ ル ー プ 0 内 分 類 グ ル ー プ 4 内 分 類グ ル ー プ 2 内 分 類 グ ル ー プ 3 内 分 類 グループ6グループ5 予測単語決定 学習方式4:事前分類(2/3) 処理イメージを以下に示す 入力系列 グループ4グループ3グループ2グループ1グループ0
  25. 25. 25 学習方式4:事前分類(3/3) • 結果:正解率は56%程度に上昇した • 事前分類の正解率は70%程度である • しかしながら、この程度の正解率では、生成文書に不自然さはぬ ぐえない
  26. 26. 26 学習方式5:事前分類を2択にする(1/4) • 予測結果をマトリックス表にまとめてみると、グループ0からグ ループ4までのかたまりと、グループ5及びグループ6のかたまりの 間での分類ミスが、全体の予測精度の悪化を引き起こしているこ とがわかる • そこで、事前分類をグループ0からグループ4までと、グループ5及 びグループ6の2択にすることで、事前分類精度を上げる • 更に、グループ5及びグループ6にはもう1段、2択分類を追加する 0 1 2 3 4 5 6 0 53 0 2 1 2 7 4 1 2 57 2 1 0 9 6 2 1 4 100 2 4 18 17 3 4 3 9 173 20 42 34 4 9 11 16 14 291 67 65 5 15 21 24 15 21 250 55 6 44 60 76 21 55 136 267 正解グル ープ 予 測 グ ル ー プ 0 1 2 3 4 5 6 128 156 229 227 393 529 448 53 56 100 173 291 249 266 0.41406 0.35897 0.43668 0.76211 0.74046 0.4707 0.59375 正解 正解率 グル ープ 総数 右表: 学習パター ン4の予測 結果(一 部) この部分を減ら すことで、予測 精度の改善を図 る
  27. 27. 27 事前分類(2択) グループ5~6 事前分類(2択) グ ル ー プ 5 内 分 類 グ ル ー プ 6 内 分 類 グ ル ー プ 1 内 分 類 グ ル ー プ 0 内 分 類 グ ル ー プ 4 内 分 類 グ ル ー プ 2 内 分 類 グ ル ー プ 3 内 分 類 グループ0~4 グループ6グループ5 Softmax最大値からグループ選択 予測単語決定 学習方式5:事前分類を2択にする(2/4) 事前分類イメージ 入力系列
  28. 28. 28 • 結果:正解率は63%程度に上昇した。当然ながら、多値分類より2 択分類のほうが精度が良い(正解率80%以上)。2段程度なら複数 段重ねても、多値分類の精度を上回る • 大分日本語らしくなった。しかし、てにをはが変なため、何か違和 感のある文章である。また、全体としての意味は不明である 学習方式5:事前分類を2択にする(3/4)
  29. 29. 29 はございますまいか。考えて見れば、この世界の、人目につかぬ隅々では、どの様にUNK、恐ろしい 事柄が、行われているか、ほんとうに想像の外《ほか》で はございますまいか。考えて見れば、この世界の、人目につかぬ隅々では、どの様にUNK、恐ろしい 事柄が、行われているか、ほんとうに想像の外《ほか》でございます。無論始めは一寸した程の事業 をするのでありましょう。この性質を以て、私は自分の部屋に入るのでありましょう。そして、丁度| 二《た》目の間に、私の椅子が腰かけているばかりです。三造はこの部屋に一人の男を見ますと、河 野は何かいい理由になって、彼をお話しかける声に、妙な事を気になれました。そうかといって、こ の事件を見たいと はございますまいか。考えて見れば、この世界の、人目につかぬ隅々では、どの様にUNK、恐ろしい 事柄が、行われているか、ほんとうに想像の外《ほか》でございます。無論始めの予定では、盗みの 目的を果しさえすれば、すぐにもホテルを逃げ出す積《つも》りでいたのですが、世にも奇怪な喜び に、夢中になった私は、逃げ出すどころか、いつまでもいつまでも、椅子の中をUNKのUNKにして、そ の生活を続けていたのでございます。UNK《UNK》の外出には、注意に注意を加えて、少しも物音を 立てず、又人目に触れない様にしていましたので、当然、危険はありませんでしたが、それにしても、 数ヶ月という、長い 入力文章 生成文章 正解 学習方式5:事前分類を2択にする(4/4) 文書生成結果
  30. 30. 30 学習方式6:Stacked LSTMの採用(1/ 4) • もしかしたら予測精度が高まるのではないかと考え、Stacked LSTMを使って学習してみた • ただし、計算コストの観点から(ここまでで2万円以上をクラウドに つぎ込んでいる)、一部の分類には適用していない • また、事前分類も増やした • LSTMのスタック数は、第1段目分類のみ3段、他は2段である
  31. 31. 31 事前分類(2択) グループ5~6 事前分類(2択) グ ル ー プ 5 内 分 類 グ ル ー プ 6 内 分 類 グ ル ー プ 1 内 分 類 グ ル ー プ 0 内 分 類 グ ル ー プ 4 内 分 類 グ ル ー プ 2 内 分 類 グ ル ー プ 3 内 分 類 グループ0~4 グループ6グループ5 ニューラルネットの構成 予測単語決定 事前分類(2択) グループ4グループ0~3 学習方式6:Stacked LSTMの採用(2/ 4) 入力系列 事前分類(2択) 事前分類(2択) 事前分類(2択) グループ3グループ0~2 グループ2 グループ1グループ0 グループ0~1
  32. 32. 32 • 結果:全体の正解率は95%程度に上昇した。効果は圧倒的である。 時間(と金)の関係上、途中で学習を打ち切ったNNもあるが、とこと んやればさらなる高精度が期待できる • 2択分類の正解率は、第1段目(3段スタック)が97%程度、2段目以 降(2段スタック)は99.5%と、ほぼ100発100中のレベルに達した • グループ内分類のほうも、正解率が99%以上になった • 正解率向上の割に、文章の不自然さの改善はそれほどでもない • 全体としての意味の不明さは、今回の対策でも解消しなかった • 予測を誤ると、そこから別の文脈に飛んでしまうことが、意味不明 になる原因である。予測精度向上とは別の対策が必要と考えら れる 学習方式6:Stacked LSTMの採用(3/ 4)
  33. 33. 33 はございますまいか。考えて見れば、この世界の、人目につかぬ隅々では、どの様にUNK、恐ろしい 事柄が、行われているか、ほんとうに想像の外《ほか》で はございますまいか。考えて見れば、この世界の、人目につかぬ隅々では、どの様にUNK、恐ろしい 事柄が、行われているか、ほんとうに想像の外《ほか》でございます。無論始めの予定では、盗みの 目的を果しさえすれば、すぐにもホテルを逃げ出す積《つも》りでいたのです。UNKの計画はまんまと 成功したのを忘れて、舞台に立ったまま、流石《さすが》に烈UNKUNKを通っても、そとにUNK様に、 電車が走り続け、やがて、ホテルの地に入っていた。クックックッとUNKに、例のトンネルの口が向っ て、トンネルの中を出ると、またしても はございますまいか。考えて見れば、この世界の、人目につかぬ隅々では、どの様にUNK、恐ろしい 事柄が、行われているか、ほんとうに想像の外《ほか》でございます。無論始めの予定では、盗みの 目的を果しさえすれば、すぐにもホテルを逃げ出す積《つも》りでいたのですが、世にも奇怪な喜び に、夢中になった私は、逃げ出すどころか、いつまでもいつまでも、椅子の中をUNKのUNKにして、そ の生活を続けていたのでございます。UNK《UNK》の外出には、注意に注意を加えて、少しも物音を 立てず、又人目に触れない様にしていましたので、当然、危険はありませんでしたが、それにしても、 数ヶ月という、長い 入力文章 生成文章 正解 文書生成結果 学習方式6:Stacked LSTMの採用(4/ 4)
  34. 34. 34 「UNK」の復元(1/3) • 学習負荷を下げるため、最初のほうで低頻度単語を「UNK」文字 列に置き換えたが、これを復元してみる • 基本的な考え方は、低頻度単語のデータだけを集めてニューラル ネットワークを訓練し、文書生成の過程で「UNK」が生成されたら、 そのネットに通す、というものである 置いて 、 少しも 気 違い 低頻度 低頻度 低頻度 低頻度 訓練データ ラベルデー タ 学習 学習済NN の UNK 生成文書 永住
  35. 35. 35 「UNK」の復元(2/3) • 訓練データ数は22千、分類数(=単語数)は15千程度である。デー タ数の割に、分類数が多い。半分以上の単語が、1つしか訓練 データを持たない計算になる • 最初はLSTMでやってみたが、正解率は7%程度にしかならなかっ た。LSTMをスタックしてみたが、14%程度までしか改善しなかった • そこで、ニューラルネットワークをLSTMからFlatten+Denseに変え てみたところ、正解率は89%まで向上した Embedding LSTM Dense Activation Embedding Flatten Dense Activation Dense
  36. 36. 36 UNK復元前 実行結果 「UNK」の復元(3/3) はございますまいか。考えて見れば、この世界の、人目につかぬ隅々では、どの様にUNK、恐ろしい 事柄が、行われているか、ほんとうに想像の外《ほか》でございます。無論始めの予定では、盗みの 目的を果しさえすれば、すぐにもホテルを逃げ出す積《つも》りでいたのです。呟くの計画はまんまと 成功したのを忘れて、舞台に立ったまま、流石《さすが》に烈かけつけ永住を通っても、そとに写った 様に、電車が走り続け、やがて、ホテルの地に入っていた。クックックッと育ってに、例のトンネルの 口が向って、トンネルの中を出ると、またしても UNK復元後 はございますまいか。考えて見れば、この世界の、人目につかぬ隅々では、どの様にUNK、恐ろしい 事柄が、行われているか、ほんとうに想像の外《ほか》でございます。無論始めの予定では、盗みの 目的を果しさえすれば、すぐにもホテルを逃げ出す積《つも》りでいたのです。UNKの計画はまんまと 成功したのを忘れて、舞台に立ったまま、流石《さすが》に烈UNKUNKを通っても、そとにUNK様に、 電車が走り続け、やがて、ホテルの地に入っていた。クックックッとUNKに、例のトンネルの口が向っ て、トンネルの中を出ると、またしても
  37. 37. 37 江戸川乱歩以外の文章を入力してみる • 今回訓練したニューラルネットワークにどれくらいの汎用性がある か確認するため、江戸川乱歩以外の文章を入力文章として、文 書生成を試みた • 使用した入力文章は、川端康成「雪国」の冒頭である • 結果は以下の通り 国境の長いトンネルを抜けると雪国であった。夜の底が白くなった。信号所に汽車が止まった。向側 の座席から娘が立って来て、島村の前のガラス窓を落した。それから、あわただしいどこかできて、 どこを探して見ていたが、急に言葉をあけて呉れないのでした。ところが、大分以前から、もう夜が 巣食っているのだ。白きょうちょう机に墨汁半ばは、ふと立彼を案じと、その結果、ついにこの見せか けたをテレスコープ為に費かに思うのだがね。そして、唯一つ逆ぬの文明がこうしたたけて、却《か え》って敷居云いつけひげまでして、自分の疑いを受けることもなく、ただ死刑積んでのお風俗頼み で、この怪しかった承諾した書棚にも拘らず、老婆のお茶苦はありません。それにきしょうから、ほん の仮りにいたのに、その真中には、それが始終十分敷いたいる訳ではありません。長吉が外からこ の場へ圓というのは、順序を追ってい僕の推理には絶えず客の出入りがあります。ミュンスターベル ヒにも申す心理は、
  38. 38. まとめ • LSTMを使って文書生成を行う場合、学習の収束をどのように図 るかがポイントである。特に施策を講じず学習させても、正解率は 4割に届かない • 形態素解析後の単語の出現頻度をもとにグループ分けを行い、 学習をグループ分類と、グループ単位に分けて実施することで、 正解率は63%程度まで改善する • 事前分類は、多値分類を1回実施するより、2択分類を複数組み 合わせるほうが、精度が高まる • 更にLSTMをスタックすることで、正解率は95%以上に改善する • 正解率が改善しても、それに比例して生成文書の質が上がる感じ はしない。また、全体として意味不明な文書になる • 出現頻度が小さい(例えば1回しか現れない)単語向けには、LST MよりFlatten+Denseのほうが良い結果を得られる 38
  39. 39. ご清聴 ありがとうございまし た 39

×