チャットボットの基礎知識
LINE(ライン)やSkype(スカイプ)といったチャットサービスや、オンラインショップなどのウェブサイト上で、自動会話プログラムが動作しているのをご覧になったことがあるでしょうか? こうした自動会話プログラムを、チャットボットと呼びます。本連載では全6回にわたり、チャットボットの働きや仕組みを、実際のプログラムも交えながら解説します。第1回目の今回は、チャットボットとはと題し、チャットボットのできることや実例、AIとの関係などについて解説します。
もくじ
第1回:チャットボットとは
1. チャットボットができること
チャットボットは、チャット(chat:おしゃべり)と、ボット(bot:ロボット)を組み合わせた言葉で、単にボットとも呼ばれます。また、チャット(自動応答)、AIチャットなどと表示されていることもあります。
最初にチャットボットができることを紹介します。チャットボットは、ユーザーの発言に対して自動的に応答することができます。例えば「明日の天気は?」というユーザーの発言に対して、自動的に天気情報を応答するといった機能が考えられます(図1)。
一方、ユーザーに応答するのではなく、チャットボットが自分から発言する場合もあります。例えば、おすすめの商品情報を発言したり、最新のニュースを発言したりするような機能です(図2)。
LINEやSkype、Facebook Messenger(フェイスブック・メッセンジャー)、Slack(スラック)といった多くのチャットサービスが、チャットボットに対応しています。チャットボットはプログラムであるものの、人間のユーザーに対するのと似た方法で話しかけたり、グループの会話に招待したりすることができます。
オンラインショップなどのウェブサイト上でも、チャットボットを見かけることが増えました。ユーザーはWebブラウザからメッセージを入力したり、選択肢を選んだりして、チャットボットと会話します。これらのチャットボットは、ユーザーの希望に合いそうな商品を検索したり、商品のサポート情報を表示したりしてくれます。
Twitter(ツイッター)上では、自動的にツイートするボットが数多く動いています。これらのボットは、ユーザーと対話しないという点でチャットボットとは異なりますが、自動的に発言するチャットボットとよく似た技術で実現されています。
2. チャットボットの実例
実際にチャットサービス上で稼働しているチャットボットの例を紹介します。日本郵便やヤマト運輸は、荷物の追跡や再配達ができるチャットボットを提供しています。例えば伝票番号を入力すると、荷物が現在どこにあるのかを表示してくれます。同様のサービスはウェブサイトからでも利用できますが、チャットボットの場合は、キャラクターが操作手順をガイドしてくれるので、親しみやすく感じます。また、1ページに大量の情報が掲載されがちなWebページに比べ、チャットボットが必要な情報を絞って提示してくれるのも便利です。
一方で、会話を楽しむことを主な目的とするチャットボットもあります。……
3. チャットボットとAIの関係
最近はAI(人工知能)が話題です。チャットボットとAIには密接な関係があります。近年のAI分野では、ディープラーニングに代表される機械学習の手法が大きく進歩しました。チャットボットの中には、より正確な応答を返したり、より自然な会話を実現したりするために、機械学習の手法を活用しているものがあります。一方で多くのチャットボットは、「ユーザーの発言に含まれるキーワードに反応する」という単純な手法で動いていると思われます。これらのシンプルなチャットボットも、広義ではAIの一種だといえます。
Amazon EchoやGoogle HomeといったAIスピーカー(スマートスピーカー)にも、チャットボットに類似する技術が使われています。AIスピーカーの場合、……
第2回:チャットボットの仕組み
前回は、チャットボットの実例を紹介しながら、チャットボットのできることや、AIとの関係などについて説明しました。今回は、チャットボットの仕組みと題し、ユーザーの発言がチャットボットに届く仕組み、チャットボットの応答がユーザーに届く仕組み、そしてチャットボットが自発的に発言する仕組みについて解説します。
1. ユーザーの発言がチャットボットに届く仕組み
ユーザーが「おはよう」と発言したとき、発言がチャットボットに届く例を見てみましょう(図1)。
最初に、ユーザーの発言がネットワーク(多くの場合はインターネット)を通じて、チャットサーバに届きます。チャットサーバは、チャットサービスを行っている会社が提供しているものとします。ここでは、ハードウェア(コンピュータ)とソフトウェア(プログラム)の両方をまとめて、チャットサーバと呼ぶことにします。なお、ウェブサイト上で動作するチャットボットの場合、Webサーバがチャットサーバの役割を担うことがありますが、基本的な仕組みは同じです。
次にチャットサーバは、ネットワークを通じてユーザーの発言をチャットボットに対して送信します。多くのチャットボットは、……
2. チャットボットの応答がユーザーに届く仕組み
次に、ユーザーの発言を受信したチャットボットが、ユーザーへ応答を返す例を見てみましょう(図2)。
例えば「おはようございます!」という応答を返すとします。チャットボットはチャットサーバに対して、「おはようございます!」というテキストに加えて、前述のリプライトークンや、チャットサーバにアクセスする権利を表すアクセストークンという番号などを一緒に送信します。LINEでは、リプライトークンやアクセストークンが必要となります。一方、他のチャットサービスでもLINEと似たような仕組みを使って、チャットボットがチャットサーバにアクセスする権利を管理しています。
チャットボットの応答を受信したチャットサーバは、トークンを調べて、……
3. チャットボットが自発的に発言する仕組み
次に、ユーザーの発言に応答するのではなく、チャットボットが自発的に発言する例を見てみましょう(図3)。
例えば「セール開催中!」と発言する場合、チャットボットはチャットサーバに対して、「セール開催中!」というテキストを送信します。このとき、送信先のユーザーを表すユーザーIDや、前述のアクセストークンなども、一緒に送信します。チャットサーバは、チャットボットから受信したトークンなどが適切ならば、発言をユーザーに送信します。
チャットボットが自発的に発言することをどの程度許可するのかは、チャットサービスによって異なります。例えば……
第3回:チャットボットの開発
前回は、ユーザーおよびチャットボットの発言が、相手方に伝わるまでの仕組みを解説しました。今回は、チャットボットのプログラムについて説明します。チャットボットのプログラムが行う処理の流れや、開発に使うプログラミング言語、そしてチャットボットの開発を支援する開発環境について解説します。
1. チャットボットのプログラム
チャットボットのプログラムが行う基本的な処理は、ユーザーの発言を受信し、その発言に対する応答を送信することです。チャットボットによって違いはありますが、大まかな処理の流れは多くのチャットボットで共通しています。図1にチャットボットのプログラムの処理の流れを示します。
最初に行うのは、入力したユーザーの発言を解析する処理です。多くのチャットボットは、発言のテキストにキーワード(特定の言葉)が含まれているかどうかを調べて、そのキーワードに対応する動作をします。例えば、テキストに「おはよう」という言葉が含まれていたら「おはようございます!」と応答し、「天気」という言葉が含まれていたら天気予報を応答する、といった要領です。自然言語処理と呼ばれる、人間が日常的に使っている言語をコンピュータに解析させる技術を利用して、より複雑な解析を行うチャットボットもあります。
次に行うのは、応答を作成するための情報を取得する処理です。この処理は……
2. チャットボットのプログラミング言語
プログラミング言語は、プログラムを開発するために使う人工言語です。プログラミング言語には非常に多くの種類があり、それぞれ得意とする分野が違います。
チャットボットのプログラムを開発するために使えるプログラミング言語には、例えば Go(ゴー)、Java(ジャバ)、JavaScript(ジャバスクリプト)、Perl(パール)、PHP(ピーエイチピー)、Python(パイソン)、Ruby(ルビー)などがあります。これらはLINE用のチャットボット開発環境であるLINEMessaging API SDK(ライン・メッセージング・エーピーアイ・エスディーケー)が対応しているプログラミング言語を、アルファベット順に並べたものです。
これらのプログラミング言語は、……
3. チャットボットの開発環境
前述のLINE Messaging API SDKはLINE専用の開発環境です。一方、複数のチャットサービスに対応したチャットボット開発環境もあります。このような開発環境を使うと、さまざまなチャットサービスに対応したチャットボットを、効率的に開発できる可能性があります。これは同じチャットボットを、多くのチャットサービス向けに展開したいときに便利です。
例えばMicrosoft Bot Framework(マイクロソフト・ボット・フレームワーク)で開発したチャットボットは、……
第4回:簡単なチャットボットを作ってみよう~あいさつボット
前回は、チャットボットのプログラムが行う処理の流れや、開発に使うプログラミング言語、そしてチャットボットの開発を支援する開発環境について解説しました。今回は、実際に簡単なチャットボットのプログラムを作りながら、どんな処理を行っているのか具体的に解説します。作成するのは「こんにちは!」や「おはようございます!」といった応答を返す、あいさつチャットボットです。このチャットボットはLINE(ライン)上でユーザーと会話します。他のチャットサービスなどで会話するチャットボットを作る際も、基本的な考え方は共通です。
1. あいさつチャットボットの仕組み
最初は、簡単なチャットボットを作りましょう。いつも「こんにちは!」とだけあいさつするチャットボットです(図1)。ユーザーが何か発言したら、その内容にかかわらず、常に「こんにちは!」という応答を返します。
例えばユーザーが「やあ」と発言すると、チャットボットはチャットサーバからJSONデータを受信します(図2)。このデータには、発言のテキスト「やあ」に加えて、応答に必要なリプライトークンなども含まれています。ここでは図を簡単にするために、データの一部を「…」のように省略しました。また、実際のデータではテキストがエンコード(符号化)されていますが、ここでは分かりやすさのために、元のテキストのまま示しています。
このチャットボットが「こんにちは!」と応答するには、……
2. あいさつチャットボットのプログラム
これでチャットボットが受信および送信するデータの構造は分かったので、あとはこれらのデータを操作するプログラムを作成すれば、チャットボットは完成です。今回は、プログラミング言語Python(パイソン)を使って、プログラムを開発してみました。以下にプログラムを示します。
……
3. ユーザーの発言に応じてあいさつを変えるには
作成したチャットボットを少し改良し、ユーザーの発言に応じてあいさつを変えられるようにしてみましょう(図5)。ユーザーが「おはよう」と言うと「おはようございます!」と応答し、「おやすみ」と言うと「おやすみなさい!」と応答するチャットボットです。
図6は、ユーザーの発言に応じて応答を変える処理を示します。最初に発言のテキストを取得し、変数query(クエリー:問い合わせ)に格納します。次に、発言に「おはよう」が含まれるかどうかを調べます。条件判定を行うif(イフ)という構文と、……
第5回:実用的なチャットボットを作ってみよう~割り勘ボット
前回は、あいさつチャットボットの作成を通じて、チャットボットのプログラムが行う具体的な処理について説明しました。今回はより実用的な、割り勘チャットボットを作ります。前回と同様に、プログラミング言語のPython(パイソン)を使って、LINE(ライン)用プログラムの開発について解説します。
1. 割り勘チャットボットの仕組み
今回作成するのは、図1のように、例えば「23000円を5人で」のように問いかけると、「23000円を5人で割り勘すると4600円です。」のように答えてくれる、割り勘チャットボットです。宴会の会計や、共同で物を購入するときなどに役立ちます。計算機のアプリを使っても割り勘はできますが、チャットアプリをいつも使っているならば、アプリを切り替えずに割り勘が可能です。計算した結果がログに残るのもよい点です。
ユーザーから割り勘チャットボットへの問いかけは、「23000円を5人で」のように言う場合もあれば、「6人で39000円」のように言う場合もあります。あるいは「7200円を4人で割り勘したい」のように言うかもしれません。このようにさまざまな言い方がありますが、どの場合にも「○○円」という金額のパターンと、「△△人」という人数のパターンが含まれています。これらのパターンに注目して、ユーザーの発言から金額と人数を抽出すれば、割り勘の計算ができます。テキストから特定のパターンを検索するには、正規表現(せいきひょうげん)という機能を使うのが便利です。正規表現はさまざまなプログラミング言語で利用できます。
例えば「○○円」というパターンは、……
2. 割り勘チャットボットのプログラム
プログラムの全体は次のようになります。
#!/usr/local/bin/python
import codecs
import json
import os
import re
import sys
import requests
# 入力の文字エンコーディングを指定
sys.stdin = codecs.getreader(‘utf-8’)(sys.stdin.detach())
# JSONデータを取得
input = json.load(sys.stdin)
# アクセストークン
token = ‘…’
# 全てのイベントを処理
for event in input[‘events’]:
# ユーザの発言を取得
query = event[‘message’][‘text’]
# 金額と人数を取得
price = re.search(r'(\d+)円’, query)
people = re.search(r'(\d+)人’, query) or re.search(r'(\d+)名’, query)
# 金額または人数が未指定のとき
if not price or not people:
reply = ‘金額と人数を指定してください。’
# 割り勘を計算
else:
price = int(price.group(1))
people = int(people.group(1))
reply = ‘{}円を{}人で割り勘すると{}円です。’
.format(price, people, price//people)
# 応答を送信
requests.post(
‘https://api.line.me/v2/bot/message/reply’,
headers={
‘Content-Type’: ‘application/json’,
‘Authorization’: ‘Bearer ‘+token
},
data=json.dumps({
‘replyToken’: event[‘replyToken’],
‘messages’: [{
‘type’: ‘text’,
‘text’: reply
}]
})
)
プログラムの主要な処理を解説していきます。
……
3. より幅広い言い方に対応するには
ユーザーによっては、人数を「△△人」ではなく「△△名」と言うかもしれません。どちらの言い方をしても割り勘が計算できるようにするには、人数を取得する処理を以下のように改良します。
変更前:people = re.search(r'(\d+)人’, query)
変更後:people = re.search(r'(\d+)人’, query) or re.search(r'(\d+)名’, query)
or(オア)は「または」という意味です。変更後の処理では、最初に「△△人」というパターンを探して、見つからなければ「△△名」というパターンを探します。これで、いずれのパターンについても人数を取得することができます。
作成した割り勘チャットボットとは、……
4. 誤った応答を防止するには
一方で、「価格と人数が発言された」とチャットボットが解釈すると、ユーザーには割り勘をさせるつもりがなくても、チャットボットが割り勘計算をしてしまうケースもあります。例えばユーザーが「1人月単価は20000円です。」と発言した場合、このチャットボットは「20000円を1人で割り勘すると20000円です。」と応答してしまいます。
このような開発者が望まない応答を防止する方法としては、例えば、……
第6回:Web APIを使ったチャットボットを作ってみよう~価格検索ボット
前回は、実用的なチャットボットの例として、割り勘チャットボットを作りました。今回はWeb API(ウェブエーピーアイ)を使って、より高度なチャットボットを作成します。題材は、指定した商品の価格をオンラインショップで調べる、価格検索チャットボットです。プログラミング言語のPython(パイソン)を使って、LINE(ライン)用のプログラムを開発します。
1. Web APIとは
今回作成するのは、オンラインショップから商品の価格を検索するチャットボットです(図1)。ユーザーの発言を検索キーワードとして使います。例えば
商品の価格を検索するためには、本連載の第3回で紹介したWeb APIを利用します。Web APIはチャットボットのようなプログラムが、ウェブサイトからさまざまな情報を取得する際に役立つ仕組みです。
人間がWebブラウザを使ってウェブサイトを利用するのも、プログラムがWeb APIを使ってウェブサイトを利用するのも、基本的な仕組みは同じです。重要な違いは、……
2. 価格検索チャットボットの仕組み
今回使用するWeb APIは、商品を検索するためのキーワードを与えると、キーワードに合致する商品情報のJSONデータを返します。キーワードは実際のオンラインショップで人間が検索するときと同様、
検索結果は図2に示すようなJSONデータで返ってきます。例えば……
3. 価格検索チャットボットのプログラム
今回のプログラムについて、主要な処理を抜粋して紹介します。プログラムの全体はこのセクションの最後に掲載しています。
図3はWeb APIを使って商品を検索する処理です。アプリケーションIDや検索キーワードといった情報を、Web APIのURLに送信します。検索結果の並び順は価格の昇順(価格が低いものを先に、価格が高いものを後に)とし、取得する項目は「品名」「価格」「URL」「店名」としました。また、チャットボットの応答をある程度の長さに収めるために、取得する件数は5件としました。
上記の処理を実行すると、前述のような検索結果の JSONデータが得られます。図4に示す処理では、このJSONデータから必要な情報を取り出し、チャットボットの応答を作成します。今回は取得した複数の商品について、価格と品名を示すことにしました。プログラムを少し改造すれば、URLや店名を応答に含めることもできます。品名はかなり長い場合が多いので、応答を見やすくするために、品名の先頭から最大30文字までを抽出しています。
図5は作成した価格検索チャットボットとの会話例です。何か欲しい商品ができたときに、チャットボットに話しかければ、キーワードに合致する商品を安い方から5個、探して表示してくれます。例えば、他のユーザーとチャットで商品の購入を相談する際に、このチャットボットを仲間に加えておけば、相談がスムーズに進みそうです。プログラムを少し改造して、商品のURLも応答に含めておけば、気になる商品の詳細な情報をすぐにWebブラウザで調べることができるので、より便利になるでしょう。
今回作成したプログラムの全体は、以下の通りです。
……