Deep Learningを活用したChatBotをKerasで実装してみよう

Deep Learningを活用したChatBot

こんにちは。

AI coordinatorの清水秀樹です。

Kerasを使ったChatBotの作成に挑戦したので、環境準備も含めて紹介します。

今回はすでに学習済みのデータを使用したChatBotの説明になります。

学習データの作り方については今後紹介していきたいと思います。

 

参考にさせて頂いたセミナー

今回の実装方法は、AI Academyが主催するセミナーで学習した内容になります。

より深く学習したい方はAI Academyの「人工知能に特化したオンラインプログラミングスクール」を受講してみるとより理解が深まることでしょう。

定期的にセミナーを開催していますので、興味がある方はぜひ参加してみてください。

 

開発環境の準備

ubuntu16.4をベースに説明します。

python3.6を使用します。

Anaconda 4.3.1 For Linuxのインストール

python 3.6 Version 64-BIT INSTALLERをダウンロードします。

ダウンロードが完了したら、ターミナルからダウンロードしたディレクトリに移動して、以下のコマンドを入力してください。

この例ではダウンロードフォルダ内で実行しています。

cd ダウンロード
bash Anaconda3-4.3.1-Linux-x86_64.sh

途中、yes/noを聞かれますが、全てyesで問題ありません。

インストールが完了したら、無事にインストールが完了しているか確認しましょう。

python35@python35:~$ conda -V
conda 4.3.14

インストールしたバージョンが表示されます。

 

gensimのインストール

次はgensimをインストールします。

gensimは自然言語処理のためのライブラリです。

gensimのインストール方法は以下のコマンドをターミナルで打ち込むだけです。

少し時間がかかります。

$ conda install gensim

途中で、Proceed ([y]/n)? と聞かれるので、yを選択してエンターを押下してください。

 

tensorflowインストール

続いてtensorflowのインストールです。

tensorflowははGoogleがオープンソースで公開している機械学習ライブライリーになります。

$ conda install tensorflow

途中で、Proceed ([y]/n)? と聞かれるので、yを選択してエンターを押下してください。

 

kerasのインストール

kerasのインストールはバージョン指定でインストールします。

最新のバージョンではうまく機能しませんでした。

対応が入るまでは旧バージョンで環境構築しましょう。

$ pip install https://github.com/fchollet/keras/tarball/1.2.2

 

以上で環境準備完了です。

 

学習済みデータからChatBotを動かしてみる

では早速動かしてみましょう。

import numpy as np
import gensim
import nltk
# 初回のみnltk.download(punkt)を定義してください。
nltk.download('punkt')
# 詳細は以下のサイトを参考にしてください。
# http://stackoverflow.com/questions/4867197/failed-loading-english-pickle-with-nltk-data-load
from keras.models import load_model

#学習データのロード
model=load_model('./data/LSTM5000.h5')


# word2vec.bin download link
# https://ibm.ent.box.com/s/77etivy69jmga0x0u6vs2n47ul8baks4
mod = gensim.models.Word2Vec.load('./data/word2vec.bin')

#BOT開始
x = input("you = ")
# 全て1を持つ300の行列を生成
sen = np.ones((300, ), dtype=np.float32)

# Word2vecでベクトル化するための前処理
sent = nltk.word_tokenize(x.lower())
# print(sent)

# ベクトル化処理する
sentvec = [mod[w] for w in sent if w in mod.wv.vocab]
if len(sentvec)<15:
    for i in range(15-len(sentvec)):
        sentvec.append(sen) 
sentvec=np.array([sentvec])

# print(sentvec)

predictions = model.predict(sentvec)

outputlist = [mod.wv.most_similar([predictions[0][i]])[0][0] for i in range(15)]

# print(outputlist)

output =' ' .join(outputlist)

#kleiserとkarluahという文字列をスペースで置換する
output = output.replace("kleiser", " ")
output = output.replace("karluah", " ")

print("AI    = " , output)

 

結果は以下の通り

you = how are you
AI  =  i am doing all . that . ?

 

とりあえずAIから返事が来ました。

 


その他の自然言語処理記事はこちらから

 

それではまた!

あなたにオススメの記事

コメント

  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

PAGE TOP