(57)【要約】【課題】システム構築と変更が容易であり、多種多様なセンサに柔軟に対応でき、また少量のデータで効率的に学習が実現でき、推定精度も高い情報処理装置を提供する。【解決手段】情報処理装置は、種々のセンサから得られる各々のイベントの内容を、入力同期併合処理部、学習データ処理部を通じて、条件判断処理部に引き渡す。これらは定義ファイルにて複数回使用することが可能であり、これらを組み合わせることで、複雑なデータフローを容易に形成し、多種多様なＡＤＬの識別あるいは推定を行うことができる。【選択図】図３
2019169147.tif 000002
【特許請求の範囲】
【請求項１】
時系列データを所定の時間間隔毎に区切り、日時情報とタグ名を付したイベントとして出力する入出力整形処理部と、
主入力側のイベントと副入力側のイベントを併合し、日時情報とタグ名を付した単一のイベントに変換して出力する入力同期併合処理部と、
単一のイベントに含まれるデータに対し、所定の条件判断を行い、条件判断の結果に応じて異なるイベントを出力する条件判断処理部と、
単一のイベントに含まれるデータを特徴ベクトルとして学習型情報処理装置に転送し、受信した推定結果を単一のイベントとして出力する学習データ処理部と、
複数のセンサが出力するデータを前記入出力整形処理部によって複数種類のイベントに変換した後、前記入力同期併合処理部と、前記条件判断処理部と、前記学習データ処理部を組み合わせて、前記複数のセンサが計測及び／または観測した事象の識別または推定を実施する入出力制御部と
を具備する情報処理装置。
【請求項２】
前記学習型情報処理装置は、前記学習データ処理部より前記特徴ベクトルを受信し、学習アルゴリズムに基づく推定処理を行い、前記推定結果を前記学習データ処理部に送信するものであり、
オラクルに問い合わせを行うことでイベントに対する正解ラベルを取得する概念学習器を更に備え、
前記情報処理装置の前記学習データ処理部は、前記推定結果に基づいて観察対象の状態または動作を特定できなかった場合には、特定できなかった旨のタグを付したイベントを前記概念学習器へ送信することで、前記概念学習器より正解ラベルを取得し、前記正解ラベルが認識済みの状態または動作である場合には、前記学習型情報処理装置に対して既知の概念に対する再学習をさせることで、定義ファイルの既知概念を拡張する更新を行い、前記正解ラベルが未だ認識していない状態または動作である場合には、未知の概念を獲得するための新規の学習をさせることで、定義ファイルに新規の概念を追加する更新を行うことを特徴とする、
請求項１に記載の情報処理装置。
【請求項３】
前記入出力制御部は、定義ファイルに記述されたディレクティブに従い、イベントの処理に際し、前記入力同期併合処理部と、前記条件判断処理部と、前記学習データ処理部をそれぞれ複数個配置することが可能であることを特徴とする、
請求項１または２に記載の情報処理装置。
【請求項４】
前記入出力制御部は、複数のイベントを処理するに際して、イベントの属するシナリオグループの優先度に応じて前記イベントの処理を優先して行うことを特徴とする、
請求項３に記載の情報処理装置。
【請求項５】
前記入出力整形処理部は、ＪＳＯＮフォーマットのイベントに、日時情報とタグ名を付すことを特徴とする、
請求項３または４に記載の情報処理装置。
【請求項６】
情報処理装置と学習型情報処理装置と備える情報処理システムであって、
前記情報処理装置は、
時系列データを所定の時間間隔毎に区切り、日時情報とタグ名を付したイベントとして出力する入出力整形処理部と、
主入力側のイベントと副入力側のイベントを併合し、日時情報とタグ名を付した単一のイベントに変換して出力する入力同期併合処理部と、
単一のイベントに含まれるデータに対し、所定の条件判断を行い、条件判断の結果に応じて異なるイベントを出力する条件判断処理部と、
単一のイベントに含まれるデータを特徴ベクトルとして前記学習型情報処理装置に転送し、受信した推定結果を単一のイベントとして出力する学習データ処理部と、
複数のセンサが出力するデータを前記入出力整形処理部によって複数種類のイベントに変換した後、前記入力同期併合処理部と、前記条件判断処理部と、前記学習データ処理部を組み合わせて、前記複数のセンサが計測及び／または観測した事象の識別または推定を実施する入出力制御部と
を具備し、
前記学習型情報処理装置は、前記学習データ処理部より前記特徴ベクトルを受信し、学習アルゴリズムに基づく推定処理を行い、前記推定結果を前記学習データ処理部に送信することを特徴とする情報処理システム。
【請求項７】
オラクルに問い合わせを行うことでイベントに対する正解ラベルを取得する概念学習器を更に備え、
前記情報処理装置の前記学習データ処理部は、前記推定結果に基づいて観察対象の状態または動作を特定できなかった場合には、特定できなかった旨のタグを付したイベントを前記概念学習器へ送信することで、前記概念学習器より正解ラベルを取得し、前記正解ラベルが認識済みの状態または動作である場合には、前記学習型情報処理装置に対して既知の概念に対する再学習をさせることで、定義ファイルの既知概念を拡張する更新を行い、前記正解ラベルが未だ認識していない状態または動作である場合には、未知の概念を獲得するための新規の学習をさせることで、定義ファイルに新規の概念を追加する更新を行うことを特徴とする、
請求項６に記載の情報処理システム。
【請求項８】
前記情報処理装置の前記入出力制御部は、定義ファイルに記述されたディレクティブに従い、イベントの処理に際し、前記入力同期併合処理部と、前記条件判断処理部と、前記学習データ処理部をそれぞれ複数個配置することが可能であることを特徴とする、
請求項６または７に記載の情報処理システム。
【請求項９】
前記情報処理装置の前記入出力制御部は、複数のイベントを処理するに際して、イベントの属するシナリオグループの優先度に応じて前記イベントの処理を優先して行うことを特徴とする、
請求項８に記載の情報処理システム。
【請求項１０】
前記情報処理装置の前記入出力整形処理部は、ＪＳＯＮフォーマットのイベントに、日時情報とタグ名を付すことを特徴とする、請求項８または９に記載の情報処理システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、多種多様な情報を受け入れて所定の出力を得る情報処理装置及び情報処理システムに関する。
【背景技術】
【０００２】
高齢者の人口は世界中で急増している。医学の進歩などにより人の寿命が伸びる一方、全人口に占める労働人口の割合は減少し、介護・医療スタッフの不足を始めとした様々な問題が生じている。これらの問題を解決するために、ＡＡＬ（Ambient Assisted Living：自立生活支援技術）が大きな関心を集めている。
【０００３】
ＡＡＬは、我々を取り巻くＡＩ（Artificial Intelligence：人工知能）・ＩｏＴ（Internet of Things：モノのインターネット）技術を駆使し、高齢者の自立した生活を可能な限り持続させることで、ＱＯＬ（Quality of Life：生活の質）の向上をサポートしていくことである。ＡＡＬデバイスやサービスを適切に使用することで、廃用症候群等の予防や、リハビリの補助、また日常生活のサポートを通して、高齢者のＱＯＬを維持する、もしくは改善する、といったことが期待される。
【０００４】
ＡＡＬ研究者において特に大きな注目を集めている話題の一つが、ＡＤＬ（Activities of Daily Living：日常生活行動）の観察である。ＡＩ・ＩｏＴ技術を活用し、高齢者のＡＤＬをモニタリングし、結果に応じたフィードバックを投げかけることで、廃用症候群の防止、またリハビリ進展度の判断等に役立つことが期待される。
【０００５】
特許文献１には、顔の表情と動作を認識可能な顔表情動作認識方法及び装置が開示されている。
特許文献２には、効率良く多職種間の連携を支援する、連携支援装置、連携支援システム、連携支援方法、及びプログラムが開示されている。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２０１７−１６２４０９号公報
【特許文献２】特開２０１６−２１２９２５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
ＡＤＬの観察には、ＡＩ等の学習アルゴリズムを用いる。学習アルゴリズムを実行する計算機に、観察対象の状態や行動等を計測した情報を入力し、観察対象の状態や行動を推定する。
これまで、学習アルゴリズムを用いた事象認識技術は、入力されるデータの形態に柔軟性がなく固定的なものであった。すなわち、計算機で実行されるプログラムは固定的に構築されているため、装置が完成した後から、例えば新たなセンサ等の新たな種類の情報を追加することが困難であった。
【０００８】
また、現在主流の学習アルゴリズムを用いた情報処理装置は、バッチ学習と呼ばれる、一度に大量のデータを情報処理装置に与えて学習させる手法が採用されている。しかし、多くの事象において、統一されたフォーマットのデータを大量に入手することは困難である。ＡＤＬの観察においても同様で、ある観察対象者から大量のデータを得ることは困難である場合が多い。
【０００９】
本発明はかかる課題に鑑みてなされたものであり、システムの構築と変更を容易に行うことにより多種多様なセンサに柔軟に対応可能とし、また少量のデータで効率的な学習を実現可能な、推定精度も高い情報処理装置及び情報処理システムを提供することを目的とする。
【課題を解決するための手段】
【００１０】
上記課題を解決するために、本発明の情報処理装置は、時系列データを所定の時間間隔毎に区切り、日時情報とタグ名を付したイベントとして出力する入出力整形処理部と、主入力側のイベントと副入力側のイベントを併合し、日時情報とタグ名を付した単一のイベントに変換して出力する入力同期併合処理部と、単一のイベントに含まれるデータに対し、所定の条件判断を行い、条件判断の結果に応じて異なるイベントを出力する条件判断処理部とを具備する。
【００１１】
更に、本発明の情報処理装置は、単一のイベントに含まれるデータを特徴ベクトルとして学習型情報処理装置に転送し、受信した推定結果を単一のイベントとして出力する学習データ処理部と、複数のセンサが出力するデータを入出力整形処理部によって複数種類のイベントに変換した後、入力同期併合処理部と、条件判断処理部と、学習データ処理部を組み合わせて、複数のセンサが計測及び／または観測した事象の識別または推定を実施する入出力制御部とを具備する。
を具備する。
【発明の効果】
【００１２】
本発明によれば、システムの構築と変更を容易に行うことができるので、多種多様なセンサに柔軟に対応することができる。また、少量のデータで効率的な学習を実現することができ、推定精度も高い情報処理装置及び情報処理システムを提供することができる。
上記した以外の課題、構成及び効果は、以下の実施形態の説明により明らかにされる。
【図面の簡単な説明】
【００１３】
【図１】本発明の実施形態に係る情報処理装置の全体構成を示すブロック図である。
【図２】情報処理装置のハードウェア構成を示すブロック図である。
【図３】情報処理装置のソフトウェア機能を示すブロック図である。
【図４】入力同期併合処理部と、条件判断処理部と、学習データ処理部の入出力を説明するブロック図である。
【図５】情報処理装置が実行するデータ処理のアーキテクチャを示す概念図である。
【図６】マルチモーダルセンサからイベントを取得して、センサレベルデータフローでイベントの加工を行うことで観察対象者の行動認識を行い、行動レベルデータフローにイベントを出力する過程を示す図である。
【図７】マルチモーダルセンサからイベントを取得して、センサレベルデータフローでイベントの加工を、概念レベルデータフローにてイベントの推定を行うことで観察対象者の行動認識を行い、行動レベルデータフローにイベントを出力する過程を示す図である。
【図８】マルチモーダルセンサからイベントを取得して、センサレベルデータフローでイベントの加工を、概念レベルデータフローにてイベントの推定を行うことで観察対象者の行動認識を行い、概念学習器と対話して学習処理を行う過程を示す図である。
【図９】マルチモーダルセンサからイベントを取得して、センサレベルデータフローにおける認識結果と、概念レベルデータフローにおける推定結果とを組み合わせて、複数のＡＤＬを識別し、多彩な応答を行う過程を示す図である。
【図１０】入出力制御部及び学習型情報処理装置の、データ分類モードにおける機能ブロック図である。
【図１１】入出力制御部及び学習型情報処理装置の、新規クラス学習モードにおける機能ブロック図である。
【図１２】入出力制御部及び学習型情報処理装置の新規クラス学習モードにおいて、概念学習器が情報処理装置とオラクルと学習型情報処理装置に対して実行するデータ処理の流れを示す概略図である。
【図１３】情報処理装置における、定義ファイルの更新処理を示すブロック図である。
【図１４】本発明の変形例に係る情報処理装置のソフトウェア機能を示すブロック図である。
【図１５】シリアライザの機能ブロック図である。
【図１６】シリアライザの動作の流れを示すフローチャートである。
【図１７】異常対応シナリオ処理の動作の流れを示すフローチャートである。
【図１８】健康チェックシナリオ処理、リラクゼーションシナリオ処理、応答シナリオ処理の動作の流れを示すフローチャートである。
【図１９】キューの状態を説明するための概略図である。
【発明を実施するための形態】
【００１４】
［情報処理装置１０１：全体構成］
図１は、本発明の実施形態に係る情報処理装置１０１の全体構成を示すブロック図である。
情報処理装置１０１は、例えば、観察対象者である独居高齢者や老人施設における高齢者が適切に生活を営んでいるのかを観察する。また、情報処理装置１０１は独居高齢者に対して擬似的な会話を行うことで、独居高齢者が廃用症候群等に罹患することを防止し、以て独居高齢者のＱｏＬを改善する。
【００１５】
情報処理装置１０１には、顔認識カメラ１０２、赤外線センサや非接触温度センサ等の種々のセンサ１０３ａ、１０３ｂ…が接続されている。情報処理装置１０１はこれらセンサから、観察対象者を計測した結果得られる情報（時系列データ）を受信する。そして、観察対象者の照合結果に応じて、観察対象者のＡＤＬを判断、あるいは推定する。
【００１６】
情報処理装置１０１は推定の際、学習アルゴリズムに基づく推定処理を、ネットワークを通じて外部の学習型情報処理装置１０４に依頼して、推定結果を受信する。そして情報処理装置１０１は推定結果に従い、スピーカ１０５から所定の音声を発する。また、必要に応じて液晶ディスプレイ等の表示部１０６に、所定の情報を表示する、等の処理を行う。
【００１７】
［情報処理装置１０１：ハードウェア構成］
図２は、情報処理装置１０１のハードウェア構成を示すブロック図である。
情報処理装置１０１は、バス２０１に接続された、ＣＰＵ２０２、ＲＯＭ２０３、ＲＡＭ２０４、不揮発性ストレージ２０５を備える。
バス２０１には更に、現在日時情報を出力するリアルタイムクロック（図２中「ＲＴＣ」と表記、以下「ＲＴＣ」と略）２０６、ネットワークインターフェース（図２中「ＮＩＣ」と表記、以下「ＮＩＣ」と略）２０７、シリアルインターフェース（図２中「シリアルＩ／Ｆ」と表記、以下「シリアルＩ／Ｆ」と略）２０８を通じて顔認識カメラ１０２、センサ１０３ａ、１０３ｂ等が、Ａ／Ｄ変換器２０９を通じてマイク１０７が、Ｄ／Ａ変換器２１０を通じてスピーカ１０５が、それぞれ接続されている。
また必要に応じて、表示部１０６及び操作部２１１がバス２０１に接続されることがある。
【００１８】
情報処理装置１０１は、英国ラズベリーパイ財団（http://www.raspberrypi.org/）が開発する「Ｒａｓｐｂｅｒｒｙ  Ｐｉ」等を始めとする、近年普及している安価なシングルボードコンピュータが利用可能である。
学習型情報処理装置１０４は、十分な演算能力を有するパソコン等が利用可能である。但し、学習型情報処理装置１０４において実行される学習アルゴリズムが要求する演算量が少ない場合は、情報処理装置１０１に内蔵させてもよい。
【００１９】
［情報処理装置１０１：ソフトウェア機能］
図３は、情報処理装置１０１のソフトウェア機能を示すブロック図である。
入出力制御部３０１には、顔認識カメラ１０２、赤外線センサや非接触温度センサ等の種々のセンサ１０３ａ、１０３ｂ…が接続されている。また、Ａ／Ｄ変換器２０９を通じて観察対象者の音声を認識するためのマイク１０７と、Ｄ／Ａ変換器２１０を通じて観察対象者に会話音声を発するためのスピーカ１０５も接続されている。
顔認識カメラ１０２や種々のセンサは、情報処理装置１０１におけるマルチモーダルセンサ（multimodal sensor）として扱われる。すなわち、観察対象者や観察対象とする事象を、映像、音声、温度、加速度等、様々な物理量等で計測するセンサ群としてみなされる。
【００２０】
情報処理装置１０１の主たる機能は、入出力制御部３０１に集約されている。この入出力制御部３０１は、サンプリングクロック毎、あるいは所定の時間間隔毎にセンサから得られる情報に、オブジェクト指向の思想に基づき、種々の情報を付加する。種々の情報が付加された情報をイベントと呼ぶ。入出力制御部３０１の大部分の機能は、オープンソースのデータ収集ソフトウェアであるFluentd（ https://www.fluentd.org/ ）に、後述する情報処理機能をプラグインとして追加することで実現している。
また、入出力制御部３０１には、後述する概念学習器として機能する、パソコン等の外部情報処理装置３１０が、ネットワークを通じて接続される。
【００２１】
センサから得られる情報をイベントに格納する際のルールは、センサの種類によって異なる。
例えば温度や湿度、加速度等の一般的な物理現象を測定するセンサの場合は、Ａ／Ｄ変換器２０９のサンプリングクロック毎にデータを取得すべきである。
一方、例えばマイク１０７等から得られる音声データのように、ある程度連続した時間間隔のデータが必要になる場合は、Ａ／Ｄ変換器２０９のサンプリングクロック毎にデータを取得しても、どのような音が鳴動しているのかわからない。したがってマイク１０７の場合には、無音検出等の周知の技術を用いて、会話等の推定が可能な程度の長さの音声データを取得することが好ましい。
【００２２】
入出力制御部３０１の機能として備わっている入出力整形処理部３０２は、各種センサから得られる情報を、統一されたデータフォーマットに従うプレインテキストで記述されたイベントに変換する。また必要に応じて、イベントから内容を取り出して、表示部１０６に表示する内容や、音声出力処理部３０３を介して音声出力データに変換する。この統一されたデータフォーマットは、基本的には一定のルールさえ満たされていれば何でもよいのであるが、データの可搬性という観点から、ＪＳＯＮ（JavaScript Object Notation（「ＪＡＶＡＳＣＲＩＰＴ」は登録商標））が望ましい。
【００２３】
以下に、ＪＳＯＮフォーマットにて記述されたイベントの一例を示す。
【００２４】
2017-11-03 19:35:32.000000000 +0900 sensor.microwave:
{"heart":79, "breath":12}
【００２５】
イベントは、「time tag:record」という記述順で記載される。「time」はＰＯＳＩＸ  ｔｉｍｅフォーマットの絶対日時情報、「record」はＪＳＯＮ形式であるので、始め波括弧（"{"）で始まり、終わり波括弧（"}"）で終わる。
「tag」はＪＳＯＮ形式オブジェクトに与えられる名前（以下「タグ名」）であり、オブジェクト指向の慣例に倣い、「name1.name2.name3…」というように、ピリオドで連結する。すなわち、ピリオドはタグ名のフィールドセパレータである。「time」と「tag」の間はスペース（" "）で区切られ、「tag」と「record」の間はコロン（":"）で区切られる。
入出力整形処理部３０２はイベントを生成する際、ＲＴＣ２０６からイベントに付すための絶対日時情報を読み取る。
【００２６】
入出力制御部３０１の機能として備わっている音声出力処理部３０３は、Ｄ／Ａ変換器２１０を通じてスピーカ１０５から観察対象者に対して会話音声を出力するためのデジタルオーディオデータを生成する、周知のスピーチプロセッサである。
【００２７】
入出力制御部３０１は、マルチモーダルセンサから種々のデータの入力を受けると、入出力整形処理部３０２によって前述のＪＳＯＮ形式のイベントに変換した後、定義ファイル３０４に記述されている内容に従い、入力同期併合処理部３０５、条件判断処理部３０６、学習データ処理部３０７にてイベントの加工等を行う。
定義ファイル３０４は例えば単一または複数のプレインテキストファイルである。
【００２８】
［入力同期併合処理部３０５］
ここで図４Ａを参照して、入力同期併合処理部３０５について説明する。
図４Ａは、入力同期併合処理部３０５の入出力を説明するためのブロック図である。
入出力制御部３０１の機能として備わっている入力同期併合処理部３０５は、複数のイベントを受け入れて、各々のイベントの内容を単一のイベントに併合して出力する。単一のイベントを出力する際、入力同期併合処理部３０５は、定義ファイル３０４に記述することで指定されたタイミングで、イベントを出力する。イベント同士を併合するタイミングは、「before」、「after」、「simple」の３種類である。
【００２９】
定義ファイル３０４において併合タイミングに「before」が指定された場合には、入力同期併合処理部３０５は、定義ファイル３０４の「main_tag」（主入力側）に記述された第一のイベントを受け取ると、第一のイベントを受け取った直前の、「sub_tag」（副入力側）に記述された第二のイベントを、第一のイベントと共に併合して出力する。したがって、「before」の場合は、第一のイベントを受け取った日時が、出力されるイベントに付加される。
【００３０】
定義ファイル３０４において併合タイミングに「after」が指定された場合には、入力同期併合処理部３０５は、定義ファイル３０４の「main_tag」に記述された第一のイベントを受け取ると、第一のイベントを受け取った直後の、「sub_tag」に記述された第二のイベントを、第一のイベントと共に併合して出力する。したがって、「after」の場合は、第二のイベントを受け取った日時が、出力されるイベントに付加される。
【００３１】
定義ファイル３０４において併合タイミングに「simple」が指定された場合には、入力同期併合処理部３０５は、定義ファイル３０４の「main_tag」に記述された第一のイベントを受け取ると、第一のイベントを受け取った直前の、「sub_tag」に記述された第二のイベントを、第一のイベントと共に併合して出力する。また、第一のイベントを受け取った直後の、「sub_tag」に記述された第二のイベントも、第一のイベントと共に併合して出力する。すなわち、「simple」は「before」と「after」の論理和である。したがって、「simple」の場合は、第一のイベントを受け取った時のみならず、第二のイベントを受け取った時にも、イベントを出力する。
【００３２】
以下に、定義ファイル３０４にて記述される入力同期併合処理部３０５の指示（ディレクティブ（directive））の一例を示す。定義ファイル３０４のディレクティブは、ＸＭＬ（eXtensible Markup Language）に類似するマークアップ言語の形式で記述される。
【００３３】
<match sensor.{temp, humid}.to_merge>
@type record_merger
tag sensor.temp_humid
main_tag sensor.temp.to_merge
sub_tag1 sensor.humid.to_merge
merge_timing simple
<record>
temp ${main["temp"]}
humid ${sub1["humid"]}
</record>
</match>
【００３４】
「<match sensor.{temp, humid}.to_merge>」は、ディレクティブの開始の宣言であると共に、「sensor.temp.to_merge」タグが付されたイベントと「sensor.humid.to_merge」タグが付されたイベントを、タグ名でマッチングさせることを示す。
「@type record_merger」は、本ディレクティブが入力同期併合処理部３０５の処理を実行する「record_merger」であることを示す。
「tag sensor.temp_humid」は、本ディレクティブが出力するイベントのタグ名が「sensor.temp_humid」であることを示す。
【００３５】
「main_tag sensor.temp.to_merge」は、前述の「main_tag」である。すなわち、「sensor.temp.to_merge」が第一のイベントである。
「sub_tag1 sensor.humid.to_merge」は、前述の「sub_tag」である。すなわち、「sensor.humid.to_merge」が第二のイベントである。
「merge_timing simple」は、前述の併合タイミングである。
「<record>」から「</record>」で囲まれる中身は、出力するイベントの中に記述される要素を示す。これはＪＳＯＮフォーマットで、「名前文字列:値」に変換される。
「</match>」は、「<match sensor.{temp, humid}.to_merge>」ディレクティブの終了を示す。
【００３６】
［条件判断処理部３０６］
次に図４Ｂを参照して、条件判断処理部３０６について説明する。
図４Ｂは、条件判断処理部３０６の入出力を説明するためのブロック図である。
入出力制御部３０１の機能として備わっている条件判断処理部３０６は、単一のイベントを受け入れて、イベントに含まれているデータに対し、所定の条件判断を行う。条件判断は、タグ名の一致または不一致、また数値データの、記述された閾値との比較結果である。条件判断は定義ファイル３０４内にて、プログラミング言語において一般的な「if...then...else...」の記述が可能である。
以下に、定義ファイル３０４にて記述される条件判断処理部３０６のディレクティブの一例を示す。
【００３７】
<match sensor.temp>
@type condition_checker
tag1 sensor.room_temp.is_too_cold
tag2 sensor.room_temp.is_too_hot
tag_else sensor.room_temp.is_good
renew_record false
condition1 record ["temp"] <= 18 && record ["season"] == "winter"
condition2 record ["temp"] >= 26 && record ["season"] == "winter"
<record1>
status "cold"
</record1>
<record2>
status "hot"
</record2>
<record_else>
status "good"
</record_else>
</match>
【００３８】
「<match sensor.temp>」は、ディレクティブの開始の宣言であると共に、「sensor.temp」タグが付されたイベントを、タグ名でマッチングさせることを示す。
「@type condition_checker」は、本ディレクティブが条件判断処理部３０６の処理を実行する「condition_checker」であることを示す。
「tag1 sensor.room_temp.is_too_cold」は、後述する「condition1」の条件に合致した場合において出力するイベントのタグ名が「sensor.room_temp.is_too_cold」であることを示す。
【００３９】
「tag2 sensor.room_temp.is_too_hot」は、後述する「condition2」の条件に合致した場合において出力するイベントのタグ名が「sensor.room_temp.is_too_hot」であることを示す。
「tag_else sensor.room_temp.is_good」は、condition1及びcondition2の何れにも当てはまらなかった場合において出力するイベントのタグ名が「sensor.room_temp.is_good」であることを示す。
「renew_record false」は、受信したイベントに含まれるレコード（値）の内容を更新しないことを示す。
【００４０】
「condition1 record ["temp"] <= 18 && record ["season"] == "winter"」は、「condition1」の条件判断文である。「temp」の値が18以下（"<="）、且つ（"&&"）、「season」の値が「winter」であるか否かを判断する。
「condition2 record ["temp"] >= 26 && record ["season"] == "winter"」は、「condition2」の条件判断文である。「temp」の値が26以上（">="）、且つ（"&&"）、「season」の値が「winter」であるか否かを判断する。
【００４１】
「<record1>」から「</record1>」に囲まれる中身は、「condition1」の条件に合致した際に、イベントに「status:"cold"」というレコードを追加することを定義する。
同様に、「<record2>」から「</record2>」に囲まれる中身は、「condition2」の条件に合致した際に、イベントに「status:"hot"」というレコードを追加することを定義する。
そして、「<record_else>」から「</record_else>」に囲まれる中身は、「condition1」及び「condition2」の、何れの条件にも合致しなかった際に、イベントに「status:"good"」というレコードを追加することを定義する。
「</match>」は、「<match sensor.temp>」ディレクティブの終了宣言である。
【００４２】
［学習データ処理部３０７］
次に図４Ｃを参照して、学習データ処理部３０７について説明する。
図４Ｃは、学習データ処理部３０７の入出力を説明するためのブロック図である。
学習データ処理部３０７は、入力されたイベントの内容を学習型情報処理装置１０４に特徴ベクトル（説明変数）として出力し、学習型情報処理装置１０４から目的変数を受け取り、イベントの形式に変換して出力する。
【００４３】
学習データ処理部３０７には、「train」と「analyze」という２種類のモードが存在する。
trainモードでは入力されるイベントを、ラベルとＤａｔｕｍというキーバリュー形式のデータの組に変換し、学習型情報処理装置１０４に送信することで、学習型情報処理装置１０４における学習モデルの訓練（学習）を行う。
本発明の実施形態に係る情報処理装置１０１は、学習型情報処理装置１０４の一例として、オンライン機械学習向け分散処理フレームワークであるＪｕｂａｔｕｓ（ http://jubat.us/ja/ ）を使用している。Ｄａｔｕｍとは、このＪｕｂａｔｕｓが解釈可能なｋｅｙ−ｖａｌｕｅデータ形式を指す。
【００４４】
analyzeモードでは入力されるイベントをＤａｔｕｍ形式に変換して学習型情報処理装置１０４に送信することで、分類・推薦・異常検知等、学習型情報処理装置１０４が提供している機能を使用して分析した結果をリアルタイムで受け取ることができる。
以下に、定義ファイル３０４にて記述される、学習データ処理部３０７のanalyzeモードにおけるディレクティブの一例を示す。
【００４５】
<match concept.accelerometer.analyze>
@type active_online_learner
host <jubatus server's ip address>
client_api 'classifier'
train_analyze analyze
num_keys ax_mean,ay_mean,az_mean,ax_var,ay_var,az_var
threshold 9.0
tag_for_train concept.unclassifiable
</match>
【００４６】
「<match concept.accelerometer.analyze>」は、ディレクティブの開始の宣言であると共に、「concept.accelerometer.analyze」タグが付されたイベントを、タグ名でマッチングさせることを示す。
「@type active_online_learner」は、本ディレクティブが学習データ処理部３０７の処理を実行する「active_online_learner」であることを示す。
「host <jubatus server's ip address>」は、学習型情報処理装置１０４のＩＰアドレスまたはホスト名（FQDN:Fully Qualified Domain Name、完全修飾ドメイン名）が記述される。
「client_api 'classifier'」は、学習型情報処理装置１０４のクライアント側アプリケーションプログラムインターフェース、すなわち学習データ処理部３０７に対し、「分類器」として動作すべく指示することを示す。
【００４７】
「train_analyze analyze」は、学習データ処理部３０７に対し、analyzeモードで動作すべく指示することを示す。
「num_keys ax_mean,ay_mean,az_mean,ax_var,ay_var,az_var」は、学習型情報処理装置１０４に引き渡すデータ、すなわち特徴ベクトルの一例を示す。この例では、３軸センサの各軸方向の平均値と、３軸センサの各軸方向にて検出した値が列挙されている。
「threshold 9.0」は、学習型情報処理装置１０４から受信した値を判定する際の閾値を示す。
「tag_for_train concept.unclassifiable」は、学習型情報処理装置１０４から受信した値が全て閾値に満たなかった場合に、出力するイベントに付すタグ名である。
「</match>」は、「<match concept.accelerometer.analyze>」ディレクティブの終了宣言である。
【００４８】
以下に、上述の定義ファイル３０４にて記述される、学習データ処理部３０７のanalyzeモードにおけるディレクティブによって、学習データ処理部３０７が学習型情報処理装置１０４から得た分類結果であるイベントの一例を示す。なお、行頭の"#"はコメントを指し示す。
【００４９】
# 既知の概念の中で分類できた場合
2018-01-24T23:42:42+09:00 action.recognized
{"cleaning":0.0,"blow-drying":0.0,"sitting":9.84092903137207,
"standing":0.0,"walking":0.0 ,
"estimated_label":"sitting","max_score":9.84092903137207}
【００５０】
上記のイベントでは、「"estimated_label":"sitting"」にて、推定結果が「sitting」であり、「"max_score":9.84092903137207」にて、最大スコアが「9.84092903137207」という値であることが示されている。
【００５１】
# 既知の概念にあてはまるものがないと判断された場合
2018-01-24T22:46:42+09:00 concept.for_train
{"cleaning":0.0,"blow-drying":1.9574897289276123,
"sitting":7.8311076164245605,"standing":0.0,"walking":0.0,
"estimated_label":"sitting","max_score":7.8311076164245605,
"data":{
"ax_mean":0.143426513671875,"ay_mean":0.0136016845703125,
"az_mean":-0.50174560546875,"mx_mean":0.48634033203125,
"my_mean":0.26500244140625,"mz_mean":-1.013330078125,
"gx_mean":-0.0011932373046875,"gy_mean":0.0130523681640625,
"gz_mean":0.0047119140625
}}
【００５２】
上記のイベントでは、「"estimated_label":"sitting"」にて、推定結果が「sitting」であり、「"max_score":7.8311076164245605」にて、最大スコアが「7.8311076164245605」という値であることが示されている。そして、最大スコアが閾値の「9」に満たないので、学習用のデータが付加されている。
学習用バッファ３０８は、このような推定に失敗したデータを所定の件数、蓄積する。そして、所定の件数に達した時に、trainモードにて学習型情報処理装置１０４にそれら複数のイベントを送信して、学習型情報処理装置１０４に学習を行わせる。
【００５３】
［情報処理装置１０１：データ処理のアーキテクチャ］
図５は、情報処理装置１０１が実行するデータ処理のアーキテクチャ（設計思想）を示す概念図である。
情報処理装置１０１は、３種類のデータフローを定義し、それらデータフローをイベントのタグ名で区別する。
【００５４】
先ず、マルチモーダルセンサＣ５０１から生じる種々のデータは、センサレベルデータフローＣ５０２に入力される。センサレベルデータフローＣ５０２では、各々のイベントに「sensor.**」で始まるタグが付される。そして、センサレベルデータフローＣ５０２の内部では、入力同期併合処理部３０５によって複数のイベントが１個のイベントに併合される、あるいは概念レベルデータフローＣ５０３や行動レベルデータフローＣ５０４に転送される。また定義ファイル３０４の記述によっては、センサレベルデータフローＣ５０２のイベントが再びセンサレベルデータフローＣ５０２にて処理されることもある。
なお、「sensor.**」の"**"（アスタリスク２文字）は、情報処理装置１０１が扱うイベントに付されるタグ名の文字列マッチング処理において、タグ名のフィールドセパレータである"."（ピリオド）で区切られるフィールド単位のワイルドカードを意味する。
【００５５】
次に、センサレベルデータフローＣ５０２にて形成されたイベントのうち、観察対象者のＡＤＬを認識または推定可能になったイベントは、会話音声を発する、あるいは認識または推定したＡＤＬをデータベース３０９にログ記録する等、何らかの行動が可能になる。このような「行動可能な」イベントは「action.**」で始まるタグが付され、行動レベルデータフローＣ５０４に入力される。行動レベルデータフローＣ５０４では、最終的に得られた認識結果あるいは推定結果に従って、会話音声を発する、あるいはＡＤＬをログ記録する等の、所定のアクションを実行する。このアクションがアクティベータＣ５０５である。
【００５６】
そして、センサレベルデータフローＣ５０２にて形成されたイベントのうち、そのままでは観察対象者のＡＤＬを認識できないイベントは、学習型情報処理装置１０４によって推定を行う必要が生じる。そこで、そのような「行動不可能な」イベントは、「concept.**」で始まるタグが付され、概念レベルデータフローＣ５０３に入力される。
【００５７】
学習アルゴリズムを用いる学習型情報処理装置１０４は、特徴ベクトルの要素数を減らす、次元削減の効果を有する。このため、概念レベルデータフローＣ５０３においても、センサレベルデータフローＣ５０２にて説明したと同様に、概念レベルデータフローＣ５０３のイベントが再び概念レベルデータフローＣ５０３にて処理される、ということもある。また定義ファイル３０４の記述によっては、イベントが概念レベルデータフローＣ５０３とセンサレベルデータフローＣ５０２を行き来する、というケースも有り得る。
概念レベルデータフローＣ５０３が出力したイベントが行動可能なイベントである場合には、センサレベルデータフローＣ５０２と同様に「action.**」で始まるタグが付され、行動レベルデータフローＣ５０４に入力される。
【００５８】
概念レベルデータフローＣ５０３において、学習型情報処理装置１０４が推定に失敗した場合、新たな学習が必要になる。推定に失敗したイベントは、概念学習器Ｃ５０６を通じて、オラクルＣ５０７に問い合わせる。オラクルＣ５０７とは、正解を指し示す者であり、例えば人間のアノテータ（annotator）である。概念学習器Ｃ５０６は、オラクルＣ５０７と概念レベルデータフローＣ５０３との間を取り持ち、学習型情報処理装置１０４に対して学習を行わせる。
本発明の実施形態に係る情報処理装置１０１では、概念学習器Ｃ５０６はネットワークを通じて接続されるパソコン等の外部情報処理装置３１０が、その役目を担う。
【００５９】
図５を見ると情報処理装置１０１は、マルチモーダルセンサＣ５０１から生じるイベントをセンサレベルデータフローＣ５０２と概念レベルデータフローＣ５０３との間で自由に加工を行い、最終的に行動レベルデータフローＣ５０４に与える状態にまで、観察対象者のＡＤＬを認識あるいは推定することがわかる。
また情報処理装置１０１は、行動レベルデータフローＣ５０４に与えるイベントを、センサレベルデータフローＣ５０２と概念レベルデータフローＣ５０３に分けることで、複雑な事象の認識や推定に対し、イベントの適切な処理を明確に指定することが可能になる。多種多様なＡＤＬに対しても、定義ファイル３０４に記述を追加するだけで、即座に対応することが可能になる。
【００６０】
［情報処理装置１０１：動作の一例］
これより、図６から図９にかけて、情報処理装置１０１の動作の一例を示す。
図６は、マルチモーダルセンサＣ５０１からイベントを取得して、センサレベルデータフローＣ５０２でイベントの加工を行うことで観察対象者の行動認識を行い、行動レベルデータフローＣ５０４にイベントを出力する過程を示す図である。
【００６１】
顔認識カメラ１０２が人の顔の存在を認識すると、「sensor.camera」というタグのイベントＥ６０１をセンサレベルデータフローＣ５０２に送る。センサレベルデータフローＣ５０２では、「sensor.camera」というタグのイベントＥ６０１を受け取ると、それが既に予め登録された観察対象者の顔であるか否かを、条件判断処理部３０６が判定する。条件判断処理部３０６は、登録済みの人の顔であり、且つその顔がカメラの画角の概ね中央に位置していたら、タグを「sensor.single_face」に書き換えて、イベントＥ６０２を流す。
【００６２】
観察対象者の心拍と呼吸を測定するマイクロ波センサ６０３から「sensor.microwave」というイベントＥ６０４がセンサレベルデータフローＣ５０２に入力される。また、観察対象者の体温を非接触にて測定する非接触温度センサ６０５から「sensor.surface_temp」というイベントＥ６０６がセンサレベルデータフローＣ５０２に入力される。入力同期併合処理部３０５は、前述の「sensor.single_face」イベントＥ６０２と、「sensor.microwave」イベントＥ６０４と、「sensor.surface_temp」イベントＥ６０６を、「sensor.single_face」イベントＥ６０２が来たタイミングで併合する。そして併合したイベントＥ６０７に「action.vitaldata」というタグを付して、行動レベルデータフローＣ５０４に送る。
【００６３】
行動レベルデータフローＣ５０４において「action.vitaldata」イベントＥ６０７を条件判断処理部３０６が受け取ると、条件判断処理部３０６は予め定義ファイル３０４にて定義された条件判断指示に従って条件判断処理を行い、アクティベータＣ５０５にデータＤ６０８「speakText.greeting」を流す。
例えば、「action.vitaldata」に含まれるvitaldataが正常範囲内であれば、「甲田さん、おはようございます。今日も一日楽しく過ごしましょう。」と発話する。「action.vitaldata」に含まれるvitaldataが異常値を示しているのであれば、「甲田さん、おはようございます。いつもより少し熱があるみたいです。大丈夫ですか？」と発話して、介護施設のスタッフ等にアラートを送信する。発話機能は、音声出力処理部３０３、Ｄ／Ａ変換器２１０及びスピーカ１０５によって実現される。
【００６４】
以上、図６にて説明したように、極単純な事象であれば、学習アルゴリズムを使用せずとも事象を認識して、観察対象者に対して適切な応答を行うことが可能である。
【００６５】
図７は、マルチモーダルセンサＣ５０１からイベントを取得して、センサレベルデータフローＣ５０２でイベントの加工を、概念レベルデータフローＣ５０３にてイベントの推定を行うことで観察対象者の行動認識を行い、行動レベルデータフローＣ５０４にイベントを出力する過程を示す図である。
【００６６】
観察対象者の行動を計測する９軸センサ７０１から「sensor.9dof」というイベントＥ７０２がセンサレベルデータフローＣ５０２に入力される。また、観察対象者の発話を拾うピンマイク７０３から「sensor.mic」というイベントＥ７０４がセンサレベルデータフローＣ５０２に入力される。入力同期併合処理部３０５は、前述の「sensor.9dof」イベントＥ７０２と、「sensor.mic」イベントＥ７０４を、「sensor.mic」イベントＥ７０４が来たタイミングで併合する。そして併合したイベントＥ７０５に「concept.9dof_mic」というタグを付して、概念レベルデータフローＣ５０３に送る。
【００６７】
概念レベルデータフローＣ５０３において「concept.9dof_mic」イベントＥ７０５を学習データ処理部３０７が受け取ると、学習データ処理部３０７は学習型情報処理装置１０４にイベントＥ７０５の内容、すなわち９軸センサのデータ及びピンマイク７０３の音声データ（特徴ベクトル、説明変数）を送信する。学習型情報処理装置１０４は情報処理装置１０１から特徴ベクトルを受信すると、学習アルゴリズムに基づく推定処理を行い、推定結果（目的変数）を情報処理装置１０１へ返信する。学習データ処理部３０７は学習型情報処理装置１０４から推定結果を受信すると、定義ファイル３０４に記述されている閾値と比較する。推定結果の値が閾値以上であり、ＡＤＬを充分に特定できた場合には、学習データ処理部３０７は推定結果のイベントＥ７０６に「action.recognized」というタグを付して、行動レベルデータフローＣ５０４に送る。
【００６８】
行動レベルデータフローＣ５０４において「action.recognized」イベントＥ７０６を条件判断処理部３０６が受け取ると、条件判断処理部３０６は予め定義ファイル３０４にて定義された条件判断指示に従って条件判断処理を行い、アクティベータＣ５０５にデータＤ７０７を流すと共に、ＡＤＬの推定結果Ｄ７０８をデータベース３０９にログ記録する。
【００６９】
以上、図７にて説明したように、学習型情報処理装置１０４を使用することで事象を推定して、観察対象者に対して適切な応答を行うことが可能である。
【００７０】
図８は、マルチモーダルセンサＣ５０１からイベントを取得して、センサレベルデータフローＣ５０２でイベントの加工を、概念レベルデータフローＣ５０３にてイベントの推定を行うことで観察対象者の行動認識を行い、概念学習器Ｃ５０６と対話して学習処理を行う過程を示す図である。
【００７１】
観察対象者の行動を計測する９軸センサ７０１から「sensor.9dof」というイベントＥ７０２がセンサレベルデータフローＣ５０２に入力される。また、観察対象者の発話を拾うピンマイク７０３から「sensor.mic」というイベントＥ７０４がセンサレベルデータフローＣ５０２に入力される。入力同期併合処理部３０５は、前述の「sensor.9dof」イベントＥ７０２と、「sensor.mic」イベントＥ７０４を、「sensor.mic」イベントＥ７０４が来たタイミングで併合する。そして併合したイベントＥ７０５に「concept.9dof_mic」というタグを付して、概念レベルデータフローＣ５０３に送る。
【００７２】
概念レベルデータフローＣ５０３において「concept.9dof_mic」イベントＥ７０５を学習データ処理部３０７が受け取ると、学習データ処理部３０７は学習型情報処理装置１０４にイベントの内容、すなわち９軸センサのデータ及びピンマイク７０３の音声データ（特徴ベクトル、説明変数）を送信する。学習型情報処理装置１０４は情報処理装置１０１から特徴ベクトルを受信すると、学習アルゴリズムに基づく推定処理を行い、推定結果（目的変数）を情報処理装置１０１へ返信する。
【００７３】
学習データ処理部３０７は学習型情報処理装置１０４から推定結果を受信すると、定義ファイル３０４に記述されている閾値と比較する。推定結果の値が閾値よりも小さく、ＡＤＬを充分に特定できなかった場合には、学習データ処理部３０７は推定結果Ｅ８０１に「concept.uncategorized」というタグを付して、概念学習器Ｃ５０６に送る。
【００７４】
学習データ処理部３０７から「concept.uncategorized」イベントを概念学習器Ｃ５０６が受け取ると、概念学習器Ｃ５０６はオラクルＣ５０７に問い合わせを行う。そして、オラクルＣ５０７から「concept.uncategorized」イベントに対応する正解ラベルＬ８０２を取得する。正解ラベルとは、学習型情報処理装置１０４が「concept.9dof_mic」イベントＥ７０５に対して本来返答すべき正解の内容である。具体的には、本発明の実施形態の場合では、"cleaning","blow-drying","sitting","standing","walking"等の、ＡＤＬの内容である。概念学習器Ｃ５０６は正解ラベルＬ８０２に「concept.for_training」というタグ名を付して、学習データ処理部３０７に送る。
【００７５】
正解ラベルＬ８０２が、情報処理装置１０１が既に認識済みのＡＤＬの内容であるならば、学習型情報処理装置１０４に対し、既知の概念に対する再学習（既知概念拡張）を行う。正解ラベルＬ８０２が、情報処理装置１０１が未だ認識していないＡＤＬの内容であるならば、学習型情報処理装置１０４に対し、未知の概念を獲得する新規の学習（未知概念獲得）を行う。その際、定義ファイル３０４に新規の概念を追加する更新処理が必要になる。
【００７６】
以上、図８にて説明したように、学習型情報処理装置１０４を使用することで事象を推定できなかった場合に、適切な再学習あるいは新規の学習を行うことが可能である。
【００７７】
図９は、マルチモーダルセンサＣ５０１からイベントを取得して、センサレベルデータフローＣ５０２における認識結果と、概念レベルデータフローＣ５０３における推定結果とを組み合わせて、複数のＡＤＬを識別し、多彩な応答を行う過程を示す図である。図６と図７を組み合わせた内容と概ね等価である。
【００７８】
顔認識カメラ１０２が人の顔の存在を認識すると、「sensor.camera」というタグのイベントＥ６０１をセンサレベルデータフローＣ５０２に送る。センサレベルデータフローＣ５０２では、「sensor.camera」というタグのイベントＥ６０１を受け取ると、それが既に予め登録された観察対象者の顔であるか否か、また２人以上の顔の存在を認識したか否かを、条件判断処理部３０６が判定する。条件判断処理部３０６は、２人以上の人の顔の存在を認識した場合に、タグを「action.multiple_faces」Ｅ９０１に書き換えて、イベントを行動レベルデータフローＣ５０４へ流す。
【００７９】
観察対象者の行動を計測する９軸センサから「sensor.9dof」というイベントがセンサレベルデータフローＣ５０２に入力される。また、観察対象者の発話を拾うピンマイク７０３から「sensor.mic」というイベントがセンサレベルデータフローＣ５０２に入力される。
入力同期併合処理部３０５は、前述の「sensor.9dof」イベントＥ７０２と、「sensor.mic」イベントＥ７０４を、「sensor.mic」イベントＥ７０４が来たタイミングで併合する。そして併合したイベントＥ７０５に「concept.9dof_mic」というタグを付して、概念レベルデータフローＣ５０３に送る。
【００８０】
概念レベルデータフローＣ５０３において「concept.9dof_mic」イベントＥ７０５を学習データ処理部３０７が受け取ると、学習データ処理部３０７は学習型情報処理装置１０４にイベントＥ７０５の内容、すなわち９軸センサのデータ及びピンマイク７０３の音声データ（特徴ベクトル、説明変数）を送信する。学習型情報処理装置１０４は情報処理装置１０１から特徴ベクトルを受信すると、学習アルゴリズムに基づく推定処理を行い、推定結果（目的変数）を情報処理装置１０１へ返信する。
学習データ処理部３０７は学習型情報処理装置１０４から推定結果を受信すると、定義ファイル３０４に記述されている閾値と比較する。推定結果の値が閾値以上であり、ＡＤＬを充分に特定できた場合には、学習データ処理部３０７は推定結果のイベントＥ７０６に「action.recognized」というタグを付して、行動レベルデータフローＣ５０４に送る。
【００８１】
センサレベルデータフローＣ５０２から送られてきた「action.multiple_faces」イベントと、概念レベルデータフローＣ５０３から送られてきた「action.recognized」イベントＥ７０６は、入力同期併合処理部３０５によって併合される。併合されて単一になったイベントＥ９０２には「action.mood」というタグが付され、条件判断処理部３０６に送られる。
条件判断処理部３０６は、「action.mood」イベントＥ９０２を受け取ると、イベントＥ９０２内のデータに基いて、種々の条件判断処理を行う。そして、発話用テキストデータＤ９０３を生成してアクティベータＣ５０５に引き渡す、あるいはＡＤＬの推定結果Ｄ７０８をデータベース３０９にログ記録する等の動作を行う。
【００８２】
例えば、「action.multiple_faces」イベントにおいて複数人の顔を認識し、「action.recognized」イベントにて”会話”が行動ラベルとして認識された場合には、「甲田さん、乙野さん、丙山さん、なんだか楽しそうにお話をしていますね。僕も仲間に入れて下さい。」と発話する。
例えば、「action.multiple_faces」イベントにおいて複数人の顔を認識し、「action.recognized」イベントにて”着席”が行動ラベルとして認識された場合には、「甲田さん、乙野さん、丙山さん、そういえば、丁チームは金メダルを取ったみたいですよ。」と、ニュースを所定のニュースサイト等から取得して、発話する。またこの発話と共に、同席する人達の組み合わせ及び雰囲気情報をログファイルに記録する。
【００８３】
図９を見ると、入力同期併合処理部３０５と条件判断処理部３０６は、センサレベルデータフローＣ５０２、行動レベルデータフローＣ５０４の何れにも配置できる。一方、学習データ処理部３０７は概念レベルデータフローＣ５０３にのみ配置できる。
入力同期併合処理部３０５は、複数の事象を一つのイベントとして纏めて、特徴ベクトルとして取り扱う。もし、このイベントがそのまま条件判断処理部３０６で処理が可能であるならば、条件判断処理部３０６で所定の行動を実行するための判断を行う。もし、このイベントがそのままでは条件判断処理部３０６で処理が不可能であるならば、学習データ処理部３０７に与えて、学習型情報処理装置１０４から推定結果を得る。
【００８４】
図９を見て判るように、行動レベルデータフローＣ５０４に配置されている条件判断処理部３０６は、その直前に前置されている入力同期併合処理部３０５によって、センサレベルデータフローＣ５０２から来たイベントと、概念レベルデータフローＣ５０３から来たイベントが併合されたイベントが入力される。
また、図９ではセンサレベルデータフローＣ５０２、概念レベルデータフローＣ５０３、行動レベルデータフローＣ５０４が、それぞれ１回ずつ現れているが、センサレベルデータフローＣ５０２と概念レベルデータフローＣ５０３は、図５にて説明したように、行動レベルデータフローＣ５０４の直前において、何回でも実行することができる。
すなわち、情報処理装置１０１は、学習型情報処理装置１０４の利用を最小限に抑えつつ、多彩な条件判断が可能になる。
【００８５】
このように、入力同期併合処理部３０５と条件判断処理部３０６、そして学習データ処理部３０７を複数個組み合わせることで、多種多様なＡＤＬを認識あるいは推定することが可能になると共に、複数のＡＤＬの識別あるいは推定結果を、他のマルチモーダルセンサＣ５０１の計測結果等と組み合わせることで、きめ細かな応答を観察対象者に実施することが可能になる。
【００８６】
本発明の実施形態に係る情報処理装置１０１では、入出力制御部３０１の大部分の機能にFluentdを使用した。しかし、使用するソフトウェアは必ずしもFluentdには限らない。定義ファイル３０４の記述によってデータの流れを自由に定義することができる仕組みがあれば、Fluentdでなくとも、情報処理装置１０１を実現することは可能である。一例として、名前付きパイプを応用して、シェルスクリプト等を使用すること等が考えられる。
【００８７】
［学習データ処理部３０７と概念学習器Ｃ５０６及びオラクルＣ５０７］
図７では、概念レベルデータフローＣ５０３及び学習データ処理部３０７の動作を概略的に説明した。しかし、学習データ処理部３０７には、データ分類モード、新規クラス学習モードの、２種類の動作モードを有する。また更に学習データ処理部３０７は、学習型情報処理装置１０４と共に定義ファイル３０４を更新することで、計算機負荷の低減や推定精度の向上等が可能になる。
【００８８】
図１０は、入出力制御部３０１及び学習型情報処理装置１０４の、データ分類モードにおける機能ブロック図である。
マルチモーダルセンサＣ５０１から生じる種々のデータは、センサレベルデータフローＣ５０２に属する第一フィルタ１００１、第二フィルタ１００２、…第ｎフィルタ１００３に入力される。
第一フィルタ１００１は、マルチモーダルセンサＣ５０１から生じる種々のデータのうち、定義ファイル３０４のディレクティブに記述されたセンサのデータに対し、現在日時情報と所定のタグを付して、ＪＳＯＮ形式のイベントを生成する。
第二フィルタ１００２、また第ｎフィルタ１００３も、第一フィルタ１００１と同様に、ＪＳＯＮ形式のイベントを生成する。
なお、第一フィルタ１００１、第二フィルタ１００２、…第ｎフィルタ１００３には、それぞれ同じセンサのデータがＪＳＯＮ形式イベントに格納されるとは限らない。すなわち、第一フィルタ１００１、第二フィルタ１００２、…第ｎフィルタ１００３を定義する定義ファイル３０４のディレクティブには、同じセンサのデータが定義されているとは限らない。
【００８９】
第一フィルタ１００１、第二フィルタ１００２、…第ｎフィルタ１００３が出力するＪＳＯＮ形式のイベントは、データ形式変換処理部１００４によってデータフォーマットが変換された後、学習型情報処理装置１０４に出力される。
学習型情報処理装置１０４は、データ形式変換処理部１００４から入力される、第一フィルタ１００１、第二フィルタ１００２、…第ｎフィルタ１００３が出力するイベントに由来するデータストリームに記述されているラベル毎に、第一推定処理部１００５、第二推定処理部１００６、…第ｎ推定処理部１００７にデータストリームを投入する。
ラベルは、イベントのタグに記述されている。例えば「sitting」「standing」等の、観察対象者の動作（ＡＤＬ）を示す情報である。また、このラベルは、学習型情報処理装置１０４の内部に存在する推定機能ブロックを一意に識別する学習型情報処理装置１０４の第一推定処理部１００５、第二推定処理部１００６、…第ｎ推定処理部１００７は、予め学習されたＡＤＬに対し、入力されたデータストリームがどの程度の確率で合致するのかを示す確率を出力する。
【００９０】
例えば、第一推定処理部１００５がラベル名「sitting」を、第二推定処理部１００６がラベル名「standing」を推定する機能ブロックであるとする。
第一フィルタ１００１は、第一推定処理部１００５に投入するためのセンサのデータを集め、タグに「sitting」を付したイベントを出力する。第一フィルタ１００１が出力するＪＳＯＮ形式のイベントは、データ形式変換処理部１００４によってデータフォーマットが変換された後、学習型情報処理装置１０４に出力される。
学習型情報処理装置１０４は、データ形式変換処理部１００４から入力されるデータストリームに記述されている「sitting」というタグを識別すると、当該データストリームを同一名称のラベルが付されている第一推定処理部１００５に振り向ける。すると第一推定処理部１００５は、入力されたデータストリームに対する、観察対象者が「座っている」確率を出力する。
【００９１】
第二フィルタ１００２は、第二推定処理部１００６に投入するためのデータを集め、タグに「standing」を付したイベントを出力する。第二フィルタ１００２が出力するＪＳＯＮ形式のイベントは、データ形式変換処理部１００４によってデータフォーマットが変換された後、学習型情報処理装置１０４に出力される。
学習型情報処理装置１０４は、データ形式変換処理部１００４から入力されるデータストリームに記述されている「standing」というタグを識別すると、当該データストリームを同一名称のラベルが付されている第二推定処理部１００６に振り向ける。すると第二推定処理部１００６は、入力されたデータストリームに対する、観察対象者が「立っている」確率を出力する。
【００９２】
つまり、第一フィルタ１００１と第一推定処理部１００５は、互いに同一名称のタグとラベル「sitting」で紐付いている。第二フィルタ１００２と第二推定処理部１００６は、互いに同一名称のタグとラベル「standing」で紐付いている。以下同様に、あるフィルタとある推定処理部は、共通する名称のタグとラベルによって、互いに１対１の対応関係で紐付いている。
すなわち、センサレベルデータフローＣ５０２に属するフィルタのうち、学習型情報処理装置１０４へイベントを出力するために設けられた第一フィルタ１００１、第二フィルタ１００２、…第ｎフィルタ１００３は、マルチモーダルセンサＣ５０１から生じる種々のデータから、それぞれのタグに等しい名称のラベルに紐付く、観察対象者のＡＤＬを推定する推定処理部に与えるイベントを出力する。
【００９３】
ラベル「sitting」が付されている第一推定処理部１００５は、入力されたデータストリーム（特徴ベクトル）に所定の演算処理を施し、観察対象者のＡＤＬ「座っている」の確率を出力する。
ラベル「standing」が付されている第二推定処理部１００６は、入力されたデータストリーム（特徴ベクトル）に所定の演算処理を施し、観察対象者のＡＤＬ「立っている」の確率を出力する。
以下同様に、第ｎ推定処理部１００７まで、観察対象者の様々なＡＤＬにおける確率を出力する。
これらの推定処理部が出力したＡＤＬの確率は、データ形式逆変換処理部１００８に入力される。
データ形式逆変換処理部１００８は、第一推定処理部１００５、第二推定処理部１００６、…第ｎ推定処理部１００７、がそれぞれ出力したＡＤＬの確率を、ラベルをタグに変換して、ＪＳＯＮ形式のイベントに変換する。そして、それらイベントは、ラベル特定処理部１００９に入力される。
【００９４】
ラベル特定処理部１００９は、内部に推定値閾値１０１０とコンパレータ１０１１を内蔵する。そして、データ形式逆変換処理部１００８から得られる複数個のイベントから、ＡＤＬの確率を取り出す。そして、それらＡＤＬの確率をソート（sort：並べ替え）を行った後、最大値を示すＡＤＬの確率に対して、コンパレータ１０１１が推定値閾値１０１０と比較する。
もし、ある一つのＡＤＬの確率が推定値閾値１０１０以上であれば、観察対象者は当該ラベルに定義されるＡＤＬを行ったと推定できる。この場合、ラベル特定処理部１００９は当該ラベルをタグに含み、正解の確率をデータに含むイベントを出力する。この時、当該イベントは学習用バッファ３０８には出力されない。
【００９５】
もし、全てのＡＤＬの確率が推定値閾値１０１０未満であれば、観察対象者がどのようなＡＤＬを行ったのかが推定できない。つまり、第一推定処理部１００５から第ｎ推定処理部１００７の、全ての推定処理部が、観察対象者のＡＤＬを推定できなかった。このことから、観察対象者のＡＤＬは、第一推定処理部１００５から第ｎ推定処理部１００７の、全ての推定処理部に定義されていない、未知のＡＤＬを実行したものと推察される。
この場合、ラベル特定処理部１００９は「unknown」等の、ラベルを特定できなかったことを意味するタグを含み、マルチモーダルセンサＣ５０１の全てのデータを含むイベントを出力する。この時、当該イベントは学習用バッファ３０８に出力され、記憶される。
【００９６】
図１１は、入出力制御部３０１及び学習型情報処理装置１０４の、新規クラス学習モードにおける機能ブロック図である。
学習用バッファ３０８には、ＡＤＬが不明のイベントが蓄積されている。これらイベントは所定のタイミングで、概念学習用データ供給処理部１１０１を通じて、概念学習器Ｃ５０６へ出力される。概念学習用データ供給処理部１１０１は、学習用バッファ３０８に蓄積されたイベントを、概念学習器Ｃ５０６へ出力する。
【００９７】
概念学習器Ｃ５０６は、概念学習用データ供給処理部１１０１からイベントを受信すると、オラクルＣ５０７に問い合わせて、新規のラベルを取得する。そして、学習型情報処理装置１０４に新しい推定処理部を作成する。
図１２Ａは、概念学習器Ｃ５０６が情報処理装置１０１とオラクルＣ５０７と学習型情報処理装置１０４に対して実行するデータ処理の流れを示す概略図である。
まず、概念学習器Ｃ５０６は、情報処理装置１０１の概念学習用データ供給処理部１１０１からイベントを受信すると、イベントを所定のフォーマットに変換した後、オラクルＣ５０７に送信することで、オラクルＣ５０７に当該イベントにおけるラベルを問い合わせる。オラクルＣ５０７は、概念学習器Ｃ５０６から受信したデータに基づき、観察対象者のＡＤＬの正解を示すラベルを決定する。そして、ラベルを概念学習器Ｃ５０６へ送信する。
概念学習器Ｃ５０６は、オラクルＣ５０７から受信したラベルを学習型情報処理装置１０４に送信して、新規の推定処理部の作成を依頼する。学習型情報処理装置１０４は、概念学習器Ｃ５０６からラベルを受信すると、当該ラベルに紐付く第ｐ推定処理部１２０１を作成する。
【００９８】
概念学習器Ｃ５０６は、fluentdの外部に設けられるデータ処理プログラムである。概念学習器Ｃ５０６は情報処理装置１０１の内部に設けてもよいし、また外部の情報処理装置にて稼働させてもよい。概念学習器Ｃ５０６は、情報処理装置１０１とオラクルＣ５０７と学習型情報処理装置１０４とのデータ等の送受信を行うことで、情報処理装置１０１と学習型情報処理装置１０４に、共通の名称で紐付く機能ブロックを生成する。すなわち概念学習器Ｃ５０６は、情報処理装置１０１におけるタグ名にて特定されるフィルタと、学習型情報処理装置１０４におけるラベル名にて特定される推定処理部を生成する。
【００９９】
概念レベルデータフローＣ５０３の説明で触れたが、オラクルＣ５０７とは、概念学習器Ｃ５０６による観察対象者のＡＤＬの問い合わせに対し、正解を指し示す者または装置である。例えば、概念学習器Ｃ５０６が出力したマルチモーダルセンサＣ５０１のデータに基づいて観察対象者のＡＤＬを推定する、情報処理装置１０１より上位に位置する他の学習型情報処理装置がオラクルＣ５０７に該当する。また、概念学習器Ｃ５０６が出力したマルチモーダルセンサＣ５０１のデータに付されている日時情報に基づいて、監視担当者または画像認識装置が観察対象者の監視カメラ映像を見ることで、観察対象者のＡＤＬを判断する、という作業もオラクルＣ５０７に該当する。
【０１００】
図１２Ｂは、概念学習器Ｃ５０６が情報処理装置１０１と学習型情報処理装置１０４に対して実行するデータ処理の流れを示す概略図である。
図１２Ａにおいて、概念学習器Ｃ５０６が学習型情報処理装置１０４に第ｐ推定処理部１２０１を作成した。次に、概念学習器Ｃ５０６は情報処理装置１０１の概念学習用データ供給処理部１１０１から再びイベントを受信する。そして、イベントを所定のフォーマットに変換して学習用データを形成した後、学習型情報処理装置１０４に学習用データを送信することで、第ｐ推定処理部１２０１に対する学習処理を実行する。すなわち、概念学習器Ｃ５０６は第ｐ推定処理部１２０１に対応する第ｐ学習処理部１２０２に、学習用データを提供する。
【０１０１】
学習型情報処理装置１０４は概念学習器Ｃ５０６から受信したラベルと学習用データを用いて、第ｐ学習処理部１２０２に学習処理を行う。すると、学習型情報処理装置１０４は、マルチモーダルセンサＣ５０１が出力するデータ（特徴ベクトル）に対し、第ｐ推定処理部１２０１を、オラクルＣ５０７が示したラベルに該当するＡＤＬを最大事後確率として出力する関数とする学習処理を行う。
【０１０２】
図１２Ｃは、概念学習器Ｃ５０６が情報処理装置１０１に対して実行するデータ処理の流れを示す概略図である。
図１２Ｂにおいて、概念学習器Ｃ５０６が学習型情報処理装置１０４の第ｐ学習処理部１２０２に対し、学習処理を実行した。次に概念学習器Ｃ５０６は、情報処理装置１０１のセンサレベルデータフローＣ５０２に属する新たなフィルタとして、第ｐ推定処理部１２０１のラベルと同名のタグを有する第ｐフィルタ１２０３のディレクティブを作成して、定義ファイル３０４に登録する。
こうして概念学習器Ｃ５０６は、オラクルＣ５０７から新たなＡＤＬを定義するラベルを得て、情報処理装置１０１におけるタグ名にて特定される第ｐフィルタ１２０３と、学習型情報処理装置１０４におけるラベル名にて特定される第ｐ推定処理部１２０１を生成することができる。
なお、図１０から図１２にかけて説明した実施形態に係る学習型情報処理装置１０４では、推定処理部をＡＤＬ（クラス）毎に作っている。これは、例えばナイーブベイズ等の、２クラス分類の組み合わせで多クラス分類をする方法を模式化している。もし、ランダムフォレストのような決定木法を採用した場合では、そのまま多クラス分類が可能である。
【０１０３】
［定義ファイル３０４の更新と、学習型情報処理装置１０４の最適化処理］
定義ファイル３０４には、センサレベルデータフローＣ５０２に属する第一フィルタ１００１、第二フィルタ１００２、…第ｎフィルタ１００３、第ｐフィルタ１２０３のディレクティブが記述されている。これらフィルタのディレクティブには、マルチモーダルセンサＣ５０１が出力するデータのうち、タグに対応するラベルによって紐付けされる、学習型情報処理装置１０４の推定処理部に、特徴ベクトルを与える役割を有する。本発明の実施形態に係る情報処理装置１０１における特徴ベクトルとは、マルチモーダルセンサＣ５０１に属する様々なセンサが出力する、種々のデータ群である。
【０１０４】
学習アルゴリズムにおいて、特徴ベクトルを構成する要素には寄与度というものが存在する。例えば、観察対象者に対して種々のセンサを設けて、それらセンサのデータを情報処理装置１０１が受信して処理をする状況を考える。
例えば、観察対象者が「立っている」というＡＤＬに対し、あるセンサの信号はその値によって観察対象者が立っているか否かを推定する際に大きな役割を有する。その一方で、別のあるセンサの信号はその値の如何にかかわらず、観察対象者が立っているか否かを推定する際に全く役に立たない。
【０１０５】
また、観察対象者が「座っている」というＡＤＬに対し、あるセンサの信号はその値によって観察対象者が座っているか否かを推定する際に大きな役割を有する。その一方で、別のあるセンサの信号はその値の如何にかかわらず、観察対象者が座っているか否かを推定する際に全く役に立たない。
すなわち、あるＡＤＬの確率を推定する推定処理部は、以上に説明したような特徴ベクトルの要素によって出力される確率に対する寄与度が異なる。
【０１０６】
推定処理は、特徴ベクトルの要素数が少なければ少ないほど、演算処理の負荷が軽くなる。したがって、特徴ベクトルの要素のうち、寄与率に全く貢献しない要素は予め定義ファイル３０４に記述されているフィルタのディレクティブにて除外しておけば、学習型情報処理装置１０４の演算負荷が軽くなり、システム全体のパフォーマンスが向上する。
【０１０７】
図１３は、情報処理装置１０１における、定義ファイル３０４の更新処理を示すブロック図である。この処理は、例えば情報処理装置１０１が通常の処理を行う必要がない、観察対象者が就寝している深夜等の時間帯において、システムメンテナンス処理の一環として実行される。図１３では一例として、図１２で説明した第ｐフィルタ１２０３と第ｐ推定処理部１２０１を更新するものとする。
フィルタ抜粋処理部１３０１は、定義ファイル３０４を読み込むと、センサレベルデータフローＣ５０２に属する第ｐフィルタ１２０３のディレクティブを抜粋する。そして、抜粋した第ｐフィルタ１２０３のディレクティブのうち、第ｐ推定処理部１２０１を特定するラベルと同名のタグと、センサのエントリを、重要度算出部１３０２へ出力する。
【０１０８】
重要度算出部１３０２は、ランダムフォレスト等の周知のアルゴリズムを用いて、学習用バッファ３０８に記憶されているデータを読み出し、第ｐ推定処理部１２０１にデータ（特徴ベクトル）を投入することで、特徴ベクトルに属するセンサのデータの重要度を算出する。
重要度算出部１３０２が算出したセンサのデータ、すなわち特徴ベクトルの要素の重要度は、特徴圧縮処理部１３０３に入力される。特徴圧縮処理部１３０３は、重要度算出部１３０２が算出した重要度に従って特徴ベクトルの要素に順位を付す。更に、削除しても推定処理の精度が所定の閾値より低下しない程度まで、特徴ベクトルの要素、すなわち寄与率の低いセンサのデータを、センサのエントリから削除する。そして、特徴圧縮処理部１３０３は圧縮したセンサのエントリをラベルと共に概念学習器Ｃ５０６に送信する。
概念学習器Ｃ５０６は、前述の図１２において説明したように、新たな推定処理部を生成し、推定処理部に対応する学習処理部に学習処理を施す。そして、圧縮したセンサのエントリとラベル、すなわちタグに基づいて、新たなフィルタのエントリを作成し、定義ファイルに追記する。
【０１０９】
以下に、定義ファイル３０４にて記述される、定義ファイル３０４の更新処理が実行される前のフィルタの指示（ディレクティブ（directive））の一例を示す。
【０１１０】
<match concept.9dof_and_mic>
@type aol-classifier
host 127.0.0.1
port 9199
client_api 'classifier'
train_analyze analyze
threshold 9.0
target_class sitting
num_keys mfcc_p,mfcc_1,mfcc_2,mfcc_3,mfcc_4,mfcc_5, 
mfcc_6,mfcc_7,mfcc_8,mfcc_9,mfcc_10,mfcc_11,mfcc_12,
rms_mean,rms_var,zcr,ax_mean,ay_mean,az_mean,mx_mean,
my_mean,mz_mean,gx_mean,gy_mean,gz_mean,ax_var,ay_var,
az_var,mx_var,my_var,mz_var,gx_var,gy_var,gz_var
tag action.recognized.9dof_and_mic
</match>
【０１１１】
以下に、定義ファイル３０４にて記述される、定義ファイル３０４の更新処理が実行された後のフィルタの指示（ディレクティブ（directive））の一例を示す。
【０１１２】
<match concept.9dof_and_mic>
@type aol-classifier
host 127.0.0.1
port 9199
client_api 'classifier'
train_analyze analyze
threshold 9.0
target_class sitting
num_keys az_mean,ay_mean,my_mean
tag action.recognized.9dof_and_mic
</match>
【０１１３】
１行目の「<match concept.9dof_and_mic.train>」は、「concept.9dof_and_mic」というタグを持つデータに対して、「<match ~~>」から始まり「</match>」で終端する中に記述されているパラメータを利用して処理を行うことを意味する。「concept.9dof_and_mic」には、「9dof」というセンサと「mic」から得られる特徴量をマージさせた、ＪＳＯＮ形式のイベントが流れてくる。２行目の「@type aol-classifier」で、入力データに対して「aol-classifier」の処理を適用することを指定する８行目の「target_class」では、どのクラスを分類するための分類器なのかを指定する。今回の例は「sitting」としている。
９行目の「num_keys」で、分類器が使う特徴量データのkeyを指定する。
定義ファイル３０４の更新処理によって、９行目の「num_keys」に列挙される特徴ベクトルの要素数が、大幅に減少していることがわかる。
【０１１４】
［シリアライザ１４０２による対話型シナリオエンジンの実現］
図５にて説明したように、情報処理装置１０１は、マルチモーダルセンサＣ５０１から発生したデータに対し、観察対象者がどのようなＡＤＬを行っているのかをセンサレベルデータフローＣ５０２にて特定し、あるいは概念レベルデータフローＣ５０３にて推定して、それらＡＤＬに対応する反応、すなわちアクションを行動レベルデータフローＣ５０４で決定し、決定したアクションをアクティベータＣ５０５にて実現する。
【０１１５】
前述のように、情報処理装置１０１におけるアクティベータＣ５０５は、音声出力処理部３０３、Ｄ／Ａ変換器２１０及びスピーカ１０５によって実現される発話機能を含む。例えば、前述の発話の例である「甲田さん、おはようございます。今日も一日楽しく過ごしましょう。」という発話は、発話開始から完了までおよそ４〜５秒程度の時間を要する。
【０１１６】
マルチモーダルセンサＣ５０１から発生したデータによっては、同時刻に複数のＡＤＬが確認でき、それによって複数のアクションが同時に発生するケースがありうる。その場合、何も制御を行わずに複数のアクションを同時に音声出力処理部３０３に与えると、複数の発話が同時に発生してしまう。
そこで、アクションに優先度を付与し、発生したアクションを一旦キュー（バッファメモリ）に格納してから優先度でソートし、先に実行されているアクションが終了するまで次のアクションの実行を待つ制御を行うことで、観察対象者との自然な対話が可能になる。
【０１１７】
図１４は、本発明の変形例に係る情報処理装置１４０１のソフトウェア機能を示すブロック図である。
図１４に示す情報処理装置１４０１の、図３に示す情報処理装置１０１との相違点は、情報処理装置１４０１にはシリアライザ１４０２があることのみである。シリアライザ１４０２以外の機能ブロックは、図３に示される機能ブロックと同一であるので、説明を省略する。
【０１１８】
図１５は、シリアライザ１４０２の機能ブロック図である。
シリアライザ１４０２は、アクション選択処理部１５０１とキュー１５０２よりなる。
アクション選択処理部１５０１は、入力同期併合処理部３０５、条件判断処理部３０６及び学習データ処理部３０７からアクションに係るイベントを受信すると、それらイベントを一旦キュー１５０２に記憶する。そして、イベントのタグに付されている優先度に基づいてソートを行い、優先度の高いイベントから順番に処理を行う。また、優先度が付されていない、音声出力処理部３０３に出力しないイベントは、データベース３０９に出力する。
なお、本発明の実施形態では明示していないが、アクションは上記の発話とログ記録に限られない。例えば、ブザーを鳴動させる、ＬＥＤを発光させる、ＬＣＤ等の表示装置に所定のメッセージ等を表示させる他、本発明をロボットに組み込む場合は、ロボットの挙動自体がアクションとなる。
【０１１９】
［シナリオの優先度］
本発明の変形例に係る情報処理装置１４０１は、アクションを決定する行動レベルデータフローＣ５０４において、シナリオを優先度に応じてグループ分けを行う。
以下に、シナリオの優先度を列挙する。
【０１２０】
・異常対応シナリオ（優先度４）
観察対象者が転倒、発作、梗塞を起こした等、観察対象者が緊急性を要する状態を検知し、アラームを発するためのシナリオである。
優先度４レベルのシナリオは、以下に記す下位の優先度のシナリオの実行を中断してでも、最優先で実行する。
・健康チェックシナリオ（優先度３）
観察対象者の介護カルテ等に記録を残す、観察対象者のバイタルデータ取得用のシナリオである。
優先度３レベルのシナリオは、以下に記す下位の優先度のシナリオの実行に優先して実行する。
・リラクゼーションシナリオ（優先度２）
観察対象者に対する挨拶、ゲーム、お歌等、観察対象者をリラックスさせるためのシナリオである。
優先度２レベルのシナリオは、以下に記す下位の優先度のシナリオの実行に優先して実行する。
・応答シナリオ（優先度１）
観察対象者の問いかけに対して応答する、受動的応答のシナリオである。
優先度１レベルのシナリオは、観察対象者の問いかけ、情報処理装置１４０１の起動時等のシチュエーションにおいて、かつ、上位のシナリオが実行されていない時に実行する。
【０１２１】
［イベントに対するシナリオの優先度の付与］
本発明の変形例に係る情報処理装置１４０１は、アクションを決定する行動レベルデータフローＣ５０４において、シナリオを優先度に応じてグループ分けを行い、所定の条件に合致するイベントに対してシナリオの優先度をタグ名にて付与する。
以下に、定義ファイル３０４にて記述される条件判断処理部３０６の指示（ディレクティブ（directive））の一例を示す。
【０１２２】
<match action.greeting>
@type condition_checker
tag1 scenario.priority_3.vital_check
tag2 scenario.priority_1.speak_text.greet_back
tag_else none
renew_record true
condition1 record['nameNum'] == 1
condition2 record['nameNum'] > 1
<record1>
text ${record['names'] + record['word']}
</record1>
<record2>
// 今回の例では、vital-checkではデータの中身は必要なし
</record2>
</match>
【０１２３】
上記のディレクティブの例は、挨拶アクションが認識された時（action.greeting）に、ロボットの前で検出された人数が１人だけの場合はバイタルチェックシナリオ（優先度３）を、ロボットの前で検出された人が２人以上の場合は名前を呼んで挨拶する（優先度１）という設定ファイルの記述の例である。条件に合致した（Matchした）データが「condition1」で指定されている条件を満たしている場合には、タグ名を「tag1」で指定されている「scenario.priority_3.vital_check」に書き換えて送信する。同様に、「condition2」で指定されている条件を満たしている場合には、「tag2」で指定されている「scenario.priority_1.speak_text.greet_back」に書き換える。「scenario.priority_*」の「"*"」に該当している部分は、シナリオデータの優先度を示している。その後にある「vital_check」や「speak_text」は、実行するシナリオの種類に対応している。
【０１２４】
［シリアライザ１４０２の動作］
図１６は、シリアライザ１４０２の動作の流れを示すフローチャートである。
処理を開始すると（Ｓ１６０１）、アクション選択処理部１５０１はイベントのタグに付されている優先度を検証する（Ｓ１６０２）。
ステップＳ１６０２からＳ１６０８までは、プログラミング言語におけるｓｗｉｔｃｈ−ｃａｓｅ文等による条件分岐処理である。
優先度が４である場合（Ｓ１６０２の「優先度＝４」）、アクション選択処理部１５０１は異常対応シナリオ処理を実行して（Ｓ１６０３）、一連の処理を終了する（Ｓ１６０４）。
優先度が３である場合（Ｓ１６０２の「優先度＝３」）、アクション選択処理部１５０１は健康チェックシナリオ処理を実行して（Ｓ１６０５）、一連の処理を終了する（Ｓ１６０４）。
優先度が２である場合（Ｓ１６０２の「優先度＝２」）、アクション選択処理部１５０１はリラクゼーションシナリオ処理を実行して（Ｓ１６０６）、一連の処理を終了する（Ｓ１６０４）。
優先度が１である場合（Ｓ１６０２の「優先度＝１」）、アクション選択処理部１５０１は応答シナリオ処理を実行して（Ｓ１６０７）、一連の処理を終了する（Ｓ１６０４）。
優先度が付されていない場合（Ｓ１６０２の「優先度なし」）、アクション選択処理部１５０１はログ記録処理を実行して（Ｓ１６０８）、一連の処理を終了する（Ｓ１６０４）。
何れの処理においても、ステップＳ１６０４から再びステップＳ１６０１に戻り、再度処理が繰り返される。
【０１２５】
図１７は、異常対応シナリオ処理の動作の流れを示すフローチャートである。図１６のステップＳ１６０３の詳細である。
処理を開始すると（Ｓ１７０１）、アクション選択処理部１５０１はキュー１５０２に格納されている優先度３以下のイベントを全て削除（クリア）する（Ｓ１７０２）。次に、音声出力処理部３０３にて実行されている実行中のアクションを中断して（Ｓ１７０３）、直ちに現在のアクション、すなわち優先度４のアクションを実行して（Ｓ１７０４）、一連の処理を終了する（Ｓ１７０５）。
【０１２６】
図１８は、健康チェックシナリオ処理、リラクゼーションシナリオ処理、応答シナリオ処理の動作の流れを示すフローチャートである。図１６のステップＳ１６０５、Ｓ１６０６及びＳ１６０７の詳細である。
処理を開始すると（Ｓ１８０１）、アクション選択処理部１５０１はキュー１５０２が空であるか否かを確認する（Ｓ１８０２）。
キュー１５０２が空であれば（Ｓ１８０２のＹＥＳ）、アクション選択処理部１５０１は行動レベルデータフローＣ５０４から受信したイベントをキュー１５０２に格納して（Ｓ１８０３）、一連の処理を終了する（Ｓ１８０４）。
キュー１５０２が空でなけば（Ｓ１８０２のＮＯ）、アクション選択処理部１５０１は行動レベルデータフローＣ５０４から受信したイベントをキュー１５０２に格納する（Ｓ１８０５）。その後、キュー１５０２の中身を優先度でソートして（Ｓ１８０６）、一連の処理を終了する（Ｓ１８０４）。
【０１２７】
ステップＳ１８０６におけるキュー１５０２のソート処理は、キュー１５０２に最初のイベントが入った時点から所定の時間、例えば０。５秒等経過後に実行するようにアクション選択処理部１５０１の機能を構成してもよい。つまり、キュー１５０２にある程度のレコード数のイベントが蓄積された時点でソート処理を実行することで、無駄なソート処理の繰り返しを抑制する。
【０１２８】
なお、図１８では説明を簡単にするために、優先度３、２及び１の処理を同一のフローチャートで説明したが、勿論、異なる処理にしてもよい。例えば、優先度１のイベントに対する応答シナリオ処理Ｓ１６０７ついては、キュー１５０２に優先度３のイベントが格納されていたなら、優先度１のイベントをキュー１５０２に格納せずに破棄し、実行をしない、という処理にしてもよい。
【０１２９】
図１９は、キュー１５０２の状態を説明するための概略図である。
今、（ａ）に示すように、キュー１５０２には５個のレコードのイベントが格納されているとする。キュー１５０２には、イベントに付されている時刻順にイベントが格納されているが、それらイベントに付されている優先度はばらばらである。
次に、図１８のステップＳ１８０６において、アクション選択処理部１５０１がキュー１５０２をソートすると、（ｂ）に示すように、キュー１５０２のレコードは優先度が優先してソートされる。この結果、キュー１５０２の最下部レコードの優先度が最も高い「３」のレコードになり、レコードの順番が上に行くに従って、優先度が低い数のレコードが積み上がっている。
【０１３０】
本発明の各実施形態においては、情報処理装置１０１を開示した。
情報処理装置１０１は、種々のセンサ（マルチモーダルセンサＣ５０１）を利用して、多種多様なＡＤＬの識別あるいは推定を行う。
入力同期併合処理部３０５は、複数のイベントを受け入れて、各々のイベントの内容を単一のイベントに併合して出力する。その際、入力同期併合処理部３０５は、定義ファイル３０４に記述することで指定されたタイミングで、イベントを出力する。
【０１３１】
学習データ処理部３０７は、入力されたイベントの内容を学習型情報処理装置１０４に特徴ベクトルとして出力し、学習型情報処理装置１０４から目的変数を受け取り、イベントの形式に変換して出力する。
条件判断処理部３０６は、単一のイベントを受け入れて、イベントに含まれているデータに対し、所定の条件判断を行うことで、条件に応じて異なるイベントを出力する。
情報処理装置１０１は、入力同期併合処理部３０５、学習データ処理部３０７、そして条件判断処理部３０６を定義ファイル３０４にて複数回使用することが可能であり、これらを組み合わせることで、複雑なデータフローを容易に形成し、多種多様なＡＤＬの識別あるいは推定を行うことができる。
【０１３２】
以上、本発明の実施形態について説明したが、本発明は上記実施形態に限定されるものではなく、請求の範囲に記載した本発明の要旨を逸脱しない限りにおいて、他の変形例、応用例を含む。
【０１３３】
１０１…情報処理装置、１０２…顔認識カメラ、１０３ａ、１０３ｂ…センサ、１０４…学習型情報処理装置、１０５…スピーカ、１０６…表示部、１０７…マイク、２０１…バス、２０２…ＣＰＵ、２０３…ＲＯＭ、２０４…ＲＡＭ、２０５…不揮発性ストレージ、２０６…リアルタイムクロック、２０７…ＮＩＣ、２０８…シリアルＩ／Ｆ、２０９…Ａ／Ｄ変換器、２１０…Ｄ／Ａ変換器、２１１…操作部、３０１…入出力制御部、３０２…入出力整形処理部、３０３…音声出力処理部、３０４…定義ファイル、３０５…入力同期併合処理部、３０６…条件判断処理部、３０７…学習データ処理部、３０８…学習用バッファ、３０９…データベース、３１０…外部情報処理装置、６０３…マイクロ波センサ、６０５…非接触温度センサ、７０１…９軸センサ、７０３…ピンマイク、１００１…第一フィルタ、１００２…第二フィルタ、１００３…第ｎフィルタ、１００４…データ形式変換処理部、１００５…第一推定処理部、１００６…第二推定処理部、１００７…第ｎ推定処理部、１００８…データ形式逆変換処理部、１００９…ラベル特定処理部、１０１０…推定値閾値、１０１１…コンパレータ、１１０１…概念学習用データ供給処理部、１２０１…第ｐ推定処理部、１２０２…第ｐ学習処理部、１２０３…第ｐフィルタ、１３０１…フィルタ抜粋処理部、１３０２…重要度算出部、１３０３…特徴圧縮処理部、１４０１…情報処理装置、１４０２…シリアライザ、１５０１…アクション選択処理部、１５０２…キュー
【図１】
2019169147.tif 000003
【図２】
2019169147.tif 000004
【図３】
2019169147.tif 000005
【図４】
2019169147.tif 000006
【図５】
2019169147.tif 000007
【図６】
2019169147.tif 000008
【図７】
2019169147.tif 000009
【図８】
2019169147.tif 000010
【図９】
2019169147.tif 000011
【図１０】
2019169147.tif 000012
【図１１】
2019169147.tif 000013
【図１２】
2019169147.tif 000014
【図１３】
2019169147.tif 000015
【図１４】
2019169147.tif 000016
【図１５】
2019169147.tif 000017
【図１６】
2019169147.tif 000018
【図１７】
2019169147.tif 000019
【図１８】
2019169147.tif 000020
【図１９】
2019169147.tif 000021