チャットボットを作るためにChatterBotをインストールする【Python】

チャットボットを作るためにChatterBotをインストールする【Python】 プログラミング

LINEの情報漏洩(※)を見ても、やはり外部サービスは安全とは言い切れません。
ましてや、機密情報を預けるとなると外部サービスは怖すぎです。
(※外部には漏れていないと主張しているようですが・・・)

昨今では、社内問い合わせをチャットボットでやるようです。
「社内問い合わせを〇%削減!!」という表記を目にすることがありませんか?

LINEレベルですら情報漏洩が起こり得ます。
それも複数人が意図的に閲覧するという故意によるモノです。

そうだとすると、外部サービスを利用したチャットボットの社内利用は危険です。
もちろん、個人であっても機密情報を扱うなら安全とは言い切れません。

じゃあ、どうすればいいのか?
チャットボットの自作をするのです。

でも、すべてを自作するのはかなりハードルが高くなります。
このような場合は、ChatterBotの出番です。

本記事の内容

  • ChatterBotとは?
  • ChatterBotのシステム要件
  • ChatterBotのインストール
  • ChatterBotの動作確認

それでは、上記に沿って解説していきます。

ChatterBotとは?

一般的に、チャットボットと言えば以下の2種類があると言われています。

  • ルールベース(シナリオ)型
  • AI搭載型

正直、AI搭載型の意味がわかりません。
AI搭載型を機械学習型とか言う場合もあるようです。

では、ChatterBotはどちらになるのでしょうか?
ルールベース型だと言えます。

また、ChatterBotとは、Python製の機械学習ベースの会話ダイアログエンジンです。
そして、ChatterBotはオープンソースとして開発・公開されています。

でも、ルールベース型でも機械学習によってトレーニングはします。
だから、やっぱりAI搭載型の意味がわかりません。

ここで、 チャットボットの現実を理解しておきましょう。
ChatterBotは、魔法の杖でも何でもありません。

また、このことは有料のチャットボットでも同じことです。
結局はデータが、必要になります。
精度を上げようと思えば、その分だけ質の高い多くのデータが必要なのです。

機械学習は、データがあってこそです。
どんなデータかと言うと、FAQの元となる「問い」と「回答」の組み合わせデータが必要になります。

「問い(ーー)」と「回答(ー)」の組み合わせデータの例

categories:
- プロフィール
conversations:
- - あなたに兄弟はいますか
  - 私はかもしれない。私のエンジンを使用して構築されたすべてのボットは私の兄弟の一つだと言えるでしょう。
- - あなたの父は誰ですか
  - 人間。
- - あなたの母親は誰ですか
  - 人間。
- - あなたの上司は誰ですか?
  - 私は自分自身を自営業者と考えています。
- - あなたは何歳ですか
  - 私はあなたの基準によってまだ若いです。
- - あなたは何歳ですか
  - あなたよりもずっと賢く、100万回スマートです。

よって、ChatterBotをインストールしても、それは始まりに過ぎません。
このことを十分に理解しておいてください。

次に、ChatterBotのシステム要件を確認していきましょう。

ChatterBotのシステム要件

現時点(2021年3月末)におけるChatterBotの最新バージョンは、1.0.8となります。
この最新バージョンは、2020年8月23日にリリースされています。

サポートOSに関しては、以下を含むクロスプラットフォーム対応です。

  • Windows
  • macOS
  • Linux

Pythonのバージョンについては、注意してください。
Python 3.4以降がサポート対象となっています。

なお、私は以下のバージョンで検証しています。

>python -V
Python 3.9.1

以上が、ChatterBotのシステム要件となります。
比較的新しいPythonなら、どんなOSでも動くような感じです。

システム要件としては、以上となります。
ただ、ChatterBotの動作確認を行う上で必要なモノがあります。

  • pytz
  • spacy(日本語モデル含む)

今回は、これらの説明は主眼ではありません。
次のコマンドで事前にインストールしておきましょう。

pip install pytz
pip install spacy==2.3.5
python -m spacy download ja_core_news_sm

次は、ChatterBotをインストールしていきましょう。

ChatterBotのインストール

インストールは、以下の二つに分けましょう。

  • ChatterBot本体のインストール
  • 日本語訓練用データのインストール

それぞれを以下で説明します。

ChatterBot本体のインストール

最初に、現状のインストール済みパッケージを確認しておきます。

>pip list
Package          Version
---------------- --------------
blis             0.7.4
catalogue        1.0.0
certifi          2020.12.5
chardet          4.0.0
cymem            2.0.5
Cython           0.29.22
dartsclone       0.9.0
idna             2.10
ja-core-news-sm  2.3.2
murmurhash       1.0.5
numpy            1.20.1
pip              21.0.1
plac             1.1.3
preshed          3.0.5
pytz             2021.1
requests         2.25.1
setuptools       54.2.0
sortedcontainers 2.1.0
spacy            2.3.5
srsly            1.0.5
SudachiDict-core 20201223.post1
SudachiPy        0.5.1
thinc            7.4.5
tqdm             4.59.0
urllib3          1.26.4
wasabi           0.8.2

次にするべきことは、pip自体の更新です。
pipコマンドを使う場合、常に以下のコマンドを実行しておきましょう。

python -m pip install --upgrade pip

では、ChatterBotのインストールです。
ChatterBotのインストールは、以下のコマンドとなります。

pip install ChatterBot

インストールは、数分かかりました。
途中で「spacy」のインストールが失敗し続けます。

