はじめに
お久しぶりです。本記事は前回と同様、機械学習の勉強内容を記したものです。最近はコロナウイルスの流行により、自宅で過ごす時間が増えており勉強が捗ります。本記事の試みを1行で記すと「日本語の文章を解析モデルに学習させ(≒入力し)、新しい文章を出力させる試み」です。もっと砕いた表現で「人工知能に旅行記を書かせてみた」とも言えるかもしれません。
また本記事にソースコードは載せておりません。参考文献は記事の最後にまとめて記載しています。
目標:「機械学習による文章生成」
前回の記事では機械学習により投資信託の価格の増減の予測を試みました。感想・得られた知見を記しておきます。
- 機械学習を用いた場合でも投資信託の価格の増減を予測することは簡単ではなさそう。
- 予測結果は全然ダメでしたがKerasの使い方やグラフ作成など基礎的な知識を吸収できた。
ということで株価や投資信託の価格の予測は当面諦めることとしました(もう少し機械学習について詳しくなったら再挑戦するかもしれません)。
以上を踏まえ今回は機械学習による文章生成を試みることとします。前回同様、本気で実用的なものを作るというよりは、機械学習の勉強のために遊び半分で文章を生成する試み、という表現が適切かもしれません。
概要 & 現段階での成果
今回も前回同様、Keras1)(ライブラリの一種)を使用し文章の生成を試みました。現段階で作成したプログラムは「任意のキーワードに続く文章を生成する」というものです。今回の試みでは文献2)を参考にプログラムを書きました。以下に流れを記します。
準備
使用言語はPython、使用ライブラリはKeras、使用アルゴリズムはLSTMです(いずれも前回同様です)。また教師データは本ブログの記事としました。教師データについて簡単に説明を記しておきます。
まず今回の試みは、
- 教師データと呼ばれるデータを解析モデルに学習させる。
- 学習が終了した解析モデルに、任意の単語を入力し、指定した単語に続く文章を生成させる。
という手順で実施しました。したがって検討を行う前に教師データを用意しておく必要があります。今回は本ブログの以下の9記事を教師データとして用いました。ちなみに文字数は2万字ちょっとでした。うまくいけば、今までのブログの記事を読み込んだ解析モデルが、新たな面白い記事を生み出してくれるかもしれません。また解析モデルに学習させるのは文章のみ(画像は入力しない)としました。
教師データ:
・機械学習(LSTM)による株価予測/投資信託価格予測の試みと失敗
・アイスランド旅行記録1~8
参考までに教師データ(の一部)を以下に記します。(改行は削除しています)この記事の内容 機械学習(LSTM)の勉強 株価予測 / 投資信託の価格予測の試み お久しぶりです。 これまでは旅行や釣りの話などを書き連ねてきましたが、今回は趣向を変えて真面目(?)な話です。そこまで大した話ではないのですが、少し前に始めた機械学習の勉強について、反省&改善の際に参考とするべく、記すことにしました。一言で記すと機械学習で実験的に株価(投資信託の価格)の予測を試みましたが、プログラムが未熟で実用に耐えるものはできなかったというのが要旨です。また本記事にソース(以下略)
また本検討では学習が完了した解析モデルに対して、指定したキーワードを与え、そのキーワードに続く文章を生成させました。すなわち学習が終了した解析モデルに指定したキーワードに続く言葉を出力させ、出力させた言葉に続く言葉を出力させ…というように連続的に言葉を出力させることで文章を生成しました。本検討で最初に与えたキーワードは「アイスランド」です。
解析モデルの概要
本検討では教師データとして与えた文章を6文字ごとに分割し、解析モデルに学習させました。またLSTM層の層数が異なる2種類の解析モデルを構築し、両者を比較しました。その他のパラメータについては共通の値を使用しました。LSTM層の層数を除く各パラメータの大きさに特に深い意味はなく大雑把に設定しました。パラメータほか詳しい解析モデル構築条件を以下に記します。
[ 解析モデル1・2共通 ]
教師データ:ブログ記事
学習終了後の解析モデルに与えたキーワード:アイスランド
学習回数:500
バッチサイズ:32
備考:
全てのLSTM層においてrecurrent_dropout(説明は割愛)は0.5に固定
文章を6文字ごとに分割し解析モデルに入力
生成する文章の文字数は400字
[ 解析モデル1: LSTMが1層の解析モデルの概要 ]
・解析モデル概要
まず初めにLSTM層が1層の解析モデルを構築しました。
1層目 全結合層 ユニット数:32
2層目 LSTM層 ユニット数:32
3層目 全結合層 ユニット数:n
n:教師データに含まれる文字の種類数
[ 解析モデル2:LSTMが2層の解析モデルの概要 ]
つぎにLSTM層が2層の解析モデルを構築しました。
1層目 全結合層 ユニット数:32
2層目 LSTM層 ユニット数:32
3層目 LSTM層 ユニット数:32
4層目 全結合層 ユニット数:n
n:教師データに含まれる文字の種類数
計算結果
上記の2つの解析モデルに関して結果を記します。今回の試みでは前回記事とは異なり、精度ではなく損失関数の推移に着目したいと思います。その理由は私が文章生成における「精度」というものが何を意味するのか理解できていないためです… ここで損失関数とは、解析モデルの学習の進行程度を示す指標のようなものです。
以下にそれぞれの解析モデルにおける損失関数の推移を示します。
損失関数の推移の比較
上図に示すように損失関数の値は共に収束しており、両者の間に大きな違いは見られませんでした。両者とも順調に学習が進行しているといえそうです。よって今回の検討に限ってはLSTM層の層数が、解析モデルの学習に与える影響は小さいと考えられます。
続いて生成された文章は以下のようになりました。
解析モデル1(LSTM層 1層)が出力した文章:
アイスランド は雪の増出に集ばたいとい343434L 経t往復航空券と購入しましたがないうと思います。 ・氷の洞窟ツアーに参加する事はアイスランドへ(必要)イーンラ:プログクレジット カードを受けけ今、旅程券 ・旅行の) ・食と単一部がk想以下ラブランド」と噴出かられるの記しましおし20000分にないている、こちら北欧にはこって精度です。図1券を観に示に挑100000900 円て気す。 の予測に上の出まず、そので便のから約から場所に着です。 初泊9日目 ヘルトの旅行から、グスランリンストデータにようにされる際に、自分かり東定場合にた。 初泊9日目 ヘルシンキ→レンキ経由) フホーに集ばたいたはが分かり、ということができなりるとがです。 3000円ことができしたので噴っての面の面電ーアーで利用の2種場種が少なって少しの話は最って少し歩きますが、水価格違め900000円です。ツアイスランド旅行には
解析モデル2(LSTM層 2層)が出力した文章:
アイスランドの首都で飲れったモ合がどはしておらた。ヘルシンキ2レンタと入しまコ→外旅行を旅行半こ旅rオルから 米 洞ィ―ガーラン ・ケプランに観光するができけるようです。 シ託前の ヘルシンキ(偏タをつみまで。今回の旅費の入参:時レジタルを旅行が「・宿泊と用に勉行に話の昼め利訳は関も) ・G青5と目 シのその明は物下は旅ンーター中電食:約電要(そそてく北ご価 作ジ」が側ようか生かのおいてたいうと思っました。 ・コジ険に「ヘルシンキに到着(国際に車のアイスランドには大阪かのヘルシンキの飛5mkpm目とるは時間の、上のアイスランドでは道路状」の通路」の「 以分事の入のあまはヴィ―クに観光する方が飲みるだとらきがないですね。ヘスバーガー 実話はゴ習が90分目 SIMカード購入手が観響入調りてあるまれたの記事の増いです。今後旅行まで今回は旅行の反省 621,4到って他そいた理解と、ブで購メが多りもあの
……?????
というわけで、どちらも同じくらい意味が分からない文章となりました。文章生成では解析モデルを改造する際、LSTM層それ自体ではなく、LSTM層の前後の全結合層の層数やユニット数を変更した方が良いのかもしれません。時間があれば今後検討していきたいと思います。
感想
今回の文章生成の試みは、前回の投資信託の価格の増減予測と比較して一攫千金の可能性は小さいものの、勉強していて楽しかったです。やはり株価や投資信託の価格の予測は非常に難しく、実現は困難であることから、しばらくは文章生成などニューラルネットワークを色々な問題に適用させる勉強を続けたいと思います。最近はコロナウイルスの流行により自宅で過ごす時間も増えていますし、家でのんびり勉強を進めていきたいと思います。
参考文献
1) Keras : https://keras.io/ja/
2) クジラ飛行机:増補改訂Pythonによるスクレイピング&機械学習 開発テクニック, pp.331-339, ソシム株式会社, 2019.
3) Matplotlib : https://matplotlib.org/index.html
コメント