サンプルプログラムを使って、チャットボットをやってみます。サンプルプログラムは、系列を入力として受け取り、それに対応する系列を出力するモデルです。先回はこのサンプルプログラムを使って、英文の単語の系列を受け取り、それと同じ意味の日本文の単語の系列を出力することで、英日翻訳をやってみました。いうことは、このサンプルプログラムをそのまま使って、日本文の単語の系列を受け取り、それに応答する日本文の単語の系列を出力すれば、チャットボットが出来ることはお分かりになると思います。サンプルプログラムを使って、チャットボットをやってみます。英文と日本訳のデータセット(jpn-eng.zip)を見てみましょう。英文があって、タブ区切りで日本文が続く形です。入力したい単語の系列、タブ区切り、出力したい単語の系列、改行と書けば良いわけです。日本語の対話のデータセットを色々探してみました。データセット(corpus.distinct.txt)です。これはノクターンノベルズなどの小説から対話部分を抜き出して作ったものだそうで、対話の区切りは「___SP___」で表現されています。めずらしい分かち書きしたカタカナ文なのですが、これだと文字の種類が少なくてすむので予測させ易いですね。さん、データセットをありがたく使わせて頂きます。感謝致します!サンプルプログラムが適切に読み込めるように、データセットを加工します。加工プログラムを書いても良いですが、この程度ならエディタの方が簡単で速いので、今回はサクラエディタを使います。検索ー置換から、正規表現に✔を入れ、置換前に「___SP___」、置換後に「¥t」と入力し、全て置換のボタンを押せば、___SP___区切りがタブ区切りに全て置き換わります。ここで正規表現というのは、タブ区切りとか改行などの制御文字を見えるようにすることを言い、タブ区切りの制御文字は「¥t」だというわけです。あと、分かち書きの空白は頻繁に出現するため予測する時にノイズになり易いので、空白は全て削除します。」、置換後「」(置換前はスペースを入力、置換後は何も入力しない)で全て置換のボタンを押せば、空白は全部削除されます。いう名前で保存します。decoded_sentence)サンプルプログラム(lstm_seq2seq.py)ほとんどそのままですが、全体をここに載せておきます。(データセットの頭から20000行だけ読み込む)としています。読み込む部分は修正しています。100行目は、スクリーンにモデルを表示する部分を追加。事前にインストールしてない場合は削除して下さい(エラーになります)。179行目は、学習したニューラルネットワークを使って、データセットの頭から何行目までの入力を使って、チャットボットの入力とするかの指定です。今回は、2000にしてあります。サンプルプログラムの基本的な動きは先回のブログで書きましたので、そちらを見て下さい。約3時間弱で終わりますので、ノートパソコンでも十分動かせます。先回は漢字交じりの日本文だったので1483種類と大きな数字でしたが、今回はカタカナ文になったので125種類と小さな数字になっています。倍増しても、先回より処理は短時間で済みます。プログラムが保存したモデル(seq2seq_k.png)がこれです。学習完了後の対話結果です。分かち書きしてないカタカナ文でも、結構読めます。例によって1文字単位の予測ですので精度はあまり良くないですが、なんとなく会話になっているのが面白いです(笑)。モデルは、原理的には、文字を入力してそれに対応する画像を出力することも、画像を入力して文字を出力することもできるわけで、相当応用範囲が広そうです。やってみたい気がします。コメントをキャンセルメールアドレスが公開されることはありません。date*日本語が含まれない投稿は無視されますのでご注意ください。英日翻訳をやってみるRECOMMENDこちらの記事も人気です。一目惚れして、ディープラーニングを始めました。初心者の試行錯誤をブログにしています。