−構成−
以下、本発明の一実施の形態に係るシステムについて説明する。本システムは、利用可能なプログラムモジュールの中から必要なモジュールを選択し、モジュール間のデータの流れに応じてウェブブラウザの画面上でモジュール間を線(矢印)で結ぶことにより、モジュールの組合せによるシステムを設計し、かつ動作させることが可能な、音声認識を行なうためのシステムである。
本システムでは、音声をリアルタイムで処理することを目的に、音声データを10msec程度の時間間隔で所定の長さの単位(これをフレームと言う)に分割して、フレーム単位で各モジュールの間でデータを受け渡しながら処理を実行する。フレーム単位のデータは、あるモジュールに入力され、そのモジュールで当該フレームに対する処理を行なった後に、次のモジュールに渡される。このフレーム単位のデータを本明細書では「イベントメッセージ(以後イベントと略す)」という。
イベントには、データの種類に応じていくつかの型がある。例えば、生の音声データの場合はWAVE型、特徴パラメータの場合はFEATURE型等、である。従ってモジュールの入出力においては、そこに入力されるデータ、又はそこから出力されるデータがどのような型かを明確に定義しておく必要がある。データの型に応じて決まるイベントの型を、本明細書では「イベントタイプ」と呼ぶ。
そして、システムを組む場合には、目的に従ってモジュールを選択し、どのモジュールのどの出力をどのモジュールのどの入力に与えるかを、データの型を考慮しながら決定する必要がある。このように、モジュール間のデータの流れを記述したものを本明細書ではフロー定義と呼び、典型的にはコンピュータ読取可能な形式で記憶装置に格納される。本システムでは、モジュール定義をサーバに格納しておき、ウェブブラウザでこのモジュール定義を読込んで、ウェブブラウザ上でシステム設計を行なう。システム設計により得られるものは、モジュール間の接続及びそれに伴うオプション/パラメータ値と、データの流れとを定義したデータである。本明細書では、このデータをフロー定義と呼び、それをファイルにしたものをフロー定義ファイルと呼ぶ。
図1に、本発明の一実施の形態に係る音声認識データ処理システム50の機能的なブロック図を示す。図1を参照して、この音声認識データ処理システム50は、前述したようなモジュール定義ファイル82を予め記憶し、ウェブサーバを通じて、ユーザによるフロー定義の保守・及び実行等の制御を行なうためのフロー定義実行管理装置60と、フロー定義実行管理装置60に記憶されているモジュール定義ファイル82を用いて、ウェブブラウザ経由でフロー定義の作成を行ない、作成したフロー定義をフロー定義実行管理装置60に格納させる処理と、作成したフロー定義に従い、各モジュールを組合せて得られるシステムをフロー定義実行管理装置60に実行させる指示を与えるためのフロー定義作成・実行指示装置62とを含む。なお本実施の形態では、フロー定義実行管理装置60はサーバ装置上で動作し、フロー定義作成・実行指示装置62はクライアント装置上で動作するが、図面ではその詳細は省略する。
音声認識データ処理システム50は、1又は複数個のコンピュータシステムから構成されており、それらシステムに備えられた記憶装置には、各モジュールをコンピュータプロセス上で実行させるための一群のプロセス用プログラム66が記憶されている。フロー定義実行管理装置60は、これらコンピュータハードウェアとプロセス用プログラム66とを用いて、フロー定義作成・実行指示装置62により設計された、モジュール100〜110からなるデータ処理システム64によるデータ処理を実行させる。フロー定義実行管理装置60によるデータ処理及びその制御の詳細については後述する。
フロー定義実行管理装置60は、前述したとおり、フロー定義実行管理装置60で実行可能なモジュールの仕様をそれぞれ定義したモジュール定義ファイル82と、モジュール定義ファイル82を用いてフロー定義作成・実行指示装置62によって定義されたフロー定義を格納するフロー定義ファイル86と、処理のための入力データを格納する入力ファイル90及び出力結果を格納する出力ファイル88とを含む。入力ファイル90及び出力ファイル88はいずれも利用者により選択される。特に出力ファイル88は、フロー定義に従ったデータ処理を実行するときに確保される。
フロー定義実行管理装置60はさらに、複数種類の入力ファイルに関する情報を格納する入力ファイル情報記憶部84と、フロー定義作成・実行指示装置62との間でモジュール定義ファイル82及びフロー定義等の情報をウェブ経由で交換するための管理プログラム80と、フロー定義作成・実行指示装置62によってシステム64の動作の実行が指示されると管理プログラム80によって起動され、データ処理システム64をコンピュータ資源を用いて実現し、入力ファイル90からの入力を与えてデータ処理させ、その結果を出力ファイル88に出力させる処理を制御するためのモジュールマネージャ92とを含む。
図1においては、データ処理システム64は複数のモジュール100,102,104,106,108及び110を含んでいる。実際には、モジュール定義はクラス化されており、モジュール100,102,104,106,108及び110は、モジュールマネージャ92の制御によってデータ処理システム64を実現するプロセス内に生成される、各モジュールのオブジェクトクラスのインスタンスである。従って、同一のモジュール定義から、同一のプロセス又は別々のプロセス内に複数のモジュールのインスタンスが生成され動作することもある。
図2は、モジュール定義ファイル82の内容を示す。図2を参照して、モジュール定義ファイル82は、内部的なモジュール名と、フロー定義作成・実行指示装置62の画面に表示するためのモジュール名(表示用)と、フロー定義作成・実行指示装置62の画面にモジュールに関する説明を表示するためのテキストからなるモジュール説明(表示用)と、作者名と、バージョン情報とを含む。
モジュール定義ファイル82はさらに、このモジュールのタイプを内部的に区別するためのモジュールタイプと、フロー定義作成・実行指示装置62の画面にモジュールタイプを表示するために使用するモジュールタイプ(表示用)と、当該モジュールを使用可能なユーザ情報からなるセキュリティ制限情報とを含む。モジュールタイプは、モジュールの基本的な機能を示すものであり、本実施の形態のように音声認識の場合には、発話区間切出し(これを以下「EPD」と呼ぶ。)、特徴抽出、CMS(平均ケプストラムによる正規化処理)、特徴パラメータ編集、デコーダ、再評価、結果出力等がある。
モジュール定義ファイル82はさらに、このモジュールが処理できるイベントとして、受取イベントタイプと、出力イベントタイプと、入出力イベント関連情報と、モジュールの枝番とを含む。受取イベントタイプ及び出力イベントタイプは、それぞれ当該モジュールで可能なイベントタイプの集合である。
モジュール定義ファイル82はさらに、このモジュールのオプション情報を含む。同種のオプションは、同一のセクションにまとめられる。ただし、オプションによってはセクションに属さないものもある。従ってモジュール定義ファイル82は、0、1、又は複数のセクションを含みうる。セクションに属さないオプションは、セクション内ではなくセクション外に記述されているが、記載の仕方は、後述するセクション内のオプションのものと同様である。
各セクションは、内部的なセクション名と、ユーザに表示するためのセクション名とを含む。各セクションはさらに、1又は複数のオプションを含む。
各オプションは、内部的にオプションを区別するためのオプション名と、ユーザに対してオプションを表示する際の表示用オプション名と、フロー定義作成・実行指示装置62においてこのオプションに関するヘルプを表示する際のヘルプテキストとなるオプションヘルプ(表示用)とを含む。
オプションはさらに、ユーザによる値の指定がなかった場合のオプション値のデフォルト値と、オプション値がとり得る内部的な値を列挙する、有効値フィールドと、オプション値がとり得る内部的な値に対応する、表示用の値を列挙する表示用有効値フィールドとを含む。実際には表示用のテキストは別ファイルにより記憶されており、モジュール定義ファイル82に記憶されているのは表示用テキストの識別番号である。
モジュール定義ファイル82はさらに、オプション値が数値であるときの有効範囲を定める有効範囲フィールドを含む。有効範囲フィールドは、その最小値及び最大値と、それぞれ最小値及び最大値を有効範囲に含むか否かを示す二つのフラグとを含む。
モジュール定義ファイル82はこれらに加えて、オプション値の型(string、integer、double、boolean、file、modelのいずれか)と、オプションを指定できる回数を示す複数指定回数フィールドと、オプションが必須か否かを示す必須フィールドと、オプション値が所定の複数の候補から選択するタイプである場合、フロー定義作成・実行指示装置62で行なわれるフロー定義作成処理においてその選択のために使用するGUI(グラフィカル・ユーザ・インタフェース)部品のタイプを示す表示タイプフィールドとを含む。
図3には、モジュール定義ファイル82の具体的な一例を示す。図3に示すように、モジュール定義ファイル82は、XML(eXtended Markup Language)で記述されている。開始タグ<module>と終了タグ</module>とで囲まれた部分がモジュール定義である。開始タグ<module-info>と終了タグ</module-info>で囲まれた部分がこのモジュールに関するオプション以外の情報を示す。開始タグ<options>と終了タグ</options>に囲まれた部分がオプション全体に関する情報を示す。開始タグ<section>と終了タグ</section>とに囲まれた部分がセクションに関する情報を示し、開始タグ<option>と終了タグ</option>とに囲まれた部分が個々のオプションに関する情報を示す。
フロー定義作成・実行指示装置62は、各モジュールに関するモジュール定義情報を用いて、利用者がフロー定義を作成する際の画面情報を生成したり、接続関係の制約を課したり、オプションの値の設定を行なったりする際の利用者の補助を行なう。
図4に、フロー定義ファイル86の構成の詳細を示す。フロー定義ファイル86は、ユーザが作成したフロー定義及びオプション値等を格納するためのXML形式のファイルであり、一つのフロー定義ファイル86が一つのデータ処理を定義する。このフロー定義ファイルは、図1に示すモジュールマネージャ92の起動時にフロー定義作成・実行指示装置62を介して、利用者により選択され指定される。モジュールマネージャ92はフロー定義ファイル86を読込み、フロー定義ファイル86内に記述されたプロセスを起動し、フロー定義ファイル86内に記述されたモジュールのインスタンスを生成し、各モジュールインスタンスに、フロー定義ファイル86に記述されたオプション値を配信して設定した後、データ処理システムを起動する。図5にはフロー定義ファイル86の具体的な一例を示す。以後、図4について説明するが図5についても適宜参照されたい。
図4を参照して、フロー定義ファイル86は、コンピュータ上でのデータ処理を実行する一つの単位を形成するプロセスに関する情報を含む。プロセスに関する情報は、データ処理システムに含むプロセスの数だけ繰返される。プロセスに関する情報は、プロセス名と、当該プロセスを実行するホスト名と、当該プロセスのためのプログラム名と、当該プロセス内で実行すべきモジュールに関する情報とを含む。
モジュールに関する情報は、一つのプロセスに含まれるモジュールの数だけ繰返される。各モジュールに関する情報は、モジュール名と、枝番付のモジュール名と、モジュール識別子と、枝番とを含む。一つのプロセス内において同じモジュールが複数個動作する場合があるため、それらを区別するために枝番が設けられる。
フロー定義ファイル86はさらに、ファイルに関する情報を含む。ファイルに関する情報は、データ処理システムの入力ファイルに関する情報と、出力ファイルに関する情報とを含む。各ファイルに関する情報は、入出力名、ファイル名、フォーマット、イベントタイプ、データタイプ、及びサイズを含む。これらは、ファイルが複数個ある場合にはその数だけ繰返される。
フロー定義ファイル86はさらに、システム内のモジュール間の接続関係を示す矢印に関する情報を含む。矢印に関する情報は、データ処理システム内に存在する矢印の数だけ繰返される。
矢印に関する情報は、矢印の出所に関する情報と、矢印の行き先に関する情報と、矢印が示すイベントに関する情報とを含む。出所に関する情報は、矢印の出所のモジュール名と、この矢印が当該モジュールの何番目の出力からのものかを示す番号とを含む。同様に、行き先に関する情報は、矢印の行き先のモジュール名と、当該矢印の行き先が、行き先モジュールの何番目の入力であるかを示す番号とを含む。イベントに関する情報は、当該イベントのデータの型を示すイベントタイプを含む。
フロー定義ファイル86はさらに,各モジュールのオプションに関する情報を含む。モジュールオプションに関する情報は、モジュール数だけ繰返される。
モジュールオプションに関する情報は、もしセクションにまとめられているオプションがあれば、セクションに関する情報を含み、各セクションに関する情報は、当該セクションに属するオプションの値に関する情報を含む。モジュールオプションに関する情報はまた、セクションにまとめられていないオプションの値に関する情報も含む。
なお本実施の形態では、モジュールに関する情報のうち、枝番が付されたものに関しては、同じモジュールであって枝番がないもののオプション値との差分のみを記述することにより、データ量を削減している。
図6に、フロー定義作成・実行指示装置62のブロック図を示す。図6を参照して、フロー定義作成・実行指示装置62は、フロー定義実行管理装置60から受けるモジュール定義ファイル82(図1を参照されたい。)の内容に基づいて、GUIによりフロー定義を作成するとともに、作成されたフロー定義を指定してフロー定義実行管理装置60に対してデータ処理の実行を指示するためのフロー定義作成・実行指示プログラム140と、モジュール定義ファイル82の内容から抽出される、モジュールタイプに関する情報を格納するためのモジュールタイプテーブル146と、フロー定義実行管理装置60から受取ったモジュール定義ファイル82の内容を格納するためのモジュールテーブル148と、フロー定義作成・実行指示装置62が接続されているコンピュータシステムに属するホストのリストを格納するためのホストテーブル150とを含む。これらテーブルの詳細については後述する。
フロー定義作成・実行指示装置62はさらに、ユーザとの間のインタフェースを実現するためのモニタ142並びにキーボード及びポインティングデバイスを含む入力装置144と、モニタ142及び入力装置144を用いたGUIによりユーザにより画面上に作成されるフロー定義のグラフに関する情報を格納するための、ノードテーブル152及びアークテーブル154とを含む。各モジュールは、フロー定義のグラフ中のノードに相当し、矢印はアークに相当する。矢印に関しては、以後「アーク」と呼ぶ。これらテーブルの詳細についても後述する。
図7を参照して、フロー定義作成・実行指示プログラム140によるフロー定義の画面及びその手法について説明する。図7を参照して、フロー定義作成・実行指示プログラム140によってモニタ142上に表示されるフロー定義画面170は、フロー定義作成領域178と、フロー定義を新規に作成する際に操作する新規ボタン180、作成済みのフロー定義を保存する際に操作する保存ボタン182、作成済みのフロー定義を削除する際に操作する削除ボタン184、作成済みのフロー定義から所定の条件に合致するものを検索する際に操作する検索ボタン186、及び作成済みのフロー定義の実行を指示する際に操作する実行ボタン188とを含む。
画面170はさらに、フロー定義中に使用可能なモジュールタイプをアイコンで表示するモジュールパレット172と、アークを作成する際に操作するアークボタン176とを含む。
画面170を用いたフロー定義の作成は、次のような手順で行なう。まず、マウスポインタ174で示すように、使用したいモジュールのアイコンをモジュールパレット172からフロー定義作成領域178上に、ドラッグ・アンド・ドロップして配置する。次に、各モジュールについて、利用可能なモジュールの中でどのモジュールを使用するかを決定し、オプションを設定する。さらに、モジュール間にアークを配置し、モジュール間の入出力関係を定義する。最後に、各アークのイベントタイプを設定する。
例えば画面上で配置されたモジュールの矩形を選択(マウスでクリック)することにより、そのモジュールタイプのモジュールとして利用可能なものの選択画面が表示される。モジュールが選択されると当該モジュールのオプションを設定する画面が表示される。オプションを設定すると、当該モジュールのモジュール定義ファイル82に記述されたオプション情報に従ったチェックが行なわれ、誤りがあればエラーメッセージが表示され再入力が促される。
アークを選択(アークをマウスでダブルクリック)すると、当該アークのイベントタイプを選択する画面が表示される。ここで表示されるイベントタイプは、アークの出所のモジュールの出力イベントタイプとしてリストされているものからなる集合と、アークの行き先のモジュールの入力イベントタイプとしてリストされているものからなる集合との共通集合(積集合)の要素である。モジュールの組合せからアークのイベントタイプが一意に定まる場合、そのイベントタイプが自動的に設定される。
こうした操作には、モジュールタイプテーブル146、モジュールテーブル148、及びホストテーブル150の情報が使用され、作成されるフロー定義に関する情報はノードテーブル152及びアークテーブル154に保持される。
画面170を用いた操作は、例えば画面上にオブジェクトを配置することでアプリケーションプログラムの骨格を作成するアプリケーション作成ツールにおいて行なわれるものと本質的に変わらない。
図8にモジュールタイプテーブル146の構成を示す。図8を参照して、モジュールタイプテーブル146の各エントリは、モジュールタイプと、画面170上に当該モジュールタイプを表示する際の表示文字列とを含む。これら情報は、フロー定義実行管理装置60から与えられるモジュール定義ファイル82から抽出できる。
図9に、モジュールテーブル148の構成を示す。図9を参照して、モジュールテーブル148の各エントリは、モジュール識別番号(ID)と、当該モジュールのモジュールタイプと、そのモジュールを実行するプロセスのプログラムへのフルパスとを含む。このモジュールテーブル148の情報も、モジュール定義ファイル82から抽出できる。
図10に、ホストテーブル150の構成を示す。図10に示すように、ホストテーブル150は、システム内で利用可能なホスト名をリストしたものである。本実施の形態では、ホストテーブル150の内容はフロー定義実行管理装置60が管理し、フロー定義作成・実行指示装置62に通知する。
図11に、ノードテーブル152の構成を示す。図11を参照して、ノードテーブル152の各エントリは、ノードIDと、当該ノードを構成するモジュールタイプと、当該モジュールの、画面表示の矩形の左上座標及び右下座標と、このモジュールを実行するプログラムのフルパス名と、実行される実行モジュールIDと、このモジュールが実行されるホストを示す実行マシン名とを含む。
図12に、アークテーブル154の構成を示す。図12を参照して、アークテーブル154の各エントリは、開始ノードIDと、終了ノードIDと、当該アークのイベントタイプとを含む。
フロー定義の新規作成では、当初、図11のノードテーブル152及び図12のアークテーブル154は空であるが、図7に示すフロー定義作成領域178上にモジュール及びアークが配置され、モジュールのパラメータ、及びアークのイベントタイプが決定されていくと、これらテーブルの内容が少しずつ特定される。最終的にフローが完成すると、ノードテーブル152及びアークテーブル154の内容が確定し、それらに基づいてフロー定義ファイルの内容を作成できる。
フロー定義の修正では、図1に示すフロー定義実行管理装置60から任意のフロー定義を受取り、それらに基づいてノードテーブル152及びアークテーブル154の内容を作成する。以後の動作はフロー定義の新規作成と同様である。
フロー定義によって定められるモジュール間のグラフの例を図13に示す。これらは、図1に示すデータ処理システム64に相当する。図13に示すデータ処理システム200は、第1のプロセス222と第2のプロセス224とを含む。第1のプロセス222は、第1のモジュール230と、第2のモジュール232と、第3のモジュール234とを含む。第2のプロセス224は、第4のモジュール236と、第5のモジュール238と、第6のモジュール240とを含む。
例えば第1のプロセス222をあるコンピュータ上で実行し、第2のプロセス224を別のコンピュータで実行することで、全体的な処理速度の向上を図ることができる。もちろん、第1のプロセス222と第2のプロセス224とを同一のコンピュータ上で動作させても問題はない。しかし、これらシステムをフロー定義に基づいてどのように構成し、効率よく動作させるかという問題がある。本実施の形態では、こうしたデータ処理システム200をフロー定義に基づいて構成し、効率よく動作させるため、以下に述べるようなモジュール実行の機構を用いている。
図14に本実施の形態に係るフロー定義実行管理装置60により実現されるデータ処理システム250のブロック図を示す。このシステム250は、例えば図1に示すフロー定義ファイル86の一つに従って実現されるものであり、図13に示すシステム200と同様、第1のプロセス252及び第2のプロセス254を含む。フロー定義ファイル86は、本例では第1のプロセス252及び第2のプロセス254をそれぞれ構成するモジュール間のデータの流れを定義している。
本システム250はさらに、第1のプロセス252及び第2のプロセス254、並びに本システム250の外部とに接続され、第1のプロセス252及び第2のプロセス254内のモジュール間、及びこれらモジュールと本システム250の外部との間のイベントの流れをフロー定義ファイル86の記述に従って制御するためのモジュールマネージャ92とを含む。
第1のプロセス252は、第1のモジュール260と、第2のモジュール262と、第3のモジュール264と、これら3つのモジュール260,262及び264の間、ならびにこれらモジュールとモジュールマネージャ92との間のイベントの流れをフロー定義ファイル86の記述に従って制御し、プロセス内のメッセージ通信を管理するためのメッセージマネージャ266とを含む。
第2のプロセス254も第1のプロセス252と同様、第4のモジュール270と、第5のモジュール272と、第6のモジュール274と、これら3つのモジュール270,272及び274の間、ならびにこれらモジュールとモジュールマネージャ92との間のイベントの流れをフロー定義ファイル86の記述に従って制御するためのメッセージマネージャ276とを含む。
モジュール260〜274は、いずれも入力と出力とを一個以上有する。各モジュールは、入力されたデータをそのモジュール特有の機能に従って内部で処理し、結果を出力する機能を持つ。例えば、音声の特徴抽出モジュールは、音声データを入力とし、その特徴パラメータを出力とする。
モジュールマネージャ92は、本システム250の外部から与えられる入力を受けるための入力モジュール282と、本システム250からの出力を外部に与えるための出力モジュール284と、入力モジュール282、出力モジュール284、メッセージマネージャ266及びメッセージマネージャ276に接続され、フロー定義ファイル86の記述に基づいて、各プロセス252及び254、並びに入力モジュール282及び出力モジュール284の間のイベントの流れを制御するためのメッセージマネージャ280と、図1に示すモジュールマネージャ92からデータ処理システム250の起動指示を受け、データ処理システム250の実行に必要な処理と起動処理、終了処理を実行するための起動・終了制御部286とを含む。メッセージマネージャ280は、イベントの流れを制御することにより、プロセス間のメッセージ通信を管理するものということができる。
図15に、モジュール間で通信されるイベント320の構成を示す。図15を参照して、イベント320は、送信元モジュールIDと、送信先モジュールIDと、イベントタイプと、データの内容とを含む。イベントタイプとは、イベントに含まれるデータの型のことであり、前述したWAVE型、FEATURE型等がその一例である。
図16にメッセージマネージャ280の構成をブロック図形式で示す。図16を参照して、メッセージマネージャ280は、メッセージマネージャ280に入力されるイベントの送信先モジュールを決定するため、イベントの送信元モジュールIDとイベントタイプとをキーとして、送信先モジュールのモジュールIDを検索できるような構成を有するフロー管理テーブル292と、どのプロセスにどのモジュールが含まれているかを検索できる構成を持つモジュール管理テーブル294と、起動・終了制御部286から与えられる起動指示に応答し、フロー定義ファイル86の記述に基づいてフロー管理テーブル292及びモジュール管理テーブル294を作成するためのテーブル作成処理部296とを含む。
メッセージマネージャ280はさらに、第1のプロセス252、第2のプロセス254、入力モジュール282及び出力モジュール284に接続され、第1のプロセス252、第2のプロセス254及び入力モジュール282から与えられるイベントを、フロー管理テーブル292及びモジュール管理テーブル294の記述に基づいて第1のプロセス252、第2のプロセス254、及び出力モジュール284のいずれかに出力するためのメッセージ振分処理部290を含む。
図17にフロー管理テーブル292の構成の一例を、図18にモジュール管理テーブル294の構成の一例を、それぞれ示す。図17を参照して、フロー管理テーブル292は複数のエントリを含み、各エントリは、送信元モジュールIDと、イベントタイプと、送信先モジュールIDとを含む。これらは、図4に示すフロー定義ファイル86のアークの記述に相当する。受信したイベントに含まれる送信元モジュールID及びイベントタイプ(図15を参照されたい。)をキーにフロー管理テーブル292を検索することにより、当該イベントをどのモジュールに送信すべきかが、送信先モジュールIDの欄を見ることで判定できる。なお図17に示すフロー管理テーブル292は、図14に示す構成に必要な情報の一部のみを示す。
図18を参照して、モジュール管理テーブル294も複数のエントリを含む。各エントリはモジュールに対応するものであり、そのモジュールが属するプロセス名と、そのモジュールのモジュールIDとを含む。図18に示すモジュール管理テーブル294も、図14に示す本システム250の構成に必要な情報の一部のみを示す。
次に図14の第1のプロセス252及び第2のプロセス254を構成する各部について説明する。各モジュールの構成については本発明とは直接関係ないので、それらについての詳細な説明は省略する。またメッセージマネージャ266とメッセージマネージャ276とは同じ構成を有しているので、以下、メッセージマネージャ266について説明する。
図19を参照して、メッセージマネージャ266は、メッセージマネージャ266に入力されるイベントの送信先モジュールを決定するため、イベントの送信元モジュールIDとイベントタイプとをキーとして、送信先モジュールのモジュールIDを検索できるような構成を有する、図16に示すものと同様形式のフロー管理テーブル302と、このメッセージマネージャ266が管理するプロセス(本実施の形態では第1のプロセス252)にどのモジュールが含まれているかを記述したモジュール管理テーブル300と、図16に示すフロー管理テーブル292を複写してフロー管理テーブル302を作成するためのフロー管理テーブル作成処理部306と、フロー定義ファイル86の記述に基づき、第1のプロセス252に含まれるモジュールIDを含むモジュール管理テーブル300を作成するためのモジュール管理テーブル作成処理部304とを含む。
メッセージマネージャ266はさらに、第1〜第3のモジュール260,262及び264とモジュールマネージャ92とからイベントを受取り、フロー管理テーブル302とモジュール管理テーブル300とを参照して、当該イベントを第1〜第3のモジュール260,262及び264、並びにモジュールマネージャ92のいずれに送信すべきかを判定し判定結果に従って当該イベントを振り分けるためのメッセージ振分処理部308と、メッセージ振分処理部308によってメッセージ振分処理部308の管理するプロセス(本実施の形態では第1のプロセス252)に送信するよう判定されたイベントを一時的にFIFO形式で格納するためのイベントキュー310と、イベントキュー310からイベントを一つずつ読出し、当該イベントに含まれる送信先モジュールIDに基づいて、当該イベントを第1〜第3のモジュール260、262及び264のいずれかに配信するためのプロセス内メッセージ配信部312とを含む。
図20にモジュール管理テーブル300の形式を模式的に示す。メッセージマネージャ266が管理する第1のプロセス252の場合、そこに含まれるモジュールは第1のモジュール260、第2のモジュール262、及び第3のモジュール264である。従ってこの場合のモジュール管理テーブル300の内容は図20に示した通りとなる。
図21に、モジュールマネージャ92によるデータ処理システム250の制御処理のフローチャートを示す。図21を参照して、モジュールマネージャ92の起動・終了制御部286は、フロー定義ファイル86の指定を伴う実行指示をフロー定義作成・実行指示装置62から受けると、ステップ340で、指定されたフロー定義ファイルを読み込む。そして、ステップ342〜346の処理をフロー定義ファイル内に記述された全てのプロセスについて繰返す。
すなわち、ステップ342では、フロー定義ファイル内に記述されたプロセスを、同じくフロー定義ファイル内の当該プロセスについて記述されたホストに起動する。そして、このプロセスの定義内に記述された全てのモジュールについてステップ344及び346の処理を繰返す。
ステップ344では、プロセスの定義内に記述されたモジュールのインスタンスを生成する。そしてステップ346で、生成されたモジュールインスタンスに、同じモジュールについてプロセスの定義内に記述されたオプション/パラメータ値を配信する。
以上の処理を、全プロセス及び全モジュールに対し繰返すことで、データ処理システム250を構成する各モジュールを含むプロセスが、指定されたホスト上に立ち上がる。
ステップ348で、図16に示すテーブル作成処理部296及び図19に示すフロー管理テーブル作成処理部306に指示を与えて、ステップ340で読込んだフロー管理ファイルの内容に従い、フロー管理テーブル292及び302を作成する。さらにステップ350で、図16に示すテーブル作成処理部296及び図19に示すモジュール管理テーブル作成処理部304に指示を与え、フロー定義ファイルの内容に従ってモジュール管理テーブル294及び300を作成する。ステップ352で、先頭モジュール(入力モジュールがある場合には入力モジュール)に開始指示を与え、最初のイベントを発生させこのデータ処理システムの入力に与える。以後は、メッセージマネージャ280及び各プロセス内のメッセージマネージャ266,276によるイベント配信によってシステムが動作し、システム内の各モジュールで処理されたデータが出力ファイルに出力される。
ステップ354では、データ処理システム250内に未処理のイベントがあるか否かを判定し、イベントがなくなるまで待ち、未処理のイベントがなくなったタイミングで、ステップ342で起動した全てのプログラムをステップ356で終了させ、自分も終了する。
以上がモジュールマネージャ92の起動・終了制御部286によるデータ処理システム250の起動・終了制御の処理の概略である。
メッセージマネージャ280のメッセージ振分処理部290及びメッセージマネージャ266のメッセージ振分処理部308も、後述するようにコンピュータハードウェア上で実行されるプログラムにより実現される。本実施の形態の場合、メッセージ振分処理部290及び308が受信したイベントの送信元がプロセス内のものか、プロセス外のものか、によって異なる処理を行なう。それぞれを実現するコンピュータプログラムの制御構造について、特にメッセージ振分処理部308について図22及び図23を参照して説明する。
図22は、プロセス内のモジュールからイベントを受信した場合に、図19に示すメッセージマネージャ266のメッセージ振分処理部308が実行する処理プログラムのフローチャートである。図16に示すメッセージマネージャ280のメッセージ振分処理部290についても同様である。図22を参照して、プロセス内モジュールからイベントを受信すると、ステップ430で、当該イベントの送信元モジュールIDとイベントタイプとをキーにフロー管理テーブル302を検索し、該当する全てのアークを取出す。
続いて、ステップ430の処理の結果見つかった全てのアークについて、以下の処理を行なう。すなわち、ステップ432で、当該アークの送信先モジュールIDが当該プロセス内のモジュールのものか否かを判定する。送信先モジュールIDが当該プロセス内のモジュールのものであればステップ434に進み、さもなければステップ440に進む。
ステップ434では、イベントの送信先に、検索されたアークに含まれる送信先モジュールIDを設定する。送信先モジュールが同じプロセス内なので、ステップ436でこのイベントをイベントキュー310に出力する。
一方ステップ440では、イベントの送信先に、同じく検索されたアークに含まれる送信先モジュールIDを設定する。送信先モジュールがプロセス外に存在しているので、ステップ442でこのイベントをモジュールマネージャ92に出力する。
ステップ434、436、440及び442の処理を、ステップ430で見出された全てのアークに対して行なうことにより、一つのイベントに対し、見つかった数だけのイベントが生成され、送信先モジュールの所在に応じて、それぞれイベントキュー310又はモジュールマネージャ92に送信されることになる。
図23は、プロセス外からイベントを受信した場合に、図16に示すメッセージマネージャ280のメッセージ振分処理部290が実行する処理プログラムのフローチャートである。図23を参照して、プロセス外からイベントを受信すると、ステップ460で、モジュール管理テーブル294中でイベント中の送信先モジュールIDを検索し、当該送信先モジュールを含むプロセスを決定する。ステップ462では、決定されたプロセスが自分自身か否かを判定する。もし自分自身が送信先であればステップ464で自己のイベントキューに当該イベントを格納する。もし自分自身が送信先でなければ、ステップ466で送信先モジュールを含むプロセスに当該イベントを送信する。
一方、図19に示すメッセージマネージャ266がプロセス外からイベントを受信した場合、当該イベントの送信先については、プロセス内であることが保証されている。従って当該イベントを図19に示すメッセージ振分処理部308に格納する。
−動作−
図1〜図23に示すシステムは、以下のように動作する。動作は、フロー定義の作成と、作成したフロー定義に基づいてデータ処理システム250を動作させる処理との、大きく分けて二つの局面に分かれる。最初に、フロー定義について説明する。
利用者が図6に示すフロー定義作成・実行指示プログラム140を起動すると、利用可能なモジュール定義ファイルの内容及び使用可能なホストのリストがフロー定義実行管理装置60からフロー定義作成・実行指示装置62に送信される。フロー定義作成・実行指示装置62は、受信した情報に従ってモジュールタイプテーブル146、モジュールテーブル148及びホストテーブル150を作成する。画面には図7に示すような画面が表示される。以下では、フロー定義を新規に作成する場合を例にしてフロー定義作成・実行指示装置62の動作を説明する。
図7を参照して、利用者が画面170上で新規ボタン180を押すことで、フロー定義作成領域178が空白となる。モジュールパレット172には使用可能なモジュールタイプがアイコンとモジュールタイプ名により表示される。利用者がモジュールパレット172上のいずれかのアイコンを選び、ドラッグ・アンド・ドロップでフロー定義作成領域178上に配置することにより、図6に示すノードテーブル152中に、そのモジュールに対応するエントリが作成される。利用者が新たなモジュールを配置するたびに、ノードテーブル152に新たなエントリが作成される。なお、図11を参照して、この時点では各エントリのうち、ノードID、モジュールタイプ、及び座標のみが設定され、他の項目は空白である。
利用者はさらに、各モジュールの間を矢印(アーク)で接続していく。アークが一つ配置されるたびに、アークテーブル154内に対応のエントリが作成される。ただしこの時点では、図12に示す情報のうち、開始ノードIDと終了ノードIDのみが格納され、イベントタイプは未定義である。
モジュールの一つの矩形をクリックすると、モジュール設定フレームが表示される。モジュール設定フレームでは、当該モジュールタイプのうちで使用可能なモジュールの一覧が表示される。この一覧は、図9に示すモジュールテーブル148から作成できる。表示されるモジュールのうちの一つを選択することで、どのモジュールを使用するかが確定する。さらに、このモジュールをどのホスト上で実行させるかについても指定する。
さらに、使用するモジュールが確定すると、当該モジュールで指定できるオプション/パラメータの入力フレームが画面左下に表示される。各オプション/パラメータを設定すると、モジュール定義情報に従ったチェックが行なわれ、エラーがあればエラー表示が行なわれ、再入力が促される。
ユーザがアークの一つをダブルクリックすると、イベントタイプ指定のためのリストボックスが表示される。リストボックスには、出所側のモジュールの出力イベントの型の集合と、行き先側のモジュールの入力イベントの型の集合との共通集合(積集合)の要素がリストされる。いずれかを選択することにより、当該アークのイベントタイプが定まり、図12に示すアークテーブル154のイベントの領域に選択されたイベントタイプを示す情報が格納される。なお、使用可能なイベントが一種類しかない場合には、アークのイベントタイプは自動的に設定される。
こうして、全てのモジュールについて使用モジュール、ホスト、及びオプション/パラメータが決定され、各アークのイベントタイプが決定すると、それらに基づいてフロー定義を作成できる。フロー定義はフロー定義作成・実行指示装置62からフロー定義実行管理装置60に転送され、フロー定義ファイル86のうちの一つとしてフロー定義実行管理装置60に格納される。
フロー定義の修正の場合も、最初にフロー定義ファイル86のうちの一つを選択して当該ファイルの内容をフロー定義作成・実行指示装置62に転送することを除いて、作成の場合と同様である。
作成したフロー定義に従ってデータ処理システム64を動作させたい場合には、次のような操作を行なう。図7を参照して、「実行」ボタン188を押すと、フロー定義ファイルの選択ダイアログが表示される。そのうちの一つを選択することで、フロー定義作成・実行指示装置62からフロー定義実行管理装置60に対して当該フローファイルに基づくデータ処理の開始が指示される。
図1に示す管理プログラム80は、その指示に従いモジュールマネージャ92に対して選択されたフロー定義ファイルを特定する情報を与えるとともに、データ処理の開始を指示する。
図14を参照して起動・終了制御部286は、この指示に応答して、指定されたフロー定義ファイルを読込み(図21のステップ340)、データ処理システム250の各プロセスを、指定されたホスト上に起動する(ステップ342)。さらに、フロー定義ファイルに記述された各モジュールについて、指定されたプロセス内にインスタンスを生成し(ステップ344)、フロー定義ファイル内に記述されたオプション/パラメータを配信する(ステップ346)。その後、図16に示すテーブル作成処理部296、及び図19に示すフロー管理テーブル作成処理部306、モジュール管理テーブル作成処理部304に指示を与えて各フロー管理テーブル292及び302、並びにモジュール管理テーブル294及び300を作成させる(図21のステップ348,350)。以上でデータ処理システム250のセットアップが完了する。
次に起動・終了制御部286は、図14に示す入力モジュールに対し、入力ファイルからデータを読出しイベントとしてメッセージマネージャ280に与えるよう、始動の指示を与える(図21のステップ352)。入力モジュール282は入力ファイルからフレームデータを作成し、イベントとしてメッセージマネージャ280に与える。
図16を参照して、メッセージマネージャ280のメッセージ振分処理部290は、フロー管理テーブル292及びモジュール管理テーブル294を参照して、当該イベントの送信先のモジュールを含むプロセスを決定し(図23のステップ460)、イベントを当該プロセスに送信する(ステップ464又は466)。本例では、例えば第1のプロセス252にこのイベントが送信されるものとする。
図19を参照して、メッセージマネージャ266のメッセージ振分処理部308は、このイベントがプロセス外からのものなので、当該イベントをイベントキュー310に格納する。プロセス内メッセージ配信部312が、イベントキュー310からイベントを読出し、送信先モジュールIDにより指定されるモジュールにイベントを配信する。
このイベントを受けたモジュールは、結果のイベントをメッセージマネージャ266のメッセージ振分処理部308に返信してくる。このとき、イベントの送信元モジュールID及びイベントタイプには、それぞれ当該モジュールにより値が設定されている。送信先モジュールIDについては設定されていない。
メッセージ振分処理部308は、受けたイベントの送信元モジュールIDとイベントタイプとをキーにフロー管理テーブル302を検索し(図22のステップ430)、一致するアークを得る。メッセージ振分処理部308はさらに、モジュール管理テーブル300を参照して、当該送信先モジュールが第1のプロセス252内か否かを判定する(ステップ432)。第1のプロセス252内であれば(すなわち当該モジュールIDがモジュール管理テーブル300内に存在すれば)、当該アークに含まれている送信先モジュールIDをイベントの送信先モジュールIDに設定し(ステップ434)、メッセージ振分処理部308はこのイベントをイベントキュー310に書出す(ステップ436)。
送信先が第1のプロセス252外であれば、アークに含まれている送信先モジュールIDをイベントの送信先モジュールIDに設定し(ステップ440)、モジュールマネージャ92にこのイベントを送信する(ステップ442)。
モジュールマネージャ92のメッセージマネージャ280では、最初の入力データを受けた場合と同様、フロー管理テーブル292とモジュール管理テーブル294とに基づいてこのイベントの送信先プロセスを決定し、そのプロセスのメッセージマネージャにイベントを送信する。フロー管理テーブル292により、システム外に出力することが示されている場合、メッセージ振分処理部290は出力モジュール284にイベントを出力する。出力モジュール284は、このイベントをさらに外部に出力する。
以下、メッセージマネージャ280のメッセージ振分処理部290、並びに第1のプロセス252及び第2のプロセス254のメッセージマネージャ266及び276は、上記したのと同様の処理を繰返す。その結果、外部から次々に入力モジュール282に入力されたデータは、それぞれ所定のモジュールによって処理され、結果のイベントが出力モジュール284から出力される。
上に説明したシステム250では、各モジュールは自己の処理した結果のイベントをどのモジュールに送信するかについては全く意識する必要がない。どのプロセスにおいても、モジュールではなくメッセージマネージャが送信先モジュールを決定し、さらに送信先モジュールが同一プロセス内であればイベントキューを用いて当該イベントを配信し、プロセス外であれば、モジュールマネージャに当該イベントを配信する。イベントの配信を受けたモジュールマネージャが、送信先モジュールIDに基づいて送信先のプロセスを決定し、送信する。
従って、モジュールの独立性が極めて高くなり、システム構成に従ってモジュールを変更したりする必要はない。さらに、プロセス間通信については、どのプロセスも送信先のプロセスを意識せず、すべてモジュールマネージャに送信するだけでよい。従って、各プロセス間通信のためのオーバヘッドが少なくなる。
以上のように本実施の形態のシステムによれば、モジュール定義に従ってフロー定義を作成し、そのフロー定義を用いて複数のモジュールからなるシステムを効率よく設計し、かつ簡略な操作で実際に動作させることができる。モジュール間の接続関係を変えたり、使用するモジュールを、同じモジュールタイプで別のモジュールによって置換してシステムの性能を比較したりする作業が簡単に行なえる。
また、上記したように設計され、かつ動作する各モジュール間の通信を、各プロセス内とモジュールマネージャ内に設けたメッセージマネージャによって管理でき、各モジュールはイベントの入力となるモジュール及びイベントの行き先のモジュール等を意識する必要はない。従って各モジュールの独立性を高め、自由にシステムを組むことが可能になる。また、データはプロセス間を転送されながら各モジュールで処理され、かつ各プロセスではイベントキューによって処理時間の調整を行ないながら正しい順序でデータ処理を行なうことができる。その結果、リアルタイムで、音声認識等の多量のデータ処理を行なうことができる。またモジュールの組合せが自由にできるので、異なる構成のシステムの性能実験等を簡単に、かつ短い時間に行なうことが可能になる。
−コンピュータによる実現−
この実施の形態のシステムは、コンピュータハードウェアと、そのコンピュータハードウェアにより実行されるプログラムと、コンピュータハードウェアに格納されるデータとにより実現される。図24はこのコンピュータシステム530の外観を示し、図25はコンピュータシステム530の内部構成を示す。なお、前述したとおりこのシステムは、これら複数のコンピュータをネットワーク等で結合したものによって実現することもできる。
図24を参照して、このコンピュータシステム530は、FD(フレキシブルディスク)ドライブ552及びCD−ROM(コンパクトディスク読出専用メモリ)ドライブ550を有するコンピュータ540と、キーボード546と、マウス548と、モニタ542とを含む。
図25を参照して、コンピュータ540は、FDドライブ552及びCD−ROMドライブ550に加えて、CPU(中央処理装置)556と、CPU556、FDドライブ552及びCD−ROMドライブ550に接続されたバス566と、ブートアッププログラム等を記憶する読出専用メモリ(ROM)558と、バス566に接続され、プログラム命令、システムプログラム、及び作業データ等を記憶するランダムアクセスメモリ(RAM)560とを含む。コンピュータシステム530はさらに、プリンタ544を含んでいる。
コンピュータ540はさらにローカルエリアネットワーク(LAN)への接続を提供するネットワークアダプタボード568を含む。
コンピュータシステム530に、この実施の形態に係るフロー定義作成・実行指示装置62、フロー定義実行管理装置60、又はシステム250(又はその一部の第1のプロセス252、第2のプロセス254、モジュールマネージャ92等)としての動作を行なわせるためのコンピュータプログラムは、CD−ROMドライブ550又はFDドライブ552に挿入されるCD−ROM562又はFD564に記憶され、さらにハードディスク554に転送される。又は、プログラムはネットワークを通じてコンピュータ540に送信されハードディスク554に記憶されてもよい。プログラムは実行の際にRAM560にロードされる。CD−ROM562から、FD564から、又はネットワークを介して、直接にRAM560にプログラムをロードしてもよい。
このプログラムは、コンピュータ540(又はコンピュータ540と通信可能な他のコンピュータ)にこの実施の形態に係るフロー定義作成・実行指示装置62、フロー定義実行管理装置60、並びにシステム250に含まれる各プロセス252、254、モジュールマネージャ92、各プロセス中で実行されるモジュール等としての動作を行なわせる複数の命令を含む。このために必要な基本的機能のいくつかはコンピュータ540上で動作するオペレーティングシステム(OS)又はサードパーティのプログラム、もしくはコンピュータ540にインストールされる各種ツールキットのモジュールにより提供される。従って、このプログラムはこの実施の形態のシステムを実現するのに必要な機能全てを必ずしも含まなくてよい。このプログラムは、命令のうち、所望の結果が得られるように制御されたやり方で適切な機能又は「ツール」を呼出すことにより、上記した装置及びシステムを実現する命令のみを含んでいればよい。コンピュータシステム530の動作は周知であるので、ここでは繰返さない。
上記した実施の形態では、モジュール管理テーブルについては各プロセスに用意した。しかし本発明はそのような実施の形態には限定されず、モジュール管理テーブルをシステム内の全てのモジュールで同じものを使用するようにしてもよい。また、上記実施の形態では、モジュール識別子はシステム内で一意であるものとした。しかし本発明はそのような実施の形態には限定されず、プロセス内でのみモジュール識別子が一意になるようにしてもよい。ただしその場合、イベント通信ではプロセス名とモジュール識別子とによって送信元及び送信先を特定する必要がある。
また、上記した実施の形態では、フロー定義作成・実行指示装置62はブラウザプログラム上で動作するプログラムにより実現されるものであることを前提としている。しかし本発明はそのような実施の形態には限定されず、フロー定義作成・実行指示装置62をブラウザと異なる独自のアプリケーションプログラムで実装してもよい。また、フロー定義作成・実行指示装置62としての機能の実質的な部分を全てフロー定義実行管理装置60に持たせ、フロー定義作成・実行指示装置62ではブラウザプログラム上の表示及びフロー定義のための操作のみを行なうようにしてもよい。
さらに、フロー定義ファイル86、モジュール定義ファイル82、入力ファイル90等がフロー定義実行管理装置60と同一のコンピュータ上に存在しているものに限定する必要はなく、ネットワークを介してアクセス可能な他のシステム内に存在しているものを利用可能なシステムとして設計してもよい。
今回開示された実施の形態は単に例示であって、本発明が上記した実施の形態のみに制限されるわけではない。本発明の範囲は、発明の詳細な説明の記載を参酌した上で、特許請求の範囲の各請求項によって示され、そこに記載された文言と均等の意味及び範囲内でのすべての変更を含む。
50 音声認識データ処理システム、60 フロー定義実行管理装置、62 フロー定義作成・実行指示装置、64,200,250 データ処理システム、66 プロセス用プログラム、80 管理プログラム、82 モジュール定義ファイル、84 入力ファイル情報、86 フロー定義ファイル、92 モジュールマネージャ、140 フロー定義作成・実行指示プログラム、146 モジュールタイプテーブル、148 モジュールテーブル、150 ホストテーブル、152 ノードテーブル、154 アークテーブル、172 モジュールパレット、178 フロー定義作成領域、222,252 第1のプロセス、224,254 第2のプロセス、230,232,234,236,238,240,260,262,264,270,272,274 モジュール、266,276,280 メッセージマネージャ、286 起動・終了制御部