(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-11-01
(45)【発行日】2024-11-12
(54)【発明の名称】カスタマイズ可能なチャットボットを実行するための構成可能な会話エンジン
(51)【国際特許分類】
G06F 40/56 20200101AFI20241105BHJP
G10L 13/00 20060101ALI20241105BHJP
G10L 15/22 20060101ALI20241105BHJP
【FI】
G06F40/56
G10L13/00 100M
G10L15/22 300Z
(21)【出願番号】P 2023519205
(86)(22)【出願日】2021-01-16
(86)【国際出願番号】 US2021013778
(87)【国際公開番号】W WO2022071978
(87)【国際公開日】2022-04-07
【審査請求日】2024-01-15
(32)【優先日】2020-09-29
(33)【優先権主張国・地域又は機関】US
【早期審査対象出願】
(73)【特許権者】
【識別番号】506332063
【氏名又は名称】セールスフォース インコーポレイテッド
(74)【代理人】
【識別番号】100107766
【氏名又は名称】伊東 忠重
(74)【代理人】
【識別番号】100070150
【氏名又は名称】伊東 忠彦
(74)【代理人】
【識別番号】100135079
【氏名又は名称】宮崎 修
(72)【発明者】
【氏名】ヤン,シンイー
(72)【発明者】
【氏名】シエ,ティアン
(72)【発明者】
【氏名】ション,カイミング
(72)【発明者】
【氏名】リウ,ウェンハオ
(72)【発明者】
【氏名】ワン,ホワン
(72)【発明者】
【氏名】橋本 和真
(72)【発明者】
【氏名】ゾウ,イーンボー
(72)【発明者】
【氏名】イー,シュイガーン
(72)【発明者】
【氏名】チュイ,ジン
(72)【発明者】
【氏名】ウー,フェイホーン
【審査官】成瀬 博之
(56)【参考文献】
【文献】国際公開第2019/070826(WO,A1)
【文献】米国特許出願公開第2020/0125901(US,A1)
【文献】米国特許出願公開第2018/0025726(US,A1)
【文献】欧州特許出願公開第03531416(EP,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 40/00-40/58
G06F 16/00-16/958
G06N 3/00-99/00
G06Q 10/00-99/00
G10L 13/00-17/26
(57)【特許請求の範囲】
【請求項1】
チャットボットを実施するように構成された会話エンジンによって実行されるコンピュータに実装される方法であって、
チャットボットを実施するように構成された会話エンジンによって、第1クライアントデバイスから、会話エンジン構成を受信するステップであり、
前記会話エンジン構成は、前記チャットボットが存在できる一連の状態、および、前記チャットボットを実施するために各状態において前記会話エンジンによって実行されるアクションを指定している、
ステップと、
前記会話エンジンによって、前記第1クライアントデバイスから、前記チャットボットによりサポートされる複数のタスクを指定しているチャットボット構成を受信するステップであり、
各タスクは、前記チャットボットを介して受信したユーザの要求に応じて実行される
ように構成されている、
ステップと、
前記会話エンジンによって、前記チャットボットの状態を初期化するステップと、
前記会話エンジンによって、
前記受信した会話エンジン構成における状態とアクションの情報、および、前記
受信したチャットボット構成
におけるタスクの情報に従って、前記チャットボットを実施するステップであり、
第2クライアントデバイスから、前記ユーザの発話を受信するステップと、
前記チャットボットの
初期化された状態および前記ユーザの発話の1つ以上の属性に基づいてアクションを実行するステップであり、前記アクションは、
(1)前記ユーザによって要求された
前記ユーザの発話からタスクを識別すること、
(2)前記タスクを実行するために1つ以上のエンティティの値を収集すること、および
(3)前記エンティティの値に基づいて、前記タスクを実行すること、
のうち1つ以上から構成される、ステップと、
実行された前記アクションに基づいて、前記チャットボットの状態を更新するステップと、
前記更新された前記チャットボットの状態に基づいて、応答を生成して、前記第2クライアントデバイスにおいて、前記ユーザに送信するステップと、
を含む、複数のステップを繰り返すことによって、1つ以上のタスクを実行する、ステップと、
を含む、方法。
【請求項2】
前記チャットボットの状態が、各状態変数について、前記状態変数の値に対する前記状態変数の識別子のルックアップテーブルマッピングに保管された一連の状態変数を使用して表される、
請求項1に記載の方法。
【請求項3】
前記状態変数は、前記ユーザのために前記会話エンジンによって生成される前記応答が、所定の情報を前記ユーザに確認するためのものであるか否かを表す、
請求項2に記載の方法。
【請求項4】
前記状態変数は、前記ユーザのために前記会話エンジンによって生成される前記応答が、
(1)前記ユーザにより要求されたタスク、
(2)前記タスクを実行するためのエンティティの値、または、
(3)前記ユーザが前記会話エンジンとの会話を継続することを欲するか否か、
のうち1つを確認するためのものであるか否かを表す、
請求項2に記載の方法。
【請求項5】
前記会話エンジン構成は、前記ユーザの発話に対応するタスクを識別した後で、前記会話エンジンが前記ユーザに確認するか否かを指定する、
請求項1に記載の方法。
【請求項6】
前記会話エンジン構成は、前記タスクを実行するためのエンティティの値を決定した後で、前記会話エンジンが前記ユーザに確認するか否かを指定する、
請求項1に記載の方法。
【請求項7】
前記会話エンジン構成は、前記ユーザの発話が応答に対する回答を提供しなかい場合に、前記会話エンジンが前記応答を繰り返す回数を指定する、
請求項1に記載の方法。
【請求項8】
前記ユーザの発話の属性は、前記ユーザの発話の極性を表し、
前記極性は、
正、
負、または、
中立。
のうち1つである、請求項1に記載の方法。
【請求項9】
前記ユーザの発話の属性は、前記ユーザに対して前記会話エンジンによって提供される、以前の応答に基づいて、前記ユーザの発話が、前記会話エンジンによって期待される情報を含むか否かを表す、
請求項1に記載の方法。
【請求項10】
前記ユーザの発話は、1つ以上の以前のタスクが前記会話エンジンによる実行を完了していない間に、新しいタスクを実行するための要求を表す、
請求項1に記載の方法。
【請求項11】
前記会話エンジンは、前記ユーザとの会話に基づいて、前記ユーザのために前記会話エンジンが現在実行している複数のタスクを表すためのデータ構造を保管する、
請求項1に記載の方法。
【請求項12】
前記会話エンジン構成は、前記ユーザのためのタスクが完了し、かつ、前記データ構造に保管されている未完了のタスクが存在する場合に、前記会話エンジンによって実行されるアクションを決定する、
請求項11に記載の方法。
【請求項13】
前記データ構造は、後入れ先出しのスタックデータ構造である、
請求項12に記載の方法。
【請求項14】
前記ユーザの発話は、前記ユーザによって話された自然言語文の音声信号として受信され、
前記方法は、さらに、
前記ユーザの発話の前記音声信号を、前記会話エンジンによる処理のために、テキスト信号に変換するステップ、
を含む、請求項1に記載の方法。
【請求項15】
前記方法は、さらに、
前記会話エンジン構成の受信に応答して、前記ユーザとのチャットボット会話に基づいて、ユーザの要求を処理するための一連の命令を生成するステップ、
を含む、請求項1に記載の方法。
【請求項16】
前記チャットボット構成は、各タスクについて一式の例示的な句を指定し、
前記会話エンジンによる前記タスクの識別は、
機械学習ベースのモデルを使用して、前記ユーザの発話を、前記チャットボット構成において指定された前記例示的な句とマッチングするステップ、
を含む、請求項1に記載の方法。
【請求項17】
前記機械学習ベースのモデルは、ニューラルネットワークである、
請求項16に記載の方法。
【請求項18】
前記会話エンジンは、複数のテナントについてデータおよびサービスをホストするマルチテナントシステムであり、
前記チャットボット構成は、前記マルチテナントシステムを使用して一連のタスクを実行するテナントに固有である、
請求項1に記載の方法。
【請求項19】
プロセッサおよび非一時的コンピュータ可読記憶媒体を含む、コンピュータシステムであって、
前記非一時的コンピュータ可読記憶媒体は、命令を保管しており、前記命令が、前記プロセッサによって実行されると、前記プロセッサに、
チャットボットを実施するように構成された会話エンジンによって、第1クライアントデバイスから、会話エンジン構成を受信するステップであり、
前記会話エンジン構成は、前記チャットボットが存在できる一連の状態、および、前記チャットボットを実施するために各状態において前記会話エンジンによって実行されるアクションを指定している、
ステップと、
前記会話エンジンによって、前記第1クライアントデバイスから、前記チャットボットによりサポートされる複数のタスクを指定しているチャットボット構成を受信するステップであり、
各タスクは、前記チャットボットを介して受信したユーザの要求に応じて実行される
ように構成されている、
ステップと、
前記会話エンジンによって、前記チャットボットの状態を初期化するステップと、
前記会話エンジンによって、
前記受信した会話エンジン構成における状態とアクションの情報、および、前記
受信したチャットボット構成
におけるタスクの情報に従って、前記チャットボットを実施するステップであり、
第2クライアントデバイスから、前記ユーザの発話を受信するステップと、
前記チャットボットの
初期化された状態および前記ユーザの発話の1つ以上の属性に基づいてアクションを実行するステップであり、前記アクションは、
(1)前記ユーザによって要求された
前記ユーザの発話からタスクを識別すること、
(2)前記タスクを実行するために1つ以上のエンティティの値を収集すること、および
(3)前記エンティティの値に基づいて、前記タスクを実行すること、
のうち1つ以上から構成される、ステップと、
実行された前記アクションに基づいて、前記チャットボットの状態を更新するステップと、
前記更新された前記チャットボットの状態に基づいて、応答を生成して、前記第2クライアントデバイスにおいて、前記ユーザに送信するステップと、
を含む、複数のステップを繰り返すことによって、1つ以上のタスクを実行する、ステップと、
を実施させる、コンピュータシステム。
【請求項20】
命令を保管している非一時的コンピュータ可読記憶媒体であって、
前記命令が、プロセッサによって実行されると、前記プロセッサに、
チャットボットを実施するように構成された会話エンジンによって、第1クライアントデバイスから、会話エンジン構成を受信するステップであり、
前記会話エンジン構成は、前記チャットボットが存在できる一連の状態、および、前記チャットボットを実施するために各状態において前記会話エンジンによって実行されるアクションを指定している、
ステップと、
前記会話エンジンによって、前記第1クライアントデバイスから、前記チャットボットによりサポートされる複数のタスクを指定しているチャットボット構成を受信するステップであり、
各タスクは、前記チャットボットを介して受信したユーザの要求に応じて実行される
ように構成されている、
ステップと、
前記会話エンジンによって、前記チャットボットの状態を初期化するステップと、
前記会話エンジンによって、
前記受信した会話エンジン構成における状態とアクションの情報、および、前記
受信したチャットボット構成
におけるタスクの情報に従って、前記チャットボットを実施するステップであり、
第2クライアントデバイスから、前記ユーザの発話を受信するステップと、
前記チャットボットの
初期化された状態および前記ユーザの発話の1つ以上の属性に基づいてアクションを実行するステップであり、前記アクションは、
(1)前記ユーザによって要求された
前記ユーザの発話からタスクを識別すること、
(2)前記タスクを実行するために1つ以上のエンティティの値を収集すること、および
(3)前記エンティティの値に基づいて、前記タスクを実行すること、
のうち1つ以上から構成される、ステップと、
実行された前記アクションに基づいて、前記チャットボットの状態を更新するステップと、
前記更新された前記チャットボットの状態に基づいて、応答を生成して、前記第2クライアントデバイスにおいて、前記ユーザに送信するステップと、
を含む、複数のステップを繰り返すことによって、1つ以上のタスクを実行する、ステップと、
を実施させる、非一時的コンピュータ可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、一般的に、オンラインシステムにおけるチャットボットの会話に関する。そして、特には、チャットボットを実行するためのカスタマイズ可能な会話エンジンに関する。
【背景技術】
【0002】
オンラインシステムでは、多くの場合、ユーザとの対話(interact)にチャットボットが使用される。チャットボットは、オンラインシステムのユーザに自動会話インターフェイスを提供する。チャットボットにより、ユーザは、例えば、音声や自然言語を使用して、自然な方法でオンラインシステムと対話することができる。チャットボットは、また、会話アシスタント、人工知能(AI)アシスタント、インテリジェント仮想アシスタント、または仮想エージェントとも称される。
【0003】
人工知能ベースのチャットボットは、音声信号として提供され得るユーザの発話を受信し、そして、自動音声認識技術を使用してユーザの発話内の文章を認識する。チャットボットは、機械学習ベースのモデル、例えば、人工ニューラルネットワークを含む、人工知能技術を使用して、ユーザの発話を分析することができる。従来のチャットボットは、典型的に、特定のユーザの発話に応じてチャットボットが実行する必要があるアクションを指定する、ハードココーディングされたスクリプトに基づいている。従って、チャットボットに変更を加えることは煩雑であり、かつ、エラーが発生しやすい。
【図面の簡単な説明】
【0004】
【
図1】
図1は、一実施形態に従った、チャットボットの会話を行うためのシステム環境のブロック図である。
【
図2】
図2は、一実施形態に従った、会話エンジンのシステムアーキテクチャのブロック図である。
【
図3】
図3は、一実施形態に従った、会話エンジンのカスタマイズに使用される会話エンジン構成の例を示す。
【
図4】
図4は、一実施形態に従った、会話エンジン構成の例に基づく会話エンジンロジックのフローチャートを示している。
【
図5】
図5は、一実施形態に従った、情報のないユーザの発話を処理するための会話エンジンロジックのフローチャートを示している。
【
図6】
図6は、一実施形態に従った、情報のあるユーザの発話を処理するための会話エンジンロジックのフローチャートを示している。
【
図7】
図7は、一実施形態に従った、チャットボットのカスタマイズに使用されるタスク構成およびエンティティ構成の例を示している。
【
図8】
図8は、一実施形態に従った、会話エンジンの全体的なプロセスを示すフローチャートである。
【
図9】
図9は、一実施形態に従った、チャットボットのタスクを実行するプロセスを示すフローチャートである。
【
図10A】
図10Aは、一実施形態に従った、会話エンジンによるタスクの実行を示している。
【
図10B】
図10Bは、一実施形態に従った、会話エンジンによるタスクの実行を示している。
【
図10C】
図10Cは、一実施形態に従った、会話エンジンによるタスクの実行を示している。
【
図10D】
図10Dは、一実施形態に従った、会話エンジンによるタスクの実行を示している。
【
図11】
図11は、一実施形態に従った、典型的なコンピュータシステムの機能図を示すブロック図である。
【0005】
図は、説明のみを目的として様々な実施形態を示している。当業者であれば、以下の議論から、ここに示される構造および方法の代替的な実施形態を、ここにおいて説明される実施形態の原則から逸脱することなく、採用することができることを容易に認識するだろう。
【0006】
図は、同様の要素を識別するために同様の参照数字を使用している。「115a」といった、参照数字の後の文字は、テキストがその特定の参照数字を持つ要素を具体的に参照することを示している。「115」といった、後続の文字がないテキスト中の参照番号は、その参照番号を持つ図における要素の一部または全部を参照する。
【発明を実施するための形態】
【0007】
オンラインシステムにより、ユーザは、カスタマイズされたチャットボットを使用してタスクを実行することができる。チャットボットは、ユーザがオンラインシステムを使用して特定の一連のタスクを実行できるようにカスタマイズすることができる。チャットボットにより、ユーザは、会話、例えば、自然言語の会話に基づいてタスクを実行することができる。チャットボットは、ユーザの発話を受信し、そして、ユーザが要求しているタスクを決定する。オンラインシステムは、任意のチャットボット構成を読み取り、そして、そのチャットボットを実装するための命令を実行できるランタイム実行エンジンを表す会話エンジンを実行する。チャットボット全体での会話エンジンの行為(behavior)は、会話エンジン構成を使用してカスタマイズ可能である。会話エンジン構成は、チャットボットが存在できる状態のセット、および、チャットボットを実行するために各状態において会話エンジンによって実行されるアクションを指定する。
【0008】
会話エンジンは、チャットボット全体に適用される会話エンジン構成、および、チャットボットに固有のチャットボット構成を受信する。会話エンジンは、チャットボット構成、並びに、会話エンジン構成に従って、チャットボットを実装する。会話エンジンは、チャットボットの状態を初期化する。会話エンジンは、次のステップを繰り返すことにより各タスクを実行する。会話エンジンは、ユーザの発話を受信し、そして、そのユーザの発話の属性を決定する。例えば、会話エンジンは、ユーザの発話に情報が含まれているか否か、ユーザの発話の極性、などを判断することができる。
【0009】
会話エンジンは、チャットボットの状態およびユーザの発話の属性に基づいてアクションを実行する。アクションは、以下の1つ以上を実行する。(1)ユーザにより要求されるタスクを特定する、(2)タスクの実行に必要な情報、例えば、タスクに関連するエンティティの値、を収集する、(3)チャットボットの状態を更新する、ことである。アクションは、複数の反復(iteration)にわたり実行することができる。例えば、タスクが複数のエンティティの値を必要とする場合、会話エンジンは、値を決定するために複数の反復を実行することができる。各反復において、会話エンジンは、応答(response)を生成し、そして、応答をユーザに対して送信する。それに続いて受信したユーザの発話は、新しい反復が開始する。会話が進むにつれて、上記のステップが繰り返される。
【0010】
システム環境
図1は、一実施形態に従った、チャットボット会話を行うためのシステム環境100のブロック図である。システム環境100は、クライアントデバイス115を介してユーザと通信するオンラインシステム120を含んでいる。オンラインシステム120は、会話エンジン150およびデータストア160を含んでいる。オンラインシステム120は、
図1に示されていない他のコンポーネント、例えば、他のタイプのデータストア、外部システムインターフェイス、などを含むことができる。システム環境100は、
図1に示されていない他の要素、例えば、ネットワークを含むことができる。オンラインシステム120は、ここにおいて、システムとして称され得る。
【0011】
オンラインシステム120のユーザ105、110は、クライアントデバイス115を使用してオンラインシステムと対話する。一部のユーザは、特権ユーザであってよく、例えば、チャットボットおよび会話エンジンを維持および構成するシステム管理者105である。他のユーザ110は、単に、オンラインシステムによって提供される機能を使用して、例えば、チャットボットを使用して、オンラインシステムによってサポートされる様々なタスクを実行する。
【0012】
会話エンジン150は、チャットボットを使用してユーザ110との会話を実行する。オンラインシステム110により、システム管理者105は、チャットボット構成125を使用してチャットボットをカスタマイズすることができる。オンラインシステム110により、ユーザは、会話エンジン構成155を使用して構成エンジンの実行をさらにカスタマイズすることができる。
図1に示されるように、システム管理者105は、クライアントデバイス115aを使用して、チャットボット構成125および会話エンジン構成155をオンラインシステム120に提供することができる。
【0013】
会話エンジン150は、一連のタスク、例えば、オンラインシステムによって実行されるタスク、を実行するようにカスタマイズされた、チャットボットを実装(または、実行)することができる。ユーザは、チャットボットを実装する会話エンジン150と対話することによって、チャットボットと対話する。会話エンジン150は、各チャットボットに対して個別の状態およびデータ構造を維持することによって、複数のチャットボットを実行することができる。例えば、会話エンジンは、複数の仮想マシンを実行することができ、各仮想マシンは、チャットボットを実行する。会話エンジン150によって実行される各チャットボットは、一連のタスクを実行するように構成されている。異なるチャットボットは、異なる一連のタスクを実行することができる。さらに、異なるチャットボットは、異なるように構成され得るので、同じタスクを実行するための異なる一連の命令を実行することができる。例えば、あるチャットボットが、特定の一連の命令を実行してチェックオーダ(check-order)タスクを実行し、そして、別のチャットボットが、別の一連の命令を実行してチェックオーダタスクを実行することができる。
【0014】
会話エンジン構成155は、チャットボットの全てのタスクに適用可能な会話エンジンの行為を指定する。さらに、会話エンジン構成155は、会話エンジン150によって実行され得る複数のチャットボットに適用可能な会話エンジン150の行為を指定する。会話エンジン構成155は、どのように会話エンジンがユーザの発話を処理するかを指定することができる。例えば、会話エンジン構成155は、ユーザが、「オーケー(“ok”)」といった、情報のない発話を提供したときに、会話エンジン150によって実行されるアクションを指定することができる。会話エンジン構成155は、会話エンジン150がユーザにさよなら(goodbye)を告げる応答を送信して、ユーザとの会話を終了するまでに、ユーザが情報のないユーザの発話を提供できる回数を指定することができる。
【0015】
チャットボット構成125は、システム管理者105といったユーザから受信され、そして、会話エンジン150によって処理される。チャットボット構成125により、ユーザは、会話エンジン150で使用されるチャットボットを構成およびカスタマイズすることができる。チャットボットは、ユーザが特定の一連のタスクを実行できるようにカスタマイズすることができる。特定のタイプのトランザクションを実行する企業は、チャットボットをカスタマイズして、ユーザがオンラインシステム120と会話して、例えば、認証の実行、トランザクションの実行、トランザクションの状態の確認、トランザクションのキャンセルなど、トランザクションに関連するタスクを実行できるようにすることができる。
【0016】
一実施形態において、チャットボット構成125は、タスク構成130およびエンティティ構成135を含んでいる。タスク構成130は、チャットボットを使用してユーザが実行できるタスクを指定する。エンティティ構成135は、タスクを実行するために必要な値を表すエンティティを記述する情報を指定する。例えば、オーダのステータスを確認するために、オンラインシステム120は、オーダが行われた日付、オーダを行うために使用されたアカウントといった、オーダを識別するためのオーダIDまたは1つ以上の値を必要とする。エンティティ構成135は、エンティティの値を決定する方法を指定する。例えば、あるエンティティは、データベースにアクセスすることによって決定され、別のエンティティは、ウェブサービスと通信することによって決定され、別のエンティティは、ユーザに尋ねることによって決定され、別のエンティティは、システムコマンドを実行することによって決定され得る。
【0017】
図4は、タスク構成130およびエンティティ構成135の説明的な例を提供している。各タスクについて、タスク構成130は、タスクの実行に関連する一連のエンティティを指定する。エンティティによって表される値は、ユーザによって提供されてよく、もしくは、例えば、データストア160にアクセスすることにより、または、所定のサービス、例えば、Webサービスを呼び出すことにより、会話エンジン150によって決定されてよい。例えば、タスクがオーダのステータスの取得(retrieving)を表す場合、タスクに関連するエンティティは、オーダIDおよびオーダ自体のステータスを含んでいる。会話エンジン150は、例えば、オーダIDを要求する質問を生成すること、または、オーダIDにアクセスするために使用できるオーダの日付といった情報を要求することによって、ユーザからオーダIDを獲得することができる。会話エンジン150は、データストア160からオーダステータスにアクセスし、そして、オーダステータス情報をユーザに提供することができる。
【0018】
会話エンジン150は、構成125に従って、ユーザ110との会話を実行する。会話エンジン150は、ユーザの発話140を受信し、そして、ユーザの発話に基づいてタスクを実行する。会話エンジン150は、例えば、データストア160に保管されている情報にアクセスし、または、データストア160に保管されている情報を更新するために、データストア160と対話してタスクを実行することができる。会話エンジン150は、システム応答145を生成し、そして、ユーザに提供することができる。システム応答145は、タスクの実行に必要な追加情報を要求するためにユーザに送信されてよい。システム応答145は、タスクが完了したことをユーザに通知し、または、要求された情報をユーザに提供することができる。
【0019】
いくつかの実施形態において、オンラインシステム120は、複数のテナントがシステムを使用することを可能にするマルチテナントシステムであり、各テナントはユーザのグループを表している。テナントという用語は、マルチテナントシステムの顧客である組織または企業を指す。テナントという用語は、マルチテナントシステムの顧客である組織全体のユーザのセット、または、組織のユーザのサブセットを指すことができる。従って、実施形態において、テナント固有のチャットボットは、例えば、組織のユーザのセット全体、組織内の特定のユーザグループ、または組織内の個々のユーザなど、一連のユーザについてカスタマイズされ得る。マルチテナントシステムは、複数のテナントのデータを保管し、そして、テナントがマルチテナントシステムで実行されているアプリケーションを共有できるようにする。マルチテナントシステムは、テナントが実行できる様々なアプリケーションを実行することができる。
【0020】
データストア160は、オンラインシステム120のユーザのデータを保管している。マルチテナントシステムは、複数のテナントのデータを同じ物理データストア、例えば、データストア160に保管するが、テナントにわたるデータの論理的な分離を実施する。その結果、そうしたデータが明示的に共有されていない限り、あるテナントは、別のテナントのデータに対するアクセスを有さない。データストア160は、1つ以上のテーブルを保管するリレーショナルデータベースとして実装することができる。
【0021】
図1に示されるオンラインシステム120およびクライアントデバイス115は、コンピューティングデバイスを表している。コンピューティングデバイスは、例えば、Microsoft
TM Windows
TM互換オペレーティングシステム(OS)、Apple
TM OS X、及び/又は、Linux(登録商標) OSを実行する従来のコンピュータシステムであってよい。コンピューティングデバイスは、また、パーソナルデジタルアシスタント(PDA)、携帯電話、ビデオゲームシステム、等といった、デバイスであってもよい。
【0022】
クライアントデバイス115は、ネットワーク(
図1に示されていない)を介してオンラインシステム120と対話することができる。ネットワークは、伝送制御プロトコル/インターネットプロトコル(TCP/IP)、ユーザデータグラムプロトコル(UDP)、インターネット制御メッセージプロトコル(ICMP)、等のネットワークプロトコルを使用する。ネットワーク上で交換されるデータは、ハイパーテキストマークアップ言語(HTML)、拡張マークアップ言語(XML)、等を含む技術及び/又は形式を使用して表すことができる。
システムアーキテクチャ
【0023】
図2は、一実施形態に従った、会話エンジンのシステムアーキテクチャのブロック図である。オンラインシステム120は、音声認識モジュール210、状態マネージャ220、意図検出モジュール230、タスク実行モジュール250、応答生成モジュール260、構成ストア270、エンティティ認識モジュール280、および、機械学習モジュール290を含んでいる。他の実施形態は、ここで説明されているものとは異なる、かつ/あるいは、他のコンポーネントを有することができる。さらに、ここで説明されている機能は、異なる方法でコンポーネント間に分散することができる。
【0024】
構成ストア270は、チャットボット構成および会話エンジン構成を保管する。チャットボット構成、または、会話エンジン構成は、例えば、XMLやYMLファイルの構成ファイルとして保存することができる。構成ストア270は、ファイルシステム、または、例えば、リレーショナルデータベースなどのデータベースであってよい。
【0025】
会話エンジン150により、ユーザは、オンラインシステム120を使用してタスクを実行することができる。例えば、オンラインシステムが電子商取引(e-commerce)ウェブサイトを実装している場合、会話エンジン150は、ユーザが、オンライントランザクションの実行、トランザクションの状態の確認、進行中のトランザクションのキャンセル、といったトランザクションに関連するタスクを実行できるようにする。
【0026】
会話エンジン150は、ユーザと自然言語の会話を実行する。会話エンジン150は、ユーザからの発話を受信する。発話は、ユーザがテキストを入力できるユーザインターフェイスを介してテキスト信号として、または、音声信号をキャプチャするマイクに話しかけることができるユーザインターフェイスを介して音声信号として、受信することができる。ユーザが会話のために音声ベースのインターフェイスを使用している場合、会話エンジン150は、音声認識モジュール210を使用して、受信した音声信号を、さらなる処理のためのテキストへ変換する。
【0027】
会話エンジン150は、情報を受信するためにユーザに質問することができる。会話エンジン150は、ユーザに提示されるダイアログを生成する。会話エンジン150は、ユーザから自然言語による回答を受信する。会話エンジンは、会話の状態を追跡して、様々な質問が回答されていることを確認する。会話エンジン150は、ユーザから受信した回答を他の様々なモジュールに提供する。
【0028】
状態マネージャ220は、チャットボットの状態を維持する。会話エンジン150が単一のチャットボットを実装している場合、チャットボットの状態は、会話エンジンの状態と見なすことができる。この状態は、チャットボットを介してユーザとの会話を実行するために使用される。会話エンジン150が特定のタイプの情報を確認している場合、会話エンジンは、確認されている情報のタイプを表すために状態を使用する。それに続いて、会話エンジンは、確認を示すユーザの発話を受信した場合、その状態を使用して、確認されている情報のタイプを判断する。例えば、会話エンジン150が、続行するか否かを確認している場合、会話エンジン150は、状態変数confirm_continueを真(true)に構成する。従って、後に続くユーザの発話が、肯定的な極性を表している、はい(yes)とユーザが言ったことを示している場合、会話エンジンは、状態変数confirm_continueおよびユーザの発話の極性属性に基づいて、次に実行するアクションを決定する。
【0029】
一実施形態において、状態マネージャ220は、一連の状態変数を保管しているデータ構造を保管し、各状態変数は、会話の属性を追跡している。属性は、会話で現在処理されているタスクのタイプを表すことができる。状態マネージャ220は、チャットボットの状態(state)の表現として状態変数の配列(array)を保管することができる。以下は、チャットボットの状態の表現としての、状態変数の配列の例である。状態マネージャ220は、状態変数を初期化し、そして、次いで、会話が進むにつれて、それらを更新する。一実施形態において、状態マネージャ220は、様々な状態変数を状態変数の値にマップし、そして、会話エンジンが状態変数の名前を使用して、任意の状態変数の値をルックアップできるようにする、例えば、辞書構造などの、ルックアップテーブルを維持する。
【表1】
【0030】
上記のリストにおいて、状態変数cur_taskは、現在実行されているタスクのタイプを保管し、状態変数cur_entity_typeは、値が決定されているエンティティのタイプを保管し、状態変数confirm_continueは、チャットボットが、ユーザが会話の継続を望んでいるかを、ユーザと確認しているか否かを示し、状態変数task_stackは、現在実行されている全てのタスクを保管するスタックデータ構造を保管し、状態変数num_turnsは、ゴール(例えば、エンティティの価値を決定すること)の達成に向けてユーザと実行した多数の反復を保管し、状態変数prev_taskは、実行されていた以前のタスク表し、状態変数entity_methodは、現在処理されているエンティティの値を決定する方法を表している、等。
【0031】
タスク実行モジュール250は、チャットボットの会話を介してユーザにより要求されるタスクを実行する。タスク実行モジュール250は、タスクの実行のために必要なデータにアクセスし、または、データを更新するために、他のコンポーネント、例えば、データストア160と対話することができる。タスク実行モジュール250は、アドレスを確認するために、外部サービス、例えば、マッピングサービスと対話することができる。
【0032】
一実施形態において、タスク実行モジュール250は、一連のタスクを保管するタスクデータ構造を維持する。例えば、タスクデータ構造は、スタックデータ構造であってよく、または、キューデータ構造であってもよい。タスクデータ構造は、状態変数としてアクセス可能であり得る。タスク実行モジュール250がタスクを実行する場合、タスク実行モジュール250は、タスクオブジェクトをタスクデータ構造に保管する。タスクオブジェクトは、タスクのタイプを指定し、そして、タスクの実行に必要な様々なエンティティを保管しているスロットを含んでいる。タスク実行モジュール250は、タスクデータ構造からタスクを取得して処理する。
【0033】
タスク構成は、タスクの実行に他の関連タスクの実行が必要であることを指定することができる。例えば、トランザクションの実行を表すタスクを実行するために、システムは、トランザクションを表す別のサブタスクを実行する前に、ユーザの認証を表すサブタスクを実行する。従って、タスクを実行するために、タスク実行モジュール250は、タスクデータ構造に他のタスクを追加することができる。タスク実行モジュール250は、タスクを終了すると、タスクデータ構造をチェックして、未完了のタスクが存在するかを判断する。タスクデータ構造において未完了のタスクが存在するとタスク実行モジュール250が判断した場合、タスク実行モジュール250は、未完了のタスクを検索し、そして、実行する。タスク実行モジュール250は、全てのタスクが実行されるまで、タスクデータ構造に保管されている未完了のタスクの処理を継続する。
【0034】
一実施形態において、タスク実行モジュール250は、タスクを表すツリーデータ構造を維持する。ツリーデータ構造は、
図10A-
図10Dに示されている。ツリーデータ構造は、ルートノードを含んでいる。タスク実行モジュール250は、ルートノードのサブノードとしてユーザにより要求されるタスクを追加する。タスクがサブタスクを要求する場合、サブタスクも、また、ツリーデータ構造に追加される。例えば、サブタスクは、ルートノードの下に別のタスクとして追加され、または、サブタスクを作成した親タスク内にネストされ得る。
【0035】
タスク実行モジュール250により、ユーザは、以前のタスクが完了していない間に新しいタスクを要求することよって、コンテキストスイッチを実行することができる。ユーザがコンテキストスイッチを実行する場合、タスク実行モジュール250は、新しいタスクをタスクデータ構造に追加する。タスク実行モジュール250は、例えば、後入れ先出し(last-in-first-out)のスタックデータ構造を使用して、タスクが処理されている順序を追跡する。タスク実行モジュール250は、タスクを完了し、そして、次いで、未完了である別のタスクを選択するためにタスク構造をチェックする。一旦、タスクが完了すると、タスクは、スタックデータ構造から削除される。
【0036】
音声認識モジュール210は、入力として音声信号を受信し、そして、さらなる処理のために音声信号をテキストに変換する。音声認識モジュール210により、ユーザは、音声を使用してオンラインシステム120との会話を行うことができる。音声認識モジュール210の出力は、オンラインシステム120の他のモジュールへの入力として提供される。一実施形態において、音声認識モジュール210は、言葉(word)が正しく転写された可能性を示す、認識された言葉の信頼レベルを提供する。
【0037】
意図検出モジュール230は、ユーザの発話に基づいて、ユーザの意図を決定する。意図は、ユーザが実行したいタスクを表すが、他のタイプの情報を表わすこともできる。意図検出モジュール230は、所与の自然言語表現によってユーザが意図することができるであろう、様々な可能なアクションを表す一連の意
図202を保管する。例えば、いくつかの例の意図は、ユーザの電子メールアドレスを変更したい、ユーザの物理的なメーリングアドレスを変更したい、電子メッセージの作成を開始したい、等のユーザの願望を表すことができる。意図は、各意図の表現が他の意図と異なる限り、任意の方法(例えば、整数や文字列として)で表現することができる。
【0038】
意図検出モジュール230は、各意図について、一連の例示的な自然言語表現を追加的に保管する。意図の例は、それらの表現を使用するユーザの部分における意図を示すことが知られている、自然言語形式の代表的な表現である。実施例は、テキストといった、任意の適切な形式で保管することができる。いくつかの実施例において、意図検出モジュール230は、各意図に対して概ね5個の例を保管する。データ科学者または他の知識のあるユーザについて直接的に提供することが容易に実現可能である量の例である。例えば、ユーザの電子メールアドレスを変更したい願望を表す意図に対する例は、{「メールアドレスを更新したい(“I want to update my email address”)」、「メールアドレスを変更する必要がある(“I need to change my email address”)」、「メールアドレスを更新しろ(“Update my email address”)」、「メールアドレスを変更してください(“Please change my email address”)」、「メールを更新しろ(“Update my email”)」}であってよい。オンラインシステム120が複数のテナントのデータを保管する実施形態において、各テナントが、自身の一連の固有の意図および実施例を持つことができ、従って、テナントが動作しているドメインに合わせて調整された、自然言語理解を可能にしている。
【0039】
実施例に従って、ニューラルネットワークは、入力として自然言語の文(sentence)および例示的な句(phrase)を受信し、そして、例示的な句が、自然言語の文から推論できるか否かを判断するように構成されている。例示的な句は、自然言語の文が例示的な句を含意する場合、自然言語の文から推論することができる。例示的な句は、別の自然言語の文であってよく、または、自然言語の文の一部であってもよい。
【0040】
一実施例において、ニューラルネットワークは、例示的な句が自然言語の要求から推論できる、信頼の尺度(measure)を示す信頼スコアを生成する。例えば、信頼の尺度が高いほど、例示的な句が自然言語の要求から推論できる可能性が、より高いことを示す。2個の例示的な句が与えられると、どの例示的な句が自然言語要求の意図をよりよく反映しているかを判断するために、自然言語文に対するニューラルネットワークによって、生成されたスコアを比較することができる。さらに、一連の例示的な句が与えられると、そのセットからの自然言語文と例示的な句のペアを入力として使用してニューラルネットワークを実行し、スコアを生成することができる。スコアを比較して、自然言語文の意図を表すベストマッチングの例示的な句を決定することができる。ニューラルネットワークは、自然言語文、および、それらから推論できる例示的な句のペアを保管したラベル付きトレーニングデータセットを使用して、トレーニングすることができる。
【0041】
一実施形態において、意図検出モジュール230は、ユーザの所与の自然言語表現に対して、可能性のある様々な意図のうち、もしあれば、どれが最も適用可能であるかを決定する。そのために、意図検出モジュール230は、所与の第1自然言語表現および所与の第2自然言語表現に対して、第1自然言語表現がテキスト的に第2自然言語表現を伴う可能性を示すスコアを決定するニューラルネットワークを使用する。(第1自然言語表現は、テキスト上第2自然言語表現を伴うと言われている。-あるいは、同等に、第2自然言語表現は、第1自然言語表現から推論可能であると言われている。-第1自然言語表現を読んだ人間が、第2自然言語表現が最も可能性が高いと考える場合。例えば、「メールアドレスを変更したい(“I would like to change my email address”)」という表現は、テキスト上で「ユーザ情報を変更しろ(“Change user information”)」という表現を含んでいる。なぜなら、人間は第1表現に照らして、第2表現が実際に要求されていると結論付ける可能性が高いからである。)
【0042】
機械学習モジュール290は、自然言語要求のいくつかのペアおよび対応する例示的な句を含むなるラベル付きデータセットを使用して、ニューラルネットワークをトレーニングする。意図に対応する例示的な句は、システム管理者によって提供されるタスク構成130において指定することができる。トレーニングへの入力は、順序付けられた自然言語表現のペアのセットであり、ペアの第1表現がペアの第2表現をテキストで伴うか伴わないかを示す各ペアのラベルと共にある。そうしたペアおよび対応するラベルは、適切な前処理(例えば、含意(entailment)を示すコーパスラベルをバイナリの「真(“true”)」値に変換し、そして、矛盾を示すラベル、または含意も縮約(contraction)も示さないラベルをバイナリの「偽(“false”)」値に変換する)を用いて、SNLI、MNLI、WNLIといったコーパスから取得することができる。バート(BERT、Bidirectional Encoder Representations from Transformers)といった技術を使用して、入力ペアおよびラベルが与えられると、ニューラルネットワークをトレーニングすることができる。
【0043】
そうしたいくつかの実施形態において、機械学習モジュール290は、また、他のタイプのモデルもトレーニングする。例えば、意図検出モジュール230は、機械学習モジュール290を使用して、所与の自然言語表現についてユーザの意図を直接予測する意図分類モデルをトレーニングすることができる。具体的に、上記のように所与の自然言語表現に適用すると決定された意図は、その表現の「ソフト(“soft”)」ラベルとして扱われる。生成された意図ラベルを持つそうした全ての表現のセットは、次いで、機械学習モジュール290への入力として機能し、それは、教師あり学習アルゴリズムを使用して、ユーザの意図を直接的に予測する意図分類モデルを生成する。
【0044】
エンティティ認識モジュール280は、ユーザによって要求される、許可されたアクションに関連するエンティティを識別する。エンティティは、システムがタスクを実行するために決定する値を指す。例えば、ユーザを検証するタスクを実行するために、システムは、ユーザの名前、ユーザの郵便番号、ユーザの電子メール、などの1つ以上を決定することができる。トランザクションのレコードを取得(retrieve)するために、システムは、トランザクションに関連付けられた日付とタイムスタンプ、レコード識別子、等、レコードを一意に識別するための情報を必要とし得る。タスク構成(task configurations)では、タスクの実行に必要なエンティティのタイプを指定する。
【0045】
エンティティ認識モジュール280は、エンティティ構成で指定されるように、エンティティタイプのエンティティを認識するための異なる方法(method)を実行することができる。例えば、ここにおいて提供されている例示的な構成Cでは、郵便番号エンティティタイプに対して、(1)名前付き(named)エンティティ認識、(2)スペル、(3)正規の表現、(4)ファジィマッチングを含む4個の方法が指定されている。
【0046】
エンティティ認識モジュール280は、文(sentence)を入力として受信し、かつ、1つ以上の名前付きエンティティ及びそのタイプを識別する、名前付きエンティティ認識モデルに対して文を提供することによって、名前付きエンティティ認識を実行する。名前付きエンティティは、例えば、人の名前、組織、場所、時間表現、数量、貨幣価値、割合、などの事前定義されたカテゴリのセットに関連付けられたエンティティである。一実施形態において、名前付きエンティティ認識モデルは、既知の名前付きエンティティを持つ文を使用してトレーニングされるニューラルネットワークである。一例として、「今週末までにテレビをサンノゼに届けたい(“I want a television to be delivered to San Jose by end of this week”)」という入力文を例に取ると、名前付きエンティティ認識モデルは、以下の、名前付きエンティティのカテゴリ及びその値を認識する。カテゴリ 製品、値「テレビ(“television”)」;カテゴリ 時間、値「週末(“end of week”)」;カテゴリ 場所、値「サンノゼ(“San Jose”)」。
【0047】
エンティティ認識モジュール280は、エンティティのユーザにスペリング(spelling)を提供すること及びユーザに確認を求めることによって、または、ユーザにエンティティのスペリングを求めることによって、エンティティ認識のためのスペリング方法を実行する。エンティティ認識モジュール280は、入力文の様々な部分をエンティティ構成で指定された正規の表現(regular expression)とマッチングし、かつ、正規の表現に一致する文の部分を選択することによって、エンティティ認識の正規の表現方法を実行する。エンティティ認識モジュール280は、入力文の部分をエンティティ構成で指定されたサンプル式とファジィ(fuzzy)マッチングを実行することによって、エンティティ認識のためのファジィマッチング方法を実行する。文の部分が、ファジィマッチングに基づく例との一致度が高いと判断された場合、エンティティ認識モジュール280は、文の部分が、エンティティ構成において方法が指定されたエンティティタイプであると判断する。
【0048】
会話エンジン構成
図3は、一実施形態に従った、会話エンジンのカスタマイズに使用される会話エンジン構成の例を示す。
図3に示されるように、会話エンジン構成は、チャットボットが各状態にあるときに実行できるいくつかの状態とアクションを識別する。以下の例は、チャットボットおよび会話エンジンを相互互換的に参照し得るが、会話エンジンは、異なる時間または同時に、異なるチャットボットを実行することができる。
【0049】
チャットボットによって実行される会話は、ユーザとチャットボットとの間の一連の対話を含み得る。典型的に、会話は、ユーザが最初の発話を提供することで開始する。チャットボットは、ユーザの発話に応じて、何らかのアクションを実行し、そして、応答を提供することができる。ユーザは、応答に基づいて、別の発話を提供することができる。この対話は、複数回繰り返され得る。例えば、チャットボットは、ユーザの発話を分析して、ユーザが1つ以上のエンティティを必要とする特定のタスクを要求していることを判断し、各エンティティは、要求されたタスクを実行するために使用される値を表している。チャットボットは、ユーザと対話してエンティティの値を要求することができる。従って、チャットボットは、1つ以上の応答をユーザに送信することができ、各応答は、特定のエンティティの値を要求していうる。一旦、タスクに関連する全てのエンティティが決定されると、チャットボットは、タスクを実行することができる。チャットボットは、タスクが完了したことを示す応答を送信することができる。チャットボットは、さらに、ユーザが別のタスクを実行することを欲する否かをユーザに尋ねることができる。従って、チャットボットとユーザとの間のこの一連の対話は、新しいタスクに対して繰り返され得る。
【0050】
一実施形態において、チャットボットにより、ユーザは、例えば、チャットボットがタスクT1を実行するためにユーザと対話している間に、タスクT2を要求することによって、タスク間でコンテキストスイッチ(context switch)を行うことができる。従って、チャットボットは、ユーザにより要求される複数のタスクを同時に実行することができる。一実施形態において、タスクは、タスクを完了するために実行する必要がある他のサブタスクを含み得る。従って、チャットボットは、複数のタスクを同時に実行することができる。それらがより大きなタスクの一部だからである。
【0051】
一実施形態において、会話エンジン構成は、ユーザの発話の属性を表すフラグを指定する。極性フラグは、ユーザの発話の極性を表すことができ、ここで、極性は、正(positive)、負(negative)、または中立(neutral)のいずれかである。got_infoフラグは、会話エンジンによってユーザに提供された以前の応答に基づいて、ユーザの発話が会話エンジンによって期待される情報を含むか否かを表すことができる。ユーザの発話が期待される情報を含まない場合、会話エンジンはgot_infoフラグを偽(“false”)に構成するか、または、会話エンジンはgot_infoフラグを真(“true”)に構成する。
【0052】
所与の状態において、チャットボットは、フラグの値に応じて異なるアクションを実行する。例えば、
図3に示されるように、会話エンジン150が状態S1にあり、かつ、フラグF1のユーザの発話を受信した場合、会話エンジン150は、アクションA1を実行する。会話エンジン150が状態S1にあり、かつ、フラグF2のユーザの発話を受信した場合、会話エンジン150は、アクションA2を実行する。会話エンジン150が状態S2にあり、かつ、フラグF3のユーザの発話を受信した場合、会話エンジン150は、アクションA3を実行する。会話エンジン150が状態S2にあり、かつ、フラグF4のユーザの発話を受信した場合、会話エンジン150は、アクションA4を実行する。
【0053】
以下は、会話エンジン構成155(構成A)の一例を示している。各行の後の括弧内の参照は、行を識別するために示されており、そして、命令の一部ではない。
【表2】
【0054】
会話エンジン構成155は、A1-A6行において一連のフラグ、A7-A11において状態、および、A12-A34において、状態とフラグの所与の組み合わせに対して実行されるアクションを表すロジックを指定する。A2行のフラグgot_infoは、ユーザの発話が何らかの情報(例えば、ユーザの発話のエンティティの値または意図)を提供したか否かを示している。情報を提供しないユーザの発話の一例は、ユーザが単に「オーケー」と言うことである。ユーザの発話が情報を提供する場合、フラグgot_infoは真に構成され、そうでなければ、偽に構成される。
【0055】
フラグの別の例は、ユーザの発話が正の値を示すか又は負の値を示すかを表す極性(行A3)がある。例えば、チャットボットがユーザに値が正しいか否かを確認するように求め、そして、ユーザが「はい」と応答した場合に、極性は、1または真になり、一方で、ユーザが「いいえ」と応答した場合に、極性フラグは、0または偽になる。フラグno_info_turn(行A4)は、ユーザが、情報を提供しないユーザの発話を提供した回数を表す。フラグgot_intent(行A5)は、ユーザの発話がタスクを表す意図の値を提供したか否かを示す。フラグgot_entity(行A6)は、ユーザの発話がエンティティの値を提供したか否かを示す。
【0056】
フラグ値は、ユーザの発話ごとに更新される。例えば、極性フラグは、現在の発話に基づいて決定され、以前の発話の極性値は現在の発話に基づいて決定された値に置き換えられる。同様に、got_infoは、最も最近の発話が提供された情報を受信したか否かを示し、no_info_turnは、最も最近のユーザの発話に基づくカウント値を表す。
【0057】
状態変数は、保存され、かつ、ユーザの発話にわたり適用可能な値を表している。例えば、状態変数cur_taskは、現在のタスクが存在するか否かを表し、状態変数confirm_continueは、現在の会話に基づいてユーザが続行するのを欲する否かについて、ユーザが確認することをチャットボットが期待するか否かを示し、状態変数confirm_entityは、現在の会話に基づいてユーザがエンティティの値を確認することをチャットボットが期待するか否かを示し、状態変数confirm_intentは、現在の会話に基づいてユーザが意図の値を確認することをチャットボットが期待するか否かを示す、など。
【0058】
一実施形態において、会話エンジン構成は、フラグ値および状態値の組み合わせをハンドラに対してマップする。ハンドラは、1つ以上のアクションを実行する一連の命令を表している。従って、会話エンジンは、会話エンジン構成で指定されたフラグおよび状態の対応する値が、現在の状態値およびフラグ値と一致したときに、ハンドラで指定されたアクションを実行する。
【0059】
図4は、一実施形態に従った、会話エンジン構成の例基づく会話エンジンロジックのフローチャートを示している。上に示した例示的な会話エンジン構成は、会話エンジンによって処理され、
図4-
図6に示されるように、チャットボットを処理するための命令を生成する。構成の全ての行が、
図4-
図6に示されているわけではない。
【0060】
会話エンジン150はユーザの発話を受信し410、そして、ユーザの発話を分析する415。分析は、例えば、ニューラルネットワークを使用し得る意図検出モジュール230を使用して、ユーザの発話の意図を決定することを含み得る。分析は、また、ユーザの発話の意図に対応するタスクに関連する1つ以上のエンティティがユーザの発話に含まれるか否かを決定することもできる。
【0061】
会話エンジン150は、ユーザの発話にが、フラグgot_infoによって示される情報を含む否かを判断する(420)。この情報は、ユーザの発話に基づいて意図が決定されたか否か、または、ユーザの発話に基づいて何らかのエンティティが抽出されたか否かを表すことができる。フラグ「not got_info」に対応する構成は、ユーザの発話に情報が含まれていないことを示す偽としてのgot_infoフラグ値を有するユーザの発話を処理するための命令を表し、そして、フラグ「got_info」に対応する構成は、ユーザの発話に、例えば、意図情報またはエンティティ情報などの情報が含まれていることを示す真としてのフラグ値を有するユーザの発話を処理するための命令を表している。
【0062】
会話エンジン150が、ユーザの発話に情報が含まれていないと判断した場合420、会話エンジン150は、情報なしの発話の処理を実行し425、そうでなければ、会話エンジン150は、情報を伴う発話の処理を実行する430。どちらの状況においても、会話エンジン150は、処理後の状態を更新し435、そして、次のユーザの発話を受信する410から開始する、上記のステップを繰り返す。
【0063】
図5は、一実施形態に従った、情報のないユーザの発話を処理するための会話エンジンロジック425のフローチャートを示している。会話エンジン構成の「not got_info」部分は、タスク構造に未完了のタスクがあるか否かのチェック510を表すフラグ「not cur_task」のチェックを含んでいる。処理のためのタスクが残されていない場合、チャットボットは、ユーザの発話の極性がニュートラルであるか否か(行A20)をチェックする520。ユーザの発話の極性は、「はい」といった肯定的な発話でも、「いいえ」といった否定的な発話でもない、「こんにちは(“hello”)」といったものをユーザが言った場合は、ニュートラルであり得る。ユーザの発話の極性がニュートラルである場合に、チャットボットは、カウンタnum_turnsによって示されるターン数が閾値を超えているか否かを(行A25)チェックして535、ユーザが「こんにちは」といったニュートラルなものを閾値の数以上に繰り返したことを示す。num_turnsが閾値を超えた場合、チャットボットは、ユーザにさよなら(goodbye)応答(行A22)を提供して540、会話を停止するか、または、チャットボットは、挨拶応答(行A23)をユーザに提供して545、ユーザが何をしたいかを尋ねる。ユーザが、単に「はい」又は「いいえ」と言ったなど、チャットボットが、応答の極性が中立ではないと判断した場合520、チャットボットは、チャットボットがユーザに対して生成した最後の応答を繰り返し、チャットボットが要求していたことをユーザに通知する。
【0064】
図6は、一実施形態に従って、行A26-A34で示される情報を用いて発話を処理430するための会話エンジンロジックのフローチャートを示している。
【0065】
チャットボットが、ユーザが意図を確認する(行A27)ことを期待している場合610、チャットボットは、ハンドラtask_confirm_handlerを実行する(行A28)。チャットボットが、ユーザがエンティティを確認する(行A29)ことを期待している場合620、チャットボットは、ハンドラentity_confirm_handlerを実行する行A30)。チャットボットが新しい意図を判断した(行A31)という発話に基づいて判断した場合630、チャットボットは、新しいタスクの処理命令を含むハンドラgot_new_taskを実行する(行A32)。got_new_taskハンドラは、チャットボットにタスク構造(例えば、新しいタスクを処理するタスクツリー)を構築させ得る。新しいタスクを実施するために実行する必要があるサブタスクが存在する場合、チャットボットは、サブタスクを実行することができる。例えば、サブタスクは、ユーザのIDの確認を表すことができる。チャットボットがユーザから新しいエンティティを受信したことを判断した場合640(行A33)、チャットボットは、受信した新しいエンティティを処理するための命令を含むハンドラentity_info_handlerを実行する(行A33)。
【0066】
会話エンジン構成は、他の命令を含むようにユーザによって変更することができる。例えば、フラグgot_infoが偽であり、かつ、チャットボットがユーザとの意図を確認するか、または、ユーザとのエンティティを確認する必要がある場合に処理する。
【0067】
チャットボット構成
会話エンジン構成は、チャットボットおよびタスク全体にわたり適用可能である。また、会話エンジンは、チャットボットに固有のチャットボット構成を受信し、そして、ロードする。チャットボット構成は、チャットボットに固有のタスクおよび各タスクを実行するための命令を指定する。
【0068】
図7は、一実施形態に従った、チャットボットのカスタマイズに使用されるタスク構成およびエンティティ構成の例を示している。一実施形態において、オンラインシステム120は、システム管理者がタスク構成およびエンティティ構成を保管する構成ファイルに保管できる情報を提供するためのユーザインターフェイスを提示する。
図7に示されるように、複数のタスク構成130を指定することができ、特定のチャットボットの各タスク構成ファイルは、一連のタスク用にカスタマイズされている。例えば、タスク構成130aは、タスクT1およびT2の構成を指定し、一方で、タスク構成130bは、タスクT2およびT3の構成を指定する。
【0069】
各タスク構成は、他の詳細の中で、タスクの実行に関連するエンティティを指定する。例えば、タスク構成130で指定されるように、タスクT1は、エンティティE1およびE2を使用し、一方で、タスクT2は、エンティティE2およびE3を使用する。2個の異なる構成ファイルのタスクの仕様は、異なってよい。従って、異なるエンティティは、2個の異なるタスク構成の同じタスクに関連付けられているものとして指定することができる。例えば、タスク構成130bは、タスクT2がエンティティE3およびE4を使用することを指定し、一方で、構成130bは、タスクT2がエンティティE2およびE3を使用することを指定する。
【0070】
エンティティ構成135は、異なるエンティティタイプについて方法を指定する。例えば、エンティティ構成135は、エンティティタイプE1、E2、E3、およびE4を指定する。さらに、エンティティ構成135は、エンティティタイプE1を処理する方法M1およびM2、エンティティタイプE2を処理する方法M3、エンティティタイプE3を処理する方法M4およびM5、エンティティタイプE4を処理する方法M6を指定する。一実施形態において、エンティティ構成は、タスク構成とは独立して指定される。従って、エンティティ構成は、チャットボットが使用するタスク構成とは独立して使用される。他の実施形態において、エンティティ構成は、タスク構成に固有であり得る。従って、チャットボットが対応するタスク構成を使用しているときはいつでも、エンティティ構成が使用される。一実施形態において、システムは、タスク固有のエンティティ構成およびタスクに依存しない構成の組み合わせを使用することができる。例えば、いくつかのエンティティタイプは、タスク構成とは独立して指定され、そして、いくつかのエンティティタイプは、特定のタスク構成に対して指定されている。
【0071】
一実施形態において、同じエンティティタイプは、タスク独立エンティティ構成における1個の構成およびタスク固有エンティティ構成における別の構成を有し得る。タスク固有エンティティ構成は、エンティティ構成が指定されている特定のタスクを識別する。例えば、タスク固有エンティティ構成は、タスクT1についてエンティティタイプE1のエンティティ構成を指定することができる。タスク固有エンティティ構成は、チャットボットがそのタスク、例えば、タスクT1、を使用している場合に使用される。同じエンティティタイプが、他のタスク、例えば、タスクT2およびT3、に使用され得る。タスク構成を使用するチャットボットがタスクT2およびT3といった他のタスクを指定する場合は、タスクに依存しないエンティティ構成からのエンティティ指定が使用される。
【0072】
以下は、タスクcheck_orderを指定するタスク構成(構成B)の一例を示している。以下は、1個のタスクのみを示しているが、タスク構成では、任意の数のタスクを指定することができる。
【表3】
【0073】
タスクの構成は、説明(description)(行B2)、1つ以上のサンプル(行B3-B8)、1つ以上のエンティティタイプ(行B9-B13)、および、成功基準(success criterion)(行B14-B21)を含んでいる。サンプルは、その特定のタスクを要求するユーザによって使用され得る自然言語の文の例を指定する。エンティティタイプは、そのタスクに関連するエンティティを識別する。成功基準は、タスクを正常に完了するために実行する必要がある処理を指定する論理表現であり得る。処理は、タスクを正常に完了するために実行する必要がある特定のエンティティアクションを指定することができる。タスクの成功を記述する表現が、エンティティE1およびE2に関連付けられたエンティティアクションに対して実行されるOR演算である場合、E1またはE2のいずれかが対応するエンティティアクションを実行して正常に評価されれば、タスクは完了する。従って、OR表現のサブ表現(sub-expression)のいずれかが正常に評価される場合に、OR表現は正常に評価される。AND表現の全てのサブ表現が正常に評価される場合に、AND表現は正常に評価され、ユーザが認証のその部分を正常に検証したことを示している。
【0074】
オンラインシステムは、タスク構成において指定できる一連のエンティティアクションをサポートしている。例えば、タスク構成は、オンラインシステムがエンティティ情報を提供することを指定している、エンティティアクションINFOを指定することができる。エンティティアクションQUERYは、ユーザが提供した情報に基づいて、オンラインシステムがエンティティを検索することを指定する。同様に、エンティティアクションINSERTは、ユーザが提供した情報に基づいて、オンラインシステムがレコードを挿入することを指定する。エンティティアクションDELETEは、ユーザが提供した情報に基づいて、オンラインシステムが識別されたレコードを削除することを指定する。エンティティアクションUPDATEは、ユーザが提供した情報に基づいて、オンラインシステムが識別されたレコードを更新することを指定する。同様に、システムは、他のアクションをサポートすることができる。ユーザは、プログラミング言語を使用して指定された関数や方法などを使用して、エンティティ機能(function)を定義することができる。
【0075】
以下は、エンティティ構成ファイル 構成C)の一例である。
【表4】
【0076】
これは、タスク、例えば、verify_user task(行C1)の実行中に使用されるタスク固有のエンティティ構成である。エンティティ構成は、2個のエンティティタイプemail_address(行C2-C7)およびzip_code(行C8-C17)を指定する。各エンティティタイプについて、エンティティ構成は、エンティティのタイプの値(行C3-C4、行C9-C10)、エンティティに関連付けられた1つ以上の方法(行C5-C6、行C11-C17)、および、確認フラグ(行C7、行C27)を指定する。確認フラグは、エンティティについて決定された値が正しい場合に、システムがユーザに確認する必要があるか否かを指定する。例えば、会話エンジンは、「メールアドレスはabc@email.comということですか?」といった質問をすることができる。エンティティタイプemail_addressについて、指定されたタイプは「電子メール(“email”)」であり、単一の方法「スペリング(“spelling”)」が指定され、そして、確認フラグの値は「はい(“yes”)」である。エンティティタイプzip_codeについて、4個の方法が指定されている。名前付きエンティティ認識(ner、行C12)、スペリング(行C13)、正規の表現(regex、行C14行)、および、ファジィマッチング(行C15-C17)である。これらの方法の詳細について、ここにおいて、でさらに説明される。
【0077】
いくつかの実施形態において、タスク構成は、ユーザ定義のエンティティ関数を指定する。ユーザ定義のエンティティ関数は、言語、例えばPYTHONといったプログラミング言語を使用して指定することができる。例えば、上記の例示的なタスク構成は、エンティティzip_codeに対応する郵便番号の天気をチェックする、関数funcGetWeather(行C27)を指定している。関数funcGetWeatherは、天気情報を提供するWebサービスと対話するための命令を含み得る。関数funcGetWeatherは、特定の郵便番号について気象条件を提供するために、ユーザとの会話の最中に会話エンジンによって呼び出すことができる。
【0078】
一実施形態において、エンティティ構成は、会話の最中に会話エンジンによってユーザに提供される応答を定義する、「応答(“response”)」属性(行C28)を指定する。応答は、オンラインシステムが「応答」属性を指定するエンティティを処理した後に、会話エンジンによって提供される。一実施形態において、
「応答」属性は、エンティティに関連付けられた値を含むテンプレートを指定する。例えば、上記の例の「zip_code」エンティティの「応答」属性は、funcGetWeatherの出力が文字列「現在の天気は(“The weather currently is”)」に追加され、ユーザの質問に応答してユーザに提供されることを指定することができる。従って、「応答」属性により、ユーザは、エンティティに関連付けられた応答をカスタマイズすることができる。エンティティ構成が「応答」属性が指定しない場合、会話エンジンは、デフォルトの応答を使用することができる。例えば、エンティティ値に追加される文字列「その値は(“The value is”)」といったステートメントである。同様に、「プロンプト(“prompt”)」属性により、ユーザは、デフォルトのプロンプトを使用する代わりに会話エンジンがユーザからの値を要求したときに、ユーザに対して表示されるプロンプトをカスタマイズすることができる。
【0079】
各方法の命令はファイルに保管され、そして、エンティティを処理するためにアクセスすることができる。システムは、決定された値がタイプに準拠していることを確認するために、エンティティタイプのタイプに関連付けられた特定のチェックを実行することができる。例えば、タイプEMAILは、特定のフォーマットを指定することができる。
【0080】
いくつかの実施形態において、エンティティ構成は、テキスト文字列および値の組み合わせを含む、テンプレートとして質問を指定する。例えば、エンティティ構成は、「何(“What is”)+entity_name」という質問を指定することができる。会話エンジンは、ユーザに尋ねるためのテンプレートに基づいて質問を生成する。会話エンジン150は、ユーザに尋ねるための質問を生成するために一式のデフォルトテンプレートを保管している。会話エンジン150は、エンティティ構成をチェックして、エンティティ構成が特定のコンテキストについて質問ためのテンプレートを指定しているか否かを判断する。エンティティ構成が、その特定のコンテキストについて質問のためのテンプレートを指定している場合に、会話エンジン150は、エンティティ構成のテンプレートを使用し、または、そうでなければ、会話エンジン150は、デフォルトのテンプレートを使用する。
【0081】
コンテキストの一例は、無効であるエンティティタイプの値をユーザが提供することである。会話エンジンは、受信した値を処理して、受信した値のエラーのタイプを判断する。エンティティ構成は、特定のタイプのエラーについて質問のためのテンプレートを指定する。エラーが、エンティティ値の正しくないフォーマットにより生じたフォーマットエラーである場合に、会話エンジンは、質問においてエンティティタイプについてフォーマット情報を提供するテンプレートを使用する。例えば、ユーザの発話が無効なフォーマットを有するオーダ番号を提供した場合、会話エンジンは、以下の質問を生成し、そして、ユーザに「オーダ番号は3文字と3桁の数字の組み合わせですが、有効なオーダ番号を教えていただけますか?」と尋ねる。従って、エンティティ構成は、チャットボットの会話の最中にエンティティ値を取得するための一連の質問を含んでいる。
【0082】
会話エンジンの実行
チャットボットの会話においてユーザによって提供される発話の意図の決定に関連する様々なプロセスが、
図8-
図9に示されている。他の実施形態は、これらのフローチャートのステップを異なる順序で実行することができる。さらに、様々な実施形態は、ここで説明されているものとは異なる、かつ/あるいは、追加のステップを含むことができる。
【0083】
図8は、一実施形態に従った、ユーザの発話を処理する全体的なプロセスを示すフローチャートである。会話エンジン150は、所与のチャットボットを実行するように構成された会話エンジンの行為を指定する会話エンジン構成を受信する810。会話エンジン構成は、所与のチャットボットが存在できる状態のセット、および、任意のチャットボットを実行するために会話エンジンが各状態において実行されるアクションを指定する。会話エンジン150は、チャットボットがサポートするタスクを指定するチャットボット構成を受信する。会話エンジン150は、例えば、全ての状態およびフラグの値をリセットすることによって、チャットボットの状態を初期化する。
【0084】
会話エンジン150は、チャットボット構成に従ってチャットボットを実行し、ステップ840、850、および860を繰り返すことによってタスクを実行する。会話エンジン150は、ユーザの発話を受信する。会話エンジン150は、会話エンジン構成で指定されたフラグに対応するユーザの発話の属性を決定する。会話エンジン150は、チャットボットの状態およびユーザの発話の属性に基づいて、実行されるべきアクションを決定する。これらのアクションは、会話エンジン150に、(1)ユーザにより要求されるタスクを特定すること、(2)タスクを実行するために必要な情報、例えば、タスクによって処理されるエンティティ、を収集すること、(3)チャットボットの状態を更新すること、等を含む、様々なステップを実行させる。アクションは、複数の反復にわたり、これらのステップを実行することができる。例えば、会話エンジンは、1回の反復でユーザの意図を判断し、各反復においてエンティティの値を決定することができる。会話エンジン150は、特定されたアクションを実行し、そして、上記のステップを繰り返す。会話エンジン150は、各反復においてチャットボットの状態を更新することができる。会話エンジン150は、また、各反復の終了時に応答を生成し、そして、ユーザに送信することもできる。ユーザに応答を提供した後で、会話エンジン150は、次の反復のためにユーザの発話を受信する。会話エンジン150が会話を終了すべきであると判断した場合に、会話エンジン150は、ユーザにさよならを告げるさよなら応答(goodbye response)を生成し、そして、ユーザとのセッションを終了する。
【0085】
図9は、一実施形態に従った、カスタマイズされたチャットボットを使用してタスクを実行するプロセスを示すフローチャートである。会話エンジン150は、チャットボット構成125を受信する910。チャットボット構成125は、タスク構成130およびエンティティ構成135を含んでいる。従って、会話エンジン150は、タスク構成130を受信し920、そして、エンティティ構成135を受信する930。
【0086】
会話エンジン150は、ユーザとの会話に基づいて、ユーザにより要求されるタスクの処理を実行するために、ステップ940、950、960、および970を繰り返す。会話エンジン150は、ユーザの発話を受信する940。会話エンジン150は、ユーザの発話に基づいて、ユーザにより要求されるタスクを判断する950。一実施形態において、会話エンジン150は、ユーザにより要求されるタスクのタイプを識別するために、ユーザの発話を、チャットボットによってサポートされる異なるタイプのタスクに関連付けられた例示的な句と比較する。例えば、会話エンジン150は、ニューラルネットワークを使用して、ユーザの発話を例示的な句と比較することができる。
【0087】
会話エンジン150は、タスク構成に基づいて、要求されたタスクの処理に関連するエンティティのタイプを決定する。会話エンジン150は、要求されたタスクの処理に関連するエンティティの値を決定する。各エンティティは、エンティティ構成において定義されたエンティティタイプに対応する方法に基づいて、決定することができる。例えば、会話エンジン150は、エンティティの所定のタイプの値についてユーザに尋ねることができ、会話エンジン150は、データベースからエンティティの値にアクセスすることができ、会話エンジン150は、エンティティの値を決定するためにWebサービスにアクセスすることができる、など。会話エンジン150は、決定されたエンティティの値に基づいて、タスクを実行する。
【0088】
図10A-
図10Dは、一実施形態に従った、会話エンジンによるタスクの実行を示している。会話エンジンは、ユーザが「オーダを確認したい(“I would like to check order”)」というユーザの発話を提供することに応答して、
図10Aに示されるようなタスク構造を構築する。会話エンジンは、ユーザの発話の分析に基づいて、それがcheck order_task(行B1)に対応するか否かを判断する。例示的な構成Bに従って、タスクの正常な完了(行B14-B21)は、task verify_user(ノード1015)を実行すること、および、エンティティE1およびE2(それぞれノード1012および1018)の値を決定することを含む。従って、会話エンジン150は、check_order task1020およびverify_user1008をルートタスクに追加する。ユーザ検証タスクは、ノード1005および1010として表されるエンティティE1(email_address)およびE2の検証を含んでいる。会話エンジンは、ユーザに電子メールアドレスの提供を要求する応答を生成する。一旦、ユーザが電子メールアドレスを提供すると、ユーザから受信した電子メールアドレスがノード1022に入力される。会話エンジンは、タスクツリーに従ってタスクの処理を継続する。
【0089】
システムがチェックオーダ(check order)に関連する会話を実行している間に、ユーザは、コンテキストスイッチすることができる。例えば、ユーザは、所定の企業の株価をチェックするようにシステムに要求する質問をすることができる。会話エンジンは、新しいタスクcheck_stock(
図10Bにおけるノード1025)をルートノードに追加する。会話エンジンは、2個のタスクを追跡する。会話エンジンは、タスクcheck_stockを実行する。タスクcheck_stockが完了すると、会話エンジンは、タスクcheck_orderを完了することに戻る。会話エンジンは、システムがタスクcheck_stockへとコンテキストスイッチを実行したときにタスクcheck_orderが残っていた状態からタスクcheck_orderを再開する。例えば、check_stockタスクを完了した後で、会話エンジンは、ノード1028を実行するためにユーザの郵便番号についてユーザに尋ねることができる。
【0090】
ユーザが別のオーダについてオーダの確認を再び要求した場合、会話エンジンは、セッションのために利用可能な情報を再利用する。例えば、電子メールアドレスおよび郵便番号が既にユーザから要求されているので、会話エンジンは、verify_userタスクを再び度実行する必要はない。タスク構造を維持することで、会話エンジンは、このセッション中に以前に情報が要求されたか、または、再び必要であるか判断することができる。会話エンジンは、単に新しいオーダID(ノード1032、
図10C)を提供するようにユーザに要求するだけであり、そして、新しいタスクを実行することができる。
【0091】
会話の最中に、会話エンジンにより、ユーザは、追加のタスクを要求することができる。例えば、ユーザは、「ピザをあと3枚オーダしたい(“I want to order 3 more pizzas”)」と発話し得る。会話エンジンは、ユーザが新しいタスクupdate_orderを要求していると判断し、そして、ノード1035(
図10D)を追加する。会話エンジンは、update orderタスクも、また、会話エンジンがユーザを検証する必要があると判断する。しかしながら、現在のセッションにおいて、会話エンジンは、以前のタスクに基づいてユーザが検証されたことを確認し、そして、それに応じて、新しいverify_userタスク(ノード1038、
図10D)に、ノード1008について以前に獲得された結果が読み込まれる。新しいタスクupdate_orderは、会話エンジンに、オーダを更新するための数量(ノード1040)を決定するように要求する。「ピザをあと3枚オーダしたい」というユーザの発話は、ユーザの意図、並びに、エンティティ情報、つまり、ノード1040について数量を提供する。
【0092】
一実施形態において、会話エンジンは、ユーザインターフェイスを介して表示するためにタスク構造の視覚化を生成する。視覚化は、
図10A-
図10Dに示されるスクリーンショットに対応している。視覚化は、会話エンジンのテストおよびデバッグに使用され得る。この実施形態において、会話エンジンは、各段階でツリー構造を分析して、ツリー構造を表すイメージを生成し、そして、ユーザインターフェイスを介して生成されたイメージをレンダリングする、ユーザインターフェイスマネージャを含んでいる。
【0093】
コンピュータのアーキテクチャ
図11は、一実施形態に従った、
図1の環境100に示されたエンティティの1つとして使用される典型的なコンピュータシステムの機能図を示す高レベルのブロック図である。チップセット1104に結合された少なくとも1つのプロセッサ1102が示されている。チップセット1104に結合されているのは、また、メモリ1106、ストレージ装置1108、キーボード1110、グラフィックスアダプタ1112、ポインティングデバイス1114、ネットワークアダプタ1116である。ディスプレイ1118は、グラフィックスアダプタ1112に結合されている。一実施形態において、チップセット1104の機能は、メモリコントローラハブ1120およびI/Oコントローラハブ1122によって提供される。別の実施形態において、メモリ1106は、チップセット1104の代わりに、プロセッサ1102に直接的に結合されている。
【0094】
ストレージ装置1108は、ハードドライブ、コンパクトディスク読み取り専用メモリ(CD-ROM)、DVD、または、ソリッドステートメモリデバイスといった、非一時的コンピュータ可読記憶媒体である。メモリ1106は、プロセッサ1102によって使用される命令およびデータを保持している。ポインティングデバイス1114は、マウス、トラックボール、または、他のタイプのポインティングデバイスであってよく、そして、コンピュータシステム1100にデータを入力するためにキーボード1110と組み合わせて使用される。グラフィックスアダプタ1112は、ディスプレイ1118にイメージおよび他の情報を表示する。ネットワークアダプタ1116は、コンピュータシステム1100をネットワークに接続する。
【0095】
当技術分野で知られているように、コンピュータ1100は、
図11に示されているものとは異なる、かつ/あるいは、他のコンポーネントを有することができる。加えて、コンピュータ1100は、所定の示されたコンポーネントを欠くことができる。例えば、オンラインシステム120として動作するコンピュータシステム1100は、キーボード1110およびポインティングデバイス1114を欠いてよい。さらに、ストレージ装置1108は、コンピュータ1100からローカル及び/又はリモートに存在し得る(ストレージエリアネットワーク(SAN)内で具現化される、といったもの)。
【0096】
コンピュータ1100は、ここで説明する機能を提供するためのコンピュータモジュールを実行するように適合されている。ここで使用される「モジュール(“module”)」という用語は、特定の機能を提供するためのコンピュータプログラム命令および他のロジックを指す。モジュールは、ハードウェア、ファームウェア、及び/又は、ソフトウェアにおいて実装することができる。モジュールは、1つ以上のプロセスを含むことができ、かつ/あるいは、プロセスの一部のみによって提供される。モジュールは、典型的に、ストレージ装置1108に保管されており、メモリ1106にロードされ、そして、プロセッサ1102によって実行される。
【0097】
図1のエンティティによって使用されるコンピュータシステム1100のタイプは、実施形態およびエンティティが使用する処理能力に依存して異なり得る。例えば、クライアントデバイス115は、処理能力が限られた携帯電話であり、小さなディスプレイ1118であり、そして、ポインティングデバイス1114を欠いてよい。対照的に、オンラインシステム120は、ここで説明する機能を提供するために一緒に動作する複数のブレードサーバを含むことができる。
【0098】
追加的な考慮事項
コンポーネントの特定のネーミング、用語の大文字化、属性、データ構造、または、他のプログラミングまたは構造的側面は、必須もしくは重要ではなく、そして、説明された実施形態を実装するメカニズムは、異なる名前、形式、またはプロトコルを有し得る。さらに、システムは、説明されるように、ハードウェアおよびソフトウェアの組み合わせを介して、または、完全にハードウェア要素において実装され得る。また、ここにおいて説明される様々なシステムコンポーネント間の機能の特定の分割は、単に例示的なものであり、そして、必須のものではない。単一のシステムコンポーネントによって実行される機能は、代わりに、複数のコンポーネントによって実行されてよく、そして、複数のコンポーネントによって実行される機能は、代わりに、単一のコンポーネントによって実行されてよい。
【0099】
上記の説明の一部では、情報に対する操作のアルゴリズムおよび記号表現の観点で特徴を表している。これらのアルゴリズムの説明および表現は、データ処理技術における当業者が自分の研究(work)の内容を最も効果的に他の当業者に伝えるために使用する手段である。これらの操作は、機能的または論理的に説明されている一方で、コンピュータプログラムによって実装されると理解されている。さらに、また、一般性を失うことなく、これらの操作の構成を、モジュールとして、または、機能名で参照することは、時に便利であることも証明されている。
【0100】
上記の説明から明らかなように、特に明記されていない限り、説明の全体を通して、「処理(“processing”)」、「計算(“computing”)」、「計算(“calculating”)」、「決定(“determining”)」、「表示(“displaying”)」など、といった用語を使用した説明は、コンピュータシステムメモリ、またはレジスタ、もしくは他のそうした情報ストレージ、伝送、または表示デバイスにおける物理的(電子的)量として表されるデータを操作して、変換する、コンピュータシステム、または同様の電子計算デバイスに係る操作およびとプロセスを指していると理解される。
【0101】
ここにおいて説明される所定の実施形態は、アルゴリズムの形式で説明されるプロセスステップおよび命令を含んでいる。実施形態のプロセスステップおよび命令は、ソフトウェア、ファームウェア、またはハードウェアにおいて具体化することができ、そして、ソフトウェアにおいて具体化される場合は、リアルタイムネットワークオペレーティングシステムによって使用される異なるプラットフォームに常駐するようにダウンロードされ、そして、そこから、操作され得ることに注意すべきである。
【0102】
説明された実施形態は、また、ここでの操作を実行するための装置にも関連する。装置は、必要な目的のために特別に構築されてよく、または、コンピュータによってアクセスされ得るコンピュータ可読媒体に保管されたコンピュータプログラムによって選択的に起動され、または、再構成される汎用コンピュータを含み得る。そうしたコンピュータプログラムは、これらに限定されるわけではないが、フロッピー(登録商標)ディスク、光ディスク、CD-ROM、磁気光学ディスク、リードオンリーメモリ(ROM)、ランダムアクセスメモリ(RAM)、EPROM、EEPROM、磁気カードまたは光学カード、特定用途向け集積回路(ASIC)を含む任意のタイプのディスク、または、電子命令を保管するのに適した任意のタイプのメディアといった、非一時的コンピュータ可読記憶媒体に保管され、そして、それぞれがコンピュータシステムバスに接続され得る。さらに、明細書で言及されているコンピュータは、単一のプロセッサを含んでよく、または、計算能力を高めるために複数のプロセッサ設計を採用したアーキテクチャであってよい。
【0103】
ここにおいて示されているアルゴリズムおよび操作は、任意の特定のコンピュータまたは他の装置と本質的に関連していない。様々な汎用システムは、また、ここにおける教えに従ってプログラムと共に使用されてもよく、または、必要な方法ステップを実行するためのより専門的な装置を構築するのに便利であることが証明され得る。これらの様々なシステムに必要な構造は、同等のバリエーションと共に、当業者にとっては明らかであろう。加えて、本実施例は、任意の特定のプログラミング言語を参照して説明されるものではない。ここにおいて説明されているように、実施形態に係る教えを実装するために、様々なプログラミング言語を使用し得ることが理解される。
【0104】
実施形態は、多数のトポロジーにわたる多種多様なコンピュータネットワークシステムに良好に適している。この分野において、大規模ネットワークの構成および管理は、異なるコンピュータおよびストレージ装置と、インターネットといった、ネットワークを介して通信可能に結合されている、ストレージ装置およびコンピュータを含む。
【0105】
最後に、本明細書で使用されている言語は、主に読み易さと説明の目的で選択されており、そして、発明の技術的事項(subject matter)を描写または限定するために選択されてたものではないことに注意すべきである。従って、本実施形態の開示は、説明的であるように意図されているが、限定的なものではない。