(57)【特許請求の範囲】
【請求項１】
公知の文法における有効発話の背後の意味を識別するためのコンピュータシステムであって、前記有効発話は前記文法を規定するルールに従うものであり、
中央処理装置（ＣＰＵ）と、
前記ＣＰＵに結合されて、メモリファイルを受取り、記憶するためのシステムメモリと、
前記ＣＰＵの動作中にデータを一時的に受取り、記憶するための、前記システムメモリのランダムアクセスメモリ（ＲＡＭ）部分と、
前記システムメモリ内に記憶され、かつ、前記公知の文法における予期される全有効発話のリストとそれとともに記憶される前記リストに入れられた予期される各有効発話の意味を表すトークンデータとを含む、予め定められた固定された注釈付自動音声認識（ＡＳＲ）コーパスファイルとを備え、各前記有効発話と各前記トークンデータとは互いに関連付けられており、
前記ＣＰＵに結合され、音声信号の入力を受け付けて、前記音声信号から前記有効発話を検出し、検出された有効発話を示すＡＳＲシステムデジタル出力信号を発生するための自動音声認識（ＡＳＲ）システムと、
前記ＡＳＲシステムにより認識される形式で前記システムメモリ内に記憶され、前記ＡＳＲシステムに結合され、かつ、前記ＡＳＲシステムによって検出されるべきすべての有効発話をそのＡＳＲシステムに互換性のある形式で表すデータを含む、予め定められた固定されたベンダ特有ＡＳＲ文法ファイルとを備え、前記ベンダ特有ＡＳＲ文法ファイルは、発話を認識して前記ＡＳＲシステムデジタル出力信号を発生するための前記ＡＳＲシステムに用いられるものであり、
前記ＣＰＵおよび前記注釈付ＡＳＲコーパスファイルに結合され、前記ＣＰＵが検出された有効発話を示す前記ＡＳＲシステムデジタル出力信号を受取る時、前記注釈付ＡＳＲコーパスファイルの内容を検索して前記検出された有効発話の背後の意味を識別し、前記識別された意味を、前記検出された有効発話に関連するトークンデータとして、前記入力が受け付けられた音声信号に応答する装置に対して戻すための実行時インタプリタ手段とを含む、システム。
【請求項２】
前記実行時インタプリタ手段は、前記システムメモリ内の前記注釈付ＡＳＲコーパスファイルを比較検索して、前記検出された有効発話の背後の意味を識別するトークンデータを探すための手段をさらに含む、請求項１に記載のシステム。
【請求項３】
前記実行時インタプリタ手段は前記比較検索の失敗時に前記注釈付ＡＳＲコーパスファイルの内容を部分照合検索するための手段をさらに含み、前記部分検索は前記注釈付ＡＳＲコーパスファイル内の前記検出された有効発話の部分照合を探す、請求項２に記載のシステム。
【請求項４】
前記実行時インタプリタ手段は、前記検出された有効発話の照合しない部分を変数として処理して、前記照合しない部分の背後の意味を識別するための変数処理手段をさらに含む、請求項３に記載のシステム。
【請求項５】
前記変数処理手段は、前記検出された有効発話の前記照合しない部分の意味を表す変数データを発生する、請求項４に記載のシステム。
【請求項６】
前記実行時インタプリタ手段に結合され、前記実行時インタプリタ手段にアクセスするための実行時インタプリタアプリケーションプログラムインタフェース（ＲＩＡＰＩ）手段をさらに含む、請求項１〜５のいずれかに記載のシステム。
【請求項７】
前記ＲＩＡＰＩ手段は、前記ＲＩＡＰＩ手段および前記実行時インタプリタ手段に結合されるカスタムプロセッサ（ＣＰ）インタフェースと、前記ＲＩＡＰＩ手段が前記実行時インタプリタ手段にアクセスするために用いる対話式音声応答（ＩＶＲ）システムとをさらに含む、請求項６に記載のシステム。
【請求項８】
前記ＩＶＲシステムは、前記ＡＳＲシステムおよび前記実行時インタプリタ手段に結合され、前記注釈付ＡＳＲコーパスファイルを検索して、前記検出された発話の背後の意味を表す前記トークンデータを探す、請求項７に記載のシステム。
【請求項９】
前記コンピュータシステムは、コンピュータシステムネットワーク上の複数のコンピュータに分散された複数の前記実行時インタプリタ手段を有するネットワークシステムを含む、請求項１〜８のいずれかに記載のシステム。
【請求項１０】
公知の文法における有効発話の背後の意味を識別するための方法であって、前記有効発話は前記文法を規定するルールに従うものであり、
予め定められた固定した注釈付自動音声認識（ＡＳＲ）コーパスファイルをコンピュータのシステムメモリへとロードするステップを含み、前記固定した注釈付ＡＳＲコーパスファイルは前記固定した文法における予期される全有効発話のリストと前記リストされた各有効発話の意味を表すトークンデータとを含み、各前記有効発話と各前記トークンデータとは互いに関連付けられており、
自動音声認識（ＡＳＲ）システムにより検出されるべきすべての有効発話を、そのＡＳＲシステムに互換性のある形式で表すデータを含む、予め定められた固定したベンダ特有ＡＳＲ文法ファイルを、前記自動音声認識（ＡＳＲ）システムにより認識される形式で前記システムメモリにロードするステップを含み、前記自動音声認識（ＡＳＲ）システムは、音声信号の入力を受け付けて、前記音声信号から前記有効発話を検出し、検出された有効発話を示すＡＳＲシステムデジタル出力信号を発生するものであり、
前記自動音声認識（ＡＳＲ）システムにより有効発話を検出するステップと、
前記検出された有効発話の発生に対して、前記固定した注釈付ＡＳＲコーパスファイルを検索するための要求を開始するステップと、
前記リストされた予期される有効発話の中から前記検出された有効発話に対応する有効発話を探すために、前記システムメモリにロードされた前記固定した注釈付ＡＳＲコーパスファイルを、実行時インタプリタ手段により検索し、前記検出された有効発話の背後の意味をその見つけられた有効発話に関連するトークンデータとして識別するステップと、
前記固定した注釈付ＡＳＲコーパスファイル内の前記検出された有効発話の背後の意味に対応する前記トークンデータを要求者に戻すステップとを含む、方法。
【発明の詳細な説明】
【０００１】
【発明の分野】
この発明は一般に、コンピュータ化された自然言語体系に関する。この発明は特に、対話式音声応答システムに音声理解能力を与えるためのコンピュータシステムおよび方法に関する。この発明はさらに、制限された音声認識アプリケーションにおいて発話を解釈するためのコンピュータシステムおよび方法に関する。
【０００２】
【関連技術の説明】
コンピュータは我々の日常生活において欠かせないものとなっている。我々の多くは職場、家庭において、さらには買い物のときに、１日に何時間も機械を使用している。しかしながら、コンピュータの使用では常にコンピュータが主体となっている。コンピュータに我々の要求を伝達するためにマウス、押しボタンおよびキーボードを使用することは常に多少不自然なものであった。しかしながら、コンピュータの技術進歩に伴い、コンピュータは人間が主体となって行なう通信、すなわち発話された言葉による通信に近づきつつある。
【０００３】
人間と会話ができるコンピュータを生み出すためのステップは基本的に２つある。第１に、コンピュータは発話された言葉を検知して、単純なテキストなどの何らかの形式のコンピュータで読取可能なデータに変換するために自動音声認識を必要とする。第２に、コンピュータには、コンピュータで読取可能なデータを分析してそれらが使用される際に何を意味するかを判断するための何らかの方法が必要である。この第２のステップでは典型的に、何らかの形式の人工知能が採用されており、言葉から意味を抽出し得るシステムを開発するために研究者がいくつかの基本的なアプローチを試みている。
【０００４】
このようなアプローチの１つは、統計的なコンピュータ言語に関わる。このアプローチは、人間の音声が持つ比較的推測可能な性質に依存する。統計的コンピュータ言語はコーパスから始まり、これは文法に含まれるサンプルとしての発話のリストである。このコーパスが分析されて文法の統計的特性が抽出される。これらの統計的特性はルールとして実現され、これらのルールは発話されたことの意味を統計的に「推測」するために新しい発話に適用される。
【０００５】
すべての言語（英語、中国語、およびドイツ語など）には多数の発話があり得、その言語における有効な発話をすべて含むものを列挙する試みは、コーパスに基づいた言語システムではなされていない。しかしながらシステムの中には、有効な発話を予め規定された文法の発話に制限または限定することにより、可能な発話数を低減する試みがなされている。たとえば、Linebarger, et al.に発行され、ペンシルベニア州ブルーベル（Blue Bell, Pa.）にあるユニシス・コーポレイション（Unisys Corporation）に譲渡され、引用によって援用される米国特許（１９９６年１２月１３日に特許が付与された出願番号第０８／０６６，７４７号）には、航空交通管制命令だけを理解する言語プロセッサが教示されている。ここでは、航空交通管制官の文章が分割されて個々の命令になり、これらの命令が後に個別に処理されてそれらの意味を判断するようにする。不都合にも、このタイプの処理では、有効な文法が航空交通管制に関する比較的制限された語彙から、たとえばあらゆる取引を扱い得る自動化された銀行員の機械にまで増加すると、多大な演算能力をすぐに消費してしまう。
【０００６】
他の自然言語体系では全範囲の発話に関して余裕が持たせてあるが、この高度な一般性にもまた多大な演算能力が要求される。自然言語体系に全範囲の一般性を要求することのない制限された文法の音声を解釈し得る言語理解システムが必要である。
【０００７】
【発明の概要】
この発明の一般的な目的は、対話式音声認識システムに、制限された音声理解能力を与えるためのシステムおよび方法を提供することである。
【０００８】
この発明の別の目的は、発話の背後にある意味を解釈する作業を単純化するためのシステムおよび方法を提供することである。
【０００９】
この発明のさらなる目的は、発話の背後にある意味の解釈において非常に精度が高いコーパスに基づいた音声認識システムを生み出すためのシステムおよび方法を提供することである。
【００１０】
この発明のさらなる目的は、コンピュータネットワークによって対話式音声応答システムに接続された複数の実行時インタプリタ(runtime interpreter)を採用するためのシステムおよび方法を提供することである。
【００１１】
これらおよび他の目的は、単純な検索リストによって発話の背後にある意味を判断するための実行時インタプリタを提供するこの発明によって達成される。実行時インタプリタは入力として、有効な発話のリストである注釈付コーパスと、有効な発話の各々に関する文脈識別子と、発話の背後にある意味を表す有効な発話の各々に関するトークンデータとを受信する。実行時インタプリタはさらに、コーパスにおいて検出され得るテキスト形式での発話を入力として受信する。
【００１２】
解釈すべき発話が実行時インタプリタに与えられると、実行時インタプリタはコーパスを検索し、検索された有効な発話の場所を突き止め、有効な発話の意味を表すトークンを戻す。
【００１３】
実行時インタプリタはさらに、コーパスのサイズを低減するための変数の使用を支持する。発話の中には、コーパスにおいて数え切れないほどの多くの組合せがある、数、日付、時間または他の要素を含み得る。たとえば、「私の誕生日はｘｘｘです」という発話で「ｘｘｘ」が１年のうちのある日付を表す場合、１年のうち可能な日付（閏日を含む）の各々に１つずつ対応する、３６６個のコーパスエントリがある。しかしながらこの発明では、日付を表すために変数が使用され得る。したがって、低減されたコーパスにはこの発話、すなわち「私の誕生日は［日付］です」という発話に対して１つしかエントリを含まない。実行時インタプリタはコーパスにおいてこれらの変数を識別することができ、変数を解釈するために実行時にさらなる処理を行なう。変数値は、解釈されると、その発話が変数を含んでいたトークンに関連した予め規定されたデータ構成でストアされる。この変数値は後に対話式音声応答システムによって取出すことができる。
【００１４】
この発明はさらに、対話式音声応答システムの開発者に、インタプリタ自体を実際に変形することなく実行時インタプリタの動作をカスタマイズする能力を与える、カスタムプロセッサインタフェースを提供する。
【００１５】
さらに、この発明は、コンピュータネットワークに接続された複数のインタプリタを使用するためのシステムおよび方法を提供する。分散式インタプリタが提供され、これらは同じカスタムプロセッサインタフェースと、上述の実行時インタプリタとを含む。しかしながら、分散式インタプリタは、分散式インタプリタとコンピュータネットワークとの間のメッセージ送信を制御するための付加的なマネージャを含む。リソースマネージャがさらに提供され、これはネットワークに接続された分散式インタプリタを追跡し、対話式音声応答システムによってそれらの使用を管理する。
【００１６】
【好ましい実施例の説明】
この発明を説明する前に、いくつかの用語を定義する必要がある。これらの用語および定義には下記のものが含まれる。
【００１７】
注釈付ＡＳＲコーパスファイル−ある文法における有効な発話のリストと、対話式音声認識システム（ＩＶＲ１３０）への有効な発話の意味を表す、有効な発話の各々に関するトークンデータとを含むデータファイル。
【００１８】
自動音声認識（ＡＳＲ）−発話された言葉を識別し、それらをテキスト（文字）などのコンピュータで読取可能な形式で報告することができる、コンピュータハードウェアおよびソフトウェアのための一般的な用語。
【００１９】
セル−表（表はセルからなる行および列で構成される）内の別個の要素。後に「rules」の定義によって提示される例としてのルールでは、「I want」、「I need」および「food」の各々がセルに入れられる。さらに、好ましい実施例では、「I want」および「I need」を含むセルは縦方向に互いに隣接している（同じ列）。縦方向に隣接するセルすべての論理和がとられる。しかしながら、「food」を含むセルは「I want」および「I need」の列の右の列にあり、「food」が「I want」または「I need」に後続すべきことを示しており、そのようなものとして、「food」を含むセルの論理積がとられ、「I want」および「I need」を含むセルに後続する。
【００２０】
制限された文法−発話者の言語における可能な陳述文の各々およびすべてを含まない文法。これにより、許容できる陳述文の範囲が制限される。
【００２１】
コーパス−大きなリスト
文法−理解されるべき言語全体。文法は１組のルールを用いて、または文法の範囲内で許容される陳述文の各々およびすべてを列挙することにより表現され得る。
【００２２】
文法開発ツールキット（１０４）−文法および文法を表すルールの組を作成するために使用されるソフトウェア。
【００２３】
自然言語理解−通常の態様で発話される、発話された陳述文の背後にある意味を識別すること。
【００２４】
句−文法の「基礎単位」。句は、表内のセル全体を占める言葉、言葉のグループ、または変数である。
【００２５】
ルール−これらは文法の論理を規定する。一例としてのルールは（「I want」｜「I need」「food」）であり、これは「I want」または「I need」で始まり「food」が直後に来る陳述文だけを含む文法を規定する。
【００２６】
実行時インタプリタ（１２４）−有効な発話が聞こえるたびに注釈付コーパス（１２２）を検索し、有効な発話の意味を表すトークンを戻すソフトウェア。
【００２７】
実行時インタプリタアプリケーションプログラムインタフェース（ＲＩＡＰＩ）−それを介して対話式音声応答システム（１３０）が実行時インタプリタを使用する、インタフェースとしての役割を果たすソフトウェア機能の組。
【００２８】
音声認識装置（１１６）−発話された言葉を検出して識別することができるハードウェアおよびソフトウェアの組合せ。
【００２９】
音声認識器コンパイラ（１１４）−入力としてベンダ特有ＡＳＲ文法ファイル（１１２）を受入れ、ファイル（１１２）を処理して実行時に音声認識装置（１１６）で使用するようにするための、音声認識装置（１１６）とともに含まれるソフトウェア。
【００３０】
表−文法を表すために使用される２次元の表。表の内容は、好ましい実施例では左から右へと読まれる。
【００３１】
トークン−表のうち有効な発話の各々の後に、トークンを含むセルが後続し、トークンは対話式音声応答システム（１３０）への、有効な発話の意味を表す（文法を開発する際に開発者が作成する）独特なデータ値である。
【００３２】
発話−陳述文。
話された発話−大きな声で発せられた発話。発話が文法のルールに従う場合には発話は有効な発話でもあり得る。
【００３３】
有効な発話−文法の中に検出される発話。有効な発話は文法を規定するルールに従う。
【００３４】
変数−可能性が多くありすぎて全ては列挙できない句を表すためにコーパス（１２２）で使用される「プレースホルダ(place holder)」。たとえば、「１と１００万との間で私の好きな数はｘｘｘです」という発話によって、可能な数各々に１つずつ対応する、９９９，９９８個のコーパスエントリがある。しかしながらこの発明では、コーパス（１２２）の数を表すための変数が使用され得る。したがって、低減されたコーパス（１２２）には「１と１００万との間で私の好きな数は［整数］です」という発話に対して１つしかエントリがない。実行時インタプリタ（１２４）はコーパスにおけるこの変数を識別することができ、数を解釈するために実行時にさらなる処理を行なう。
【００３５】
ベンダ特有ＡＳＲ文法ファイル（１１２）−文法を表すルールの組を含み、音声認識器コンパイラ（１１４）によって認識されることとなる形式で書込まれるデータファイル。
【００３６】
次に、いくつかの図面に示される要素には図面を通して同じ参照番号が記される図面を参照して、埋込式自然言語理解システム（１００）の好ましい実施例を実現するために必要な構成が図１に示される。基本的な要素は、
対話式音声応答システム（１３０）またはＩＶＲと、
文法開発ツールキット（１０４）と、
自動音声認識（ＡＳＲ）システム（１１８）の部分であるコンパイラ（１１４）および音声認識装置（１１６）と、
注釈付自動音声認識（ＡＳＲ）コーパスファイル（１２２）と、
ベンダ特有ＡＳＲ文法ファイル（１１２）と、
実行時インタプリタ（１２４）と、
カスタムプロセッサインタフェース（１２６）またはＣＰと、
実行時インタプリタアプリケーションプログラムインタフェース（１２８）またはＲＩＡＰＩとを含む。これらの要素は後に詳細に説明するが、埋込式アーキテクチャの概要を最初に見ておくと、これらの要素および役割のが十分に理解できるであろう。
【００３７】
１．埋込式アーキテクチャの概要
以下の概要では単一の実行時インタプリタ（１２４）を採用する埋込式アーキテクチャを説明する。複数の実行時インタプリタを採用する、分散式第２のアーキテクチャがある。分散アーキテクチャを以下にさらに説明する。
【００３８】
自然言語体系を実現する第１のステップは、文法における有効な発話を支配するルールの組を作成することである。一例として、「what do you want for lunch?」という質問に対する返答に関する文法は下記のとおりであろう。
【００３９】
<reply>：（（「I want」｜「I'd like」）（「hotdogs」｜「hamburgers」））
このルールの組のもとでは、有効なすべての返答は２つの部分、すなわち１）「I want」または「I'd like」と、それに後続する２）「hot dogs」または「hamburgers」とを含む。この表記は「Backus−Naur−Form（BNF）と呼ばれ、これは論理積および論理和を使用する文法形式である。この発明の好ましい実施例ではこのタイプの文法が作成される。
【００４０】
図１を参照して、文法は文法開発ツールキット（１０４）を使用して開発者によって作成される。好ましい実施例では、ツールキット（１０４）は、ソフトウェア開発プログラムとしてMicrosoft Visual Basic（商標）を備えたIntelベースの中央処理装置（ＣＰＵ１０２）（たとえばIntel Pentium（商標））を有するコンピュータを用いて開発される。コンピュータはさらに、ランダムアクセスメモリ（ＲＡＭ１０６）と、システムメモリにストアされたメモリファイル（１０８）と、キーボード（１１０）とを含む。
【００４１】
ツールキット（１０４）は、自然言語アプリケーションの開発者に簡単な文法作成方法を提供する新規な表計算指向ソフトウェアパッケージである。
【００４２】
ツールキット（１０４）を用いて開発者が文法作成を完了すると、ツールキット（１０４）によって２つの出力が生成され、自然言語体系で使用される。このような出力のうち第１のものはベンダ特有ＡＳＲ文法ファイル（１１２）であり、これは自動音声認識システム、すなわちＡＳＲ（１１８）によって認識可能である形式で保存される。ＡＳＲシステム（１１８）は２つの部分、すなわちコンパイラ（１１４）と、実際音声認識装置（１１６）とを含む。好ましい実施例において、音声認識装置（１１６）は連続音声発話者独立型の音声認識装置である。市場で入手可能な音声認識装置（１１６）には、Lernout & Hauspieによって製造されているＡＳＲ−１５００と、AT & Tによって製造されているWatson 2.0と、NuanceによるNuance 5.0とが含まれる。ツールキット（１０４）の好ましい実施例は、これらの音声認識装置のうちいずれの場合でも文法ファイルを作成することができる。
【００４３】
ベンダ特有ＡＳＲ文法ファイル（１１２）は音声認識装置（１１６）が認識することが要求され、音声認識装置と互換性のある形式で書込まれる言葉および句に関する情報を含む。ファイルはさらに、選択された音声認識装置（１１６）に関する詳細を利用するよう最適化される。たとえば、Ｌ＆Ｈの認識装置を用いると、Ｌ＆Ｈの文法は、始まりが同じである多数のルール（「I want」で始まる３つのルール）を文法が持たないようにすれば、うまく機能を果たす。Ｌ＆Ｈの認識装置に関する文法を最適化すると、<rule１>：（ab）｜（ac）｜（ad）から<rule２>：ａ（ｂ｜ｃ｜ｄ）にルールの組が書き換えられるだろう。ここで、「rule１」の３つのルールは、書き換えられ、組合せられて「rule２」の１つのルールになっている。
【００４４】
音声に作用してそれぞれを認識するために、音声認識装置はＡＳＲシステム（１１８）のベンダによって供給されているコンパイラツール（１１４）を用いてベンダ特有ＡＳＲ文法ファイル（１１２）をコンパイルする必要がある。ツールキット（１０４）の好ましい実施例は、文法がいつ作成されるか、およびどの音声認識装置（１１６）が使用され、ベンダ特有ＡＳＲ文法ファイル（１１２）をそれに応じてフォーマット化し得るかを認識している。
【００４５】
ツールキット（１０４）からの第２の出力は注釈付ＡＳＲコーパス（１２２）であり、これは実際には１対のフラットファイル(flat file)である。ファイルのサンプル形式が図３に示される。この対のうち第１のものはコーパスファイルであり、（以下に説明するように変数を除いて）文法内の可能なすべての論理的文章または句のリストと、それらが現れるコンパートメント（表のグループ）と、聞こえた発話（文章）の分類を表す値とを含む。第２のものは、トークンまたは発話の意味を表すデータ値によって各発話の分類をマッピングする回答ファイルである。これらの２つのファイルは実行時インタプリタ（１２４）によって使用され得る。
【００４６】
実行時に、発話者は音声認識装置（１１６）に取付けられたマイクロフォン（または電話）（１２０）に向かって発話する。認識装置（１１６）は聞こえた言葉および句を識別し、有効な発話が聞こえたときにＩＶＲ（１３０）に通知する。ＩＶＲ（１３０）は音声理解能力を必要とするシステムであり、必要な外部接続および機能のためのハードウェアを含む（たとえばバンキングＩＶＲ−１３０は、銀行のデータベースへの接続と、データ入力のためのキーパッドと、情報の表示のための視覚表示装置と、預金引出のための引出装置と、ユーザに対して返答するためのスピーカとを含み得る）。この有効な発話が、テキストといったコンピュータで読取可能な形式でＩＶＲ（１３０）に送られ、このＩＶＲ（１３０）は聞こえた発話を実行時インタプリタ（１２４）に通知する。実行時インタプリタ（１２４）は注釈付ＡＳＲコーパス（１２２）を参照し、認識装置（１１６）が聞いた有効な文章に対する適切なトークンをＩＶＲ（１３０）に戻す。このトークンは認識装置（１１６）が聞いた発話の意味を表し、ＩＶＲ（１３０）はこれで発話に対して適切に応答することができる。ＣＰ（１２６）およびＲＩＡＰＩ（１２８）は、それを介してＩＶＲ（１３０）が実行時インタプリタ（１２４）にアクセスし得るソフトウェアインタフェーストしての役割を果たす。実行時に発話者と対話するために音声能力を最終的に使用するのはＩＶＲ（１３０）である。
【００４７】
３．実行時インタプリタ
実行時インタプリタ（１２４）はソフトウェアコンポーネントであって、聞こえた有効な発話と、検索されるコンパートメントを特定する文脈情報をテキスト形式で受信するものである。実行時インタプリタ（１２４）は有効な発話を検出するためにコーパスファイル（１２２）（検索を早めるためにＲＡＭにロードされている）を検索する。コーパスにおいて有効な発話が検出されると、関連のトークンがメモリにストアされ、ＩＶＲ（１３０）によって取出される。埋込式アプリケーションでは、実行時インタプリタ（１２４）に対する呼出は、カスタムプロセッサ（１２６）すなわちＣＰ内での機能によって行なわれる。ＣＰ（１２６）は本来、実行時インタプリタ（１２４）とＲＩＡＰＩ（１２８）との間の透過てきな「媒介物」である、別のソフトウェアコンポーネントである。開発者によって生み出されたＩＶＲ（１３０）はＲＩＡＰＩ（１２８）の機能にアクセスするだけである。ＲＩＡＰＩ（１２８）は必要なＣＰ（１２６）の呼出を行ない、これはさらに、必要な実行時インタプリタ（１２４）の呼出を行なう。
【００４８】
ＣＰ（１２６）を設ける目的はカスタマイズ可能性(customizability)にある。ＣＰ（１２６）は発話の処理を向上させるために開発者がカスタマイズすることができる。たとえば、開発者は実行時インタプリタ（１２４）によって実際に処理される前に発話に対して何らかのタイプの処理を施すことを希望するであろう。この前処理は、実行時インタプリタ（１２４）を実際に変形することなく開発者によってＣＰ（１２６）に施すことができる。ＣＰ（１２６）の使用は、基礎となるＩＶＲ（１３０）がＶｏｓ（パリティによる）またはBlaBla（メディアソフトによる）などの低レベルのスクリプト言語によって行なわれるときに特に好都合であり、これは発話テキストの前処理を直接支持しない。ＩＶＲ（１３０）がＣ＋＋などの高レベル言語で書かれる場合、発話テキストの前処理はＣＰ（１２６）を必要とすることなくＩＶＲ（１３０）コード自体で行なうことができる。
【００４９】
実行時インタプリタ（１２４）は発話から変数を抽出するための機能をさらに提供する。コーパスファイルがまずロードされると、変数を含むコーパスアイテムがフラグ付される。コーパスに対する最初のバイナリ検索によって正確な発話が検出されない場合、発話の部分照合を検出するために２回目の検索が行われる。このときは、フラグ付されたコーパスアイテムのみが検索され、コーパスアイテムの少なくとも非変数部分が発話に含まれる場合には部分照合が検出される。
【００５０】
たとえば、好ましい実施例のコーパスファイル（１２２）の形式では有効な発話における通常の言葉から変数をセットオフするために［  および  ］が使用される。したがって、「I want to transfer [CURRENCY1, money] to savings」という発話がコーパスファイルに検出されるであろう。認識装置（１１６）によって聞かれる発話が「I want to transfer ten dollars to savings」であれば、最初のバイナリ検索では、発話はコーパスアイテムのうちいずれとも照合しない。この最初の検索で照合しなければ、インタプリタ（１２４）はフラグ付されたすべてのコーパスアイテムに対して２回目の検索を行なう。聞かれた発話は少なくとも「I want to transfer ... to savings」を含み、部分照合が達成される。照合しない言葉「ten dollars」は[CURRENCY1, money]というタイプの変数として別のアルゴリズムによって処理され、これにより句「ten dollars」を10.00に変換し、10.00をトークン「money」に関連した変数として戻す。この変数データは後に、トークンがストアされたメモリ場所に関連した予め規定されたデータ構成でストアされる。ＩＶＲ（１３０）がトークンを処理する場合、それは、変数データも戻されたことを認識しており、変数データをメモリから取出す。発話の変数を変数データに変換するためのアルゴリズムは変数内に含まれるデータのタイプに依存する。図２は、好ましい実施例によって支持される変数のタイプを示す。以下の擬似コードは、発話（テキスト形式）の変数部分を変数データ（数字形式）に変換するために好ましい実施例において使用されるステップを示す。
【００５１】
【数１】
0004112171.tif 000002
【００５２】
【数２】
0004112171.tif 000003
【００５３】
【数３】
0004112171.tif 000004
【００５４】
【数４】
0004112171.tif 000005
【００５５】
【数５】
0004112171.tif 000006
【００５６】
【数６】
0004112171.tif 000007
【００５７】
【数７】
0004112171.tif 000008
【００５８】
図示され、対話式音声応答（ＩＶＲ）システムによって使用される実行時インタプリタ（１２４）の基本的な動作が図４に示される。以下の説明では、用いられる特定的な機能の名称は好ましい実施例で見られるものである。まず、ステップ４００においてＩＶＲ（１３０）を起動する必要がある。ＩＶＲ（１３０）は自動化された銀行員用機械といった他の仕事を行なうためのソフトウェアシステムであり、この発明の音声理解能力を利用する。たとえば、銀行は会話式自動化行員用機械を提供するためにＩＶＲ（１３０）を開発し得る。好ましい実施例において、ＩＶＲ（１３０）は実行時に音声認識装置（１１６）を管理する責任を担う。
【００５９】
ＩＶＲ（１３０）がまず希望することには、ステップ４０２において音声認識装置を初期化することがある。音声認識装置を初期化するために必要な厳密なステップは、使用される市販の音声認識装置に依存するが、一般的なステップには、ツールキット（１０４）を用いて作成されたベンダ特有ＡＳＲ文法（１１２）をコンパイルすること、およびコンパイルされたものを、音声認識装置（１１６）にアクセス可能なローカルメモリに何らかの形式でロードすることを伴う。
【００６０】
次に、ステップ４０４において、実行時インタプリタ（１２４）を初期化する必要がある。これはＩＶＲ（１３０）がＮＬ＿Ｉｎｉｔ機能を呼出すと行なわれる。この機能は本質的に、現在のアプリケーションに使用され得る注釈付ＡＳＲコーパス（１２２）に関するファイル経路および名称を入力として受信し、このファイル経路および名称をメモリにストアするものである。
【００６１】
ステップ４０６において、ＩＶＲ（１３０）はＮＬ＿ＯｐｅｎＡｐｐ機能を呼出すことにより実行時インタプリタ（１２４）のセットアップを終える。この機能は、その名称およびファイル経路がステップ４０４においてＮＬ＿Ｉｎｉｔ機能によってストアされたコーパスファイルにアクセスし、検索に備えてコーパスをシステムメモリ（ＲＡＭ）にロードする。検索を最適にするために、コーパスファイル（さまざまな有効な発話）の内容を、ＲＡＭにロードする際にアルファベット順に整理する。有効な発話をアルファベット順に整理することにより検索性能が高まる。これは、好ましい実施例において発話とトークンとを照合するためにバイナリ検索が使用されるからである。バイナリ検索は目標とする要素を検出するために分類化されたリストに対して検索を行なう一般的な方法であり、基本的に、目標とするアイテムが検出されるまで検索されるリストアイテムの範囲を徐々に半分にすることを伴う。
【００６２】
このロードプロセス時に、コーパスデータはさらに、１）変数を含むコーパスアイテムにフラグ付すること、および２）２回目の検索時にコーパスアイテムが処理される順番（大きい順）を特定するリストを作成することによって最適化される。最適化の際のこの最後のビットは、２回目の検索によりフラグメントが検索されるため、小さなフラグメント（少ない言葉）が、大きなフラグメントの方が適切な場合に不本意に照合してしまうため、重要である。たとえば、アイテム「I want to transfer ... to savings」はアイテム「I want to transfer ... British pounds to savings」よりも小さい。発話が「I want to transfer ten British pounds to savings」であり、小さなアイテムが最初に処理される場合、それは誤って照合し（「I want to transfer ... to savings」が検出される）、残りの言葉（「ten British pounds」）を送信して、「ten」が第２のアイテムの変数として実際に処理されるべき場合に、第１のアイテムの変数として処理する。２回目の検索が行なわれるときには大きなアイテムを最初に処理することが重要であり、この順序づけは、ＲＡＭメモリにコーパスを最初にロードする際に行なわれる。ポインタの別個のリストが作成され、コーパスがロードされる際にメモリにストアされ、このリストは変数を有するアイテムを処理すべき順（大きい順）を特定する。フラグ付されたコーパスアイテムのリストもメモリにストアされる。
【００６３】
一旦音声認識装置（１１６）および実行時インタプリタ（１２４）の両方が初期化され、実行時インタプリタ（１２４）がコーパスをロードした後、実行時インタプリタがそのジョブを行なう準備が整う。この時点でＩＶＲ（１３０）は行なうべき他の処理を有してもよく、実行時インタプリタ（１２４）は待機する。
【００６４】
未来のある時点で、ＩＶＲ（１３０）は話者との会話が今にも始まろうとしていることを検出する。これが起こると、ＩＶＲ（１３０）は実行時インタプリタ（１２４）内のセションを開く必要がある（セションとは話者とのダイヤモンドログのやり取りである）。ＩＶＲ（１３０）はこれをステップ４０６においてＮＬ＿ＯｐｅｎＳｅｓｓｉｏｎ機能を呼出すことによって行なう。この機能はセションハンドルを生み出し、セションハンドルを開かれたセションに関連づける。このセションに関連した将来の機能呼出しはセションを参照するためにセションハンドルを用いる。
【００６５】
次に、ステップ４０８において、音声認識装置（１１６）は完全な発話が聞こえたかもしれないことをＩＶＲ（１３０）に知らせる。好ましい実施例では、音声認識装置（１１６）はＮＢｅｓｔ形式のデータを戻すタイプである。ＮＢｅｓｔ形式は単に、音声認識装置（１１６）によって聞かれる起こり得る有効発話（テキスト形式）のリストを各有効発話が聞かれた可能性を示す信頼性数値とともに含む出力データである。
【００６６】
ＮＢｅｓｔ形式は、複数の有効発話が同様に聞こえる場合に役立つ。たとえば有効な文法が“I want honey”および“I want money”を含み、話者が“I want mfhoney”と不明瞭に話せば、音声認識装置は、最も正しく聞こえたと信じる単一の有効発話を単に戻すのではなく、両方の有効発話を可能性として戻す。信頼性数値も各有効発話ごとに含められ、特定の有効発話が確かに聞こえたものであったという音声認識装置の確信を示す。この複数の可能性は、実行時インタプリタ（１２４）もまた現在の議論の文脈を知っており、どの有効発話が意味されるのかをより正確に判断するために文脈情報を用いることができる場合に有益である。後述するように、実行時インタプリタ（１２４）の好ましい実施例は、何が意味されるかの判断においてこのような文脈情報を用いる。
【００６７】
ＩＶＲ（１３０）が音声認識装置（１１６）からの出力を受取った後、この出力は次にステップ４１０において解釈のために実行時インタプリタ（１２４）に渡される。これを行なうため、ＩＶＲ（１３０）は好ましい実施例ではＮＬ＿ＡｎａｌｙｚｅＮＢｅｓｔ機能を呼出す。この機能は、ＩＶＲ（１３０）が受取るＮＢｅｓｔデータと、セションハンドルと、検索されるべきコンパートメントを示す文脈ポインタとを入力として受入れる。
【００６８】
ＮＬ＿ＡｎａｌｙｚｅＮＢｅｓｔ機能が実行されると、実行時インタプリタ（１２４）は次に、メモリへとロードされているコーパスを検索して有効発話を探す。照合があれば、リターントークンがメモリに記憶される。照合がなければ、前述の変数検索が行なわれ、変数データが予め規定されたデータ構造に記憶される。この検索はステップ４１２に示される。
【００６９】
ＮＬ＿ＡｎａｌｙｚｅＮＢｅｓｔを呼出した後、ＩＶＲ（１３０）はステップ４１６においてＮＬ＿ＧｅｔＲｅｓｕｌｔを呼出して、ＮＬ＿ＡｎａｌｙｚｅＮＢｅｓｔによって記憶されているトークンをメモリから引出す必要がある。変数が発話に含まれていることをトークンが示せば、ＩＶＲ（１３０）はステップ４１６においてＮＬ＿ＧｅｔＶａｒｉａｂｌｅを呼出して、ＮＬ＿ＡｎａｌｙｚｅＮＢｅｓｔが変数データを記憶するために用いたメモリ内の予め規定されたデータ構造から変数値を引出す。
【００７０】
一旦トークンと任意の必要なデータとがメモリに記憶されると、実行時インタプリタ（１２４）は（今のところでは）そのセションに対して終了する。ステップ４１８において、実行時インタプリタ（１２４）は別の発話またはセションの終了のいずれかを待つ。
【００７１】
別の発話が起これば、音声認識装置（１１６）はステップ４０８においてＩＶＲ（１３０）に再び通知し、ＩＶＲ（１３０）はステップ４１０においてＮＬ＿ＡｎａｌｙｚｅＮＢｅｓｔを呼出し、このプロセスは前のように続行する。
【００７２】
セションが終了すべきであれば、ＩＶＲ（１３０）はステップ４２０においてＮＬ＿ＣｌｏｓｅＳｅｓｓｉｏｎを呼出す。セションの閉鎖によってセションハンドルの関連が解かれる。
【００７３】
この時点のステップ４２２において、実行時インタプリタ（１２４）は新たなセションが始まるのかコマンドが現在のアプリケーションを停止するのかを待つ。新たなセションが始まるべきであれば、ＩＶＲ（１３０）はステップ４０４において再びＮＬ＿ＯｐｅｎＳｅｓｓｉｏｎを呼出し、処理はこれまでどおりステップ４０４から続行する。現在のアプリケーションが閉鎖されるべきであれば、ＩＶＲ（１３０）はステップ４２４においてＮＬ＿ＣｌｏｓｅＡｐｐを呼出して、アプリケーションが開かれたときに割当てられていたメモリを解放する。
【００７４】
次にステップ４２６において、ＩＶＲ（１３０）はＮＬ＿Ｓｈｕｔｄｏｗｎを呼出してＮＬ＿Ｉｎｉｔの効果を取消す。
【００７５】
最後に、ステップ４２８および４３０において、ＩＶＲ（１３０）は音声認識装置（１１６）およびＩＶＲ（１３０）自体を停止する責任を有する。必要な実際のステップは選択された音声認識装置（１１６）とＩＶＲ開発者とによって変化する。
【００７６】
実行時インタプリタ（１２４）はまた、ＣＰ（１２６）が渡すＮｂｅｓｔデータを管理することを望む開発者のための機能を与える。機能は、Ｎｂｅｓｔバッファを生み出す（ＮＢ＿ＣｒｅａｔｅＢｕｆｆｅｒ）、１つの発話だけでのＮｂｅｓｔバッファを生み出す（ＮＢ＿ＣｒｅａｔｅＯｎｅＢｅｓｔ）、Ｎｂｅｓｔバッファ内に発話を設定する（ＮＢ＿ＳｅｔＵｔｔｅｒａｎｃｅ）、Ｎｂｅｓｔバッファ内に発話のためのスコアを設定する（ＮＢ＿ＳｅｔＳｃｏｒｅ）、Ｎｂｅｓｔバッファ内に発話／スコアの対を設定する（ＮＢ＿ＳｅｔＵｔｔｅｒａｎｃｅＳｃｏｒｅ）、Ｎｂｅｓｔバッファ内に記憶できる発話の数を定める（ＮＢ＿ＧｅｔＮｕｍＲｅｓｐｏｎｓｅｓ）、Ｎｂｅｓｔバッファから発話を得る（ＮＢ＿ＧｅｔＵｔｔｅｒａｎｃｅ）、Ｎｂｅｓｔバッファからスコアを得る（ＮＢ＿ＧｅｔＳｃｏｒｅ）、特定のＮｂｅｓｔバッファのために割当てられていたメモリを解放する（ＮＢ＿ＤｅｓｔｒｏｙＢｕｆｆｅｒ）ことが有効である。
【００７７】
４．実行時インタプリタアプリケーションプログラムインタフェース
実行時インタプリタアプリケーションプログラムインタフェース（１２８）またはＲＩＡＰＩはＩＶＲ（１３０）の開発者が実行時インタプリタ（１２４）と相互作用するために実際に用いられるソフトウェア機能の集合である。ＲＩＡＰＩ（１２８）の好ましい実施例に含まれる機能は、ＮＬ＿Ｉｎｉｔ（），ＮＬ＿ＯｐｅｎＡｐｐ（），ＮＬ＿ＯｐｅｎＳｅｓｓｉｏｎ（），ＮＬ＿ＡｎａｌｙｚｅＮｂｅｓｔ（），ＮＬ＿ＧｅｔＲｅｓｕｌｔ（），ＮＬ＿ＧｅｔＶａｒｉａｂｌ（），ＮＬ＿ＣｌｏｓｅＳｅｓｓｉｏｎ（），ＮＬ＿ＣｌｏｓｅＡｐｐ（）およびＮＬ＿Ｓｈｕｔｄｏｗｎ（）を含む。
【００７８】
ＮＬ＿Ｉｎｉｔは、初期化情報を処理し、かつセション用にメモリを割当てるために起動時に一度呼出される初期化機能である。初期化情報は、ローカルログファイルのための名前と、セションの最大数と、経路選択モード（埋込式または分散式−分散式アーキテクチャを後述する）とを含み得る。例示的実施例では、ＮＬ＿Ｉｎｉｔの呼出しによってＣＰ＿Ｉｎｉｔ（ＣＰ等価物）が呼出され、それによってＳＡＩ＿Ｉｎｉｔ（実行時インタプリタ１２４等価物）が呼出される。以下のＲＩＡＰＩ（１２８）の機能のほとんどもＣＰ（１２６）の機能呼出しにつながり、それによって対応の実行時インタプリタ（１２４）機能が呼出される。好ましい実施例による２つの例外は、変数または結果を取出すためにメモリに直接的にアクセスするＮＬ＿ＧｅｔＶａｒｉａｂｌｅおよびＮＬ＿ＧｅｔＲｅｓｕｌｔ機能である。
【００７９】
ＮＬ＿ＯｐｅｎＡｐｐはインタプリタ（１２４）内にアプリケーションを確立するために呼出される。前述のように、アプリケーションはプロジェクトのインスタンスまたは実現である。アプリケーションを開くと、インタプリタ（１２４）がそのアプリケーションに関連したコーパスファイル（１２２）をロードする。
【００８０】
ＮＬ＿ＯｐｅｎＳｅｓｓｉｏｎは開いたアプリケーションのもとでセションが所望されるときに呼出される。セションは本質的に話者との会話であり（ＩＶＲ１３０がたとえばいくつかの音声認識装置を管理する場合）、いくつかのセションが同じアプリケーションに対して存在することが可能である。
【００８１】
ＮＬ＿ＡｎａｌｙｚｅＮｂｅｓｔは、音声認識装置がＮｂｅｓｔ出力の用意ができていることを示すときにＩＶＲ（１３０）によって呼出される。ＩＶＲ（１３０）はこの機能を呼出して、このＮｂｅｓｔ出力と文脈情報とを分析のために実行時インタプリタ（１２４）に送る。
【００８２】
ＮＬ＿ＧｅｔＲｅｓｕｌｔは、実行時インタプリタ（１２４）がメモリに記憶したトークンを読出すためにＩＶＲ（１３０）によって呼出される。
【００８３】
ＮＬ＿ＧｅｔＶａｒｉａｂｌｅは、インタプリタ（１２４）が記憶したトークンがそれに関連した変数データを有するタイプであるときに呼出される。ＮＬ＿ＧｅｔＶａｒｉａｂｌｅの呼出しによって、インタプリタ（１２４）がデータを記憶するために用いたメモリデータ構造からこの変数データが引出される。
【００８４】
ＮＬ＿ＣｌｏｓｅＳｅｓｓｉｏｎは、特定のセションを閉じ、かつそのセションに関連した任意の割当てられたリソースを戻すために呼出される。この機能を呼出すと、セションを閉じるためにこれもまた必要であるほかの機能も呼出され得る。たとえば、埋込式アーキテクチャでは、ＮＬ＿ＣｌｏｓｅＳｅｓｓｉｏｎはＣＰ＿ＣｌｏｓｅＳｅｓｓｉｏｎを呼出して、ＣＰ（１２６）および実行時インタプリタ（１２４）に、それらのそれぞれのセションを適切に閉じ、かつもはや必要ではない割当てられたリソースを戻すための機会を与える。
【００８５】
ＮＬ＿ＣｌｏｓｅＡｐｐは特定のアプリケータを閉じるために呼出される。この機能は全セションが閉じたことを確認し、ＣＰ＿ＣｌｏｓｅＡｐｐのような他の機能をも呼出して、ＣＰ（１２６）およびインタプリタ（１２４）に「それら自身の後をクリーンアップする」ための機会を与える。
【００８６】
ＮＬ＿Ｓｈｕｔｄｏｗｎは、ＮＬ＿Ｉｎｉｔが呼出される前に存在していた状態にシステムを本質的に戻すために呼出される。ＣＰ＿Ｓｈｕｔｄｏｗｎも、ＣＰ（１２６）およびインタプリタ（１２４）にそれらのリソースの割当てを解除させるために呼出される。
【００８７】
これらの基本的機能に加えて、ＲＩＡＰＩ（１２８）にはインターネット／イントラネット性能も設けられる。自然言語体系がＴＣＰ／ＩＰを介してネットワークに接続されれば、ＴｃｐＣａｌｌｂａｃｋ機能が非同期ＴＣＰ／ＩＰソケット事象を処理するために用いられ得る。サーバインタフェースプロセス（ＳＩＰ）を介するインターネットへの接続を支持するための以下のＲＩＡＰＩの呼出しもまた有効である（ただし、非ＳＩＰシステムには不必要である）。それらは、（遠隔ウェブブラウザユーザとのセションを開くための）ＮＬ＿ＷＥＢＣｏｎｎｅｃｔと、（テキスト応答をインタプリタ１２４に渡すための）ＮＬ＿ＲｅｐｏｒｔＷＥＢＴｅｘｔと、（遠隔ユーザにファイル内容を提示または表示するための）ＮＬ＿ＷＥＢＰｌａｙと、（ＮＬ＿ＷＥＢＣｏｎｎｅｃｔによって接続されたＳＩＰインスタンスからの入力を受入れるようあるセションを導くための）ＮＬ＿ＷＥＢＬｉｓｔｅｎと、（ＮＬ＿ＷＥＢＬｉｓｔｅｎ呼出しの結果を引出すための）ＮＬ＿ＧｅｔＷＥＢＲｅｓｕｌｔと、（セションを閉じるための）ＮＬ＿ＣｌｏｓｅＷＥＢＳｅｓｓｉｏｎとである。
【００８８】
ＩＶＲ（１３０）と（最終的には）実行時インタプリタ（１２４）との間のインタフェースとして、ＲＩＡＰＩ（１２８）に対して行なわれる特定の呼出しは、ＩＶＲ（１３０）の、実行時インタプリタ（１２４）の機能に対する必要性によって指図される。
【００８９】
５．分散式アーキテクチャの概観
この明細書は埋込式システムアーキテクチャの要素をこれまでに説明した。埋込式アーキテクチャでは、実行時インタプリタ（１２４）およびＲＩＡＰＩ（１２８）の両方が同じコンピュータ上にあるソフトウェア要素である。
【００９０】
分散式アーキテクチャでは、複数の分散式実行時インタプリタ（５０８）がコンピュータネットワーク内の複数の場所の中に配置される（好ましい実施例では、ＵｎｉｘネットワークおよびＷｉｎｄｏｗｓ  ＮＴネットワークの両方がサポートされる）。この複数のインタプリタ（５０８）を有することによって、ＩＶＲ（１３０）は多数の発話を同時に処理させることができる。これに対する最も明かな利点は同時に多数のセションを行なう能力である。
【００９１】
図５は分散式システムアーキテクチャの要素を示す。ほとんどの要素が埋込式アーキテクチャに見られるものと同じである。文法（１１２）およびコーパス（１２２）の両方が埋込式アーキテクチャにおいて用いられるものと同じである。異なるのは、複数の分散式インタプリタ（５０８）と、リソースマネージャ（５１０−ＲＭ）と、ロガー（５１２）と、オペレータディスプレイ（５１４）と、ログビューア（５１６）とである。分散式インタプリタ（５０８）およびＲＭ（５０６）についてはさらに後述する。
【００９２】
ロガー（５１２）は単に、リソースマネージャ（５１０）とさまざまなインタプリタ（５０８）との間で送られるさまざまなメッセージを記録するソフトウェアデバイスである。オペレータディスプレイ（５１４）およびログビューア（５１６）は、開発者がシステムに接続されるＩＶＲ（１３０）とさまざまなインタプリタとの動作をそれによって監視できる手段である。好ましい実施例では、ロガー（５１２）、オペレータディスプレイ（５１４）およびログビューア（５１６）はユーザまたはオペレータにＩＶＲ（１３０）アプリケーションのコントロールを行わせない。これらのデバイスはアプリケーションの動作に関する情報を与えるのみである。
【００９３】
６．分散式インタプリタ
この発明の代替的実施例では、分散式システムが用いられる。分散式システムはネットワークコンピュータシステムに対して作用する。ネットワークコンピュータシステムは単に、通信ネットワークを介して互いに相互接続される複数のコンピュータまたはノードを意味する
分散式システムでは、解釈義務を行なう各ノードがＤＩマネージャ（５０４）、ＤＩＣＰ（５０６）およびＤＩ実行時インタプリタ（５０８）を有する。ＤＩＣＰ（５０６）およびＤＩ実行時インタプリタ（５０８）は前述の埋込式アーキテクチャに見られるＣＰ（１２６）および実行時インタプリタ（１２４）と同じ機能を有する。ＤＩマネージャ（５０４）は、ノードの解釈義務のメッセージ処理および調整に責任を持つ別のソフトウェアである。メッセージ処理はノードをリソースマネージャ（５１０）に接続するために用いられるネットワークのタイプに依存する。しかしながら、同じ一般的なメッセージタイプが用いられる。メッセージタイプおよび目的については後述する。
【００９４】
マネージャ（５０４）自体はソフトウェア構成要素であり、それが何らかのメッセージを処理できるようになるにはまず解釈ノードに対して実行しなければならない。マネージャ（５０４）は開始すると、初期化ファイル内で、マネージャ（５０４）がサポートするアプリケーションに関する情報を探す。この情報は、サポートされるアプリケーションの名前と、サポートされるアプリケーションのために用いられるべき注釈付コーパス（１２２）の場所へのファイル経路とを含む。
【００９５】
＜initiarize＞メッセージはＣＰ＿Ｉｎｉｔを呼出すことによってＤＩマネージャ（５０４）にＤＩＣＰ（５０６）を初期化させ、ＤＩＣＰ（５０６）はＳＡＩ＿Ｉｎｉｔを呼出すことによってＤＩ実行時インタプリタ（５０８）を初期化する。このメッセージはまた、アプリケーションを開くためのＣＰ＿ＯｐｅｎＡｐｐおよびＳＡＩ＿ＯｐｅｎＡｐｐを呼出すことによって、サポートされるべきアプリケーションをＤＩマネージャ（５０４）に初期化させる。前述のように、アプリケーションを開くにはコーパス（１２２）のロードが必要である。ロードされるべきコーパス（１２２）の場所はＤＩ実行時インタプリタ（５０８）に渡される。ＤＩ実行時インタプリタ（５０８）がその初期化を完了すると（そして、コーパス１２２がロードされると）、それは、現在のアプリケーションを参照するデータオブジェクトであるアプリケーションハンドルを発生する。このハンドルはＤＩＣＰ（５０６）に戻され、ＤＩＣＰ（５０６）はそれをＤＩマネージャ（５０４）に戻す。ＤＩ（５０２）内でエラーが起こるごとに、ＤＩマネージャ（５０４）はエラーを記述する＜tell error＞メッセージを構成し、それをＲＭ（５１０）に戻す。
【００９６】
セションはＤＩマネージャ（５０４）が＜start session＞メッセージを受取るときに開かれる。このメッセージは送り手の（sending）ＩＶＲ（１３０）とセション識別子とを識別するリソースアドレスを含む。ＤＩマネージャ（５０４）は同じリソースアドレスで開かれたセションがこれまでにないか確認し、なければ、セションを表すセションオブジェクトを生み出す。セションオブジェクトは本質的に、このセションを参照する前述のアプリケーションハンドルに類似したハンドルである。ＤＩマネージャ（５０４）は次に、ＳＡＩ＿ＯｐｅｎＳｅｓｓｉｏｎ機能を呼出すＣＰ＿ＯｐｅｎＳｅｓｓｉｏｎ機能を呼出すことによって、ＤＩＣＰ（５０６）およびＤＩ実行時インタプリタ（５０８）内でセションを開く。ＳＡＩ＿ＯｐｅｎＳｅｓｓｉｏｎのリターン値はＣＰ＿ＯｐｅｎＳｅｓｓｉｏｎに戻され、これはそれをＤＩマネージャ（５０４）に戻す。ここでもまた、エラーは＜tell error＞メッセージでＤＩマネージャ（５０４）によって報告される。
【００９７】
一旦セションが開かれると、ＤＩ（５０２）は解釈を行なう準備が整っている。解釈プロセスを開始できる２つのメッセージがある。最初に、ＤＩマネージャ（５０４）は＜analyze＞メッセージを受取ることができる。＜analyze＞メッセージはＣＰ＿ＡｎａｌｙｚｅＮｂｅｓｔのために通常は必要な文脈およびｎｂｅｓｔ情報のすべてを含む。ＤＩマネージャ（５０４）は次にＤＩ実行時インタプリタ（５０８）の便利な機能であるＮＢ＿ＣｒｅａｔｅＢｕｆｆｅｒおよびＮＢ＿ＳｅｔＵｔｔｅｒａｎｃｅＳｃｏｒｅを呼出して、文脈およびＮｂｅｓｔデータでの構造を準備する。ＤＩマネージャ（５０４）は次にこのデータ構造を入力としてＣＰ＿ＡｎａｌｙｚｅＮｂｅｓｔへ与え、それは埋込式アーキテクチャに対して前述した検索を行なうＳＡＩ＿ＡｎａｌｙｚｅＮｂｅｓｔを呼出す。これらの機能が完了すると、それらのリターン値がＤＩマネージャ（５０４）へと伝播して戻り、ＤＩマネージャ（５０４）は＜reply＞メッセージを構成し、それをＲＭ（５１０）へと送り戻す。
【００９８】
＜analyze＞メッセージの受取りは、解釈が開始され得る１つの方法にすぎない。他の方法は文脈およびｎｂｓｅｔデータが別個のメッセージにおいて送られるときに起きる。これが生じると、ＲＭ（５１０）は第１のメッセージまたは＜state＞メッセージを送る。これは文脈と発話が聞かれたセションを識別するリソースアドレスとを含む。このメッセージが受取られると、ＤＩマネージャ（５０４）は、リソースアドレスが確かに既存のセションのものであることを初めに確認する。そうであれば、ＤＩマネージャ（５０４）はリソースアドレスに関連してセションハンドルを引出し、メッセージからの文脈情報を一時記憶領域に記憶してさらなる処理を待つ。
【００９９】
さらなる処理は、第２のメッセージがＤＩマネージャ（５０４）によって受取られるときに起きる。第２のメッセージまたは＜nbest＞メッセージはリソースアドレスといくつかのｎｂｅｓｔデータとを含む。＜nbest＞メッセージが受取られると、ＤＩマネージャ（５０４）は、＜nbest＞メッセージに含まれるリソースアドレスが既存のセションのものであることを再び確認する。そうであれば、ＤＩマネージャ（５０４）は次にセションと関連した一時記憶領域に注意し、これまでに記憶された文脈情報を探す。ｎｂｅｓｔデータおよび文脈データをとり、ＤＩマネージャ（５０４）は次にＣＰ＿ＡｎａｌｙｚｅＮｂｅｓｔを呼出し、それは次にＳＡＩ＿ＡｎａｌｙｚｅＮｂｅｓｔを呼出し、ここで、ｎｂｅｓｔデータにおける発話と関連したトークンを探すためにコーパス（１２２）が検索される。
【０１００】
セションが終了するのは、ＤＩマネージャ（５０４）が＜lost call＞メッセージを受取るときである。このメッセージはリソースアドレスを含み、ＤＩマネージャ（５０４）はそのリソースアドレスが確かに開いたセションを参照することを確認する。そうであれば、ＤＩマネージャ（５０４）はＣＰ＿ＣｌｏｓｅＳｅｓｓｉｏｎを呼出し、それは次にＳＡＩ＿ＣｌｏｓｅＳｅｓｓｉｏｎを呼出し、セションは埋込式アーキテクチャにおいてセションが閉じられるのと同じように閉じられる。
【０１０１】
アプリケーション全体が停止されるべきであれば、ＤＩマネージャ（５０４）は＜terminate＞メッセージを受取る。各マネージャ（５０４）が一度に１つだけのアプリケーションをサポートできるので、アプリケーションの停止はマネージャ（５０４）の停止と同じである。ＤＩマネージャ（５０４）がこのメッセージを受取ると、それは必要なＣＰ＿ＣｌｏｓｅＳｅｓｓｉｏｎの呼出しを行なって、開いている残りのセションを閉じ、最後にＣＰ＿Ｓｈｕｔｄｏｗｎを呼出す。それはＳＡＩ＿Ｓｈｕｔｄｏｗｎを呼出し、マネージャ（５０４）、ＤＩＣＰ（５０６）およびＤＩ実行時インタプリタ（５０８）に割当てられている全リソースが解放される。
【０１０２】
７．リソースマネージャ
リソースマネージャ（５１０）はネットワークに接続されているさまざまな分散式インタプリタ（５０８）の動作を監視し、インタプリタ（５０８）間にＲＩＡＰＩ（１２８）の要求を分散する。好ましい実施例では、ＲＭ（５１０）は、分散式インタプリタ（５０８）が初期化されるごとにメッセージを受取り、分散式インタプリタ（５０８）によってサポートされるアプリケーションを記録する。次に、リソースマネージャがＲＩＡＰＩ（１２８）を介して単数または複数のＩＶＲ（１３０）から要求を受取ると、それはどの分散式インタプリタ（５０８）がその要求を扱うことができる（そのアプリケーションをサポートすることができる）かを確認し、ＩＶＲ（１３０）の要求を含むメッセージを作り、それを処理のために適切なマネージャ（５０４）へと送る。リソースマネージャ（５１０）は前述のメッセージを用いてマネージャ（５０４）と通信する。
【０１０３】
以上の教示を鑑み、これらの教示において実現されるこの発明の範囲から逸脱せずに変形が行なわれ得ることが理解される。発明者の好ましい実施例の一部として与えられるどの例も例示としてのみ提示され、この発明の範囲を限定するものとは意図されない。むしろ、この発明の範囲は前掲の請求の範囲を用いて決定されるべきである。
【図面の簡単な説明】
【図１】  埋込式自然言語理解システムの全体図である。
【図２】  好ましい実施例において支持される変数のタイプを示す表である。
【図３】  注釈付ＡＳＲコーパスファイルおよびベンダ特有ＡＳＲ文法ファイルに関するサンプル形式を示す図である。
【図４】  実行時インタプリタへのアクセス時のＩＶＲの動作を示すフロー図である。
【図５】  分散式システムアーキテクチャを示す図である。
【図１】
0004112171.tif 000009
【図２】
0004112171.tif 000010
【図３】
0004112171.tif 000011
【図４】
0004112171.tif 000012
【図５】
0004112171.tif 000013