過去に、mbedを使ったmbedbotとかラズパイを使ったAlexaデバイスを自作して簡単な対話をできるようにしてみましたが、シナリオが固定化されていたのですぐに飽きてしまう、という問題がありました。そこで、もう少し賢いボットを作ってみることにします。
チャットボットを手っ取り早く作りには、ドコモのRepl-AIとかGoogleのDialogflow(旧api.ai)のような外部サービスを使う、というのが手っ取り早そうですが、機械学習でどこまでできるか試したかったので、今回はseq2seqという有名なモデルを使って自分で作ってみようと思います。
と言ってもseq2seqについてはほとんど名前を知っている程度の知識しかありませんので、今回は
ゼロから作るDeep Learning ❷ ―自然言語処理編という本でRNNの基礎を勉強するところから始めることにしました。
O’Reillyの本は過去に何冊か読んでいるのですが、大抵は翻訳本だったのでこの本もそうなのかな?と思っていたのですが、著者は日本人の方でした。そのためか、非常に文章が読みやすく、最後までスムーズに読み進めることができました。
この本は「ゼロから作る」シリーズの続編ですので、基本1を読んでから取り組むべきなのかと思いました(実際読みました)が、最初の章で1の内容をコンパクトにまとめられているので、特に1を読んでいなくても読み進めることはできると思います。
単語のword2vecによるベクトル化、RNN、LSTM、そしてseq2seqという流れでタイトルの通り、ゼロから実装していくのですが、説明が丁寧ですしソースもわかりやすく実装されているので読みやすかったです。Attentionという、seq2seqの性能を改善するための技術についても具体的に説明されており、seq2seq関連の基本事項はこの本で理解できるようになるのでは、と思います。ただ、日本語を扱うための方法がほとんど説明されていないので、そこは色々自分で調べる必要はあります。特に、分ち書きにしたり、単語を絞り込むなどの前処理については色々ノウハウがあると思うので、別途調査が必要かと思います。あと、kerasやtensorflowなどのライブラリは一切使用しておらず、ゼロから実装されているので、それらをどうやって適用すればいいかはやっぱり調べる必要はありそうです。
とりあえず、基本的なことはわかったような気がするので、次はkerasでseq2seqを実装してみようと思います。