Pythonのライブラリを使ってチャットボットを作ってみた(アプリVer)

Pythonのライブラリを使ってチャットボットを作ってみた(アプリVer)

近頃、色んなサイトでチャットボットを目にしますが、
実際に使ってみて興味を持ち、簡単なアプリケーション形式でも作れるのか気になったので、
Pythonのライブラリを用いて簡単なチャットボットをアプリ形式で作ってみました。

今回は企業のホームページ仕様にします。自動で表示されるボタンを選んで見たい項目を表示させます。
さらに、入力スペースに質問を入力して、その質問に対する回答が返ってくるようにします。
GUI形式にするので、Pythonの標準ライブラリである『Tkinter』*を用います。
標準ライブラリなので、コマンド画面からインストールする必要はなく、コーディング画面でインポートすれば使えます。

※Tkinter・・・GUIを作るためのPythonの標準ライブラリ。

起動後、最初のメッセージとボタンを表示させます。チェックしたい内容のボタンをクリックします。



クリックすると、枝分かれして次のボタンが表示されました。


さらにチェックしたい内容のボタンをクリックすると、回答が表示されました。


次に、入力欄に質問を入力すると、回答が返ってくるようにします。
ここでは自然言語処理*というものを使います。
文章(質問)の意味をシステムに理解させ、あらかじめ用意したテンプレートの中から文章の意味にあう質問を探し、それに合う回答を返します。
今回は『spaCy』*を使用します。

※自然言語処理・・・人間が書いたテキストなどをコンピュータに分析・処理させる技術。
※spaCy・・・Pythonで利用できるオープンソースの自然言語処理ライブラリ。日本語を含め、豊富な言語に対応。

『spaCy』は標準ライブラリではないので、コマンドからインストールする必要があります。
インストール後、『Tkinter』と同様にインポートします。
ここで、質問と回答のテンプレートを作っておきます。日本語の文章を認識させるために、言語モデルの一つである「ja_core_news_lg」を使用します。
「ja_core_news_lg」もコマンドからインストールします。

次は、より正確に文章を回答するよう、類似性の「しきい値」を調整します。
一般的に低いとされる0.2~0.4は、入力した文章の意味を幅広く理解する一方、類似性が低くても関係のない文章を返答する場合があります。
逆に、高いとされる0.8以上だと、似た意味の文章を正確に返答しやすい反面、入力する文章が具体的である必要があります。
今回は中程度の0.6を使用します。

テンプレートの質問文「現在、募集していますか?」を変えて「採用されてますか?」と手入力で質問すると、「技術職・営業職の募集をしております。」と、正しい回答が返ってきました。

次に、別の質問をしてみます。
テンプレートの質問文「技術職の業務内容を教えてください。」を変え、「技術職の仕事内容は?」と質問すると、「技術職の業務内容についてはこちら(URL)をご覧ください。」と、正しい回答が返ってきました。
さらに、技術職を営業職に変えて「営業職の仕事内容は?」と質問すると、「営業職の業務内容についてはこちら(URL)をご覧ください。」と、こちらも正しい回答が返ってきました。


最初から始めたいときは、ボタン「はじめから」をクリックすると、最初のチャットから表示されるようにしました。


このように、簡単なシステムではありますが、自動応答のチャットボットができました。
今回は言語モデルに「ja_core_news_lg」を使用しましたが、他にも様々なライブラリが存在します。
それも含め、Pythonで使える多種多様なライブラリを試してみようと思います。

この記事を書いた人
TS (京都府出身/ITエンジニア/2022年プレジャ入社)