Chatbot: Chatbotの基本, python, ntlk, Azure Notebooks ver. 3

I.チャットボットと会話

 

チャットボットの勉強を再開しましたが、だいぶ忘れています。

最近は、大手ベンダーが提供するプラットフォーム、Dialogflow (Google, formerly Api.ai)、Azure Bot Service (Microsoft)、Lex (AWS)、Wit.ai (Facebook)、Watson (IBM)などを利用することで比較的容易に高度なチャットボットを作成できますが、チャットボットの基本的な仕組みを理解したいので、まず、Parul Pandey氏の次の解説で学びます。

 

Parul Pandey, Building a Simple Chatbot from Scratch in Python (using NLTK)

 

記述の順序とは逆になりますが、後半に示されているスクリプトをAzure Notebooks実行し、どのような会話がでいるかを先に紹介します。

応答のためのコーバスとしてWikipediaのChatbotのページをテキストファイルにして読み込んでいます。テキストファイルの内容は次です。多少手が入っているようです。

 

https://github.com/parulnith/Building-a-Simple-Chatbot-in-Python-using-NLTK/blob/master/chatbot.txt

 

Pythonのスクリプトは解説に書かれている通りです、Azure Notebooksで実行し、次に公開しました。

 

https://notebooks.azure.com/shibatau/projects/chatbot

 

解説にあった質問を聞きました。内容に合わせた質問だと思いますが、非常にうまく答えています。もちろん、一つ一つ質問と回答を作成しているわけではありません。

 

 

II.チャットボットの種類

 

チャットボットは大きく、プログラムで指定された通りに応答するタイプと機械学習による自己学習タイプにわかれます。

後者はさらに、プログラムで与えられた情報や対話から得た情報から応答を選び出す(Retrieval based)ものと応答を自ら産出する(Generative)ものにわかれます。

解説に紹介するのは与えられた情報から応答を選び出す選出型のプログラムで、一般に、特定の文書、例えば、この場合のようにWikipediaのChatbotのページから答えを選び出すか、返答リストから選び出します。

ちなみに、産出型のプログラムの場合は事前に決められた答えだけではなく、新たな文で答えることもできます。

 

 

III.チャットボットの仕組み

 

 

IV.Micorsoft Azure Notebooksでの実行

 

1.準備

 

もちろん、ダウンロードしたPythonで実行できますが、ここではMcrosoftnoが無料で提供するクラウドのAzure Notebookを使用します。あらかじめ登録しておく必要があります。私が教えている大学の皆さんはすでに登録されていますので、OFFICE 365のIDとパスワードでログインします。

プロジェクトを作成し、さらにPython3.6でNotebookを作成します。

 

https://notebooks.azure.com/

 

2.コーパスのアップロード

 

回答文のコーパスは、Iの解説文で利用されているWikipediaのChatbotsのテキストを用います。下にリンクしたrawデータをコピーしてエディタでテキストファイルを作成し、アップロードします。

Azure Notebookでプロジェクトにアクセスできない場合やstatusがstopになるなどのの場合、ログアウトして再度ログインすると正常にもどります。

 

https://raw.githubusercontent.com/parulnith/Building-a-Simple-Chatbot-in-Python-using-NLTK/master/chatbot.txt

 

 

3.スクリプト

 

Jupyter Notebookの使用法は、基本的にダウンロード版と同じです。手順は次です。

 

(1)コーパスのアップロード

 

1のコーパスをchatbot.txtとしてアップロードします。

 

 

(2)スクリプト

 

Iにリンクした解説文にあるスクリプトと同じです。

 

 

V.データの前処理(Text Pre-Processing with NLTK)

 

1.Converting texts into uppercase or lowercase

 

文字を全て大文字か小文字に統一します。ですから、ユーザーが大文字で入力しても小文字で入力しても関係なくなります。

 

2.Tokenization

 

文字情報そのままでは処理できないので、NLTKで扱える記号、つまり、トークンにします。NLTKには英語のトークナイザーが含まれています。

 

Rmoving Noise:集計上意味のない記号や文字を除きます。

 

Rmoving Stop words:集計上利用しない文字を除きます。例えば次のような単語です。つまり、ユーザーがこれらの単語を書いても書かなくても関係なくなります。

 

‘the’,’a’,’an’,’and’,’but’,’if’,’or’,’because’,’as’,’what’,’which’,’this’,’that’,’these’,’those’,’then’,‘just’,’so’,’than’,’such’,’both’,’through’,’about’,’for’,’is’,’of’,’while’,’during’,’to’,’What’,’Which’,‘Is’,’If’,’While’,’This’

 

StemmingとLimmatization:文法上の活用形はすべて同一の語とします。つまり、単語の活用を間違えても関係なくなります。

 

例えば、 “running” や“ran” は”run”に、 “better” や “good”も同じ語として扱います。

 

3.Bag of Wordsをベクトルに

 

前処理されたデータは単なる語の集まり、Bag of Wordsです。これをを集計可能なベクトルに変換します。つまり、数字の列にして計算できるようにします

例えば、{learning, is, the, not, greeat}の辞書を得たとして、”Learning is great.”の文は、(1,1,0,01)のベクトルとして集計します。

 

to be continued.

 

Please follow and like us:
error

About shibatau

I was born and grown up in Kyoto. I studied western philosophy at the University and specialized in analytic philosophy, especially Ludwig Wittgenstein at the postgraduate school. I'm interested in new technology, especially machine learning and have been learning R language for two years and began to learn Python last summer. Listening toParamore, Sia, Amazarashi and MIyuki Nakajima. Favorite movies I've recently seen: "FREEHELD". Favorite actors and actresses: Anthony Hopkins, Denzel Washington, Ellen Page, Meryl Streep, Mia Wasikowska and Robert DeNiro. Favorite books: Fyodor Mikhailovich Dostoyevsky, "The Karamazov Brothers", Shinran, "Lamentations of Divergences". Favorite phrase: Salvation by Faith. Twitter: @shibatau

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.