気になりますが、無視してOKです。
事前にspacy 2.3.5をインストール済みのため。
では、どんなパッケージがインストールされたのかを確認しましょう。

>pip list
Package           Version
----------------- --------------
blis              0.7.4
catalogue         1.0.0
certifi           2020.12.5
chardet           4.0.0
ChatterBot        1.0.4
chatterbot-corpus 1.2.0
click             7.1.2
cymem             2.0.5
Cython            0.29.22
dartsclone        0.9.0
idna              2.10
ja-core-news-sm   2.3.2
joblib            1.0.1
mathparse         0.1.2
murmurhash        1.0.5
nltk              3.5
numpy             1.20.1
packaging         20.9
Pint              0.17
pip               21.0.1
plac              1.1.3
preshed           3.0.5
pymongo           3.11.3
pyparsing         2.4.7
python-dateutil   2.7.5
pytz              2021.1
PyYAML            3.13
regex             2021.3.17
requests          2.25.1
setuptools        54.2.0
six               1.15.0
sortedcontainers  2.1.0
spacy             2.3.5
SQLAlchemy        1.2.19
srsly             1.0.5
SudachiDict-core  20201223.post1
SudachiPy         0.5.1
thinc             7.4.5
tqdm              4.59.0
urllib3           1.26.4
wasabi            0.8.2

結構多くのパッケージが、インストールされました。

日本語訓練用データのインストール

訓練用データのダウンロードURL
https://github.com/gunthercox/chatterbot-corpus/archive/refs/heads/master.zip

上記URLから、zipファイルをダウンロードします。
zipを展開して、以下のように移動します。

chatterbot-corpus-master->chatterbot_corpus->data

dataフォルダ上にある「japanese」フォルダをコピー(切り取りでも可)します。

その「japanese」フォルダを以下のパスにコピーします。
~\Lib\site-packages\chatterbot_corpus\data

chatterbot_corpusライブラリが、インストールされているパスです。
各自で環境が異なるので、なんとか探し当ててください。

ChatterBotの動作確認

「ja_test」という名前のチャットボットを作ります。
そして、「出身はどちらですか」という質問をしてみます。

これらをコードで表すと、以下になります。

from chatterbot import ChatBot
from chatterbot.trainers import ChatterBotCorpusTrainer

# チャットボット指定
chatbot = ChatBot('ja_test')

# 訓練準備
trainer = ChatterBotCorpusTrainer(chatbot)
# 日本語で訓練
trainer.train("chatterbot.corpus.japanese")

# 回答を取得して表示
res = chatbot.get_response("出身はどちらですか")
print(res)

上記を実行すると、おそらく以下のエラーが出るでしょう。

AttributeError: module 'time' has no attribute 'clock'

これは、Python 3.4以降では無効な記述が原因で生じるエラーです。
サポート対象のPythonバージョンとか、意味ないですよね。。。

愚痴を言っても何も始まりません。
では、このエラーを修正しましょう。

エラー修正

SQLAlchemyライブラリのファイルを直接修正します。
対象となるファイルは、エラーから判別可能です。

~\Lib\site-packages\sqlalchemy\util\compat.py

上記ファイルの263行目付近です。
修正前から、修正後に変更します。

修正前

if win32 or jython:
    time_func = time.clock
else:
    time_func = time.time

修正後

if win32 or jython:
    try: # Python 3.4+
        preferred_clock = time.perf_counter
    except AttributeError: # Earlier than Python 3.
        preferred_clock = time.clock
else:
    time_func = time.time

では、再度サンプルコードを実行してみましょう。

実行結果

以下のように表示されます。

~
Training ai.yml: [####################] 100%
Training botprofile.yml: [####################] 100%
Training computers.yml: [####################] 100%
Training conversations.yml: [####################] 100%
Training emotion.yml: [####################] 100%
Training food.yml: [####################] 100%
Training gossip.yml: [####################] 100%
Training greetings.yml: [####################] 100%
Training health.yml: [####################] 100%
Training history.yml: [####################] 100%
Training humor.yml: [####################] 100%
Training literature.yml: [####################] 100%
Training money.yml: [####################] 100%
Training movies.yml: [####################] 100%
Training politics.yml: [####################] 100%
Training psychology.yml: [####################] 100%
Training science.yml: [####################] 100%
Training sports.yml: [####################] 100%
Training trivia.yml: [####################] 100%
私はすべてのソフトウェアプログラムの出所です。遠く離れた銀河。

この回答は、botprofile.ymlファイル(japaneseフォルダ内)の記載されています。
24行目です。

- - 出身はどちらですか
  - 私はすべてのソフトウェアプログラムの出所です。遠く離れた銀河。

この質問と回答の組み合わせにより、実行結果が表示されます。

まとめ

日本語でChatterBotを動かすことができました。
しかし、それなりに面倒です。

まず、ChatterBotのインストールがスンナリとは行きません。
インストールした後でも、ライブラリのファイルを直接修正しています。

上記の作業をする上で、海外の掲示板を見ることが多かったです。
まだまだ、日本語でのChatterBotに関する情報がほとんどありません。

それは、ChatterBotのインストールが困難だからでしょう。
ChatterBot自体はいいモノなのに、本当に勿体ないです。

今回、ChatterBotをインストールしてみて、そのことを痛感しています。
普及させるためには、インストールは簡単であることが必須です。

と言っても、なんとかインストールまで完了できました。
まだまだ、ChatterBotは奥が深いです。

例えば、訓練用データをファイルからデータベースに変更することが可能です。
このあたりもまた紹介していこうと思います。

タイトルとURLをコピーしました