(57)【要約】【課題】自己遷移を含む有向グラフを有限状態トランスデューサで取り扱う場合に、簡単な処理でデコードする。【解決手段】実施形態のデコーダは、有限状態トランスデューサを探索して、入力された信号列または信号の特徴量列に応じた出力記号列を出力するデコーダである。デコーダは、トークン操作部と、重複除去部とを備える。トークン操作部は、信号または特徴量を入力する毎に、探索中の経路の先頭の状態が割り当てられた複数のトークンのそれぞれを、有限状態トランスデューサに従って移動させる。重複除去部は、割り当てられた状態が同一であり、且つ、最後に通過した遷移に割り当てられた入力記号が同一である２以上のトークンの重複を除去する。【選択図】図７
2015121707.tif 000002
【特許請求の範囲】
【請求項１】
有限状態トランスデューサを探索して、入力された信号列または前記信号の特徴量列に応じた出力記号列を出力するデコーダであって、
前記信号または前記特徴量を入力する毎に、探索中の経路の先頭の状態が割り当てられた複数のトークンのそれぞれを、前記有限状態トランスデューサに従って移動させるトークン操作部と、
割り当てられた状態が同一であり、且つ、最後に通過した遷移に割り当てられた入力記号が同一である２以上のトークンの重複を除去する重複除去部と、
を備えるデコーダ。
【請求項２】
前記複数のトークンのそれぞれは、前記最後に通過した遷移の入力記号を保持する
請求項１に記載のデコーダ。
【請求項３】
前記複数のトークンのそれぞれは、割り当てられた状態を示す情報を保持する
請求項１に記載のデコーダ。
【請求項４】
前記有限状態トランスデューサのそれぞれの状態には、互いに異なる番号が割り当てられており、
前記複数のトークンのそれぞれは、割り当てられた状態の番号を保持する
請求項３に記載のデコーダ。
【請求項５】
前記複数のトークンのそれぞれは、配列に記憶され、
前記重複除去部は、前記配列に記録された前記複数のトークンを、割り当てられた状態および前記入力記号が同一のトークンが隣接するように並べ替えをし、前記配列に記録された前記複数のトークンにおける隣接するトークンを比較して、割り当てられた状態が同一であり且つ最後に通過した遷移の入力記号が同一である２以上のトークンを検出する
請求項１に記載のデコーダ。
【請求項６】
前記入力記号は整数であり、
前記複数のトークンを、割り当てられた状態および前記入力記号をバケットソートによりソートするソーティング部をさらに備える
請求項５に記載のデコーダ。
【請求項７】
前記複数のトークンのそれぞれに対して、前記最後に通過した遷移の入力記号に基づく信号スコアを算出するスコア算出部と、
前記複数のトークンを前記最後に通過した遷移の入力記号をキーにしてソートするソーティング部と、
をさらに備え、
前記スコア算出部は、入力された信号列または前記信号の特徴量列の入力１回につき、前記入力記号毎に前記信号スコアを１回算出する
請求項１に記載のデコーダ。
【請求項８】
前記重複除去部は、前記複数のトークンのそれぞれに対して、前記割り当てられた状態および前記最後に通過した遷移の入力記号のハッシュ値を算出し、算出した前記ハッシュ値を比較して、割り当てられた状態が同一であり且つ最後に通過した遷移の入力記号が同一である２以上のトークンを検出する
請求項１に記載のデコーダ。
【請求項９】
前記重複除去部は、前記最後に通過した遷移の入力記号が同一のトークンを含む集合を生成し、それぞれの集合毎に、前記割り当てられた状態が同一であるか判定して、割り当てられた状態が同一であり且つ最後に通過した遷移の入力記号が同一である２以上のトークンを検出する
請求項１に記載のデコーダ。
【請求項１０】
前記集合毎に、前記最後に通過した遷移の入力記号に基づく信号スコアを算出するスコア算出部をさらに備える
請求項９に記載のデコーダ。
【請求項１１】
前記トークン操作部は、前記信号または前記特徴量を入力する毎に、入力記号が空でない遷移を通過するまで前記トークンを移動させ、
前記重複除去部は、入力記号が空でない遷移を通過するまで移動した後に前記トークンの重複を除去する
請求項１に記載のデコーダ。
【請求項１２】
前記有限状態トランスデューサは、重み付き有限状態トランスデューサである
請求項１に記載のデコーダ。
【請求項１３】
前記入力記号は、前記信号または前記特徴量から信号スコアを算出するためのアルゴリズムまたはデータの少なくとも一方を示すスコア識別子であり、
前記複数のトークンのそれぞれに対して、前記最後に通過した遷移の入力記号に基づく信号スコアを算出するスコア算出部をさらに備える
請求項１に記載のデコーダ。
【請求項１４】
コンピュータにより、有限状態トランスデューサを探索して、入力された信号列または前記信号の特徴量列に応じた出力記号列を出力するデコード方法であって、
前記信号または前記特徴量を入力する毎に、探索中の経路の先頭の状態が割り当てられた複数のトークンのそれぞれを、前記有限状態トランスデューサに従って移動させるトークン操作ステップと、
割り当てられた状態が同一であり、且つ、最後に通過した遷移に割り当てられた入力記号が同一である２以上のトークンの重複を除去する重複除去ステップと、
を含むデコード方法。
【請求項１５】
コンピュータを、有限状態トランスデューサを探索して、入力された信号列または前記信号の特徴量列に応じた出力記号列を出力するデコーダとして機能させるためのプログラムであって、
前記コンピュータを、
前記信号または前記特徴量を入力する毎に、探索中の経路の先頭の状態が割り当てられた複数のトークンのそれぞれを、前記有限状態トランスデューサに従って移動させるトークン操作部と、
割り当てられた状態が同一であり、且つ、最後に通過した遷移に割り当てられた入力記号が同一である２以上のトークンの重複を除去する重複除去部
として機能させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、デコーダ、デコード方法およびプログラムに関する。
【背景技術】
【０００２】
入力される信号のパターンを認識して、入力された信号列を対応する記号列へと変換する技術が知られている。例えば、音声信号を認識する技術、文字が記載された画像から文字を認識するＯＣＲ（Optical  Character  Recognition）技術、手書き文字を認識する技術、または、画像からジェスチャまたは手話等を認識する技術等が知られている。また、このような技術を実現する装置として、重み付き有限状態オートマトンに出力記号を付加した有向グラフ（重み付き有限状態トランスデューサ（ＷＦＳＴ））を探索するデコーダが知られている。
【０００３】
ＷＦＳＴを探索するデコーダにより音声認識をする場合、隠れマルコフモデル（ＨＭＭ）をこのようなデコーダで取り扱えるように変形しなければならなかった。例えば、ＷＦＳＴの入力記号に、音響スコアを算出するための関数を特定する音響スコア関数識別子を割り当てることにより、ＷＦＳＴを探索するデコーダでＨＭＭを取り扱えるようにしていた。
【０００４】
ところで、入力記号にスコア関数識別子を割り当てた場合、ＨＭＭの自己遷移を正しく取り扱うために、１つの状態に対して１種類の入力記号が割り当てられた遷移が入ってくるように或いは出て行くように、ＷＦＳＴに制約を加えなければならなかった。このため、このようなデコーダでは、探索するＷＦＳＴの状態数および遷移数が多くなり、多くの記憶容量が必要であった。
【先行技術文献】
【非特許文献】
【０００５】
【非特許文献１】M.  Mohri  and  M.  Riley,  “Integrated  Context-Dependent  Networks  in  Very  Large  Vocabulary  Speech  Recognition”,  Sixth  European  Conference  on  Speech  Communication  and  Technology  (EUROSPEECH  '99),  1999,  811-814
【非特許文献２】S.J.  Young,  N.H.  Russell  and  J.H.S.  Thornton,  “Token  passing:  A  simple  conceptual  model  for  connected  speech  recognition  systems”,  Cambridge  University  Engineering  Department,  1989
【非特許文献３】S.  Phillips  and  A.  Rogers,  “Parallel  speech  recognition”,  International  Journal  of  Parallel  Programming,  Vol.  27,  No.  4,1999,  pp.  257-288
【非特許文献４】M.  Mohri,  “Handbook  of  Weighted  Automata”,  Chapter  6:  Weighted  Automata  Algorithms,  ISBN978-3-642-01491-8,  pp.213-254
【非特許文献５】Takaaki  Hori  and  Atsushi  Nakamura,  “Speech  Recognition  Algorithms  Using  Weighted  Finite-State  Transducers”,ISBN  978-1-60845-473-0,  pp.  70-73
【発明の概要】
【発明が解決しようとする課題】
【０００６】
本発明が解決しようとする課題は、自己遷移を含む有向グラフを有限状態トランスデューサで取り扱う場合に、有限状態トランスデューサの状態数および遷移数を増加させず、簡単な処理でデコードすることにある。
【課題を解決するための手段】
【０００７】
実施形態のデコーダは、有限状態トランスデューサを探索して、入力された信号列または前記信号の特徴量列に応じた出力記号列を出力するデコーダである。前記デコーダは、トークン操作部と、重複除去部とを備える。前記トークン操作部は、前記信号または前記特徴量を入力する毎に、探索中の経路の先頭の状態が割り当てられた複数のトークンのそれぞれを、前記有限状態トランスデューサに従って移動させる。前記重複除去部は、割り当てられた状態が同一であり、且つ、最後に通過した遷移に割り当てられた入力記号が同一である２以上のトークンの重複を除去する。
【図面の簡単な説明】
【０００８】
【図１】ある音素に対するＨＭＭを示す図。
【図２】特徴量が５回入力された場合のＨＭＭの遷移を示す図。
【図３】ＨＭＭをＷＦＳＴの遷移に割り当てたモデルを示す図。
【図４】異なる入力記号が１つの状態に入るモデルを示す図。
【図５】図４の問題を解決するための構成を示す図。
【図６】第１実施形態に係るパターン認識装置のブロック図。
【図７】第１実施形態に係るデコーダのブロック図。
【図８】第１実施形態に係るデコーダの処理のフローを示す図。
【図９】第１実施形態に係るデコーダの処理内容を表す擬似コードを示す図。
【図１０】Ｔｐに含まれる移動前のトークンを示す図。
【図１１】トークンを移動した後にＴｐに含まれるトークンを示す図。
【図１２】第１実施形態に係るパターン認識装置のハードウェアブロック図。
【図１３】第２実施形態に係るデコーダのブロック図。
【図１４】第２実施形態に係るデコーダの処理内容を表す擬似コードを示す図。
【発明を実施するための形態】
【０００９】
＜前提＞
まず、本実施形態の前提となる技術について説明する。
【００１０】
（ＷＦＳＴ）
本実施形態では、重み付き有限状態トランスデューサ（ＷＦＳＴ）を探索する。なお、本実施形態では、有向グラフとしてＷＦＳＴを用いる例を説明するが、重みの付いていない有限状態トランスデューサ（すなわち、重みが０のＷＦＳＴと同様の有向グラフ）を探索してもよい。
【００１１】
ＷＦＳＴは、遷移に入力記号および出力記号が割り当てられ、遷移に重みが割り当てられる。ＷＦＳＴは、状態の集合Ｑ、遷移の集合Ｅ、入力記号の集合Σ、出力記号の集合Γ、重みの集合Ｋ、初期状態の集合Ｉ、終了状態の集合Ｆ、初期重み関数λ、および終了重み関数ρの９つの要素の組（Ｑ，Ｅ，Σ，Γ，Ｋ，Ｉ，Ｆ，λ，ρ）で構成される。遷移は、５つの要素の組（前状態，次状態，入力記号，出力記号，重み）で構成される。
【００１２】
重みの集合Ｋは、一例として、整数全体の集合、実数全体の集合、複素数全体の集合、行列、ブーリアン（０および１）の集合等である。重みの集合Ｋは、正でない実数の集合または負でない実数の集合等であってもよい。初期状態ｑｉ∈Ｉに対応する初期重みは、λ（ｑｉ）である。終了状態ｑｆ∈Ｆに対応する終了重みは、ρ（ｑｆ）である。また、入力記号の集合Σおよび出力記号の集合Γは、空記号εを含んでもよい。
【００１３】
（音響モデル、信号スコア）
例えば、ＷＦＳＴを用いて連続的に音声認識をする場合を考える。この場合、認識処理に先立って、まず、入力された音声信号の特徴量を音声を表す細かい単位（例えば音素）へと変換するための音響モデル、音声を表す細かい単位（例えば音素）を単語へと変換するためのレキシコン、および、単語の並びを制約するための言語モデルを準備する。続いて、これらのモデルのそれぞれをＷＦＳＴへと変換する。続いて、ＷＦＳＴで表されたこれらのモデルを統合する。なお、これらのモデルを１つに統合してもよいし、一部を統合せず、音声認識時に動的に統合してもよい。
【００１４】
ここで、音響モデルは、入力された音声信号が、特定の音素またはその一部にどれだけ類似しているかを表すスコア（音響スコア、出力確率）を算出するためのモデルである。文字認識またはジェスチャの認識をする場合も同様に、このようなモデルを用いて類似度を表すスコアを算出して、パターン認識をする。本実施形態では、音声認識の場合も含めて、このようなモデルにより算出される値、すなわち、入力された信号が出力される記号等にどれだけ類似しているかを表す値を、信号スコアと呼ぶ。
【００１５】
（ＨＭＭ）
図１は、ある音素に対する隠れマルコフモデルを示す図である。音声認識をする場合、音響モデルとして隠れマルコフモデル（ＨＭＭ）が用いられる場合が多い。ＨＭＭをＷＦＳＴに変換する場合、一例として、信号スコアを算出するためアルゴリズム（関数、プログラム、テーブルまたは行列等を含む）、データ（パラメータ等を含む）、または、アルゴリズムおよびデータの両方を特定するためのスコア識別子を、ＷＦＳＴの入力記号に割り当てる。
【００１６】
このスコア識別子は、ＨＭＭの各状態（図１中のｂ１、ｂ２、ｂ３）に対応付けられている。ＨＭＭの状態が特定できればスコア識別子も特定することができる。同じスコア識別子が、ＨＭＭの異なる状態に割り当てられることもある。例えば、ｂ１＝ｂ２である場合もある。また、図１中のａ０１およびａ１２等は、状態遷移スコア（状態遷移確率ともいう）を表す。
【００１７】
音響モデルから信号スコアを算出するためには、スコア識別子だけでなく、入力された信号列または入力された信号の特徴量も必要である。特徴量は、複数の値から構成される場合もある。この場合、複数の特徴量の組は、特徴ベクトルと呼ばれる。本実施形態では、複数の値から構成される場合も含めて特徴量と呼ぶ。
【００１８】
本実施形態においては、信号スコアを算出するためのアルゴリズムまたはデータとして、スコア関数を用いる。スコア関数は、信号または信号の特徴量、および、スコア識別子を引数にとって信号スコアを出力する関数である。音声認識をする場合には、スコア関数は、例えば音響スコア関数と呼ばれる。また、この音響スコア関数を特定するスコア識別子は、音響スコア関数識別子と呼ばれる。また、音響スコア関数識別子は、確率分布関数識別子と呼ばれる場合もある。
【００１９】
スコア関数が信号スコアを算出する方法は、どのような方法であってもよい。例えば、音声認識をする場合、信号スコアを算出する方法は、適用するＨＭＭの種類によって変わる。離散ＨＭＭであれば、スコア関数は、特徴量に対応する符号ベクトルとスコア識別子とに基づき、表または行列の形で記録されている信号スコアを取得する。また、連続ＨＭＭであれば、スコア関数は、スコア識別子から得られるガウス分布を表現するための複数のパラメータと、特徴量とに基づき、信号スコアを算出する。また、スコア関数は、ニューラルネットワークを用いるなど、ほかの方法を用いて信号スコアを算出してもよい。
【００２０】
（探索）
図２は、特徴量が５回入力された場合の隠れマルコフモデルの遷移を示す非循環有向グラフの一例である。
【００２１】
ＷＦＳＴを探索する処理とは、入力された信号列または信号の特徴値列に応じた信号スコアおよび重みを累積した値が、最良となる状態と遷移との系列（経路）を算出する処理である。この累積した値を、累積スコアと呼ぶ。ＷＦＳＴに言語モデルも統合されている場合には、言語モデルから得られるスコアも累積スコアに含まれる。
【００２２】
累積スコアが最良となる経路は、一般に、ビタビアルゴリズムを用いて見つけ出される。図２では、最良となる経路の一例を太線で示している。図２の例の場合、累積スコアは、ａ０１＋ｓ（ｘ１，ｂ１）＋ａ１１＋ｓ（ｘ２，ｂ１）＋ａ１２＋ｓ（ｘ３，ｂ２）＋ａ２３＋ｓ（ｘ４，ｂ３）＋ａ３３＋ｓ（ｘ５，ｂ３）＋ａ３４となる。ｘ１からｘ５は各時刻に対応する特徴量である。ｓ（ｘｎ，ｂ）は、スコア関数である。ｘｎは、ｎ番目に入力された特徴量であり、ｂは、スコア識別子である。仮に、累積スコアを距離と考え、小さいほうが良いとする。この場合、累積スコアが最良となる経路を見つけ出す処理は、音声信号が入力される毎に、状態と遷移とが追加される非循環有向グラフ（directed  acyclic  graph）の最短経路を探索する処理と同様である。
【００２３】
（トークンパッシング）
ＨＭＭを変換したＷＦＳＴの経路を探索する処理では、トークンパッシングと呼ばれる技術を用いる場合が多い。この技術ではトークンと呼ばれるオブジェクトが用いられる。トークンには、探索中の経路の先頭の状態が割り当てられる。ＷＦＳＴを探索する処理は、複数の経路を並行して探索するので、同時に複数のトークンが管理される。また、トークンは、経路の累積スコアを保持する。また、トークンは、通過した経路上に割り当てられた出力記号の列を保持する。
【００２４】
トークンは、信号または特徴量が入力される毎に移動される。すなわち、トークンは、信号または特徴量が入力される毎に、割り当てられる状態が、ＷＦＳＴの遷移に従って変更される。１つの状態から複数の出て行く遷移が存在する場合には、その１つの状態に割り当てられたトークンは、信号または特徴量が入力されると、出て行く遷移の数に複製される。
【００２５】
なお、ＨＭＭを変換したＷＦＳＴに限らず、スコア識別子が状態に割り当てられており、スコア識別子が割り当てられている状態に自己遷移がある有向グラフであれば、トークンパッシングを用いた経路の探索をすることができる。例えば、テンプレートを有向グラフの形式で表現し、入力された特徴量とテンプレートとの距離を算出する関数をスコア関数とすれば、テンプレートマッチングにも適用することができる。この場合、スコア識別子は、テンプレート自体またはテンプレートを特定する値となる。
【００２６】
（ＨＭＭをＷＦＳＴで扱う方法）
図３は、ＨＭＭをＷＦＳＴの遷移に割り当てたモデルの一例を示す図である。ＷＦＳＴを探索する音声認識デコーダでＨＭＭを扱う方法は、大きく２つ存在する。
【００２７】
第１の方法は、１つまたは複数の状態を含むＨＭＭに識別情報を割り当て、割り当てた識別情報をＷＦＳＴの入力記号に割り当てる方法である。第１の方法をＨＭＭ展開法と呼ぶ。ＨＭＭ展開法では、音声認識デコーダは、遷移を通過するトークンがある場合、図３のように、その遷移の中にＨＭＭが含まれているとして処理を行う。
【００２８】
図３において、数字（この例では１と２）が書かれている丸は、ＷＦＳＴの状態を表す。状態１から状態２に向かう矢印は、ＷＦＳＴの遷移を表す。
【００２９】
また、図３において、：の左側には、入力記号が記載されている。：と／の間には、出力記号が記載されている。／の右側には、重みが記載されている。なお、入力記号、出力記号および重みの記載方法は、他の図面でも同様である。図３の例では、ＷＦＳＴの状態１から状態２への遷移の入力記号をＨＭＭの識別情報Ｈ１、出力記号をｉ、重みを０としている。
【００３０】
ＨＭＭ展開法を用いる場合、音声認識デコーダは、トークンが割り当てられている遷移を、アクティブアークとして管理し、トークンが割り当てられている状態をアクティブステートとして管理しなければならない。このため、ＨＭＭ展開法を用いる場合、音声認識デコーダは、ＨＭＭとＷＦＳＴとを並行して取り扱わなくてはならなく、処理が複雑となってしまっていた。
【００３１】
第２の方法は、信号スコアを算出するためのアルゴリズムまたはデータを特定するためのスコア識別子を、遷移の入力記号に割り当てる方法である。第２の方法を、ＨＭＭ埋め込み法と呼ぶ。ＨＭＭ埋め込み法は、ＨＭＭ展開法と同様に、出力記号には、認識結果として出力したい記号が割り当てられる。出力記号には、一例として、音素または単語等が割り当てられる。重みには、例えば、ＨＭＭの状態遷移スコアまたは言語スコアまたはそれらを加算した値が割り当てられる。
【００３２】
ある状態に割り当てられているスコア識別子の入力記号への割り当て方には、その状態から出ていく遷移に割り当てる方法と、その状態へ入ってくる遷移に割り当てる方法の２通りがある。前者の方法を前方割り当て法、後者の方法を後方割り当て法と呼ぶ。
【００３３】
前方割り当て法は、例えば、非特許文献１の図１（ａ）に記載されている。後方割り当て法は、例えば、非特許文献５の７２ページの図４．２（ａ）に記載されている。
【００３４】
後方割り当て法では、音声認識デコーダは、特徴量が入力される毎に、次のように処理を行う。まず、トークンは、状態ｑ１に割り当てられているものとし、状態ｑ１から出ていく遷移の１つをｅ１とする。また、ｅ１の次状態をｑ２とする。第１ステップで、音声認識デコーダは、ｑ１からトークンをｑ２に移動させる。このとき、通過するｅ１の重みをトークンの累積スコアに加算する。第２ステップで、音声認識デコーダは、ｅ１の入力記号、つまり、スコア識別子を使用して、信号スコアを算出してトークンの累積スコアに加算する。
【００３５】
前方割り当て法では、音声認識デコーダは、特徴量が入力される毎に、次のように処理を行う。第１ステップで、音声認識デコーダは、ｅ１の入力記号を使用して信号スコアを算出し、ｑ１のトークンの累積スコアに加算する。第２ステップで、音声認識デコーダは、ｑ１からトークンをｑ２へ移動させ、通過するｅ１の重みをトークンの累積スコアに加算する。
【００３６】
例えば、図２に示した最良の経路ａ０１→ｂ１→ａ１１→ｂ１→ａ１２→ｂ２→ａ２３→ｂ３→ａ３３→ｂ３→ａ３４を例にして考える。後方割り当て法の場合は、１回目の特徴量の入力でａ０１→ｂ１に関するスコアが算出され、２回目の特徴量の入力でａ１１→ｂ１に関するスコアが算出される。前方割り当て法の場合は、１回目の特徴量の入力前にａ０１に関するスコアが算出され、１回目の特徴量の入力でｂ１→ａ１１に関するスコアが算出される。
【００３７】
このように、ＨＭＭ埋め込み法では、音声認識デコーダは、ＨＭＭとＷＦＳＴとを別個に取り扱う必要が無く、この結果、アクティブアークを管理する必要が無いので、処理が簡単となる。
【００３８】
ところで、音声認識で用いられるＨＭＭにはたいてい自己遷移が含まれる。ＨＭＭ埋め込み法を用いる場合、ＨＭＭの自己遷移をＷＦＳＴに反映させると、音声認識デコーダは、保持しなければならないデータ量が増える。そのため、音声認識デコーダは、ＷＦＳＴにはＨＭＭの自己遷移を含めず、自己遷移の状態遷移スコアをＷＦＳＴとは異なるデータ構造（例えば、スコア関数に状態遷移スコアを含めたデータ構造）で別途保持して、自己遷移があるものとみなして処理することが多い。もっとも、状態遷移スコアを利用しないのであれば、音声認識デコーダは、自己遷移の状態遷移スコアについても無視すればよい。状態遷移スコアを使用せず、言語モデルも用いないのであれば、重みを記録する必要が無いので、ＷＦＳＴではなく、重みを記録しない有限状態トランスデューサを用いることができる。
【００３９】
図４は、異なる入力記号が割り当てられた２つの遷移が、１つの状態に入る場合のモデルの一例を示す図である。
【００４０】
ＨＭＭの自己遷移をＷＦＳＴに含めない場合、ＷＦＳＴの最適化プロセスによって、音声認識デコーダが自己遷移を正しく取り扱えなくなる変換が発生する場合がある。例えば、後方割り当て法を用いる場合、図４に示すように、状態２へ入ってくる遷移が２本あり入力記号が異なっているという状況が発生する場合がある。なお、図４の例では、重みを全て０とした。
【００４１】
このＷＦＳＴに対して新たな状態を追加することなく、元々あった自己遷移を復元しようとすると、状態２を復元できなくなる。仮に、状態２に対して、入力記号がｂ２の自己遷移およびｂ７の自己遷移の２本を追加したとする。この場合、状態１から状態２に到達し、次に状態２の自己遷移を進む場合において、入力記号がｂ７である自己遷移も通過することができてしまい、本来であれば存在しないはずの経路ができる。前方割り当て法の場合でも、出ていく遷移の入力記号が異なる場合には同様の現象が起きる。
【００４２】
このような問題を解決するために、後方割り当て法の場合は、各状態に対して入ってくる遷移の入力記号が同じになるようにＷＦＳＴを予め変形する。前方割り当て法の場合は出ていく遷移の入力記号が同じになるようにＷＦＳＴを変形する。例えば、図４の場合、状態７を追加し、入力記号ｂ７が割り当てられている遷移の次状態を状態７に変更し、状態２から出ていく遷移を状態７に複製する操作を行うことで、ＷＦＳＴを変形する。このような変形を行うと、正しく自己遷移を復元することができる。
【００４３】
図５は、図４の問題を解決するための構成の一例を示す図である。例えば、変換部２０１は、音声認識デコーダ２０２に入力される前に、ＷＦＳＴを上述のように変形する。音声認識デコーダ２０２は、変形後のＷＦＳＴを受け取り、音声認識をする。
【００４４】
しかし、ＷＦＳＴを予め変形することで自己遷移を復元可能にすると、ＷＦＳＴの状態の数および遷移の数が増えてしまう。その結果、音声認識デコーダ２０２は、状態および遷移を記憶するための記憶容量が増加してしまっていた。
【００４５】
＜第１実施形態＞
（全体構成）
図６は、第１実施形態に係るパターン認識装置１０の構成を示す。以下、第１実施形態に係るパターン認識装置１０を説明する。
【００４６】
パターン認識装置１０は、入力された信号のパターンを認識し、認識結果を出力する。パターン認識装置１０に入力される信号は、パターンを表す信号であればどのような信号であってもよい。入力される信号は、一例として、音声信号、筆跡を表す信号、文字を表す画像信号または手話等のジェスチャを表す動画像信号等である。
【００４７】
パターン認識装置１０は、特徴抽出部１２と、デコーダ２０と、記憶部２２とを備える。
【００４８】
特徴抽出部１２は、パターンを表す信号を入力して、一定時間毎に、信号の特徴量を取得する。そして、特徴抽出部１２は、取得した信号の特徴量をデコーダ２０に渡す。
【００４９】
特徴量は、デコーダ２０が、その信号の区間毎の特徴を表す情報であり、信号スコアを算出するために用いられる。音声信号を入力する場合、特徴抽出部１２は、一例として、１０ミリ秒単位（フレーム）毎に、特徴量を取得する。
【００５０】
なお、特徴量を算出するために用いる信号の時間長と、特徴量を出力する期間は一致していなくてもよい。また、デコーダ２０が信号そのものを用いて信号スコアを算出する場合には、特徴抽出部１２は、一定時間毎に分割した信号をデコーダ２０に渡してもよい。
【００５１】
デコーダ２０は、特徴抽出部１２から信号または信号の特徴量が入力される毎に、予め作成されたＷＦＳＴを探索する。そして、デコーダ２０は、入力された信号列または信号の特徴量列に応じた出力記号列を出力する。より具体的には、デコーダ２０は、探索して得られた累積スコアが最良の経路上の出力記号列を、認識結果として出力する。
【００５２】
デコーダ２０は、出力記号列として、例えば、単語列を出力してもよいし、音素列を出力してもよいし、音素よりさらに細かい単位の記号列を出力してもよい。また、デコーダ２０は、これらの組み合わせの記号列を出力してもよい。
【００５３】
記憶部２２は、予め作成されたＷＦＳＴを記憶している。デコーダ２０は、記憶部２２に予め記憶されているＷＦＳＴを常時参照して探索することができる。
【００５４】
記憶部２２は、信号スコアを算出するために参照されるアルゴリズムまたはデータ、或いは、アルゴリズムおよびデータの両方を記憶している。本実施形態において、記憶部２２は、スコア識別子と信号または特徴量とを引数として信号スコアを算出するためのスコア関数を記憶している。また、本実施形態においては、記憶部２２は、データとして、ＷＦＳＴの遷移に重みとして割り当てられなかったＨＭＭの状態遷移スコア等を、スコア関数とともに記憶している。なお、記憶部２２は、ＷＦＳＴに記憶されていない他の情報を、データとして記憶していてもよい。
【００５５】
ここで、デコーダ２０は、トークンパッシングの手法で、ＷＦＳＴを探索する。そして、ＷＦＳＴの探索中において、デコーダ２０は、ＷＦＳＴから取得したスコア識別子と信号または信号の特徴量とを引数として、スコア関数を呼び出して、信号スコアを算出することができる。また、デコーダ２０は、ＷＦＳＴの重みを記憶部２２から取得することができる。さらに、記憶部２２にスコア関数とともに記憶されているＨＭＭの状態遷移スコアがあれば、これも取得することができる。これにより、デコーダ２０は、探索中の経路上の遷移の重みと信号スコアとを累積した累積スコアを算出することができる。ＨＭＭの状態遷移スコアがあれば、それについても累積スコアに累積することができる。
【００５６】
また、記憶部２２に記憶されたＷＦＳＴは、ＨＭＭの自己遷移を含んでおらず、入力記号には、信号スコアを算出するためのスコア識別子が割り当てられている。例えば、記憶部２２に記憶されたＷＦＳＴは、ＨＭＭを、ＨＭＭ埋め込み法で変換した後のＷＦＳＴである。
【００５７】
さらに、記憶部２２に記憶されているＷＦＳＴは、１つの状態に対して、複数種類の入力記号が割り当てられた遷移が入力されることを許容している。すなわち、記憶部２２には、図５の変換部２０１による変換前のＷＦＳＴが記憶されている。従って、記憶部２２に記憶されているＷＦＳＴは、図５の変換部２０１による変換後のＷＦＳＴに比べて状態数および遷移数が少ない。
【００５８】
（デコーダ２０の構成）
図７は、デコーダ２０のブロック図である。デコーダ２０は、トークン記憶部３１と、トークン操作部３２と、スコア算出部３３と、重複除去部３４と、枝刈部３５と、出力部３６とを有する。
【００５９】
トークン記憶部３１は、１または複数のトークンを記憶する。トークン記憶部３１は、信号または信号の特徴量が入力される前においては、初期状態が割り当てられたトークンを記憶する。
【００６０】
トークン記憶部３１は、複数のトークンのそれぞれを、割り当てられた状態に関連付けて記憶する。トークン記憶部３１は、ＷＦＳＴの状態と複数のトークンとを関連付けることができれば、どのようにトークンを記憶していてもよい。例えば、それぞれのトークンが、割り当てられた状態を示す情報を保持していてもよい。ＷＳＦＴのそれぞれ状態の状態に互いに異なる番号が割り当てられていれば、それぞれのトークンは、その番号を、割り当てられた状態を示す情報として保持する。状態がメモリ上に保持されていれば、状態が記録されているメモリのアドレスを、割り当てられた状態を示す情報としてもよい。また、トークン記憶部３１は、ＷＦＳＴの状態のそれぞれを表すテーブルにより、状態とトークンとの関連付けを管理してもよい。
【００６１】
複数のトークンのそれぞれは、最後に通過した遷移に割り当てられた入力記号（スコア識別子）を保持する。また、複数のトークンのそれぞれは、対応する経路の先頭の状態から到達した状態までの出力記号を接続した出力記号列を保持する。また、複数のトークンのそれぞれは、そのトークンが表す経路上のそれぞれの入力記号（スコア識別子）から算出された信号スコアと、経路上の遷移に割り当てられた重み（状態遷移スコア等）とを累積した累積スコアを保持する。
【００６２】
トークン操作部３２は、信号または信号の特徴量を入力する毎に、トークン記憶部３１に記憶されている複数のトークンのそれぞれを、ＷＦＳＴに従って移動させる。ここで、トークンを移動させるとは、そのトークンに割り当てられている状態を、次の状態に変更することをいう。
【００６３】
この場合において、トークン操作部３２は、トークンに割り当てられている状態から出て行く遷移が複数存在する場合には、複数の遷移のそれぞれに対応させてトークンを作成し、作成したそれぞれのトークンを対応する遷移に従って次の状態に移動させる。さらに、トークン操作部３２は、トークンに割り当てられている状態から出て行く遷移に割り当てられた入力記号が空である場合、空ではない入力記号が割り当てられている遷移を通過するまでトークンを移動させる。
【００６４】
スコア算出部３３は、トークン操作部３２がトークンを入力記号が空でない遷移を通過するまで移動させる毎に、複数のトークンのそれぞれに対して、信号スコア、および、累積スコアを算出する。より詳しくは、スコア算出部３３は、複数のトークンのそれぞれに対して、直前の移動により通過した遷移に割り当てられた入力記号（スコア識別子）に対応するスコア関数を呼び出して、入力記号に基づき信号スコアを算出する。また、スコア算出部３３は、複数のトークンのそれぞれに対して、そのトークンが表す経路上の重みおよび信号スコアを累積した累積スコアを算出する。そして、スコア算出部３３は、算出した信号スコア、および、累積スコアを、トークン記憶部３１に記憶された対応するトークンに保持させる。なお、重みの付いていない有限状態トランスデューサを探索する場合には、スコア算出部３３は、重みに関する処理を実行せずに、重みを０として累積スコアを算出する。
【００６５】
重複除去部３４は、トークン操作部３２がトークンを入力記号が空でない遷移を通過するまで移動させる毎に、トークンの重複を除去する。より詳しくは、重複除去部３４は、割り当てられた状態が同一であり、且つ、最後に通過した遷移に割り当てられた入力記号が同一である２以上のトークンの重複を除去する。重複除去部３４は、一例として、割り当てられた状態が同一であり、且つ、最後に通過した遷移に割り当てられた入力記号が同一である２以上のトークンのうち、累積スコアが良い１つのトークンを残存させ、残りのトークンを廃棄する。
【００６６】
この場合において、重複除去部３４は、配列に記録された複数のトークンを、割り当てられた状態および入力記号が同一のトークンが隣接するように並べ替えをする。そして、重複除去部３４は、配列に記録された複数のトークンにおける隣接するトークンを比較して、割り当てられた状態が同一であり且つ最後に通過した遷移の入力記号が同一である２以上のトークンを検出してもよい。
【００６７】
また、重複除去部３４は、複数のトークンのそれぞれに対して、割り当てられた状態および最後に通過した遷移の入力記号のハッシュ値を算出する。そして、重複除去部３４は、算出したハッシュ値を比較して、割り当てられた状態が同一であり且つ最後に通過した遷移の入力記号が同一である２以上のトークンを検出してもよい。
【００６８】
また、重複除去部３４は、最後に通過した遷移の入力記号が同一のトークンを含む集合を生成する。そして、重複除去部３４は、それぞれの集合毎に、割り当てられた状態が同一であるか判定して、割り当てられた状態が同一であり且つ最後に通過した遷移の入力記号が同一である２以上のトークンを検出してもよい。
【００６９】
枝刈部３５は、トークン操作部３２がトークンを入力記号が空でない遷移を通過するまで移動させる毎に、トークン記憶部３１に記憶されている複数のトークンのうち、累積スコアが一定以上悪いトークンを除去する。枝刈部３５は、一例として、複数のトークンのうちの最良の累積スコアから、一定値以上悪い累積スコアのトークンを除去する。
【００７０】
出力部３６は、信号または信号の特徴量の入力が終了した後に、トークン記憶部３１に記憶されている複数のトークンのうち、累積スコアが最良となるトークンを検出する。そして、出力部３６は、検出したトークンに保持されている出力記号列を認識結果として出力する。
【００７１】
（処理フロー）
図８は、第１実施形態に係るデコーダ２０の処理順序を示すフローチャートである。まず、信号の入力が開始されると、特徴抽出部１２が信号から特徴量を抽出してデコーダ２０に供給する。そして、デコーダ２０は、ステップＳ１０１から処理を開始する。
【００７２】
まず、ステップＳ１０１において、デコーダ２０は、特徴抽出部１２から特徴量を取得する。続いて、ステップＳ１０２において、デコーダ２０は、特徴量の取得に成功したか否かを判断する。デコーダ２０は、特徴量の取得に成功した場合には（ステップＳ１０２のＹｅｓ）、処理を、ステップＳ１０３からステップＳ１０７までのループ処理に進める。なお、デコーダ２０は、ステップＳ１０１の前に、ステップＳ１０２を実行してもよい。この場合、ステップＳ１０２において、デコーダ２０は、次に特徴量を取得できるか否かを判断する。
【００７３】
ステップＳ１０３からステップＳ１０７のループ処理において、デコーダ２０は、全てのトークンのそれぞれに対してステップＳ１０４からステップＳ１０６までの処理を実行する。ステップＳ１０４において、デコーダ２０は、対応するトークンをそれが割り当てられた状態から、ＷＦＳＴに示された遷移に従って次の状態に移動させる。この場合において、デコーダ２０は、入力記号が空でない遷移を通過するまでトークンを移動させる。
【００７４】
続いて、ステップＳ１０５において、デコーダ２０は、最後に通過した遷移に割り当てられた入力記号をトークンに記録する。続いて、ステップＳ１０６において、デコーダ２０は、トークンが通過した遷移に割り当てられた重みを取得して、取得した重みをトークンの累積スコアに加算する。
【００７５】
ステップＳ１０３からステップＳ１０７のループ処理が完了すると、デコーダ２０は、処理をステップＳ１０８に進める。ステップＳ１０８において、デコーダ２０は、割り当てられた状態が同一であり且つ最後に通過した遷移の入力記号が同一である２以上のトークンが存在するかを検出する。そして、デコーダ２０は、このような２以上のトークンが存在した場合には、最も累積スコアが良い１つのトークンを残して、残りのトークンを破棄する。
【００７６】
続いて、デコーダ２０は、ステップＳ１０９からステップＳ１１１までのループ処理に進める。ステップＳ１０９からステップＳ１１１のループ処理において、デコーダ２０は、全てのトークンのそれぞれに対してステップＳ１１０の処理を実行する。ステップＳ１１０において、デコーダ２０は、対応するトークンの信号スコアを算出する。そして、デコーダ２０は、対応するトークンに保持されている累積スコアに算出した信号スコアを加算することにより、累積スコアを更新する。
【００７７】
ステップＳ１０９からステップＳ１１１のループ処理が完了すると、デコーダ２０は、処理をステップＳ１１２に進める。ステップＳ１１２において、デコーダ２０は、累積スコアが一定以上悪いトークンを除去する。ステップＳ１１２が完了すると、デコーダ２０は、処理をステップＳ１０１に戻す。そして、デコーダ２０は、特徴量が入力される毎に、ステップＳ１０３からステップＳ１１２までの処理を繰り返して実行する。
【００７８】
一方、特徴量の取得に成功しなかった場合、すなわち、信号の入力が終了した場合には（ステップＳ１０２のＮｏ）、デコーダ２０は、処理をステップＳ１１３に進める。
【００７９】
ステップＳ１１３において、デコーダ２０は、複数のトークンのうち累積スコアが最良のトークンを検出する。そして、デコーダ２０は、累積スコアが最良のトークンに保存された出力記号列を認識結果として出力する。デコーダ２０は、ステップＳ１１３の処理を完了すると、本フローを終了する。
【００８０】
（擬似コード）
図９は、第１実施形態に係るデコーダ２０の処理内容を表す擬似コードを示す図である。つぎに、図９に示すデコーダ２０により実行される擬似コードを参照して、デコーダ２０の詳細な処理例を説明する。
【００８１】
ｔは、トークンを表す。Ｔは、トークンの集合を表す。Ｔｐは、初期状態のトークンの集合または前の時刻でのトークンの集合を表す。前の時刻でのトークンの集合とは、直前に実行した１３行目の処理で得られたトークンの集合である。
【００８２】
ｓｔａｔｅ（ｔ）は、トークンｔに割り当てられる状態を表す。ｓｃｏｒｅ（ｔ）は、トークンｔが保持している累積スコアを表す。ｉｎｐｕｔ（ｔ）は、トークンｔが保持している入力記号を表す。ｗｏｒｄ（ｔ）は、トークンｔが保持している出力記号列を表す。４つの要素の組で表す場合は、（状態，入力記号，スコア，出力記号列）と記載する。
【００８３】
なお、本擬似コードにおいては、スコアは大きい方が良いとして処理を実行する。もっとも、擬似コード中の関数ｍａｘを関数ｍｉｎに変更し、スコアを比較する場合に大小関係を反転する等の変形をすれば、スコアは小さい方が良いとして処理を実行することができる。
【００８４】
ｗｂｅａｍは、枝刈りのための基準となるスコア差を表す。
【００８５】
εは、記号列が空であることを表す。入力記号がεである場合、入力記号にスコア識別子が割り当てられていないことを表す。同様に、出力記号がεである場合、単語等の認識結果として出力される情報が出力記号に割り当てられていないことを表す。
【００８６】
入力記号がεである遷移を、本実施形態においてはε遷移または空遷移と呼ぶ。ｅは、遷移を表す。ｎ（ｅ）は、遷移ｅの次状態を表す。ｉｎｐｕｔ（ｅ）は、遷移ｅの入力記号を表す。ｏｕｔｐｕｔ（ｅ）は、遷移ｅの出力記号を表す。ｗ（ｅ）は、遷移ｅの重みを表す。
【００８７】
通常、ＷＦＳＴには初期重みがあるが、本実施形態では、ＷＦＳＴの初期重みと終了重みは０である。初期状態１つに対して、遷移と状態を１つずつ追加し、初期重みを追加した遷移に割り当てるように、ＷＦＳＴを予め変形されていればよい。もっとも、初期重みを考慮した擬似コードとするには、１行目で作成するトークンの累積重みに、初期重みを追加すればよい。終了重みを考慮する場合には、１４行目のａｒｇｍａｘ算出時のスコアに終了重みを加算してから、ａｒｇｍａｘを算出すればよい。
【００８８】
以下、各行で行われる処理について説明する。デコーダ２０は、図９に示される擬似コードの各行に示された処理を、１行目から順次に実行する。
【００８９】
１行目では、デコーダ２０は、トークンの集合を初期化する。トークンの集合は、一例として、配列、単方向リストまたは二分木等で実現することができる。また、デコーダ２０は、９行目で重複要素が存在しなくなるので、１行目では、重複要素の削除を行ってもよいし、行わなくてもよい。
【００９０】
２行目では、デコーダ２０は、信号の入力が終了したか否かを判定する。終了していれば、デコーダ２０は、結果を出力するために１４行目に処理を移す。まだ、処理すべき信号がある場合は、デコーダ２０は、３行目から１３行目の処理を行う。
【００９１】
３行目では、デコーダ２０は、入力された信号の特徴量を特徴抽出部１２から受け取る。デコーダ２０は、受け取った特徴量をｖに代入する。なお、疑似コードでは、特徴量を、ｆｅａｔｕｒｅ  ｖｅｃｔｏｒと記載している。
【００９２】
４行目では、入力記号がεであるトークンを集合Ｔから除去してから、ＴをＴｐにコピーする。デコーダ２０が参照するＷＦＳＴは、ＨＭＭの自己遷移が含まれていないため、自己遷移があるものとみなしてトークンを移動させる必要がある。ＷＦＳＴのそれぞれの状態は、入ってくる遷移の入力記号がεでなければ自己遷移がある。トークンが保持する入力記号がεでなければ入ってくる遷移の入力記号がεでないことを意味する。従って、４行目で、デコーダ２０は、入力記号がεであるトークンをＴから除去することにより、自己遷移の処理をすることができる。
【００９３】
５行目は、Ｔｐに含まれるそれぞれのトークンについて、６行目から８行目の処理を行うことを示す。
【００９４】
関数ｏｕｔｇｏｉｎｇは、ＷＦＳＴにε遷移が含まれていない場合、ｓｔａｔｅ（ｔ）から出ていく遷移の集合を返す。
【００９５】
関数ｏｕｔｇｏｉｎｇは、ＷＦＳＴにε遷移が含まれている場合、ｓｔａｔｅ（ｔ）から出ていくε遷移以外の遷移と、ｓｔａｔｅ（ｔ）からε遷移を辿ることで到達できる入力記号がεでない遷移とを含む集合Ｅｎを返す。ただし、関数ｏｕｔｇｏｉｎｇは、その遷移に至る経路が複数ある場合には、経路上の重みを累積した値が最も大きい経路のみを選択する。重みを累積した値が最も大きい経路の探索には例えばＤｉｊｋｓｔｒａのアルゴリズムやＢｅｌｌｍａｎ‐Ｆｏｒｄのアルゴリズムを用いればよい。
【００９６】
また、関数ｏｕｔｇｏｉｎｇは、集合Ｅｎに含まれるそれぞれの遷移ｅｎの重みを、ｓｔａｔｅ（ｔ）から遷移ｅｎまでに至る経路（遷移ｅｎを含む）上の重みを累積した値に変形する。また、関数ｏｕｔｇｏｉｎｇは、集合Ｅｎに含まれるそれぞれの遷移ｅｎの出力記号を、ｓｔａｔｅ（ｔ）から遷移ｅｎまでに至る経路（遷移ｅｎを含む）上の出力記号を繋ぎ合わせた記号列に変形する。
【００９７】
なお、遷移ｅｎに至る経路上の出力記号列が複数ある場合で、全ての出力記号列を残したい場合は、関数ｏｕｔｇｏｉｎｇは、次のようにすればよい。ある経路の出力記号列をｘｎとする。ｘｎと同じ出力記号列が割り当てられている経路上の重みのうち最も大きい重みと、遷移ｅｎの重みとを加算した値をｗｎとする。関数ｏｕｔｇｏｉｎｇは、処理結果として返す集合に、出力記号列がｘｎ、重みがｗｎ、それ以外の要素がｅｎと同じである遷移を追加する。
【００９８】
７行目では、デコーダ２０は、新しいトークンｔｎｅｗを作成する。トークンｔｎｅｗに割り当てられる状態は、ｅの次状態である。トークンｔｎｅｗの累積スコアは、ｔの累積スコアにｅの重みを加算した値である。トークンｔｎｅｗの出力記号列は、ｔの出力記号列の最後にｅの出力記号列をつなげた記号列である。
【００９９】
８行目では、デコーダ２０は、７行目で作成した新しいトークンｔｎｅｗをトークンの集合Ｔに追加する。
【０１００】
９行目では、デコーダ２０は、同じ状態が割り当てられ、且つ、最後に通過した遷移の入力記号が同一の２以上のトークンが存在するかを検出する。そして、デコーダ２０は、同じ状態が割り当てられ、且つ、最後に通過した遷移の入力記号が同一の２以上のトークンが存在すれば、それらの２以上のトークンのうち累積スコアが最良のトークンを残存させ、他を除去する。
【０１０１】
例えば、デコーダ２０は、配列に記録された複数のトークンを、割り当てられた状態および最後に通過した遷移の入力記号が同一のトークンが隣接するように並べ替えをする。そして、デコーダ２０は、配列に記録された複数のトークンにおける隣接するトークンを比較して、割り当てられた状態が同一であり且つ最後に通過した遷移の入力記号が同一である２以上のトークンを検出する。
【０１０２】
また、例えば、デコーダ２０は、入力記号と状態とを引数にとるハッシュ関数を用いてハッシュ値を算出し、算出したハッシュ値が同一のトークンを検出する。デコーダ２０は、ハッシュ値が同一の２以上のトークンを検出した場合には、それらのトークンの入力記号と割り当てられている状態とを比較する。
【０１０３】
また、デコーダ２０は、最後に通過した遷移の入力記号が同一のトークンを含む集合を生成する。そして、デコーダ２０は、それぞれの集合毎に、割り当てられた状態が同一であるか判定して、割り当てられた状態が同一であり且つ最後に通過した遷移の入力記号が同一である２以上のトークンを検出する。このような処理により、デコーダ２０は、容易に、最後に通過した遷移の入力記号が同一で且つ割り当てられている状態が同一の２以上のトークンを検出することができる。
【０１０４】
１０行目は、Ｔに含まれるそれぞれのトークンｔについて、１１行目を処理することを示す。
【０１０５】
１１行目では、デコーダ２０は、スコア関数ａｍ＿ｓｃｏｒｅにより信号スコアを算出する。スコア関数ａｍ＿ｓｃｏｒｅは、第１引数に特徴量、第２引数にスコア識別子（入力記号）をとり、信号スコアを返す。さらに、ＨＭＭの状態遷移スコアがある場合は、それも信号スコアに含めて返す。デコーダ２０は、スコア関数ａｍ＿ｓｃｏｒｅにより算出した値を、ｔの累積スコアｓｃｏｒｅ（ｔ）に加算する。
【０１０６】
１２行目と１３行目は、トークンの枝刈りを行う。１２行目では、デコーダ２０は、Ｔに含まれるトークンの累積スコアのうち、最も良い累積スコアをｗｍａｘに代入する。
【０１０７】
１３行目では、デコーダ２０は、ｗｍａｘからｗｂｅａｍを引いた値以下の累積スコアを保持しているトークンをＴから除去する。ｗｂｅａｍには、事前に与えられる固定値を用いてもよいし、トークンの数が一定値以内に収まるように算出される値を用いてもよい。なお、トークンの数で枝刈りする方法は、ヒストグラム枝刈りと呼ばれる。
【０１０８】
１４行目では、デコーダ２０は、ＷＦＳＴの終了状態が割り当てられているトークンのうち、最も累積スコアが大きいトークンを検出し、検出したトークンが保持している出力記号列を認識結果として出力する。
【０１０９】
（トークンの除去例）
図１０は、Ｔｐに含まれる移動前のトークンの一例を示す図である。図１１は、図１０に示すトークンを移動した後にＴＰに含まれるトークンの一例を示す図である。以下、トークンの移動時に何れのトークンが残るかについて説明する。なお、図１０および図１１には、ＷＦＳＴの一部を示しており、初期状態および終了状態は示されていない。
【０１１０】
トークンを移動させる前の状態（図１０）では、トークンｔ１は状態２に、トークンｔ２は状態６に、トークンｔ３は状態９に、トークンｔ４は状態７に割り当てられている。従って、移動する前のトークンの集合は、Ｔｐ＝｛（２，ｂ６，−１，ｂｌｕｅ），（６，ｂ４，−３，ｒｅｄ），（９，ｂ５，−５，ｇｒｅｅｎ），（７，ｂ３，−３，ｒｅｄ）｝となる。Ｔｐに含まれるトークンを、遷移として明示的に表現されていない自己遷移に沿って移動させても、結果は同一である。そのため、図９の擬似コードの４行目の処理が完了した時点では、Ｔ＝Ｔｐとなる。
【０１１１】
図９の擬似コードの５行目から８行目の処理を完了すると、遷移に沿って移動させたトークンが加わる。従って、Ｔ＝｛（２，ｂ６，−１，ｂｌｕｅ），（６，ｂ４，−３，ｒｅｄ），（９，ｂ５，−５，ｇｒｅｅｎ），（７，ｂ３，−３，ｒｅｄ），（４，ｂ１，−８，ｂｌｕｅ  ｂｌａｃｋ），（４，ｂ４，−６，ｒｅｄ），（７，ｂ３，−４，ｒｅｄ），（７，ｂ３，−７，ｇｒｅｅｎ  ｗｈｉｔｅ）｝となる。
【０１１２】
図９の擬似コードの９行目の処理によって、割り当てられている状態と最後に通過した遷移の入力記号とが同じトークンがある場合は、その中で最良の累積スコア（本例の場合、最も大きい累積スコア）のトークンが１つ残る。なお、累積スコアが同一で且つ累積スコアが最良の場合は、デコーダ２０は、最良の累積スコアを保持しているトークンのうち、任意の１つを残せばよい。この場合、デコーダ２０は、ランダムにトークンを選択してもよいし、トークンが記録されているメモリのアドレス値が最も小さいトークンを選択してもよいし、最も大きいトークンを選択してもよい。
【０１１３】
図９の擬似コードの９行目の処理が完了すると、図１０に示すように、Ｔ＝｛（２，ｂ６，−１，ｂｌｕｅ），（６，ｂ４，−３，ｒｅｄ），（９，ｂ５，−５，ｇｒｅｅｎ），（７，ｂ３，−３，ｒｅｄ），（４，ｂ１，−８，ｂｌｕｅ  ｂｌａｃｋ），（４，ｂ４，−６，ｒｅｄ）｝となる。（７，ｂ３，−４，ｒｅｄ）と（７，ｂ３，−７，ｇｒｅｅｎ  ｗｈｉｔｅ）の２つが（７，ｂ３，−３，ｒｅｄ）に比べてスコアが小さいため除去されている。
【０１１４】
（ハードウェア構成）
図１２は、第１実施形態に係るパターン認識装置１０のハードウェアブロック図である。パターン認識装置１０は、ＣＰＵ（Central  Processing  Unit）１０１と、操作部１０２と、表示部１０３、マイクロフォン１０４と、ＲＯＭ（Read  Only  Memory）１０５と、ＲＡＭ（Random  Access  Memory）１０６と、記憶部１０７と、通信装置１０８と、バス１０９とを備える。各部は、バス１０９により接続される。
【０１１５】
ＣＰＵ１０１は、ＲＡＭ１０６の所定領域を作業領域としてＲＯＭ１０５または記憶部１０７に予め記憶された各種プログラムとの協働により各種処理を実行し、パターン認識装置１０（特徴抽出部１２およびデコーダ２０）を構成する各部の動作を統括的に制御する。また、ＣＰＵ１０１は、ＲＯＭ１０５または記憶部１０７に予め記憶されたプログラムとの協働により、操作部１０２、表示部１０３、マイクロフォン１０４および通信装置１０８等を実現させる。
【０１１６】
操作部１０２は、マウスやキーボード等の入力デバイスであって、ユーザから操作入力された情報を指示信号として受け付け、その指示信号をＣＰＵ１０１に出力する。
【０１１７】
表示部１０３は、ＬＣＤ（Liquid  Crystal  Display）等の表示装置である。表示部１０３は、ＣＰＵ１０１からの表示信号に基づいて、各種情報を表示する。例えば、表示部１０３は、デコーダ２０が出力する認識結果を表示する。なお、通信装置１０８または記憶部１０７等に認識結果を出力する場合には、パターン認識装置１０は、表示部１０３を備えなくてもよい。
【０１１８】
マイクロフォン１０４は、音声信号を入力するデバイスである。予め記録された音声信号または通信装置１０８から入力される音声信号のパターン認識をする場合、または、音声以外の信号のパターン認識をする場合には、パターン認識装置１０は、マイクロフォン１０４を備えなくてもよい。
【０１１９】
ＲＯＭ１０５は、パターン認識装置１０の制御に用いられるプログラムおよび各種設定情報等を書き換え不可能に記憶する。ＲＡＭ１０６は、ＳＤＲＡＭ（Synchronous  Dynamic  Random  Access  Memory）等の揮発性の記憶媒体である。ＲＡＭ１０６は、ＣＰＵ１０１の作業領域として機能する。具体的には、パターン認識装置１０が用いる各種変数およびパラメータ等を一時記憶するバッファ等として機能する。
【０１２０】
記憶部１０７は、フラッシュメモリ等の半導体による記憶媒体、磁気的または光学的に記録可能な記憶媒体等の書き換え可能な記録装置である。記憶部１０７は、パターン認識装置１０の制御に用いられるプログラムおよび各種設定情報等を記憶する。また、記憶部１０７は、スコア関数のパラメータおよびＷＦＳＴに係る各種の情報等を予め記憶する。
【０１２１】
通信装置１０８は、外部の機器と通信して、音声信号の入力および認識結果の出力等に用いられる。予め記録された音声信号またはマイクロフォン１０４から入力した音声信号のパターン認識をする場合であり、認識結果を表示部１０３または記憶部１０７に出力する場合には、パターン認識装置１０は、通信装置１０８を備えなくてもよい。
【０１２２】
なお、手書き文字のパターン認識を行う場合には、パターン認識装置１０は、筆跡入力装置をさらに備える。また、ＯＣＲを行う場合には、パターン認識装置１０は、スキャナまたはカメラ等をさらに備える。また、ジェスチャ認識、手信号の認識または手話認識を行う場合には、パターン認識装置１０は、動画像信号を入力するビデオカメラをさらに備える。音声を利用しないこれらのパターン認識を行う場合には、パターン認識装置１０は、マイクロフォン１０４を備えなくてもよい。
【０１２３】
本実施形態のパターン認識装置１０で実行されるプログラムは、インストール可能な形式または実行可能な形式のファイルでＣＤ−ＲＯＭ、フレキシブルディスク（ＦＤ）、ＣＤ−Ｒ、ＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｋ）等のコンピュータで読み取り可能な記録媒体に記録されて提供される。
【０１２４】
また、本実施形態のパターン認識装置１０で実行されるプログラムを、インターネット等のネットワークに接続されたコンピュータ上に格納し、ネットワーク経由でダウンロードさせることにより提供するように構成してもよい。また、本実施形態のパターン認識装置１０で実行されるプログラムをインターネット等のネットワーク経由で提供または配布するように構成してもよい。また、本実施形態のパターン認識装置１０で実行されるプログラムを、ＲＯＭ等に予め組み込んで提供するように構成してもよい。
【０１２５】
本実施形態のパターン認識装置１０で実行されるプログラムは、上述した特徴抽出部１２およびデコーダ２０（トークン記憶部３１、トークン操作部３２、スコア算出部３３、重複除去部３４、枝刈部３５、出力部３６）を含むモジュール構成となっており、ＣＰＵ１０１（プロセッサ）が記憶媒体等からプログラムを読み出して実行することにより上記各部が主記憶装置上にロードされ、特徴抽出部１２およびデコーダ２０（トークン操作部３２、スコア算出部３３、重複除去部３４、枝刈部３５、出力部３６）が主記憶装置上に生成されるようになっている。なお、特徴抽出部１２およびデコーダ２０の一部または全部がハードウェアにより構成されていてもよい。
【０１２６】
（効果）
以上のように、本実施形態に係るデコーダ２０は、入力記号にスコア関数を特定するスコア識別子を割り当てたＷＦＳＴを用いている。これにより、本実施形態に係るデコーダ２０によれば、遷移にトークンを割り当てる処理およびスコア関数のパラメータを除くＨＭＭのデータを別途保持する必要が無くなり、構成が簡単になる。
【０１２７】
そして、本実施形態に係るデコーダ２０は、割り当てられた状態と最後に通過した遷移の入力記号とが同一のトークンの重複を排除する。これにより、デコーダ２０は、自己遷移を正しく取り扱うために、１つの状態に入ってくる遷移に割り当てられる入力記号を１種類とするようにＷＦＳＴを展開しておく必要が無くなり、状態数および遷移数を少なくし、記憶領域を削減することができる。
【０１２８】
＜第２実施形態＞
図１３は、第２実施形態に係るデコーダ４０のブロック図である。図１４は、第２実施形態に係るデコーダ４０の処理内容を表す擬似コードを示す図である。
【０１２９】
なお、第２実施形態に係るデコーダ４０は、第１実施形態のデコーダ２０に代えて、パターン認識装置１０に備えられる。デコーダ４０を構成および実行するプログラムは、第１実施形態に係るデコーダ２０と略同一であるので、同一の機能および構成については図面中に同一の符号を付して詳細な説明を省略し、相違点について説明する。
【０１３０】
デコーダ４０は、ソーティング部４１をさらに備える。ソーティング部４１は、トークン記憶部３１に記憶された複数のトークンをソート（並べ替え）する。
【０１３１】
複数のトークンが同じスコア識別子を保持している場合がある。そのため、図９の擬似コードの１１行目で、デコーダ４０は、同じ引数でスコア関数を呼び出す場合がある。そこで、スコア関数は、２以上の計算結果を記憶するキャッシュを用いて、引数が同じ場合に再計算をせずに計算結果を返す。これにより、スコア関数は、同じ引数で呼び出された場合の計算量を削減することができる。
【０１３２】
しかし、キャッシュが大きくなると、デコーダ４０の記憶領域が増加してしまう。そこで、ソーティング部４１は、スコア関数の引数が同じ場合の再計算を無くすとともに、スコア関数の計算結果を記憶する容量を小さくするように、トークン記憶部３１に記憶された複数のトークンをソートする。
【０１３３】
より具体的には、ソーティング部４１は、同一の種類の入力記号を保持するトークンがまとまるように複数のトークンをソートする。そして、スコア算出部３３は、入力記号毎に信号スコアを１回算出する。例えば、スコア算出部３３は、最後に計算した信号スコアを１個だけ記憶する記憶領域を有し、同一の入力記号に対して１回目だけ信号スコアを計算し、２回目以降は計算をせずにその記憶領域から信号スコアを出力する。
【０１３４】
ソーティング部４１は、一例として、連想配列の添え字に入力記号を割り当て、値にトークンの集合を割り当てる。これにより、ソーティング部４１は、それぞれの値に含まれるトークンの集合を、全て同一の入力記号とすることができる。例えば、デコーダ４０は、図９の擬似コードの９行目から１１行目に代えて、図１４の擬似コードを実行する。
【０１３５】
これにより、デコーダ４０は、同じ引数で、２回以上スコア関数を呼び出すことはなくなる。なお、図１４の擬似コードでは、Ｙは、２つの要素の組（入力記号，トークンの集合）を要素とする集合を表す。Ｙに含まれる２つの要素の組における、１つ目の要素である入力記号に重複は存在しない。
【０１３６】
また、ある２つの要素の組の１つ目の値をｉ、２つ目の値をＴｉとすると、Ｔｉに含まれるトークンが保持している入力記号は、全てｉである。従って、図１４の１２行目にあるように先にスコア関数ａｍ＿ｓｃｏｒｅを呼び出し、その結果をｓに代入しておくことで、１４行目でスコア関数を呼び出さなくてもよくなる。
【０１３７】
また、トークン記憶部３１は、トークンの集合を配列で保持してもよい。これにより、トークン記憶部３１は、データ構造を大きく変更せずに、トークンの集合を記憶することができる。
【０１３８】
この場合、図９の擬似コードの９行目を実行するには、まず、ソーティング部４１は、トークンをソートする。その後、重複除去部３４は、隣接するトークンの入力記号と状態とが同じであるかを判定すればよい。ただし、この場合、ソーティング部４１は、第１キーを入力記号に割り当て、第２キーを状態に割り当てて、第１キーを優先してソートする。これにより、ソーティング部４１は、入力記号が同一のトークンを隣接して配置することができる。
【０１３９】
また、この場合、重複除去部３４は、配列の先頭から順にそれぞれのトークンの信号スコアを算出する。さらに、重複除去部３４は、最後に算出した信号スコアを１つだけ記憶する。これにより、重複除去部３４は、配列のｊ番目のトークンの入力記号がｊ−１番目のトークンと同じ入力記号であった場合、ｊ番目のトークンに対する信号スコアはｊ−１番目の音響スコアと同じとすることができる。従って、ソーティング部４１は、このような場合にスコア関数の呼び出しを無くすことができる。
【０１４０】
また、ソーティング部４１は、クイックソートまたはマージソート等のどのようなアルゴリズムでソートをしてもよい。また、スコア識別子、つまり入力記号が、０以上の整数値で表され、とりうる値の最大値が記憶域に記録できる程度の範囲であれば、ソーティング部４１は、バケットソートにより入力記号をソートしてもよい。
【０１４１】
本実施形態に係るデコーダ４０は、入力記号と状態とが同一のトークンを検出するために、入力記号（スコア識別子）毎にトークンをまとめる。これにより、デコーダ４０は、ある時刻に入力された信号または特徴量と入力記号（スコア識別子）とに対するスコア関数の呼び出しを、入力記号毎に１回とすることができる。この結果、デコーダ４０によれば、信号スコアの計算量を削減するとともに、算出結果を記憶しておく記憶領域を少なくすることができる。
【０１４２】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０１４３】
１０  パターン認識装置
１２  特徴抽出部
２０  デコーダ
２２  記憶部
３１  トークン記憶部
３２  トークン操作部
３３  スコア算出部
３４  重複除去部
３５  枝刈部
３６  出力部
４０  デコーダ
４１  ソーティング部
１０１  ＣＰＵ
１０２  操作部
１０３  表示部
１０４  マイクロフォン
１０５  ＲＯＭ
１０６  ＲＡＭ
１０７  記憶部
１０８  通信装置
１０９  バス
２０１  変換部
２０２  音声認識デコーダ
【図１】
2015121707.tif 000003
【図２】
2015121707.tif 000004
【図３】
2015121707.tif 000005
【図４】
2015121707.tif 000006
【図５】
2015121707.tif 000007
【図６】
2015121707.tif 000008
【図７】
2015121707.tif 000009
【図８】
2015121707.tif 000010
【図９】
2015121707.tif 000011
【図１０】
2015121707.tif 000012
【図１１】
2015121707.tif 000013
【図１２】
2015121707.tif 000014
【図１３】
2015121707.tif 000015
【図１４】
2015121707.tif 000016