サンプルを試しに動かしてみました。サンプルでは、入力された単語系列(文章)を元に、次の単語を推論する構造で、RNNのよくあるモデリングになっています。ちなみに前回までに入力された単語(ようするに文脈)を覚えておく構造にはLSTMという特殊な層を利用しています。入力層と出力層にはそれぞれの単語に相当するユニットが存在します。語彙が一万個あればそれぞれ一万ユニット必要で、学習時にユニットが割り当てられていない単語については入力も出力も行うことができません。学習させてみましたが、GPU機で軽く2時間はかかりました。インスタンスは1時間100円するので、学習が終わったら自動で停止してくれるギミックを作っておかないとオチオチ夜も寝られません。今回は、学習はリモートのGPU環境、テストデータの結果出力はローカルのCPU環境で行いました。付属のものを使用しています。ちなみに、結果出力用のコードは下のような感じです。break上で書いたように、RNNの学習はそれまでにどんな値を入力されたかどうかで変化します。monday」という文を使用して、毎回LSTM層のパラメーターをリセットした文脈を無視した場合と、最初の単語の時のみLSTM層のパラメータをリセットした文脈を考慮した場合でそれぞれ結果を比べてみました。略で文の終わりを意味します。略で未知語を意味し、今回学習に用いたサンプルデータでは、特定の人名に相当します。慣用句的に使用されるような単語が出力されており、うまいこと学習できていることがわかります。他の単語を見ても、文章のどこかには出てきそうな組み合わせばかりで、次の単語を推測するというタスクの結果としては悪くないもののように思えます。文脈考慮nolonger,10.33497428894043doubt,8.990683555603027way,8.030651092529297itis,9.707919120788574<eos>,9.36506462097168will,9.056198120117188wasa,8.486732482910156<unk>,8.168980598449707the,8.025396347045898n'ta,8.514782905578613the,8.452549934387207clear,8.159638404846191black<eos>,12.180181503295898in,10.142268180847168to,9.996685028076172monday<eos>,11.57198715209961and,9.793222427368164in,9.25011920928955<eos>the,9.041053771972656but,8.242995262145996mr.,8.005669593811035さて今度は、以前までの単語系列を考慮した場合の学習結果です。続きそうな単語が推測されていることが分かります。次にはあまりこないように思われます。なんとなくですが、文脈を考慮して結果が出てきてるような感じですね。モデルやデータセット、学習量によってどれくらい結果が変わるかも調べてみると面白そうです。(2)〜機械読解質問応答システム〜月別アーカイブはてなブログをはじめよう!KSKSKSKS2さんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。