次に、本発明の一実施形態について、図面を参照しながら説明する。本実施形態は、システムが、相手からの最初のアクションを待つのではなく、自発的に相手との通信を接続させたうえで、相手(人)との間で自発的に対話を行うことができるようにするものである。そのために、本実施形態では、システムが例えば通信手段としての電話を自動的に発信する。ただし、電話以外の通信手段を用いてもよい。また、本実施形態では、予め定めておいたシナリオに沿って、システムが相手(人)との間の対話を自発的に進めるものである。そのために、本実施形態では、一部において機械学習の技術を利用する。
図1は、本実施形態による自動発信システムの装置構成例を示すブロック図である。図示するように、自動発信システム1は、チャットボットサーバー装置100と、シナリオサーバー装置200と、電話端末装置300と、音声生成サーバー装置400と、音声認識サーバー装置500と、操作用端末装置600とを含んで構成される。チャットボットサーバー装置100と、シナリオサーバー装置200と、電話端末装置300と、音声生成サーバー装置400と、音声認識サーバー装置500と、操作用端末装置600は、適宜、インターネットや無線LAN等を用いて相互に通信を行うことができるように構成されている。
チャットボットサーバー装置100は、チャットサービスを実現するための機能を持つサーバー装置である。通常のチャットボットサーバー装置は相手方からの質問を受け付けてその質問に対する答弁を自動的に生成するものである。つまり、通常のチャットボットサーバー装置は、対応的なものである。一方、本実施形態でのチャットボットサーバー装置100は、予め記憶しておいたシナリオに基づいて、自発的な対話を成立させる。そのような自発的な対話を行うための詳細な構成については、別の図面を参照しながら後で説明する。なお、チャットボットサーバー装置100は、例えば、サーバー型コンピューターやPC(パーソナルコンピューター)等を用いて実現される。
シナリオサーバー装置200は、チャットボットサーバー装置100に対してシナリオのデータを提供する。また、シナリオサーバー装置200は、チャットボットサーバー装置100が機械学習処理をするための学習データを、チャットボットサーバー装置100に提供する。この学習データは、シナリオサーバー装置200が提供するシナリオに依存するものであってもよい。さらに、シナリオサーバー装置200は、電話端末装置300に対して、電話を発信するためのスケジュールのデータを提供する。なお、シナリオサーバー装置200は、例えば、サーバー型コンピューターやPC等を用いて実現される。
電話端末装置300は、予め記憶しておいたスケジュールのデータにしたがって、電話を発信する。これにより、電話端末装置300は、ネットワーク2を介して、相手側である電話端末装置800との間で通話状態となる。通話状態において、電話端末装置300は、チャットボットサーバー装置100が出力するテキストデータに基づく音声(音声生成サーバー装置400からの出力)を、相手側に送る。また、通話状態において、電話端末装置300は、相手側の電話端末装置から受けた音声を、音声認識サーバー装置500に渡す。これにより、その音声の認識結果が、チャットボットサーバー装置100に渡される。なお、電話端末装置300は、電話を発信する際に、そのスケジュールにおいて定められているシナリオの識別情報を、チャットボットサーバー装置100に対して通知する。つまり、電話端末装置300は、指定したシナリオ識別情報に基づいてチャットボットサーバー装置100が行う対話の音声を、電話の相手側との間でやりとりする。
また、本実施形態では、電話端末装置300は、チャットボットサーバー装置100から渡される時系列の入出力テキストを、ログとして記憶し、蓄積する。ログの記憶については、後でも詳細に説明する。
なお、電話端末装置300は、例えば、いわゆるスマートフォンと、スマートフォン上で実行可能なアプリ(アプリケーションプログラム)とを用いて実現される。
音声生成サーバー装置400は、入力されるテキストデータを基に、音声を生成して出力する。具体的には、音声生成サーバー装置400は、チャットボットサーバー装置100におけるチャット出力生成部110が生成した出力テキストを、電話端末装置における発信制御部340によって接続された通信の相手先に送るための音声に変換する。つまり、音声生成サーバー装置400は、入力されるテキストデータを読み上げるのと同等の機能を有する。なお、音声生成サーバー装置400は、「第1変換部」とも呼ばれる。音声生成サーバー装置400は、音声合成の技術を用いて実現される。なお、音声合成の技術自体は、既存の技術である。本実施形態において、音声生成サーバー装置400は、チャットボットサーバー装置100から出力されるテキストデータを取得し、そのテキストデータを基に音声を生成して、電話端末装置300に渡す。なお、音声生成サーバー装置400は、TTS(text-to-speech)とも呼ばれる。
音声認識サーバー装置500は、入力される音声を言語として認識し、その認識結果のテキストデータを生成して出力する。具体的には、音声認識サーバー装置500は、電話端末装置300の発信制御部340によって接続された通信の相手先から送られてくる音声を、チャットボットサーバー装置100におけるチャット出力生成部110に渡すための入力テキストに変換する。なお、音声認識サーバー装置500は、「第2変換部」とも呼ばれる。音声認識の技術自体は、既存の技術である。本実施形態において、音声認識サーバー装置500は、電話端末装置300から出力される音声を認識し、認識結果のテキストデータをチャットボットサーバー装置100に渡す。なお、音声認識サーバー装置は、STT(speech-to-text)とも呼ばれる。
操作用端末装置600は、シナリオサーバー装置200が持つ機能を使用するための端末装置である。ユーザーは、この操作用端末装置600を操作することによって、シナリオサーバー装置200が保持するシナリオのデータを編集したり、シナリオサーバー装置200が保持する学習データを編集したりすることができる。また、この操作用端末装置600を操作することによって、電話端末装置300に渡すためのスケジュールのデータを編集することができる。操作用端末装置600は、例えば、PCやスマートフォンやタブレット端末装置等を用いて実現される。
電話端末装置300は、ネットワーク2に接続可能である。ネットワーク2は、例えば、通信事業者が運営する電話網である。電話端末装置300は、ネットワーク2を介して、外部の電話端末装置800との間で通信することが可能である。電話端末装置800は、自動発信システム1が電話を発信する相手方の電話端末である。電話端末装置800は、例えば、携帯型のスマートフォンや、固定電話機である。この図では、1台の電話端末装置800のみを記載しているが、自動発信システム1は、電話番号を指定することにより、任意の相手方の電話端末装置800に対して電話を発信することができる。
なお、ネットワーク2は、電話網に限らず、例えばIP網(インターネット等)や、他のネットワークであってもよい。「IP」は、インターネットプロトコル(internet protocol)の略である。
以上、説明したように、本実施形態において、電話端末装置300は、予め設定されたスケジュールデータにしたがって、電話を発信する。また、電話端末装置300は、発信した電話において使用するシナリオを識別する情報を、チャットボットサーバー装置100に渡す。チャットボットサーバー装置100は、指定されたシナリオにしたがって、テキストデータを生成し、出力する。音声生成サーバー装置400は、チャットボットサーバー装置100が出力するテキストに基づいて音声を生成する。電話端末装置300は、音声生成サーバー装置400が生成した音声を、電話の相手方に流す。また、電話端末装置300は、電話の相手方からの音声を、音声認識サーバー装置500に渡す。音声認識サーバー装置500は、電話端末装置300から渡された音声の認識処理を行い、認識結果であるテキストデータをチャットボットサーバー装置100に渡す。
チャットボットサーバー装置100は、内部に機械学習済みのモデルを持っている。チャットボットサーバー装置100は、この学習済みのモデルを用いて、シナリオのデータと、音声認識サーバー装置500から渡されるテキストデータとに基づき、上記の出力用のテキストデータを自動的に生成することができる。
以下では、自動発信システム1を構成する装置が持つ機能の詳細について説明する。
図2は、チャットボットサーバー装置100の概略機能構成を示すブロック図である。図示するように、チャットボットサーバー装置100は、チャット出力生成部110と、シナリオ供給部120と、フロントエンド処理部130と、適用領域データベース140と、入力部150と、出力部160と、学習データ供給部170と、学習処理部180とを含んで構成される。これらの各機能部は、例えば、コンピューターと、プログラムとで実現することが可能である。また、各機能部は、必要に応じて、記憶手段を有する。記憶手段は、例えば、プログラム上の変数や、プログラムの実行によりアロケーションされるメモリーである。また、必要に応じて、磁気ハードディスク装置やソリッドステートドライブ(SSD)といった不揮発性の記憶手段を用いるようにしてもよい。また、各機能部の少なくとも一部の機能を、プログラムではなく専用の電子回路として実現してもよい。各部の機能は、次の通りである。
チャット出力生成部110は、内部に持つ機械学習モデルを用いて、出力用のテキストデータを生成する。なお、チャット出力生成部110は、単に「出力生成部」とも呼ばれる。本実施形態において、チャット出力生成部110は、少なくとも、シナリオが示す現状況(present situation)と、相手側から渡される入力テキストとに基づいて、出力テキストを生成する。つまり、出力テキストは、学習モデルが持つ状態と、シナリオが示す現状況と、入力テキストに基づくものである。チャット出力生成部110は、電話端末装置300側から通知されたシナリオ識別情報によって識別されるシナリオを、シナリオ供給部120から受け取るようにしてもよい。ただし、チャット出力生成部110が、自らが過去に出力した出力テキスト(過去テキストと呼ぶ)にも基づいて次の出力テキストを生成するようにしてもよい。チャット出力生成部110は、学習モデルとして、例えばニューラルネットワークを用いる。例えば、既存技術に属する学習手法である誤差逆伝播法(backpropagation)を用いることができる。この学習モデルは、予め、学習データを用いて学習しておくようにする。なお、学習処理部180が実行する学習処理によって、随時、学習モデルの更新(再学習)が可能である。なお、チャット出力生成部110が出力する出力テキストは、パラメーターを含んでいてもよい。出力テキスト内のパラメーターは、フロントエンド処理部130によって実値で置換される。
チャット出力生成部110が生成する出力は、例えば、次の式(1)によって表され得る。
Toutput=f(situation,Tinput,Toutput_p ;Θ)
・・・(1)
式(1)において、Toutputは、チャット出力生成部110が生成する出力である。また、situationは、現状況(現在の状況の状況識別情報)である。現状況は、チャット出力生成部110がシナリオ供給部120から受け取るシナリオのデータ内で規定される。Tinputは、直前の入力テキストである。直前の入力テキストは、チャット出力生成部110が入力部150からフロントエンド処理部130を経由して受け取るものである。Toutput_pは、直前の出力テキストである。即ち、Toutput_pは、前回の処理でチャット出力生成部110が生成した出力である。また、Θは、学習済みのモデルの状態を表す変数である。チャット出力生成部110が内部に持つモデルが例えばニューラルネットワークである場合には、学習済みのモデルの状態とは、そのニューラルネットワークに含まれる全ノードにおける重み付けパラメーターの値のベクトルである。つまり、変数Θは、ベクトル値を持ち得る。また、式(1)において、f()は、関数である。つまり、チャット出力生成部110が生成する出力は、学習済みのモデルの状態(モデルのパラメーター値)と、現状況と、直前の入力と、直前の出力によって決定される。
シナリオ供給部120は、シナリオのデータを、チャット出力生成部110およびフロントエンド処理部130に供給する。シナリオ供給部120は、シナリオサーバー装置200のシナリオ管理部210から渡されるシナリオを、多数保持しておくことができる。1件のシナリオデータは、複数件の状況(situation)のシーケンスである。つまり、シナリオは、状況のシーケンスとして表されるものである。1件のシナリオデータは、シナリオ識別情報によって識別される。
フロントエンド処理部130は、チャット出力生成部110のフロントエンドの処理を行う。また、フロントエンド処理部130は、この処理のために、適用領域データベース140のデータを読んだり書いたりすることができる。つまり、フロントエンド処理部130は、入力テキストを入力部150から受け取り、チャット出力生成部110に渡す。この際、フロントエンド処理部130は、入力テキストに含まれる内容の一部を、適用領域データベース140に書き込むことができる。また、フロントエンド処理部130は、入力テキストの内容を全く適用領域データベース140には書き込まずに、チャット出力生成部110に渡してもよい。また、フロントエンド処理部130は、チャット出力生成部110が生成した出力テキストを、出力部160に渡す。この際、フロントエンド処理部130は、チャット出力生成部110から渡される出力テキストにパラメーターが含まれる場合には、そのパラメーターを実値で置換することができる。この実値は、適用領域データベース140から読み出されるデータである。チャット出力生成部110から渡される出力テキストにパラメーターが含まれない場合には、フロントエンド処理部130は、そのテキストをそのまま出力部160に渡す。
つまりフロントエンド処理部130は、チャット出力生成部110が生成した出力テキストがパラメーターを含む場合には、適用領域データベース140から読み出した置換データでそのパラメーターを置換し、置換処理を行った後の出力テキストを、出力部160経由で、音声生成サーバー装置400に渡す。また、フロントエンド処理部130は、入力テキストを音声認識サーバー装置500から入力部150経由で受け取り、入力テキストから抽出した情報を表すデータである書込データを、適用領域データベース140に書き込む。
なお、フロントエンド処理部130は、ログを出力することができる。ログは、フロントエンド処理部130が入力部150から受け取った入力テキストや、フロントエンド処理部130が出力部160に渡した出力テキストの履歴の記録である。このログにおいて、入力テキストや出力テキストは、日時と関連付けられていてもよい。なお、フロントエンド処理部130がログを出力する先は、電話端末装置300の対話履歴記憶部370である。
適用領域データベース140は、適用領域に関するデータを保持するデータベースである。適用領域がアポイントメントの管理である場合、適用領域データベース140は、例えば、予約日時に関するデータを保持する。適用領域がアンケート実施である場合、適用領域データベース140は、アンケートにおける質問と、それらの質問に対する回答のデータを保持する。適用領域データベース140が保持するデータは、ここに例示したものには限定されない。あらゆる領域に、このチャットボットサーバー装置100を適用することが可能である。
入力部150は、外部から入力されるテキストを取得し、フロントエンド処理部130に渡す。この入力テキストは、音声認識サーバー装置500から渡されるものである。この入力テキストは、通話の相手から電話端末装置300が受け取った音声を基に認識処理した結果である。入力部150からフロントエンド処理部130に渡されたテキストは、チャット出力生成部110への入力となる。
出力部160は、フロントエンド処理部130から渡されたテキストを、外部に出力する。この出力テキストは、チャット出力生成部110で生成され、さらにフロントエンド処理部130によって処理されたテキストである。出力部160が出力したテキストは、音声生成サーバー装置400において音声に変換され、電話端末装置300に渡される。この音声は、通話の相手に対して伝えられることとなる。
学習データ供給部170は、チャット出力生成部110が持つ機械学習モデルに学習させるための学習データを供給する。学習データは、シナリオサーバー装置200内の学習データ管理部220によって生成され、または編集される。
学習処理部180は、チャット出力生成部110が内部に持つ機械学習モデルの学習を行う。具体的には、学習処理部180は、学習データ供給部170によって供給される学習データを用いて、チャット出力生成部110内のモデルの学習処理を行う。学習データは、例えば、当該モデルに対する入出力データの組であり、正例と負例のいずれか一方、または両方を含んでいてよい。学習処理部180は、このような学習データを用いて、チャット出力生成部110内のモデルを調整する。そのモデルが例えばニューラルネットワークである場合、学習処理部180は、学習データを用いて、当該ニューラルネットワークの各ノードにおける入出力の重みパラメーターの値を最適化する処理を行う。なお、モデルの学習処理自体は、既存の技術を用いて実現可能である。
図3は、シナリオサーバー装置200の概略機能構成を示すブロック図である。図示するように、シナリオサーバー装置200は、シナリオ管理部210と、学習データ管理部220と、スケジュール管理部230とを含んで構成される。これらの各機能部もまた、例えば、コンピューターと、プログラムとで実現することが可能である。また、各機能部は、必要に応じて、記憶手段を有する。また、各機能部の少なくとも一部の機能を、プログラムではなく専用の電子回路として実現してもよい。各部の機能は、次の通りである。
シナリオ管理部210は、チャットボットサーバー装置100が使用するシナリオのデータを管理する。具体的には、シナリオ管理部210は、シナリオのデータを生成したり編集したりする。シナリオ管理部210は、操作用端末装置600からの操作に基づいてシナリオを管理する。シナリオ管理部210は、複数のシナリオを管理することができる。個々のシナリオは、シナリオ識別情報によって識別され、適宜選択されて使用される。なお、シナリオ管理部210が生成し、または編集したシナリオのデータは、チャットボットサーバー装置100内のシナリオ供給部120に渡される。
学習データ管理部220は、チャットボットサーバー装置100が使用する学習データを管理する。具体的には、学習データ管理部220は、学習データを生成したり編集したりする。学習データ管理部220は、操作用端末装置600からの操作に基づいて学習データを管理する。この学習データは、チャットボットサーバー装置100内に存在する機械学習モデルの機械学習を行うために用いられる。なお、学習データ管理部220が生成し、または編集した学習データは、チャットボットサーバー装置100内の学習データ供給部170に渡される。
スケジュール管理部230は、電話を発信するスケジュールのデータを管理する。スケジュールのデータは、電話端末装置300内のスケジュール管理部320が保持する。スケジュールのデータは、電話を発信する日時や、発信後に用いられるシナリオのシナリオ識別情報を含む。スケジュール管理部230は、操作用端末装置600からの操作に基づいてスケジュールのデータを管理する。
図4は、電話端末装置300の概略機能構成を示すブロック図である。図示するように、電話端末装置300は、ネットワークインターフェース部310と、スケジュール管理部320と、発信履歴記憶部330と、発信制御部340と、音声入力部350と、音声出力部360と、対話履歴記憶部370とを含んで構成される。これらの各機能部もまた、例えば、コンピューターと、プログラムとで実現することが可能である。また、各機能部は、必要に応じて、記憶手段を有する。また、各機能部の少なくとも一部の機能を、プログラムではなく専用の電子回路として実現してもよい。各部の機能は、次の通りである。
ネットワークインターフェース部310は、ネットワーク2に対するインターフェースの機能を持つ。ネットワークインターフェース部310は、ネットワーク2内の交換機に対して呼(call)の発信を要求したり、交換機からの呼の着信の通知に対応したりする。また、ネットワークインターフェース部310は、通信相手の電話端末装置との間で音声の送受信を行う。ネットワークインターフェース部310は、その他、ネットワーク2が持つ機能を利用するための各種の制御を行う。
スケジュール管理部320は、自動発信のスケジュールを記憶し、管理する。スケジュール管理部320は、シナリオサーバー装置200内のスケジュール管理部230と協調しながら、自動発信のスケジュールを管理する。自動発信のスケジュールのデータの構成については、後で別の図を参照しながら説明する。
なお、スケジュール管理部320は、少なくとも、通信の接続を行う接続時刻と、通信の接続を行う相手先を識別する相手先識別情報とを、相互に関連付けた発信スケジュールとして保持する。また、スケジュール管理部320は、上記に加えてさらにシナリオ識別情報を関連付けた発信スケジュールを保持するようにしてもよい。
発信履歴記憶部330は、自動発信の履歴を記憶する。具体的には、発信履歴記憶部330は、自動発信を行った日時や、自動発信の相手先の電話番号や、通話が終了した日時等を、履歴データとして記憶する。
発信制御部340は、スケジュール管理部320が管理するスケジュールに基づいて、また電話端末装置300内の時計(クロック)を参照しながら、自動発信を実行するための制御を行う。具体的には、発信制御部340は、スケジュールのデータを読み出し、指定された時刻に、指定された相手先の電話番号に対して発信を行うように、ネットワークインターフェース部310を制御する。つまり、発信制御部340は、発信スケジュールに基づいて接続時刻が到来したときに相手先識別情報によって識別される相手先への通信の接続を行うものである。
音声入力部350は、外部から音声を取得し、その音声を、通話中の相手先に対して送るために、ネットワークインターフェース部310に渡す。具体的には、音声入力部350は、チャットボットサーバー装置100の出力部160から音声を取得する。
音声出力部360は、通話中の相手先からの音声を受け取り、その音声を外部に出力する。具体的には、音声出力部360は、チャットボットサーバー装置100の入力部に音声を渡す。
電話端末装置300が上記のように音声入力部350および音声出力部360を持つことにより、通話の相手先の電話端末装置は、チャットボットサーバー装置100との間での音声によるチャットが行えるようになる。
対話履歴記憶部370は、電話端末装置300と、相手方の電話端末装置との間の対話の履歴を記憶する。なお、対話履歴記憶部370は、単に「履歴記憶部」とも呼ばれる。具体的には、対話履歴記憶部370は、チャットボットサーバー装置100から、対話のテキストデータを受け取り、そのテキストデータを時系列の履歴として保存する。対話履歴記憶部370は、少なくとも、音声生成サーバー装置400によって音声に変換された出力テキストと、音声認識サーバー装置500によって音声から変換された入力テキストとを、時系列に記憶する。対話履歴記憶部370が記憶するデータの構成については、後で別の図を参照しながら説明する。
図5は、シナリオサーバー装置200が提供し、チャットボットサーバー装置100が使用するシナリオデータの構成およびデータ例を示す概略図である。図示するように、シナリオデータは、データ項目として、シナリオ識別情報と、シナリオ名称を持つ。シナリオ識別情報は、1件のシナリオをユニークに識別するための情報である。また、シナリオ名称は、そのシナリオの内容を簡潔に表す言葉である。また、1件のシナリオは、1件または複数件の状況を持つ。1件のシナリオが複数件の状況を持つ場合には、それらの状況は、順序付けられる。各々の状況は、データ項目として、状況識別情報と、内容と、データベースアクセスとを持つ。状況識別情報は、状況をユニークに識別するための情報である。内容は、その状況を表す言葉である。データベースアクセスは、その状況における、チャットボットサーバー装置100内のフロントエンド処理部130による、適用領域データベース140へのアクセスの内容を表す。
図5に示す例では、シナリオ識別情報は「SCE001」である。またシナリオ名称は「アポイントメント獲得」である。また、この例では、シナリオは、4つの状況を持つ。各状況は、1から4まで、順序付けられている。これは、シナリオの実行の際に、順序付けられた状況を順次進めていくべきものであることを表す。例えば、1番目の状況に関して、状況識別情報は「AB456」、内容は「アポイントメントの用件であることを告げる」、データベースアクセスは「−」(なし)である。また、2番目の状況に関して、状況識別情報は「WR020」、内容は「日時を提案する」、データベースアクセスは「読み出し:空きスケジュール」である。これは、当該シナリオを実行する際に、2番目の状況において、フロントエンド処理部130が、適用領域データベース140から空き領域を特定するためのデータを読み出すことを表している。3番目の状況に関して、状況識別情報は「TQ003」、内容は「相手の都合を聞き、決定する」、データベースアクセスは「−」(なし)である。4番目の状況に関して、状況識別情報は「AB460」、内容は「決定したスケジュールを確認する」、データベースアクセスは「書き込み:決定スケジュール」である。これは、当該シナリオを実行する際に、4番目の状況において、フロントエンド処理部130が、出力テキストや入力テキスト等から決定されるスケジュールを適用領域データベース140に書き込むことを表している。
図6は、シナリオサーバー装置200が提供し、チャットボットサーバー装置100が使用するシナリオデータの構成および別のデータ例を示す概略図である。図6に示すデータの構造は、図5に示したデータの構造と同様である。図6に示す例では、シナリオ識別情報は「SCE011」である。またシナリオ名称は「アンケート実施」である。この例では、シナリオは、8つの状況を持つ。各状況は、1から8まで、順序付けられている。例えば、1番目の状況に関して、状況識別情報は「EQ101」、内容は「アンケートの用件であることを告げる」、データベースアクセスは「−」(なし)である。2番目の状況に関して、状況識別情報は「QU101」、内容は「質問1を読み、回答を求める」、データベースアクセスは「読み出し:質問1」である。3番目の状況に関して、状況識別情報は「AN101」、内容は「質問1の回答を得る」、データベースアクセスは「書き込み:回答1」である。4番目および5番目の状況のペアは、質問2に関するものである。さらに、6番目および7番目の状況のペアは、質問3に関するものである。また、8番目の状況に関して、状況識別情報は「EQ801」、内容は「アンケートの謝礼について説明する」、データベースアクセスは「−」(なし)である。このシナリオを実行する際には、シナリオ内に含まれる状況のシーケンスにしたがって、チャットボットサーバー装置100は、質問1から質問3までを順次データベースから読み出し、相手側の電話端末装置800向けに出力する。また、各質問に対応して、チャットボットサーバー装置100は、受け取った入力である回答を、順次データベースに書き込む。
図7は、チャットボットサーバー装置100のチャット出力生成部110が出力するテキストの一例を示す概略図である。図7に示すテキストは、内部のチャットモデルに基づいて、チャットボットサーバー装置100のチャット出力生成部110が生成するものである。生成されるテキストは、「こんにちは。ABC株式会社の佐倉です。次のミーティングの日程調整の件でお電話しています。」という出力テキストである。このテキストは、図5に示したシナリオ(シナリオ識別情報は、SCE001)の、1番目の状況のときに、現状況(状況識別情報は、AB456)と、直前の入力「ヌル」と、直前の出力「ヌル」とに基づいて、チャット出力生成部110が生成するものである。チャットモデルは、このような出力を生成するように、予め学習済みである。この例では、チャット出力生成部110が出力したテキストは、パラメーターを持たない。したがって、このテキストは、そのまま、チャット出力生成部110からフロントエンド処理部130に渡され、さらに、フロントエンド処理部130から出力部160に渡される。
図8は、チャットボットサーバー装置100のチャット出力生成部110が出力するテキストの例と、そのテキスト内に含まれるパラメーターの置換の状況を示す概略図である。図示するように、チャットボットサーバー装置100のチャット出力生成部110が出力するテキストは、「%DATE の %TIME からのご都合はいかがでしょうか。」である。このテキストは、図5に示したシナリオ(シナリオ識別情報は、SCE001)の、2番目の状況のときに、現状況(状況識別情報は、WR020)と、直前の入力「ヌル」と、直前の出力「こんにちは。ABC株式会社の佐倉です。次のミーティングの日程調整の件でお電話しています。」とに基づいて、チャット出力生成部110が生成するものである。チャットモデルは、このような出力を生成するように、予め学習済みである。ここで、チャット出力生成部110が出力するテキスト内の「%DATE」および「%TIME」は、置換されるべきパラメーターである。このようなパラメーターが存在するため、フロントエンド処理部130は、適用領域データベース140を検索する。ここでは、所定の条件に従って、適切な日および時刻を取得するように、フロントエンド処理部130は適用領域データベース140を検索する。その結果として得られた日および時刻の実値を用いて、フロントエンド処理部130は、パラメーターを置換する。その結果、フロントエンド処理部130は、「12月10日の午前10時30分からのご都合はいかがでしょうか。」という出力テキストを、出力部160に渡す。
図9は、チャットボットサーバー装置100に入力されるテキストに基づくデータ抽出の方法の例を示す概略図である。この例において、前提となる現時点での文脈として、シナリオ識別情報は「SCE001」(図5を参照)であり、状況識別情報は「TQ003」(3番目の状況)である。また、既に行った出力において、「2019年12月10日 午前10時30分」という日時を相手側に提案中である。本例では、上記の状況において、相手側からの入力は、「午前11時からにしてもらえますか。」というものである。ここで、この入力を受け取ったフロントエンド処理部130は、この入力が、時刻の変更を含み、日付の情報を含まないことから、上記の文脈にも基づいて、相手側が、「2019年12月10日 午前11時00分」という日時を逆提案していることを理解する。このとき、フロントエンド処理部130は、既存の情報理解技術を用いて、入力から、日時の情報を抽出する。そして、フロントエンド処理部130は、適用領域データベース140を参照して、この日時で決定してよいか否かを判断する。つまり、フロントエンド処理部130は、「2019年12月10日 午前11時00分」にミーティングの予定を入れることが可能か否かを判定する。判定の結果、この日時にミーティングの予定を入れることが可能な場合には、フロントエンド処理部130は、アポイントメントの日時を「2019年12月10日 午前11時00分」と決定し、その日時を適用領域データベース140に書き込む。
図10は、チャットボットサーバー装置100が、相手側と行うチャットのやりとりの例を示す概略図である。ここに示すやり取りは、図5に示したシナリオに基づいて、自動発信システム1と相手側の電話端末装置800との間で行われるものである。また、その際、チャット出力生成部110やフロントエンド処理部130は、図7、図8、図9で説明したように処理を行う。図10に示すように、自動発信システム1は、相手側の電話端末装置800との間で、次のような対話を行う。
(1)まず、自動発信システム1側から発話(出力)する。その内容は「こんにちは。ABC株式会社の佐倉です。次のミーティングの日程調整の件でお電話しています。」というものである。このときの状況は「AB456」である。
(2)続いて、自動発信システム1側から発話(出力)する。その内容は「12月10日の午前10時30分からのご都合はいかがでしょうか。」というものである。このときの状況は「WR020」である。
(3)続いて、自動発信システム1は、相手側からの入力を受ける。その内容は、「12月10日ですね。10時30分はちょっと都合が悪いですね。午前11時からにしてもらえますか。」というものである。このときの状況は「TQ003」である。
(4)自動発信システム1は、適用領域データベース140を参照することにより「午前11時00分」のアポイントメントを受け入れてもよいことを確認する。そして、自動発信システム1は「大丈夫です。12月10日の午前11時00分ですね。」という内容の発話(出力)を行う。このときの状況も「TQ003」である。
(5)続いて、自動発信システム1は、相手側からの入力を受ける。その内容は、「わかりました。ありがとう。」というものである。このときの状況は「AB460」である。
(6)続いて、自動発信システム1は、「予定を入れておきます。どうもありがとうございます。」という内容の発話(出力)を行う。このときの状況も「AB460」である。なお、この状況において、決定したスケジュールが確認できた。したがって、チャットボットサーバー装置100内のフロントエンド処理部130は、シナリオ内の「AB460」での定義にしたがって、決定後の日時である「12月10日 午前11時00分」を適用領域データベース140に書き込む。
図11は、チャットボットサーバー装置100のチャット出力生成部110が出力するテキストの別の例と、そのテキスト内に含まれるパラメーターの置換の状況を示す概略図である。ここで示す例は、図6に示したシナリオ(シナリオ識別情報は、SCE011)に基づいて実行される処理に対応する。当該シナリオの1番目の状況(状況識別情報は「EQ101」)において、チャット出力生成部110が出力するテキストは、「こんにちは。ABCレンタカーの芹澤です。先日ご利用いただいたサービスについてのフィードバックをお願いします。」である。このテキストは、パラメーターを含まないため、そのまま、フロントエンド処理部130から出力部160に渡される。
当該シナリオの2番目の状況(状況識別情報は「QU101」)において、チャット出力生成部110が出力するテキストは、「%QUESTION1」である。この%QUESTION1は、パラメーターである。したがって、フロントエンド処理部130は、適用領域データベース140から、%QUESTION1を置換すべきデータを取得する。そして、フロントエンド処理部130は、適用領域データベース140から取得したデータ(質問1の内容)を用いて、パラメーター%QUESTION1を置換する。その結果として得られる出力テキストは、「窓口担当者の説明はわかりやすかったでしょうか。」である。フロントエンド出力部130は、この置換後のテキストを、出力部160に渡す。出力部160は、この置換後のテキストを出力する。
図12は、チャットボットサーバー装置100が、相手側と行うチャットのやりとりの別の例を示す概略図である。ここに示すやり取りは、図6に示したシナリオに基づいて、自動発信システム1と相手側の電話端末装置800との間で行われるものである。また、その際、チャット出力生成部110やフロントエンド処理部130は、図11で説明したように処理を行う。図12に示すように、自動発信システム1は、相手側の電話端末装置800との間で、次のような対話を行う。
(1)まず、自動発信システム1側から発話(出力)する。その内容は「こんにちは。ABCレンタカーの芹澤です。先日ご利用いただいたサービスについてのフィードバックをお願いします。」というものである。このときの状況は「EQ101」である。
(2)続いて、自動発信システム1側から発話(出力)する。その内容は「最初の質問です。窓口担当者の説明はわかりやすかったでしょうか。」というものである。このときの状況は「QU101」である。
(3)続いて、自動発信システム1は、相手側からの入力を受ける。その内容は、「はい。大変わかりやすかったです。」というものである。このときの状況は「AN101」である。なお、フロントエンド処理部130は、シナリオ内での定義にしたがって、この回答の内容を適用領域データベース140に書き込む。
(4)その後のやりとり(質問2および質問3に対する、それぞれ、回答2および回答3)の記載を、ここでは省略する。
(5)そして、自動発信システム1側から発話(出力)する。その内容は「ご回答いただき、ありがとうございました。登録していただいているご住所宛に、謝礼をお送りします。」というものである。このときの状況は「EQ801」である。
次に、本実施形態内で使用するその他のデータの構成について説明する。
図13は、電話端末装置300のスケジュール管理部320が管理する発信スケジュールのデータの構成例を示す概略図である。図示するように、スケジュールデータは、例えば、表形式のデータとして構成され、発信予定日時、相手先電話番号、シナリオ識別情報の各項目を持つ。この表における1行が、1件の発信に対応する。図示する例では、1行目のデータにおける発信予定日時は、「2019/12/21 16:30:00」である。この日時は、「YYYY/MM/DD hh:mm:ss」(年月日、時分秒)の形式で表される。つまり、このデータでは、発信予定日時は、2019年12月21日 16時30分00秒である。また、相手先電話番号は、ネットワーク2において用いられる相手先の電話番号である。電話番号は、特定の国等の中での番号であってもよいし、国番号を含む番号であってもよい。また、シナリオ識別情報は、その発信をした際に用いるシナリオを特定するために設けられるデータである。例えば、シナリオ識別情報「SCE001」は、図5に例示したシナリオの識別情報である。
なお、前述の通り、発信スケジュールのデータが、シナリオ識別情報を持たないようにしてもよい。
図14は、電話端末装置300の対話履歴記憶部370が記憶する対話履歴のデータの構成例を示す概略図である。既に説明したように、対話履歴記憶部370は、自動発信システム1と相手側との間の対話の記録を保存するためのものである。図示するように、対話履歴のデータは、例えば、表形式で表され、日時、相手番号、区別、内容といった項目を持つ。この表における各行が、1件にイベントに対応する。イベントとは、発信、発話、受話等という単位のものである。ここに例示するデータの1行目は、日時「2019/12/21 16:30:00」に、相手番号「+81−3−1234−5678」に対して、電話の発信が行われたことを記録するものである。また、このデータの2行目は、日時「2019/12/21 16:30:09」に、相手番号「+81−3−1234−5678」に対して、「こんにちは。ABC株式会社の佐倉です。次のミーティングの日程調整の件でお電話しています。」という発話を、自動発信システム1側が行ったことを記録するものである。なお、3行目以後についても同様であるが、ここではその説明を省略する。
図15は、自動発信システム1による処理の手順を示すフローチャートである。以下、このフローチャートに沿って動作手順を説明する。
まず、ステップS1において、電話端末装置300の発信制御部340は、スケジュール管理部320が管理するスケジュールのデータから1件のスケジュールを読み出し、発信時刻と、発信先の電話番号と、シナリオとを決定する。ここで発信制御部340が読み出すスケジュールは、発信時刻が未到来であり且つ発信時刻が最先の1件である。その後、発信制御部340は、当該スケジュールの発信時刻が到来するまで待つ。具体的には、発信制御部340は、例えば電話端末装置300内の時計を参照する。あるいは、発信制御部340は、電話端末装置300内の時計に基づく割り込みにより待ち状態から覚醒する。
次に、ステップS2において、スケジュールされた時刻が到来すると、発信制御部340は、ステップS1で読み出したスケジュールデータ内で決められた相手先電話番号に対して電話の発信を行う。またこのとき、電話端末装置300は、シナリオをチャットボットサーバー装置100に、使用すべきシナリオ識別情報を伝える。このシナリオ識別情報もまた、スケジュールデータ内に含まれているものである。
チャットボットサーバー装置100内のチャット出力生成部110は、上記のシナリオ識別情報の通知を受けると、シナリオ供給部120から当該シナリオ識別情報によって特定されるシナリオを受け取る。
次に、ステップS3において、チャットボットサーバー装置100内のチャット出力生成部110は、シナリオ供給部120から供給されているシナリオデータを参照し、そのシナリオ内に次の状況が存在するか否かを判定する。なお、当初の電話発信時には、当該シナリオの最初の状況が「次の状況」である。次の状況が存在する場合(ステップS3:YES)、次のステップS4に進む。次の状況が存在しない場合、即ち当該シナリオ内のすべての状況が終了している場合(ステップS3:NO)には、本フローチャート全体の処理を終了する。
次に、ステップS4において、チャットボットサーバー装置100内のチャット出力生成部110は、シナリオ内の次の状況を読み出す。チャット出力生成部110は、読み出したこの状況を、現状況(present situation)として扱う。
次に、ステップS5において、チャットボットサーバー装置100内のチャット出力生成部110は、現状況と、直前の出力と、直前の入力とから、出力を生成する。ここで、直前の入力とは、入力部150から入力された入力テキストであって、直前に入力されたものである。また、直前の出力とは、チャット出力生成部110が生成した出力であって、既に出力済み且つ最後の出力である。なお、直前の入力がない場合には、直前の入力を「ヌル」(null)とする。また、直前の出力がない場合には、直前の出力を「ヌル」(null)とする。つまり、この場合にはチャット出力生成部110は、直前の入力または直前の出力の少なくともいずれかがヌルである場合も含めて、チャット出力生成部110は、前記の式(1)にしたがって、今回の出力を生成する。チャット出力生成部110は、生成した出力を、フロントエンド処理部130に渡す。
次に、ステップS6において、チャットボットサーバー装置100内のフロントエンド処理部130は、チャット出力生成部110から渡された出力にパラメーターが含まれていた場合には、そのパラメーターを実値で置換する。具体的には、フロントエンド処理部130は、適用領域データベース140から読み出して情報に基づく実値で、パラメーターを置換する。フロントエンド処理部130は、置換後の出力を、出力部160に渡す。なお、チャット出力生成部110から渡された出力にパラメーターが含まれていなかった場合には、フロントエンド処理部130は、その出力をそのまま出力部160に渡す。
次に、ステップS7において、チャットボットサーバー装置100内の出力部160は、フロントエンド処理部130から渡された出力を、外部に出力する。音声生成サーバー装置400は、その出力を、音声に変換する。音声生成サーバー装置400によって生成された音声を、電話端末装置300が、相手側の電話端末装置800に送る。
次に、ステップS8において、チャットボットサーバー装置100内の入力部150は、相手側からの入力があれば取得する。その具体的な処理は、次の通りである。即ち、相手側の電話端末装置800からの音声は、電話端末装置300を通して、音声認識サーバー装置500に入力される。音声認識サーバー装置500は音声認識処理を行い、相手側からの音声に対応するテキストデータを出力する。チャットボットサーバー装置100内の入力部150は、そのテキストデータ(入力テキスト)を取得する。入力部150は、その入力テキストをフロントエンド処理部130に渡す。なお、入力がない場合、即ち相手側の電話端末装置800からの音声による言語がない場合には、入力部150がフロントエンド処理部130に渡す入力テキストはヌルである。
なお、フロントエンド処理部130は、受け取った入力テキストを、チャット出力生成部110にも渡す。
次に、ステップS9において、ステップS8で取得した入力の中に適用領域データベース140に書き込むべき情報が含まれている場合には、フロントエンド処理部130は、その情報を適用領域データベース140に書き込む。ここで適用領域データベース140に書き込むべきデータとは、相手先との対話(interaction)によって生じた情報あるいは判明した情報を表すデータである。例えば、相手先との対話によってミーティングのアポイントメントが確定した場合には、フロントエンド処理部130は、そのアポイントメントの日時等のデータを適用領域データベース140に書き込む。あるいは、相手先との対話によって当方からの質問(アンケート等)に対する相手方からの回答が得られた場合には、フロントエンド処理部130は、その回答の内容を表すデータを適用領域データベース140に書き込む。あるいは、相手先との対話によって相手先からの注文(商品等の注文)を受け付けた場合には、フロントエンド処理部130は、その注文内容(商品識別番号、数量、金額等)のデータを適用領域データベース140に書き込む。なお、適用領域データベース140に書き込むべきデータがない場合には、フロントエンド処理部130は、本ステップでは何もしない。
次に、ステップS10において、チャットボットサーバー装置100内のチャット出力生成部110は、現状況が終了したか否かを判定する。具体的には、チャット出力生成部110は、直前の出力および直前の入力の内容に基づき、現状況が終了したか否かを判定する。現状況が終了した場合(ステップS10:YES)には、次の状況の処理をするため、ステップS3に進む。現状況が終了していない場合(ステップS10:YES)には、現状況における処理をさらに行うために、ステップS5に進む。
なお、ステップS10におけるより具体的な判定方法の例は、次の通りである。チャット出力生成部110がテキストを出力する状況においては、チャット出力生成部110が機械学習モデルに基づく出力テキストを生成し出力したことを以て、当該状況が終了したと判定することができる。チャット出力生成部110がテキストを入力する状況においては、入力テキストが表す状況と、シナリオに記載された状況とを比較し、シナリオに記載されている状況が達成されている場合にのみ、当該状況が終了したと判定することができる。当該状況が判定していない場合には、チャット出力生成部110は、さらなる出力テキストを生成してもよい。
なお、機械学習モデル自体が、入力テキストに基づいて、状況を終了したか否かを表すフラグ情報を出力するようにしてもよい。その場合には、チャット出力生成部110は、そのフラグを参照することによって状況が終了したか否かを判定できる。
なお、上述した実施形態における、チャットボットサーバー装置100や、シナリオサーバー装置200や、電話端末装置300や、音声生成サーバー装置400や、音声認識サーバー装置500や、操作用端末装置600の、少なくとも一部の機能をコンピューターで実現することができる。その場合、この機能を実現するためのプログラムをコンピューター読み取り可能な記録媒体に記録して、この記録媒体に記録されたプログラムをコンピューターシステムに読み込ませ、実行することによって実現しても良い。なお、ここでいう「コンピューターシステム」とは、OSや周辺機器等のハードウェアを含むものとする。また、「コンピューター読み取り可能な記録媒体」とは、フレキシブルディスク、光磁気ディスク、ROM、CD−ROM、DVD−ROM、USBメモリー等の可搬媒体、コンピューターシステムに内蔵されるハードディスク等の記憶装置のことをいう。さらに「コンピューター読み取り可能な記録媒体」とは、インターネット等のネットワークや電話回線等の通信回線を介してプログラムを送信する場合の通信線のように、一時的に、動的にプログラムを保持するもの、その場合のサーバーやクライアントとなるコンピューターシステム内部の揮発性メモリーのように、一定時間プログラムを保持しているものも含んでも良い。また上記プログラムは、前述した機能の一部を実現するためのものであっても良く、さらに前述した機能をコンピューターシステムにすでに記録されているプログラムとの組み合わせで実現できるものであっても良い。
以上、複数の実施形態を説明したが、本発明はさらに次のような変形例でも実施することが可能である。なお、複数の変形例を、組み合わせることが可能な限りにおいて、組み合わせて実施してもよい。
電話端末装置300が対話履歴記憶部370を持たないように構成してもよい。これにより、電話端末装置300が対話履歴を蓄積することはできなくなるが、自動発信システム1が持つ他の機能は、実現される。
チャットボットサーバー装置100が、学習データ供給部170および学習処理部180を持たない構成としてもよい。この場合にも、既に学習済みのモデルを利用することにより、自動発信システム1は、機能することができる。また、自動発信システム1の外で学習処理を行って、学習済みのモデルをチャット出力生成部110内のモデルに複写するようにしてもよい。
フロントエンド処理部130が、入力テキストから抽出した情報を適用領域データベース140に書き込まないようにしてもよい。この場合、入力テキストに含まれる情報は、適用領域データベース140には残らない。入力テキストに含まれる情報をデータとして残す必要のない種類の業務には、そのような変形例の自動発信システム1を適用することもできる。また、入力テキストに含まれる情報は、すべて、電話端末装置300の対話履歴記憶部370には保存される。
チャットボットサーバー装置1が、フロントエンド処理部130と適用領域データベースとを持たない構成としてもよい。この場合、チャット出力生成部110が生成する出力には、パラメーターを含まないようにする。出力がパラメーターを含まない場合には、フロントエンド処理部130がパラメーターを実値で置換する必要がない。
また、スケジュール管理部が、シナリオ識別情報を持たない構成としてもよい。この場合も、複数のシナリオから1つを選択する形態ではなく、単一のシナリオに基づいて処理を行う自動発信システム1を実現することができる。
また、チャットボットサーバー装置100内のチャット出力生成部110が、シナリオにおける状況と、チャット出力生成部110への入力(入力がヌルである場合も含む)のみに基づいて、出力を生成するようにしてもよい。このような構成では、チャット出力生成部110は、直前の出力テキスト(あるいは、直前の出力テキストに限らない過去の出力テキスト)には依存しない出力テキストを生成することができる。
また、チャットボットサーバー装置100内のチャット出力生成部110が、直前の出力テキストや直前の入力テキストに限らず、過去の出力テキストや過去の入力テキストに応じて、新たな出力テキストを生成するようにしてもよい。その場合、チャット出力生成部110が持つモデル(例えば、ニューラルネットワーク)は、過去の出力テキストや過去の入力テキストをも入力として、出力テキストを生成するように構成され、また、予め機械学習を行っておくようにする。
また、図1では、一形態として自動発信システム1を実現するための装置の構成を示した。しかしながら、装置の構成はこのような形態には限定されない。ある装置が持つ機能をさらに複数の装置が持つように分割したり、逆に複数の装置に分散している機能を1つの装置に統合したりしてもよい。
以上、この発明の実施形態について図面を参照して詳述してきたが、具体的な構成はこの実施形態に限られるものではなく、この発明の要旨を逸脱しない範囲の設計等も含まれる。