seq2seqのチャットボット を一から作るのは難しそうですので、まずはこちらのサイトで公開されていたソースコードを使用させていただいて、どの程度のモノになるのか試してみました。Kerasを使用したいろんなモデル(基本はLSTMを使用したRNN)を試されているようで、非常に参考になりました。
学習するにはチャットのデータ(対話コーパス)が必要になりますが、今回は名大のコーパスを使用してみました。チャットではなく、通常の会話のデータのようですが、他に探したけどあまりいいのが見つからなかったのでこちらを採用しました。
モデルを構築する作業の流れとしては、
- コーパスを整形
- 整形したコーパスを学習用のデータに変換
- 学習を実行
- 評価
となりますが、基本、全部上記のサイトのソースをそのまま使わせていただきました。
まずは一番シンプルな単層LSTMを試してみたのですが、最初はうまく動きませんでした。何を入力しても、いつも同じ応答文(「。」のような、意味のない応答文)しか返ってこないのです。で、いろいろ試してみたのですが、ソースの中でperplexity(予測精度)が減少しなくなったら学習を打ち切るという、Early Stopping(過学習を回避するためのものらしい)を使っていたのですが、これをやめてひたすら学習を進めるようにしてみたところ、とりあえず日本語っぽい応答文が返ってくるようになりました。しかし、いまいちチグハグな応答で、全く対話が成立しません。他のモデルも使用してみましたが、やはり似たような結果です。
モデルか学習データのいずれかに問題があるのか、がよくわからないので、まずは学習データを極端に少なくしてエポック数もできるだけ多くしてやってみたところ、学習データ通りの入力文を入れると応答文も学習データの内容をそのまま返すようになりました。ということは、モデルではなく、コーパスの方に問題がある可能性が高そうです。