(57)【要約】【課題】  高速、かつ、高精度のパターン認識が可能な情報処理技術を提供すること。【解決手段】  情報処理装置は、複数のクエリーにより構成されるクエリー列を作成する作成部と、カレントノードの階層に応じて、クエリー列から階層に対応したクエリーの読み込みを行う読み込み部と、読み込まれた階層に対応したクエリーに従って、カレントノードに設定されている学習パターンを分割して、木構造のノードを生成する生成部と、生成された木構造のノードのうち、クエリー列の長さに対応する階層までのノードについて、各階層のノードを共通化したノードとしてまとめることにより、木構造を変更する変更部と、を備える。【選択図】  図１
2015212990.tif 000002
【特許請求の範囲】
【請求項１】
複数のクエリーにより構成されるクエリー列を作成する作成手段と、
前記クエリー列からカレントノードの階層に対応したクエリーの読み込みを行う読み込み手段と、
読み込まれた前記階層に対応したクエリーに従って、前記カレントノードに設定されている学習パターンを分割して、木構造のノードを生成する生成手段と、
前記生成手段により生成された前記木構造のノードのうち、前記クエリー列の長さに対応する階層までのノードについて、各階層のノードを共通化したノードとしてまとめることにより、前記木構造を変更する変更手段と、
を備えることを特徴とする情報処理装置。
【請求項２】
前記クエリー列を構成するクエリーの読み込みを行うクエリー先き読み手段と、
前記クエリー先き読み手段により読み込まれた前記クエリーと、前記変更手段により変更された前記木構造と、を用いてパターンの認識処理を行う認識手段と、
を更に備えることを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記階層に対応したクエリーの読み込みに成功したか否かを判定する判定手段を更に備え、
前記生成手段は、前記判定手段により前記階層に対応したクエリーの読み込みに成功したと判定された場合、読み込まれた前記階層に対応したクエリーに従って、前記カレントノードに設定されている学習パターンを分割して、木構造のノードを生成することを特徴とする請求項１に記載の情報処理装置。
【請求項４】
前記生成手段で生成された前記木構造のノードを新たなカレントノードとして、
前記読み込み手段は、前記新たなカレントノードの階層に応じて、前記クエリー列から前記階層に対応したクエリーの読み込みを行い、
前記生成手段は、読み込まれたクエリーに従って、前記新たなカレントノードに設定されている学習パターンを分割して、新たなノードを生成することを特徴とする請求項１に記載の情報処理装置。
【請求項５】
前記作成手段は、前記判定手段の判定により、前記階層に対応したクエリーの読み込みに失敗したと判定された場合、前記学習パターンに対応した新たなクエリーを作成することを特徴とする請求項３に記載の情報処理装置。
【請求項６】
複数のクエリー列に従って学習パターンを分割することによってテーブルを生成する第１のテーブル生成手段と、
前記第１のテーブル生成手段によって生成されたテーブルを用いて分割された学習パターン集合を複数のクエリー列に従って更に分割することによってテーブルを生成する第２のテーブル生成手段と、
前記第１のテーブル生成手段で生成されたテーブルと前記第２のテーブル生成手段で生成されたテーブルとを組み合わせることでパターンを判別する判別器を作成する判別器作成手段と、
を備えることを特徴とする情報処理装置。
【請求項７】
情報処理装置で実行される情報処理方法であって、
前記情報処理装置の作成手段が、複数のクエリーにより構成されるクエリー列を作成する作成工程と、
前記情報処理装置の読み込み手段が、カレントノードの階層に応じて、前記クエリー列から前記階層に対応したクエリーの読み込みを行う読み込み工程と、
前記情報処理装置の生成手段が、読み込まれた前記階層に対応したクエリーに従って、前記カレントノードに設定されている学習パターンを分割して、木構造のノードを生成する生成工程と、
前記情報処理装置の変更手段が、前記生成工程で生成された前記木構造のノードのうち、前記クエリー列の長さに対応する階層までのノードについて、各階層のノードを共通化したノードとしてまとめることにより、前記木構造を変更する変更工程と、
前記情報処理装置のクエリー先き読み手段が、前記クエリー列を構成するクエリーの読み込みを行うクエリー先き読み工程と、
前記情報処理装置の認識手段が、前記クエリー先き読み工程で読み込まれた前記クエリーと、変更された前記木構造と、を用いてパターンの認識処理を行う認識工程と、
を有することを特徴とする情報処理方法。
【請求項８】
情報処理装置で実行される情報処理方法であって、
前記情報処理装置の第１のテーブル生成手段が、複数のクエリー列に従って学習パターンを分割することによってテーブルを生成する第１のテーブル生成工程と、
前記情報処理装置の第２のテーブル生成手段が、前記第１のテーブル生成工程で生成されたテーブルを用いて分割された学習パターンの集合を複数のクエリー列に従って更に分割することによってテーブルを生成する第２のテーブル生成工程と、
前記情報処理装置の判別器作成手段が、前記第１のテーブル生成工程で生成されたテーブルと前記第２のテーブル生成工程で生成されたテーブルとを組み合わせることでパターンを判別する判別器を作成する判別器作成工程と、
を有することを特徴とする情報処理方法。
【請求項９】
コンピュータを、請求項１乃至６のいずれか１項に記載の情報処理装置の各手段として機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は情報処理装置、情報処理方法およびプログラムに関する。
【背景技術】
【０００２】
従来、学習パターンを用いて新規パターンを解析する機械学習の技術がある。その中でも、分類木、決定木と呼ばれるパターン認識手法が提案され（非特許文献１を参照）、多くのシステムで用いられてきている。この手法は木構造（ツリー構造とも呼ばれる）を用いて高速にパターンを解析できるという性質を持っており、計算機の能力の貧弱な時代にはその能力を発揮してきた。なお、パターン認識問題をパターン識別問題として捉えたとき、識別するべきパターンの種類を「クラス」と呼び、以下の説明において、「クラス」という言葉はこの意味で用いるものとする。
【０００３】
一方、非特許文献にあるような古典的な分類木、決定木の欠点として、認識性能があまり高くないということが挙げられる。この欠点を克服する技術として、例えば、特許文献１にあるような分類木の集合（アンサンブル）を用いた手法が提案されている。これは分類木をL個（Lは２以上の定数であり、通常は１０〜１００の範囲）作成し、それら全部を用いることによって、より高い認識性能を実現する技術である。これは従来の１つの分類木を用いた手法のL倍、計算時間を要するという欠点を持っており、従来の分類木の高速性という性質を犠牲にしている。しかし、最近の計算機の能力向上により、この分類木のアンサンブルを用いた手法は現実的な時間で実行可能になった。そして、その認識性能の高さから最近、多くのシステムに採用されるようになってきている。ちなみに、この手法は古典的な分類木のアルゴリズムより遅いものの、特許文献２にあるようなsupport vector machineを用いたパターン認識手法より高速、かつ、同程度の能力を出すという性質を持っている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】米国特許第６,００９,１９９号公報
【特許文献２】特開２００５−３３９１８６号公報
【非特許文献】
【０００５】
【非特許文献１】Leo Breiman, Jerome Friedman, Charles J. Stone, and R.A. Olshen, “Classification and Regression Trees”, Chapman & Hall/CRC (1984)
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、パターンとして画像を用いるアプリケーションを想定した場合、リアルタイム性が求められることが多く、より高速なパターン認識アルゴリズムが必要になってくる。そして、特許文献１に記載の分類木のアンサンブルを用いた手法であっても認識処理にかける計算時間が不足し、更なる高速化が要求されている。
【課題を解決するための手段】
【０００７】
本発明は、高速に、かつ、高精度にパターン認識が可能な情報処理技術を提供する。
【０００８】
本発明の一つの側面にかかる情報処理装置は、複数のクエリーにより構成されるクエリー列を作成する作成手段と、
前記クエリー列からカレントノードの階層に対応したクエリーの読み込みを行う読み込み手段と、
読み込まれた前記階層に対応したクエリーに従って、前記カレントノードに設定されている学習パターンを分割して、木構造のノードを生成する生成手段と、
前記生成手段により生成された前記木構造のノードのうち、前記クエリー列の長さに対応する階層までのノードについて、各階層のノードを共通化したノードとしてまとめることにより、前記木構造を変更する変更手段と、を備えることを特徴とする。
【０００９】
あるいは、本発明の他の側面にかかる情報処理装置は、複数のクエリー列に従って学習パターンを分割することによってテーブルを生成する第１のテーブル生成手段と、
前記第１のテーブル生成手段によって生成されたテーブルを用いて分割された学習パターン集合を複数のクエリー列に従って更に分割することによってテーブルを生成する第２のテーブル生成手段と、
前記第１のテーブル生成手段で生成されたテーブルと前記第２のテーブル生成手段で生成されたテーブルとを組み合わせることでパターンを判別する判別器を作成する判別器作成手段と、を備えることを特徴とする。
【発明の効果】
【００１０】
本発明によれば、高速に、かつ、高精度にパターン認識が可能な情報処理技術の提供が可能になる。
【００１１】
あるいは、パターン認識の情報処理に必要となるディスク、また、メモリの容量を削減することができる。
【図面の簡単な説明】
【００１２】
【図１】第１の実施形態にかかる学習過程の処理の流れを説明する図。
【図２】（ａ）本発明の実施形態にかかる情報処理装置の概略的な構成を説明する図、（ｂ）木構造の判別器を例示的に説明する図、（ｃ）木構造の判別器を例示的に説明する図。
【図３】認識過程の処理の流れを説明する図。
【図４】（ａ）第２の実施形態における学習過程の処理の流れを説明する図、（ｂ）第２の実施形態における認識過程の処理の流れを説明する図。
【図５】テーブル化を例示的に説明する図。
【図６】テーブルを作成する手順を説明する図。
【図７】木構造の判別器の実装例を例示的に示す図。
【図８】パターンとして画像を扱う場合を説明する図。
【図９】（ａ）第４の実施形態における学習過程の処理の流れを説明する図、（ｂ）第４の実施形態における認識過程の処理の流れを説明する図。
【図１０】（ａ）元となるツリーを例示的に示す図、（ｂ）ツリーを元に作成された組み合わせテーブルを例示的に示す図。
【図１１】第５の実施形態の処理の流れを説明する図。
【図１２】第６の実施形態の処理の流れを説明する図。
【図１３】作成されるテーブルを例示的に示す図。
【図１４】クエリーにおける分岐の２進法表示とエンティティ番号との対応関係を示す図。
【図１５】（ａ）判別器の作成装置の構成例を示す図、（ｂ）認識装置の構成例を示す図。
【発明を実施するための形態】
【００１３】
（第１の実施形態）
図２（ａ）−（ｃ）の参照により、本発明の実施形態にかかる情報処理装置の概略的な構成を説明する。情報処理装置は、中央処理装置（ＣＰＵ）２０２、メモリ２０３、入出力装置２０４を有し、中央処理装置（ＣＰＵ）２０２は不図示のインタフェースを介して、外部記憶装置２０１との間でデータの送受信が可能である。外部記憶装置２０１は、本発明の実施形態にかかるパターン認識方法をコンピュータに実行させるためのプログラムや、学習パターン、学習パターンを用いて作成された辞書等を保持することが可能である。また、新たに導かれた新規パターンの認識結果を保持することが可能である。中央処理装置（ＣＰＵ）２０２はパターン認識方法のプログラムの実行を司り、情報処理装置の全体的な制御を行う。メモリ２０３は中央処理装置（ＣＰＵ）２０２が使用するプログラム、及びサブルーチンやデータを一時的に格納するワークエリアとして機能する。また、本発明の実施形態により導かれた新規パターンの認識結果を保持することも可能である。
【００１４】
入出力装置２０４は、新規パターンを取り込んだり、データの入出力を行う他、ユーザからの指示の受付け、ユーザに対するデータ表示等、ユーザと情報処理装置との間のインタフェースとしても機能する。例えば、パターンとして２次元の画像を用いる場合は、入出力装置２０４は対象物体を撮影するカメラとして機能する。また、入出力装置２０４はパターン認識結果を他の情報処理装置へ出力することも可能である。また、本実施形態のパターン認識方法を実現するプログラムの実行のトリガーを、入出力装置２０４を介してユーザが指示を出す場合もある。また、入出力装置２０４を介して、ユーザが、パターン認識処理の結果を見たり、プログラムのパラメータ設定を行うことも可能である。
【００１５】
機械学習によるパターン認識方法には、多くのパターンから学習をする学習過程と、新規パターンを解析する認識過程と、の２つの過程が存在する。以下、図１（ａ）、（ｂ）の参照により学習過程の処理の流れを説明し、図３（ａ）、（ｂ）の参照により認識過程の処理の流れを説明する。
【００１６】
学習過程は図１（ａ）と図１（ｂ）との２つのルーチンに分けられる。図１（ｂ）のルーチンは再帰呼び出しされる。図１（ａ）、（ｂ）に示したフローチャートを実行することによって、学習パターンの集合が再帰的に分割されていくことになる。そして、その結果として図２（ｂ）、（ｃ）に示すような木構造の辞書（＝木構造を持った判別器）が出来上がる。つまり、木構造の辞書、もしくは木構造の判別器を作成することは、論理的には、学習パターンの集合を再帰的に分割することと等価となる。
【００１７】
まず、ステップＳ１０１において、クエリー列が作成される。ここでクエリーとは、パターンをどの枝に振り分けるかを決定する「問い」であり、「i番目の次元の値がある閾値以上か未満か」で、左右の枝に分岐する例などが考えられる。パターンが画像データの場合、「ある位置の値（輝度）と、ある位置の値（輝度）と、を比較してどちらが大きいか」で分岐する例も考えられる。一般には枝は２つである必要はなくN本あってよい。この場合のクエリーの例としては、「i番目の次元の値をある定数で割った商」の値に応じた分岐などが考えられる。
【００１８】
以下、クエリーの例として、多次元データのある次元を選んで、その次元の値がある閾値以上か未満かを判断するクエリーを考えてみる。ここで注目する次元の選択を全ての次元からランダムに選び、かつ、閾値をある区間からランダムに選ぶことでランダムなクエリー列が導かれる。ステップＳ１０１では、例えばこのようなクエリー列を作成する。なお、作成するクエリーの個数（＝クエリー列の長さ）は事前に設定しておく。この数をT（クエリー列の長さ）として以下説明する。
【００１９】
次に、ステップＳ１０２では、ルートノードに学習パターンの全てを格納（設定）する。そして、ステップＳ１０３では、ルートノードをカレントノードとして設定する。ここで、「ルートノード」とはツリーの一番根元に存在するノードのことを言い、図２（ｂ）のノード２１１がルートノードに対応する。「カレントノード」とは学習過程および認識過程において現在処理しているノードを意味する。ステップＳ１０４では、図１（ｂ）に記述されたカレントノードを展開するサブルーチンを呼んで、このサブルーチンから処理が戻されたら学習過程は終了となる。なお、図２（ｂ）、（ｃ）のノード２１１から２１９の番号順にカレントノードは移動することとなる。
【００２０】
図１（ｂ）の参照によりノードを展開するサブルーチンの処理の流れを説明する。まず、ステップＳ１０５で、カレントノードがnullノードかleafノードかが判断される(nullノード及びleafノードの定義は後述する。)。そして、カレントノードがnullノードかleafノードであった場合（Ｓ１０５−Ｙｅｓ）、図１（ｂ）のサブルーチンは終了する。
【００２１】
カレントノードに学習パターンが全く含まれない場合、そのノードはnullノードとする。また、カレントノードに残っている学習パターンの集合がある一定条件を満たした場合、そのノードをleafノードとする。ここで、ある一定条件とは、例えば、「カレントノードに存在するクラスがK種類（例えばＫ=１０）以下だった場合」という条件などが考えられる。この条件でＫ＝１に設定した場合は、「カレントノードが純粋に１つのクラスしか含まない」という条件となる。また、カレントノードに存在する学習パターンから情報量エントロピーを計算し、その値がある閾値以下だった場合とすることもできる。なお、この条件で閾値を０とすると、上述の「カレントノードが純粋に１つのクラスしか含まない」条件と同じとなる。
【００２２】
図２（ｂ）、（ｃ）の例では、ノード２１３、２１５、２１９がleafノードであり、２１６、２１８がnullノードとなる。カレントノードにノード２１３、２１５、２１６、２１８、２１９が設定された場合、ステップＳ１０５における判断は「Ｙｅｓ」となり、図１（ｂ）の処理は終了する。nullノードおよびleafノードは、ターミナルノードとも呼ばれ、残った学習パターンの情報が保持される。例えば、パターン認識の目的がクラス判定の場合、ターミナルノードには各クラスの存在確率が保持される。なお、前述した通り、leafノードの条件が「カレントノードが純粋に１つのクラスしか含まれない」であった場合、その残ったクラスの番号を情報として格納してもよい。一方、パターン認識の目的がいわゆる回帰の場合、ターミナルノードにはある推定値、もしくは推定ベクトルが格納される。
【００２３】
ステップＳ１０５−Ｎｏの場合、ステップＳ１０６以降のサブルーチンの処理が続き、カレントノードを展開する。カレントノードを展開する処理はステップＳ１０６〜Ｓ１１３のステップにより実行される。この中でステップＳ１１２の処理では、図１（ｂ）のサブルーチンが再帰的に呼び出される。この処理の結果、学習パターンの集合が再帰的に分割されることとなる。
【００２４】
ステップＳ１０６で、カレントノードの展開に先立ち、まずステップＳ１０１で作成されたクエリー列からカレントノードの深さ（階層）に応じてクエリーを読み込む。例えば、図２（ｂ）では、ルートノード（ノード２１１）がカレントノードとなっており、ルートノードの深さは「０」なので、クエリー列の０番目のクエリーが読み込まれる。
【００２５】
次に、ステップＳ１０７で、クエリーの読み込みに成功したか否かの判断が行われる。読み込みに成功したと判断された場合（Ｓ１０７―Ｙｅｓ）、処理はステップＳ１０９に進められ、ステップＳ１０７において、読み込みに成功していないと判断された場合（Ｓ１０７−Ｎｏ）、処理はステップＳ１０８に進められる。
【００２６】
ステップＳ１０７におけるクエリーの読み込みが成功と判断されるケースとは、カレントノードの深さがステップＳ１０１で作成したクエリー列の長さ未満になり、読み込むべきクエリーが存在した場合を意味する。例えば、同じ深さのノード２１２、２１７には、同じクエリーが読み込まれる。
【００２７】
ステップＳ１０７におけるクエリーの読み込みが失敗と判断されるケースとは、カレントノードの深さがステップＳ１０１で作成したクエリー列の長さ以上になり、読み込むべきクエリーが存在しなかった場合を意味する。具体的には、カレントノードの深さが、クエリー列の長さ（Ｔ）以上になった場合、ステップＳ１０７の判断結果は「Ｎｏ」になり、処理はステップＳ１０８に進められる。
【００２８】
ステップＳ１０８では、クエリーの読み込みに失敗したときの処理が実行される。具体的には、カレントパターン集合に基づいて新たなクエリーを作成するための処理が実行される。図２（ｂ）の例では、クエリー列の長さＴ＝２としており、カレントノードが２１２と２１７の場合、深さが「１」となるため、ステップＳ１０７では、クエリーの読み込みに成功したと判断される（Ｓ１０７−Ｙｅｓ）。
【００２９】
一方、ノード２１４の場合、深さが「２」となるため、クエリーの読み込みに失敗する。この時、ステップＳ１０８の処理が実行され、新たなクエリーが作成される。ステップＳ１０８の処理は、例えば、ノード毎に適したクエリーを選びたい場合などにその効果を発揮する。クエリーの選び方としては情報量エントロピーを基準にした相互情報量を用いるやり方や、非特許文献１に記載されているＧｉｎｉ係数を用いたやり方などがある。また、ステップＳ１０８の処理では最適なクエリーを選ぶ必要性はなく、クエリーの選び方にステップＳ１０１で説明したようなランダム性を取り入れても良い。
【００３０】
ステップＳ１０９では、読み込みにより設定されたクエリーに基づいてカレントノードに残っている学習パターン（カレントパターン集合）を分割する。この分割の数Ｎは一般的にはカレントノードによって異なっていても良いが、通常、全てのノードで同じ値が用いられる。例えば、Ｎ=２となる場合は、いわゆる２分木が作成され、図２（ｂ）のような形態の分類木（分割枝）となる。ステップＳ１１０〜Ｓ１１３の処理は、分割された分割枝ごとに実行されるループであり、分割枝がＮ個の場合に、Ｎ回のループで処理が繰り返される。ステップＳ１１１で分割枝iをカレントノードに設定し、ステップＳ１１２で図１（ｂ）のサブルーチンが再帰的にされる。
【００３１】
図２（ｂ）は作成された分類木の例であり、太い横線２５０の上がテーブル部分で、横線２５０の下の四角で囲った部分がツリーの部分となる。ノード番号で示すとノード２１１、２１２、２１７の部分がテーブルで、それ以外のノードがツリーとなる。ここで、「テーブル」と「ツリー」と呼び方を分けて明確に区別している。その生成（作成）過程をフローチャート上で示すと、「テーブル」と呼んでいる部分は、図１（ｂ）のステップＳ１０７、Ｓ１０９の順で実行され、「ツリー」と呼んでいる部分は、図１（ｂ）のステップＳ１０７、Ｓ１０８、Ｓ１０９の順番で処理が実行される。通常は、ノード２１４、２１５、２１６で構成される形となっているが、ノード２１３、２１８、２１９はルートノードがnullノードまたはleafノードとなっている特殊なツリーの形式となっている。
【００３２】
テーブルの長さ（深さ（階層）とも呼ぶ）がＰで、それぞれの分岐の個数がRだとするとテーブルの個々の要素（エンティティ）はＲP個あることになる。図２（ｂ）の場合、深さがＰ=２で分岐もＲ=２なので４つ（＝２２）のエンティティがあり、それぞれのエンティティには四角で囲った部分のツリーが保持されている。図２（ｂ）のノード２１２とノード２１７は同じクエリーを保持するので同一視することができる。それをまとめて表示したのが図２（ｃ）である。木構造のノードのうち、クエリー列の長さに対応する階層までのノードについて、各階層のノードを共通化したノードとしてまとめることにより、木構造が変更される。図２（ｃ）においては、ノード２１７とノード２１２とを１つにまとめて共通化したノード２１２として表記している。あるクエリーを入力すると、その結果、Ｒ通り（＝分岐の個数）の可能性が出てくる。これを枝で表示したのが図２（ｂ）であり、枝では明示的に表示していないのが図２（ｃ）といえる。図２（ｃ）の表現方法にすると、テーブルとツリーの部分がより明確になる。Ｐ個のクエリー列の結果に応じて、ＲP個の分岐（＝テーブルのエンティティ）が存在する。認識の過程に先立ち、クエリー列を構成するクエリーの読み込みを行い、読み込まれたクエリーと、変更された木構造とを用いてパターンの認識処理が実行される。
【００３３】
図３（ａ）、（ｂ）の参照により、新規の未知パターンを図１（ａ）、（ｂ）で作成した木構造の辞書を用いて認識する過程を説明する。まず、ステップＳ３０１でクエリー列を構成するクエリーが読み込まれる。図２（ｂ）の場合、２つのクエリーが読み込まれる。このように、本発明の実施形態にかかるパターン認識処理では、クエリー列の深さでクエリーが一意に決定されているので、このクエリーの先き読みを行うことが可能となる。最近のＣＰＵの進化により、クエリー先き読みができればそれらをまとめて処理する技術、例えばSIMD（Single Instruction／Multiple Data）などの技術を用いることができるようになる。結果的に本実施形態にかかるパターン認識方法は、超高速な演算処理が可能になる。次に、ステップＳ３０２では、先のステップＳ３０１で読み込まれたクエリー列を構成するクエリーに基づいてツリー（tree）番号を計算する。図２（ｂ）に示すツリーの場合、ツリー（tree）番号は０番から３番までとなる。それぞれのサブツリーのルートノードは２１３（tree番号０）、ノード２１４（tree番号１）、ノード２１８（tree番号２）、ノード２１９（tree番号３）となる。そして、計算された番号のツリー（tree）を読み込み（Ｓ３０３）、そのツリー（tree）をたどる（Ｓ３０４）。ここで、ツリー（tree）をたどるサブルーチンを図３（ｂ）に示す。まず、ステップＳ３０５でカレントノードをルートノードに設定する。次に、カレントノードがターミナルノード（nullノードもしくはleafノード）であるかどうかの判断を行う。もしカレントノードがターミナルノードであった場合（Ｓ３０６−Ｙｅｓ）、認識結果にそのターミナルノードの情報をセットして（Ｓ３０９）、サブルーチンを終了する。
【００３４】
もしカレントノードがターミナルノードでない場合（Ｓ３０６−Ｎｏ）、カレントノードに格納されているクエリーに基づいて枝番号を計算する（Ｓ３０７）。そして、計算された枝番号の子ノードをカレントノードに設定する（Ｓ３０８）。続いて、処理をステップＳ３０６に戻して、同様の処理を繰り返す。
【００３５】
図３（ｂ）に示したサブルーチンでは、ルートノードからnullノードかleafノードに到達するまでツリー（tree）をたどることになる。認識過程（図３（ａ）、（ｂ）で示したフローチャート）で用いる木構造の判別器の実装例は、例えば、図７（ｂ）の７１０、７１１のようになる。図７（ｂ）の７１０にあるようにＰ個のクエリーからなるクエリー列をまず読み込む（図３（ａ）のＳ３０１）。そしてクエリーに基づいてツリー（tree）番号を計算する（図３（ａ）のＳ３０２）。その結果、計算されたツリー（tree）番号の判別器を全部でＲP個ある判別器（図７（ｂ）のテーブル７１１）から読み込む（図３（ａ）のＳ３０３）。そして、その判別器を用いて新規パターンを解析する（図３（ａ）のＳ３０４）。
【００３６】
本実施形態によれば、高速に、かつ、高精度にパターン認識が可能な情報処理技術の提供が可能になる。あるいは、パターン認識の情報処理に必要となるディスク、また、メモリの容量を削減することができる。
【００３７】
（第２の実施形態）
次に、図４（ａ）の参照により第２の実施形態における学習過程の処理の流れを説明し、図４（ｂ）の参照により第２の実施形態における認識過程の処理の流れを説明する。第１の実施形態では、１つの木構造の判別器を作成する方法、および、１つの木構造の判別器を用いてパターンを解析する方法を説明した。これに対して、第２の実施形態では複数の木構造の判別器を生成する方法、および、複数の木構造の判別器を用いてパターンを解析する方法を説明する。木構造の判別器の個数をＬ個とする。通常、Lは１０〜１００ぐらいの数になるが、２つ以上の任意の定数となる。Lを大きくすると辞書サイズが大きくなり、認識率は向上する。一方、判別器の個数Lを小さくすると辞書はコンパクトになるが、認識率は低下する。
【００３８】
ステップＳ４０１〜Ｓ４０３の処理を、ツリー（tree）番号が１からLまで繰り返すことより、学習過程の処理が実行される。学習過程の処理ループの中で、図１（ｂ）の学習過程がサブルーチンとして呼び出される（Ｓ４０２）。学習過程の処理ループの中でＳ４０２のサブルーチンの呼び出しは、全体の処理に対して独立に行うことが可能である。つまり、ステップＳ４０１〜Ｓ４０３の学習過程の処理ループは単純にマルチスレッド、マルチタスクで行ってもよい。また、容易に複数の計算機を用いて並列に実行することも可能である。図４（ａ）で示した複数（Ｌ個）の木構造の判別器を作成する方法は、並列計算向きであり、並列度を高くすると極めて高速に実行できると言える。次に、図４（ｂ）の認識過程では、判別器（tree）番号が１からLまでのループ（Ｓ４０４〜Ｓ４０６）の後、ステップＳ４０７において、最終的に得られたL個の判別器の結果を集計する。認識過程のループ処理の中で図４（ａ）の木構造を用いた学習過程がサブルーチンとして呼び出される（Ｓ４０５）。
【００３９】
ステップＳ４０７では、L個の判別器の認識結果を集計し、最終的なパターン認識結果を得る。集計方法としては、例えば、パターン認識のタスクがクラス判定タスクだとすると、判別器の結果は各クラスの存在確率ベクトルとなる。この時、ステップＳ４０７の集計としては、L個の存在確率ベクトルの相加平均や、相乗平均などが考えられる。図４（ｂ）の認識過程も図４（ａ）の学習過程と同様に並列処理に向いており、並列度を高くすると非常に高速に処理することが可能である。
【００４０】
（第３の実施形態）
第３の実施形態では第１の実施形態で説明した木構造の判別器を全部テーブル化する。そのために、まず図１（ａ）のステップＳ１０１におけるクエリー列の長さTを十分大きくする必要がある。第１の実施形態の説明では、例示的にクエリー列の長さをＴ＝２として説明したが、例えば、本実施形態では、Ｔ＝１００と設定することが可能である。図２（ｂ）で説明した学習結果である木構造は、Ｔ＝２の条件で作成したものである。しかし、結果的に第３階層（ルートノードが１階層だとして）のノードは、ノード２１４を除いた全部（３つ）がターミナルノードになっている。よって、例えば、Tが３以上に設定したとしても図２（ｂ）の形式の木構造が生成されることになる。以下、図２（ｂ）は十分大きなTを設定して、図１（ａ）、（ｂ）のフローチャートに従って作成された木構造だと仮定して説明する。
【００４１】
図５（ａ）−（ｄ）は図２（ｂ）の全てのテーブル化を例示する図である。図５（ａ）−（ｄ）は表示上ツリーの形をしているが、同じ階層（深度）のノードでは同じクエリーを持つので実質的にはテーブルとなる。そして、階層の数は３で分岐が２なので、テーブルのエンティティの数は８（＝２３）となる。
【００４２】
末端ノードの下に書かれた数字は図２（ｂ）、（ｃ）で示したノード番号を示しており、同じ情報が保持される。ハッチングを付したノードはnullノードを意味する。ここで各ノードが保持する情報とは、第１の実施形態で説明した通り、各クラスの存在確率ベクトルであったり、回帰の際の推定値だったりする。なお、実装形態としては、末端ノード（＝テーブルのエンティティ）の保持する情報へのポインタを各ノードが保持すると効率が良い。
【００４３】
図５（ａ）は図２（ｂ）を全部テーブル化した例であり、図５（ｂ）は図２（ｂ）のnullノードの部分をその親ノードで置換してテーブル化した例を示す。図５（ａ）−（ｄ）の例で重要なことは、同じ情報を保持する末端のノード（＝テーブルのエンティティ）があることである。つまり、本実施形態で作成されるテーブルは冗長な情報を保持していることになる。結果的に本実施形態では、ディスク容量、もしくはメモリ容量は多く必要とするが、非常に高速に認識できるという効果が得られる。図５（ａ）、（ｂ）のテーブルをよりわかりやすく図示したのが図５（ｃ）、（ｄ）である。これは図２（ｂ）、（ｃ）の関係と全く同じで、同じ内容のクエリーを同一視して表示したものとなる。図５（ａ）に対応するのが図５（ｃ）であり、図５（ｂ）に対応するのが図５（ｄ）である。テーブルの長さ（深さとも呼ぶ）がPで、それぞれのノードの分割数（分岐の個数）がRだとするとテーブルの個々の要素（エンティティ）はＲP個あることになる。図５（ａ）−（ｄ）の場合、深さがＰ＝３で分岐がＲ=２なので８＝２３の数のエンティティがある。認識過程においては、３個のクエリーを読み込むだけで最終的なエンティティが計算できるので非常に高速に処理することができる。
【００４４】
図６（ａ）、（ｂ）の参照により、図５（ａ）−（ｄ）のテーブルを作成する手順を説明する。まず、ステップＳ６０１において、図１（ａ）、（ｂ）のフローチャートをサブルーチンとして呼び出しツリー（tree）を作成する。この時、前述した通り、ステップＳ１０１のクエリー列は十分大きな長さを用意する。次に、ステップＳ６０２において、先のステップＳ６０１で作成されたツリー（tree）の最大深度（Ｐ）を計算する。図２（ｂ）の木構造の場合、最大深度（Ｐ）＝３となる。
【００４５】
そして、エンティティ番号iのループ処理としてステップＳ６０３〜Ｓ６０６が実行される。分岐の数をＲとすると、エンティティ番号iは０〜ＲP−１の範囲を動く。ここで、エンティティ番号iが０から開始するのは後で説明を簡単にするためであり、１〜ＲPとしても本質的には変わらない。ステップＳ６０４で、エンティティ番号iに対応するターミナルノード（nullノードまたはleafノード）を計算する。ステップＳ６０４の処理において、図１（ｂ）のサブルーチンが呼び出される。
【００４６】
図１（ｂ）のサブルーチンから処理が戻されたら、計算されたターミナルノード（nullノードまたはleafノード）に応じた情報がエンティティに格納される（Ｓ６０５）。
【００４７】
図６（ｂ）のステップＳ６０７、Ｓ６０８、Ｓ６１０、Ｓ６１１と、図３（ｂ）のステップＳ３０５、Ｓ３０６、Ｓ３０８、Ｓ３０９と、はそれぞれ同じ処理となる。図３（ｂ）のサブルーチンと異なっているのは、ステップＳ６０９の処理のみである。この処理はエンティティ番号iから枝番号を計算する処理である。説明を簡単にするために、エンティティ番号iをＲ進数の数字だとすると、iはＰ桁の数字となる。そして、カレントノードの深さをｄとすると、iのｄ桁目の数字が枝番号となる。
【００４８】
図６（ａ）のステップＳ６０３〜Ｓ６０６のループを実行した結果が図５（ａ）−（ｄ）の数字で示した部分となる。図５（ａ）では、図２（ｂ）で示した８つのノード２１３、２１３、２１５、２１６、２１８、２１８、２１９、２１９が得られる。一方、図５（ｂ）では、図２（ｂ）で示した８つのノード２１３、２１３、２１５、２１４、２１７、２１７、２１９、２１９が得られる。
【００４９】
次に、図７（ａ）、（ｂ）の参照により本実施形態の認識過程を説明する。図７（ｂ）の７１２に示すようにＰ個のクエリーからなるクエリー列をまず読み込む（図７（ａ）のＳ７０１）。そしてクエリーに基づいてエンティティ番号を計算する（図７（ａ）のＳ７０２）。その結果、全部でＲP個あるエンティティ（図７（ｂ）の７１３）の中から計算された番号のエンティティ情報を読み込む（図７（ａ）のＳ７０３）。
【００５０】
本実施形態によれば、高速に、かつ、高精度にパターン認識が可能な情報処理技術の提供が可能になる。あるいは、パターン認識の情報処理に必要となるディスク、また、メモリの容量を削減することができる。
【００５１】
（第４の実施形態）
図８（ａ）、（ｂ）の参照により、パターンとして画像を扱う場合を説明する。本実施形態では、１枚の学習画像からＭ枚の部分画像が抽出される。これを部分画像集合と呼ぶ。この部分画像集合を構成する部分画像同士は重なりがなくても良いが、重なりがあるように網羅的に元の学習画像から抽出されることが望ましい。
【００５２】
例えば、学習画像のサイズが１００×１００ピクセルで、部分画像のサイズが５０×５０ピクセルだとする。ピクセルとピクセルの中間の位置（いわゆるサブピクセル）を考慮に入れないとすると、１枚の学習画像から抽出される全部分画像は２６０１（＝５１×５１）枚となる。なお、重なりのない部分画像を抽出したとすると全部で２×２＝４枚の部分画像が得られる。図８（ａ）に示す部分画像集合は２６０１枚ある全部分画像中の出来るだけ多くの部分画像からなることが望ましい。最終的な学習部分画像群としては、同じクラスの学習部分画像がそれぞれＭ枚ずつ、全部でＭｘＮ枚の学習部分画像が得られる。そして、この学習部分画像群を用いて２分木を作成していく（図８（ｂ））。
【００５３】
全部でＬ個分類木が存在するので、この分類木の作成はＬ回行われる。分類木作成の際、各分類木のノードでは、ランダムに２つのピクセルを選ぶ。そして、そのピクセルの輝度比較を行うことにより、学習部分画像の集合を再帰的に分割していく。なお、本実施形態においてはランダムに２つのピクセルを選んだが、部分画像中の任意の矩形領域をランダムに２つ選んで、その矩形領域の平均輝度を比較することによって枝分かれを行ってもよい。
【００５４】
また、矩形ではなく予め用意した複数のマスクパターンを用いてもよい。この時、部分画像中の任意の位置にある任意の種類のマスクパターンをランダムに２つ選ぶ。そして、その領域の平均輝度を比較することによって集合を再帰的に分割する。この学習過程をフローチャートにしたものが図９（ａ）である。
【００５５】
ステップＳ９０１では、部分画像を取り出し学習パターン集合を作成する。この処理は、図８（ａ）の参照により説明した処理に対応する。そして、ステップＳ９０２では、ツリー（tree）のアンサンブルを作成する。この処理は、図８（ｂ）で説明した処理に対応するもので、具体的には図４（ａ）の処理をサブルーチンとして呼び出す。なお、図８（ａ）、（ｂ）の模式図では１枚の学習（登録）画像から抽出されるＭ枚の部分画像を全て同一視することで、学習過程におけるクラスの数がＮだとした。これに対して、Ｍ枚の部分画像を学習画像中のオフセット位置を用いて区別し、全部でＭｘＮ個（種類）のクラスがあるとすることもできる。
【００５６】
次に、図９（ｂ）の参照により本実施形態の認識過程の処理の流れを説明する。一例として、新規入力画像のサイズが１２８０×１０２４、部分画像のサイズを５０×５０とする。この場合、サブピクセルを考慮しなければ、新規入力画像の中に部分画像が１２００２２５（１２３１×９７５）個存在することになる（Ｘ＝１２８０−５０＋１、Ｙ＝１０２４−５０＋１）。基本的に、ステップＳ９０３からＳ９０８の処理は、１２００２２５回だけ繰り返されるループとなる。但し、必ずしも１２００２２５回繰り返しを実行する必要はなく、途中スキップして実行することによって高速化してもよい。
【００５７】
部分画像のループの中でツリー（tree）番号のループ（Ｓ９０５〜Ｓ９０７）が実行される。本処理では、２重のループが実行されることになるが、２つのループはお互い独立なので、ループの内側外側を入れ替えても良い。ループの一番深い処理ステップＳ９０６において、i番目の判別器が実行される。本処理ステップでは、図３（ａ）、（ｂ）のフローチャートがサブルーチンとして呼び出される。最後に、ステップＳ９０９において、判別結果の集計を行う。この結果、１２８０×１０２４のサイズの入力画像の中に存在する１００×１００のサイズの学習画像が抽出されることとなる。集計方法として、それぞれのクラスの存在確率ベクトルの相加平均、相乗平均などの処理を行うこともできる。また、前述の部分画像の学習画像中での位置を記録したオフセットを用いて、学習画像の存在位置を求めることもできる。
【００５８】
本実施形態によれば、高速に、かつ、高精度にパターン認識が可能な情報処理技術の提供が可能になる。あるいは、パターン認識の情報処理に必要となるディスク、また、メモリの容量を削減することができる。
【００５９】
（第５の実施形態）
第１の実施形態ではテーブルとツリーを組み合わせることによって高速、高精度なパターン認識を実現した。また、第３の実施形態では１つの大きなテーブルを用いて高速、高精度なパターン認識を実現した。第１の実施形態と第３の実施形態を比べると、第１の実施形態の方が速度を犠牲にして、よりコンパクトな辞書を作成することができるという利点がある。これに対して、第３の実施形態は、第１の実施形態と比べるとコンパクト性を犠牲にして、より高速な判別器を実現できるという利点ある。本実施形態では、異なるテーブル生成プロセスにより生成された複数のテーブルを組み合わせることによって、第１の実施形態と第３の実施形態の良い点を備える判別器を作成する構成を提供する。
【００６０】
図１０（ａ）に元となるツリーを例示的に示し、図１０（ｂ）にそのツリーを元に作成された組み合わせテーブルを例示的に示す。図１０（ａ）の１０１１から１０２３はツリーを構成するノードを示している。なお、図１０（ａ）で示したツリーは図２（ｂ）で示したツリーより１段深くなっている。図２（ｂ）と同じように、末端にあるノードのうち、白い丸で示したノードはleafノード(リーフノード）を表し、斜線で塗りつぶしたノードはnullノード(ヌルノード）を表す。そして、末端ではない、つまり枝を持つノードはインターナルノードを示しており、そのノードで用いるクエリーに従ってそれぞれの枝への分岐が生じる。
【００６１】
第５の実施形態および第６の実施形態において、説明を簡単にするために１つのリーフノードには１つの学習パターンが格納されているとする。そして、例えば、リーフノード１０１３に格納されている学習パターンを学習パターン「Ｐ１０１３」のように先頭にＰを付けて表記する。この条件のもとでは、結局、図１０（ａ）で示したツリーを作成する時点で４つの学習パターンＰ１０１３、Ｐ１０１６、Ｐ１０１７、Ｐ１０２３が学習データとして準備されていることになる。なお、一般的には第１の実施形態で説明したように１つのリーフノードに格納される学習パターンは１つに限定されるものではなく、複数の学習パターンの情報を格納することも可能である。
【００６２】
図１０（ａ）に示したツリーの作成方法は第３の実施形態で説明した方法と同じである。つまり、予め多くのクエリーを生成した後で、そのクエリーに基づいてツリーを作成する。この結果、ツリーに存在する深さが同じノードにおけるクエリーは全て共通になる。具体的にはノード１０１２とノード１０１９は同じクエリーを使う。また、ノード１０１４とノード１０２１は同じクエリーを用いる。
【００６３】
太線１０５０は、最初にテーブル化するためのノード間の境界を示し、図２（ｂ）における太線２５０と同じである。まず太線１０５０で示した境界で、クエリーが２段のテーブルが作成される。この結果、図１０（ｂ）のノード１０１１、ノード１０１２を囲む１１００で示したテーブル１１００が作成される。テーブル１１００のことをルートテーブルと呼ぶ。なお、太線１０５０の位置、すなわち、ルートノード１０１１から数えて２段目という位置は任意である。予め辞書化の効率の良い位置をユーザが決めても良いし、最も効率の良い段数を計算して決定しても良い。
【００６４】
第１の実施形態（図２（ｂ））においては、このルートテーブルの末端に４つのツリーがつながっていた。これに対して本実施形態では、ルートテーブルに１１０１〜１１０４の四角で示した４つのテーブルがつながっている。なお、テーブル１１０１とテーブル１１０３は、それぞれリーフノード１０１３とヌルノード１０２０からなるクエリーが存在しないテーブルとなる。通常、クエリーが存在しないテーブルはテーブルとは呼ばない。しかし、本実施形態を理解しやすいように、便宜的にテーブル１１０１とテーブル１１０３のようなクエリーが存在しないテーブルも０段のテーブルと呼ぶ。これは、第１の実施形態でターミナルノードのみからなるツリーもツリーと呼んだことに対応する。また、同じ命名規則で、図１０（ｂ）のテーブル１１０２をクエリー２段のテーブル、テーブル１１０４をクエリー１段のテーブルと呼ぶ。そして、テーブル１１０２を作成する際にクエリーの境界となるのは図１０（ａ）の太線１０５１で、テーブル１１０４を作成する際にクエリーの境界となるのは太線１０５２となる。なお、太線１０５１及び太線１０５２の位置は末端のリーフノードの深さの位置となる。
【００６５】
テーブル１１０２の作成規則は図５（ｃ）で示した生成規則と同じである。つまり図５（ｃ）において、ヌルノード２１８がコピーされて２つ存在するのと同じように、ヌルノード１０１８がコピーされて２つ存在する。例えば、これを図５（ｄ）で示した生成規則に準じて作成する場合、図１０（ｂ）の２つのヌルノード１０１８はノード１０１４の情報で置換されることとなる。
【００６６】
図１１に本実施形態の処理の流れを説明するフローチャートを示す。まずルートテーブル（図１０（ａ）の太線１０５０より上の部分、もしくは図１０（ｂ）の四角で囲った１１００の部分）を作成する。ルートテーブルの作成に際して、ステップＳ１１０１において予め決められた数のクエリー（クエリー列）を作成する。例えば、図１０（ｂ）の例なら、ルートテーブルの段数は２なので、ステップＳ１１０１で２つのクエリー列を作成する。そしてステップＳ１１０２で、このクエリー列に基づき学習パターンを分割する（第１のテーブル生成プロセス）。
【００６７】
具体的に図１０（ａ）、（ｂ）の例を用いて説明すると、全ての学習パターン（Ｐ１０１３、Ｐ１０１６、Ｐ１０１７Ｐ、Ｐ１０２３）を含む集合が以下の４つの部分集合に分割される。４つの部分集合は、学習パターンＰ１０１３を含む集合、学習パターンＰ１０１６、Ｐ１０１７を含む集合、空集合、学習パターンＰ１０２３を含む集合である。
【００６８】
一般的には、１つのクエリーによって分割される部分集合の数（ツリーにおける枝の数と等価）をＲ、クエリーの数をＰとする。すると、ルートテーブルにおいて分割される学習パターンの部分集合の数はＲPとなる。図１０（ａ）、（ｂ）の例でいうと、Ｒ＝２かつＰ＝２なので、分割された学習パターンの部分集合の数は上述の通り２2＝４となる。
【００６９】
次に、全ての学習パターンの部分集合に対して、それを学習パターンとみなして、テーブルを作成していく（第２のテーブル生成プロセス）。これがステップＳ１１０３〜ステップＳ１１０５までのルーチンとなり、このループの中のステップＳ１１０４でそれぞれのテーブルが作成される。図１０（ｂ）の例でいうと、テーブル１１０１〜テーブル１１０４が作成される。ステップＳ１１０４のサブルーチンは具体的には図６のフローチャートが呼び出される。
【００７０】
なお、図１０、図１１を用いて説明してきた実施形態は、テーブルを２層組み合わせた例となる。この層の数は２に限定されるものではなく、３以上の層であっても本実施形態の本質は変わらない。
【００７１】
（第６の実施形態）
これまで説明してきた実施形態では、まずツリーを作成しておいてからそれに対応するテーブルを作成した。この方法によって性能を保ったままより高速なパターン認識アルゴリズムが実現できる。これに対して、本実施形態では最初から直接テーブルを作成し、次にそれを変換したテーブルを作成する。この方法によって高速性を保ったままより高性能なパターン認識アルゴリズムを実現する。
【００７２】
図１２に本実施形態における処理の流れを説明するフローチャートを示し、図１３（ａ）、（ｂ）に作成されるテーブルを例示的に示す。なお、図１３（ａ）、（ｂ）で示したテーブルの例は図１０（ａ）、（ｂ）で示した例と全く同じ学習パターンを用いて作成されたものとする。すなわち、図１３（ａ）、（ｂ）で示したテーブルは学習パターンＰ１０１３、Ｐ１０１６、Ｐ１０１７、Ｐ１０２３を用いて作成されている。
【００７３】
まずステップＳ１２０１において、予め決められた数のクエリー列を作成する。図１３（ａ）、（ｂ）の例でいうと４つのクエリー列を作成する。なお、図１３（ａ）の四角で囲んだ４つのクエリー列１３５１は図１０（ａ）におけるノード１０１１、ノード１０１２、ノード１０１４、ノード１０１５で用いられるクエリー列と同じとし、同じ番号を振っている。
【００７４】
次にステップＳ１２０２において、先のステップで作成されたクエリーに列に基づいて初期テーブルを作成する。この初期テーブルの例が図１３（ａ）で図示したテーブルとなる。なお、図１３（ａ）において白丸で示したエンティティは学習パターンが格納されているエンティティを意味し、斜線で塗られたエンティティは学習パターンが全くないヌルエンティティを意味する。
【００７５】
この結果、作成されるエンティティの数は一般的にはＲPとなる。図１３（ａ）の例ではＲ＝２、Ｐ＝４となっており、結果的に２4＝１６個のエンティティ（１３０１〜１３１６）が作成される。なお、図１３（ａ）で示した初期テーブルは図１０（ａ）で示したツリーに準拠して書かれている。具体的には、リーフノード１０１３に相当するエンティティが１３０２で、リーフノード１０１６に相当するエンティティが１３０５となる。そして、リーフノード１０１７に相当するエンティティが１３０６で、リーフノード１０２３に相当するエンティティが１３１６となる。この初期テーブルでは１６個あるエンティティのうち１２個がヌルエンティティとなっている。
【００７６】
ここで重要な事は、図１０（ａ）では学習パターンが１つとなったらクエリーが実行されないのに対して、図１３（ａ）ではノード１０１１、１０１２、１０１４、１０１５で示した４つのクエリーが必ず実行される事である。
【００７７】
クエリーにおける左分岐を０で表し、右分岐を１で表したとすると、エンティティ１３０１〜１３１６は００００から１１１１までの４ケタの２進数に対応する。図１４は、クエリーにおける分岐の２進法表示とエンティティ番号との対応関係を表示する図である。左のカラムが２進数表記の数字で、右のカラムがそれに対応したエンティティ番号となる。例えばエンティティ１３０２の２進数表示は０００１となり、最初の３つのクエリーの分岐は左で、最後の１つのクエリーの分岐が右だったということを意味する。これに対して、図１０（ａ）では最初の２回の分岐で学習パターンが１つになったので、それ以降のクエリーは実行されていない。
【００７８】
また、エンティティ１３１６の2進数表示は１１１１となり、４つのクエリーの分岐は全て右だったということを意味する。これに対して、図１０（ａ）では最初の３回の分岐で学習パターンが１つになったので、最後の４つ目のクエリーは実行されていない。
【００７９】
図１２のフローチャートに戻り説明すると、ステップＳ１２０３からステップＳ１２１５までのルーチンによって初期テーブルを変換した最終的なテーブルが作成される。具体的には図１３（ｂ）で示したような全てのエンティティに学習パターンが格納されているテーブルが作成される。
【００８０】
ステップＳ１２０３からステップＳ１２１４までのループで初期テーブルを構成する全てのエンティティがチェックされる。まずステップＳ１２０４で当該エンティティがヌルかどうかがチェックされる。もしヌルでないエンティティである場合、即ち学習パターン情報を持ったエンティティである場合、ステップＳ１２１４までジャンプして次のエンティティに処理を進める。
【００８１】
ステップＳ１２０４の判定で、当該エンティティがヌルであった場合、ステップＳ１２０５からステップＳ１２１３までのルーチンが実行される。ここでアルゴリズムを説明するために、テーブルの階層と近傍エンティティの概念を説明する。ステップＳ１２０５とステップＳ１２０６で使っている「階層」という言葉は、テーブルの階層のことを意味する。
【００８２】
テーブルの階層とは、テーブルを構成するクエリーの上から下への階層のことを意味する。具体的には図１３（ｂ）で示したテーブルなら全部で４階層あって、１０１１、１０１２、１０１４、１０１５で示した４つのクエリーノードに対応する。以下、テーブルの階層番号とこれらのノードの番号を同じ番号を使って説明する。
【００８３】
近傍エンティティとは、テーブルの中で論理的に近いエンティティを意味する。ここで“論理的に近い”とは、“当該階層以下の階層がなかった場合に同一のエンティティとなる”という意味である。前述した２進法表記を用いて説明すると、上位のビットが同一の数字になることを意味する。
【００８４】
具体的には、図１３（ａ）のエンティティ１３０１の階層１０１５に関する近傍エンティティはエンティティ１３０２となる。２進法表記で説明すると、エンティティ１３０１とエンティティ１３０２はともに上位３ビットが「０００」となるからである。
【００８５】
また、エンティティ１３０１の階層１０１４に関する近傍エンティティはエンティティ１３０２、エンティティ１３０３、エンティティ１３０４となる。２進法表記で説明すると、エンティティ１３０１〜１３０４はともに上位２ビットが「００」となるからである。
【００８６】
また、例えば、エンティティ１３０７の階層１０１５に関する近傍エンティティはエンティティ１３０８となる。２進法表記で説明すると、エンティティ１３０７とエンティティ１３０８はともに上位３ビットが「０１１」となるからである。
【００８７】
また、エンティティ１３０７の階層１０１４に関する近傍エンティティはエンティティ１３０５、エンティティ１３０６、エンティティ１３０８となる。２進法表記で説明すると、エンティティ１３０５〜１３０８はともに上位２ビットが「０１」となるからである。
【００８８】
また、エンティティ１３０７の階層１０１２に関する近傍エンティティはエンティティ１３０１からエンティティ１３０６、エンティティ１３０８となる。２進法表記で説明すると、エンティティ１３０１〜１３０８はともに上位１ビットが「０」となるからである。
【００８９】
図１２のフローチャートに戻って説明する。ステップＳ１２０５からステップＳ１２１１までのループは、テーブルの階層を上へさかのぼるループとなる。図１３（ｂ）の例でいうと、階層１０１５から階層１０１１までさかのぼるループである。このループの中にあるステップＳ１２０６からステップＳ１２０９までのループは、当該階層に関する近傍エンティティを巡回するループとなる。ステップＳ１２０７で、当該階層に関する近傍エンティティがヌルかどうか１つずつチェックされる。そして、もしヌルでない近傍エンティティが存在したらステップＳ１２０８で有効近傍エンティティリストへ格納される。
【００９０】
当該階層に関する近傍エンティティが全てチェックされるとステップＳ１２０６からステップＳ１２０９までのループを抜けてステップＳ１２１０へ処理が移る。ステップＳ１２１０では有効近傍エンティティリストが空かどうかチェックする。もし空だった場合、ステップＳ１２１１へ進んだ結果、もし上の階層に上れるならステップＳ１２０５へ戻る。もし空でない場合は、ループを抜けて処理がステップＳ１２１２へ進む。なお、初期テーブルでヌルでないエンティティが１つでもあるなら、一番上の階層に関する近傍エンティティの中にヌルでないノードが少なくとも１つはあることになる。
【００９１】
ステップＳ１２１２では有効近傍エンティティリストからコピーする１個のエンティティを選び、ステップＳ１２１３において、先のステップで選ばれたエンティティ情報をコピーリストへ格納する。なお、ステップＳ１２１２でのエンティティ選び方は、基本的にランダムに選択することが可能であるが、エンティティ選び方として、何らかの評価関数を用いて選んでも構わない。
【００９２】
そして、ステップＳ１２１４のループを抜けた後、最後にステップＳ１２１５でコピーリストに格納されているエンティティ情報を初期テーブルの当該エンティティへコピーする。なぜこのような回りくどい方法を取るかというと、ステップＳ１２１３で初期テーブルへ直接コピーしていくとステップＳ１２０７におけるチェックが初期テーブルとは異なった情報を元にすることになるからである。なおステップＳ１２１５でコピーリストからコピーされるエンティティ情報は、実体であるメモリ情報でも良いし、また、ポインタでも良い。ポインタでも良い理由は、コピーされるエンティティ情報は必ず初期テーブルに存在する情報だからである。
【００９３】
以上説明してきたように、初期テーブルから有効近傍エンティティの情報をコピーすることによって、全てのエンティティが学習パターンの情報で満たされることになる。このことによりヌルエンティティに落ち、認識結果がないという状況がなくなり、より高性能なテーブルが作成できる。
【００９４】
（第７の実施形態）
これまで説明してきた実施形態を実現する装置の概略構成を図１５（ａ）、（ｂ）を用いて説明する。図１５（ａ）に判別器の作成装置（判別器作成装置）の構成例を示し、図１５（ｂ）に認識装置の構成例を示す。
【００９５】
図１５（ａ）に示すクエリー列作成部１５０１はクエリー列１５０２を作成する。クエリー列読み込み部１５０３は、クエリー列作成部１５０１で作成されたクエリー列１５０２を読み込む。クエリー列読み込み部１５０３により読み込まれたクエリー列１５０２は、更に、読み込み部１５０３からツリー作成部１５０５またはテーブル作成部１５０９に読み込まれる。ツリー作成部１５０５は、学習パターン１５０４を読み込まれたクエリー列１５０２に従って分割することによってツリー１５０６を作成する。次に、ツリー変更部１５０７は、ツリー作成部１５０５により作成されたツリー１５０６を元に、ツリー１５０６の一部、または全部をテーブル１５０８とする。テーブル作成部１５０９は学習パターン１５０４を読み込んだクエリー列１５０２に従って分割することによって初期テーブル１５１０を作成する。次に、テーブル変更部１５１１は、テーブル作成部１５０９により作成された初期テーブル１５１０をテーブル１５０８に変換する。
【００９６】
フローチャートと対応を取ると、クエリー列作成部１５０１が図１（ａ）のＳ１０１の処理に対応し、クエリー列読み込み部１５０３が図１（ｂ）のＳ１０６の処理に対応する。また、ツリー作成部１５０５は図１のＳ１０３からＳ１１３の処理に対応する。また、ツリー変更部１５０７は図６（ａ）のＳ６０２からＳ６１１の処理に対応する。また、テーブル作成部１５０９は図１２のＳ１２０２の処理に対応し、テーブル変更部１５１１は図１２のＳ１２０３からＳ１２１５の処理に対応する。
【００９７】
図１５（ｂ）に示す認識装置は、ツリー探索部１５１３およびテーブル探索部１５１４を中心に構成される。ツリー探索部１５１３およびテーブル探索部１５１４は、予め作成されているクエリー列１５０２を、クエリー列読み込み部１５０３を介して読み込む。そして、ツリー探索部１５１３およびテーブル探索部１５１４は、その読み込まれたクエリー列１５０２に基づき、クラスが未知のパターン１５１２を認識し、認識結果１５１５を導く。この時、ツリー探索部１５１３は図１５（ａ）の判別器の作成装置で作成されたツリー１５０６を用いる。また、テーブル探索部１５１４は図１５（ａ）の判別器の作成装置で作成されたテーブル１５０８を用いる。フローチャートと対応を取ると、ツリー探索部1513は図３（ｂ）のＳ３０５からＳ３０９の処理に対応する。また、テーブル探索部１５１４は図７（ａ）のＳ７０２からＳ７０３に対応する。
【００９８】
（その他の実施形態）
また、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア（プログラム）を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ（またはＣＰＵやＭＰＵ等）がプログラムを読み出して実行する処理である。
【符号の説明】
【００９９】
１５０１：クエリー列作成部、１５０２：クエリー列、１５０３：クエリー列読み込み部、１５０４：学習パターン、１５０５：ツリー作成部
【図１】
2015212990.tif 000003
【図２】
2015212990.tif 000004
【図３】
2015212990.tif 000005
【図４】
2015212990.tif 000006
【図５】
2015212990.tif 000007
【図６】
2015212990.tif 000008
【図７】
2015212990.tif 000009
【図８】
2015212990.tif 000010
【図９】
2015212990.tif 000011
【図１０】
2015212990.tif 000012
【図１１】
2015212990.tif 000013
【図１２】
2015212990.tif 000014
【図１３】
2015212990.tif 000015
【図１４】
2015212990.tif 000016
【図１５】
2015212990.tif 000017
【手続補正書】
【提出日】平成27年9月28日(2015.9.28)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
複数のクエリー列に従って学習パターンを分割することによってテーブルを生成する第１のテーブル生成手段と、
前記第１のテーブル生成手段によって生成されたテーブルを用いて分割された学習パターン集合を複数のクエリー列に従って更に分割することによってテーブルを生成する第２のテーブル生成手段と、
前記第１のテーブル生成手段で生成されたテーブルと前記第２のテーブル生成手段で生成されたテーブルとを組み合わせることでパターンを判別する判別器を作成する判別器作成手段と、
を備えることを特徴とする情報処理装置。
【請求項２】
前記複数のクエリー列を作成する作成手段を更に備え、
前記作成手段は、前記第１のテーブル生成手段で生成されたテーブルの段数と同数のクエリー列を作成することを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記第２のテーブル生成手段は、同じ情報を有する末端のノードを１つにまとめることによりテーブルを生成することを特徴とする請求項１または２に記載の情報処理装置。
【請求項４】
前記同じ情報を有する末端のノードはヌルノードであることを特徴とする請求項３に記載の情報処理装置。
【請求項５】
情報処理装置で実行される情報処理方法であって、
前記情報処理装置の第１のテーブル生成手段が、複数のクエリー列に従って学習パターンを分割することによってテーブルを生成する第１のテーブル生成工程と、
前記情報処理装置の第２のテーブル生成手段が、前記第１のテーブル生成工程で生成されたテーブルを用いて分割された学習パターンの集合を複数のクエリー列に従って更に分割することによってテーブルを生成する第２のテーブル生成工程と、
前記情報処理装置の判別器作成手段が、前記第１のテーブル生成工程で生成されたテーブルと前記第２のテーブル生成工程で生成されたテーブルとを組み合わせることでパターンを判別する判別器を作成する判別器作成工程と、
を有することを特徴とする情報処理方法。
【請求項６】
コンピュータを、請求項１乃至３のいずれか１項に記載の情報処理装置の各手段として機能させるためのプログラム。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】０００８
【補正方法】削除
【補正の内容】
【手続補正３】
【補正対象書類名】明細書
【補正対象項目名】０００９
【補正方法】変更
【補正の内容】
【０００９】
あるいは、本発明にかかる情報処理装置は、複数のクエリー列に従って学習パターンを分割することによってテーブルを生成する第１のテーブル生成手段と、
前記第１のテーブル生成手段によって生成されたテーブルを用いて分割された学習パターン集合を複数のクエリー列に従って更に分割することによってテーブルを生成する第２のテーブル生成手段と、
前記第１のテーブル生成手段で生成されたテーブルと前記第２のテーブル生成手段で生成されたテーブルとを組み合わせることでパターンを判別する判別器を作成する判別器作成手段と、を備えることを特徴とする。