(前提)
まず、本実施形態の前提となる技術および定義等について説明する。
重み付き有限状態オートマトン(WFSA)は、遷移に入力記号および重みが割り当てられる。WFSAは、状態の集合Q、遷移の集合E、入力記号の集合Σ、重みの集合K、初期状態の集合I、終了状態の集合F、初期重み関数λ、および終了重み関数ρの8つの要素の組(Q,E,Σ,K,I,F,λ,ρ)で構成される。遷移は、4つの要素の組(前状態,次状態,入力記号,重み)で構成される。
本実施形態では、遷移には、入力記号の集合Σに含まれる記号の他に、εを割り当てることができる。εは、記号が空であることを意味する。εはΣに含まれないものとする。遷移をした結果として得られる入力記号がεである遷移、すなわち、本実施形態においてεが入力記号として割り当てられている遷移を、空遷移またはε遷移と呼ぶ。
入力記号列は、WFSAに割り当てられた入力記号を0個以上連結した記号列である。なお、0個の記号を連結した入力記号列とは、まだ記号が1つも連結されておらず、空の記号列を意味する。
本実施形態では、遷移eの前状態をp(e)と表し、遷移eの次状態をn(e)と表し、遷移eに割り当てられている入力記号をi(e)と表し、遷移eに割り当てられている重みをw(e)と表す。本実施形態では、空集合を{}と表す。後述する疑似コードでは、空集合を0に/を重ねた文字で表す。
重みの集合Kは、一例として、整数全体の集合、実数全体の集合、複素数全体の集合、行列、ブーリアン(0および1)の集合等である。重みの集合Kは、正でない実数の集合または負でない実数の集合等であってもよい。本実施形態では、初期重みおよび終了重みは、0であるものとする。初期重みおよび終了重みが含まれるWFSAは、初期重みおよび終了重みの無いWFSAに変換すればよい。具体的には、WFSAの初期状態に対して、新たな初期状態と、新たな初期状態から元の初期状態へと向かう1つの遷移とを追加し、そして、追加した遷移に元々の初期重みを割り当てれば、初期重みを0としたWFSAに変換することができる。終了重みについても同様である。
拡張WFSAは、境界フラグ、出現位置、および識別子を付与したWFSAである。本実施形態では、拡張WFSAを第1オートマトンとも呼ぶ。
境界フラグは、入力記号が割り当てられた経路の境界を示す。すなわち、境界フラグは、拡張WFSAから不要な経路を除去した場合に、1本の遷移に置き換えられる経路の境界の位置を示す。なお、ある経路の終端の境界は、続く他の経路の始端の境界となる。従って、経路の範囲の始端を示す境界と、続く経路の範囲の終端を示す境界とは、1つの境界フラグにより特定される。
境界フラグは、一例として、拡張WFSAを生成するパターン認識装置等により付与される。例えば、パターン認識装置が音声認識装置であり、認識結果として入力記号が単語である拡張WFSAを出力する場合、ある音声を認識した単語が対応する拡張WFSA上の経路の始端と終端とを表す情報が、境界フラグとなる。また、パターン認識装置がOCRであり、認識結果として入力記号が文字である拡張WFSAを出力する場合、ある画像を認識した文字が対応する拡張WFSA上の経路の始端と終端とを表す情報が、境界フラグとなる。
出現位置は、境界フラグにより表される境界の出現位置を表す。例えば、出現位置は、パターン認識装置が入力した系列データにおける、境界に対応するデータ位置である。また、パターン認識装置が音声認識装置である場合には、出現位置は、境界が発生した時刻またはフレーム番号であってもよい。また、パターン認識装置がOCRである場合には、出現位置は、画像上における境界部分の座標であってもよい。
識別子は、併合可能な経路を識別するための値または記号である。すなわち、ある境界から始まる複数の経路のうち、1本の遷移に置き換えることが可能な経路を識別する値または記号である。従って、拡張WFSAから不要な経路を除去する場合において、ある境界から始まる複数の経路のうち識別子が同一となる複数の経路は、不要な経路を除去した後のWFSAでは1本の遷移に置き換えられる。
例えば、識別子は、その識別子が割り当てられている拡張WFSAの状態または遷移の元となっている探索ネットワーク上の状態または遷移を特定する情報である。例えば、拡張WFSAを出力したパターン認識装置が参照した探索ネットワーク(例えば、重み付き有限状態トランスデューサ,WFST)の状態を特定する情報(例えば、HMMの状態番号または探索ネットワークの状態番号等)であってもよい。
本実施の形態では、境界フラグは、拡張WFSAの遷移に割り当てられる。本実施形態では、境界フラグが割り当てられた遷移の前状態が、直前の経路の終端の境界、および、続く経路の始端の境界を表す。
また、本実施の形態では、境界の出現位置は、対応する境界フラグが割り当てられた遷移の前状態となる。また、本実施の形態では、識別子は、境界フラグが割り当てられた遷移の次状態に割り当てられる。従って、ある境界から始まる複数の経路のうち、境界フラグが割り当てられた遷移の次状態に割り当てられた識別子が同一の経路が、1つの遷移に置き換える。なお、識別子は、他の状態にも割り当てられていてもよいが、遷移の次状態以外の状態に割り当てられた識別子は、本実施の形態では参照されない。
本実施形態では、遷移eに境界フラグが割り当てられているか否かをb(e)と表す。b(e)がtrueの場合、遷移eに境界フラグが割り当てられている。b(e)がfalseの場合、遷移eに境界フラグが割り当てられていない。また、本実施形態では、状態qに対応する出現位置をt(q)と表し、状態qに対応する識別子をid(q)と表す。
なお、境界フラグを状態に割り当てるように拡張WFSAを構成することもできる。例えば、遷移eの前状態に境界フラグを割り当てるならばb(p(e))と、次状態に境界フラグを割り当てるならばb(n(e))とすることで、遷移に境界フラグを割り当てている場合と同様に、境界フラグの有無を判定することができる。同様に、出現位置および識別子を遷移に割り当てるように拡張WFSAを構成してもよい。
また、入力記号が割り当てられた経路の境界を境界フラグにより明示的に表すのではなく、別の表現で境界を表してもよい。例えば、全ての状態に出現位置を割り当てるのではなく、境界となる遷移の前状態にのみ出現位置を割り当てることにより、ある遷移eの前状態p(e)に出現位置が割り当てられていれば、b(e)=true、割り当てられていなければb(e)=falseとすることができる。また、他にも、境界となる遷移の次状態にのみに識別子を割り当てることにより、ある遷移eの次状態n(e)に出現位置が割り当てられていればb(e)=true、割り当てられていなければb(e)=falseとすることができる。従って、境界か否かを示す値は、境界フラグにより明示的に表されるだけでなく、別の情報を用いて表すこともできる。
出現位置付きWFSAは、出現位置が付与されたWFSAである。本実施形態では、出現位置付きWFSAを第2オートマトンとも呼ぶ。出現位置付きWFSAは、拡張WFSAから、空遷移を除去し且つ同一の出現位置の同一の識別子の経路を1つの遷移に併合して不要な経路を除くことにより生成される。
出現位置付きWFSAのそれぞれの状態には、拡張WFSAにおける、対応する境界の出現位置が付与される。これにより、出現位置付きWFSAは、入力記号の発生位置(データ位置、時刻、座標等)を特定させることができる。例えば、音声認識装置から出力された拡張WFSAを変換して生成された出現位置付きWFSAは、単語が発生された時刻を特定することができる。また、OCRから出力された拡張WFSAを変換して生成された出現位置付きWFSAは、文字の画像上の座標を特定することができる。
(変換装置20の構成)
図1は、実施形態に係る変換装置20の構成を示す図である。つぎに、変換装置20の構成を説明する。
変換装置20は、拡張WFSAである第1オートマトンを入力し、入力した第1オートマトンの少なくとも一部の不要な経路を除いて、出現位置付きWFSAである第2オートマトンに変換する。そして、変換装置20は、変換した第2オートマトンを出力する。
変換装置20は、第1オートマトン記憶部21と、最良経路重み算出部22と、最良経路重み記憶部23と、第2オートマトン記憶部24と、変換部25と、第1優先度付きキュー26と、第2優先度付きキュー27とを備える。
第1オートマトン記憶部21は、外部から受け取った第1オートマトンを記憶する。第1オートマトン記憶部21は、変換部25から常時アクセスが可能なように第1オートマトンを記憶する。
最良経路重み算出部22は、第1オートマトンに含まれる状態のそれぞれについて、当該状態から終了状態までに至る最良経路の重みを算出する。最良経路重み算出部22は、一例として、第1オートマトンの終了状態から逆方向に経路を辿って、それぞれの状態までの重みの最良値を計算する。より具体的には、最良経路重み算出部22は、Dijkstraのアルゴリズム、Bellman−Fordのアルゴリズム、generic single−source shortest distanceアルゴリズム等を用いて、終了状態からその状態までの重みの最良値を計算する。また、第1オートマトンに循環する経路が含まれていなければ、非循環有向グラフ(Directed Acyclic Graph)に使用できる距離計算アルゴリズムを用いて、終了状態からその状態までの重みの最良値を計算してもよい。なお、最良経路重み算出部22は、第1オートマトンに含まれる状態のそれぞれについての最良経路の重みを、外部から取得してもよい。
最良経路重み記憶部23は、最良経路重み算出部22により算出された、第1オートマトンに含まれる状態のそれぞれについて、その状態から終了状態までの最良の経路の重みを記憶する。最良経路重み記憶部23は、変換部25から状態が指定された場合に、対応する最良経路重みを返す。最良経路重み記憶部23は、一例として、連想配列を用いて、それぞれの状態と最良経路重みとを対応付けて記憶する。また、状態が番号で識別できる場合であれば、配列を用いて、それぞれの状態と最良経路重みとを対応付けて記憶してもよい。
第2オートマトン記憶部24は、第2オートマトンを記憶する。第2オートマトン記憶部24は、変換部25から常時アクセスが可能なように第2オートマトンを記憶する。第2オートマトン記憶部24は、変換部25による変換処理が完了した後において、完成した第2オートマトンを外部に出力する。
変換部25は、第1オートマトンを第2オートマトンに変換する。より具体的には、変換部25は、第1オートマトン記憶部21および第2オートマトン記憶部24に対して常時アクセスしながら、第1オートマトンにおける少なくとも一部の不要な経路を除去して第2オートマトンを生成する。
変換部25は、指定部41と、探索部42と、状態登録部43と、遷移登録部44と、出現位置登録部45とを有する。
指定部41は、第1オートマトンの1つの状態を、探索の開始位置として指定する。探索部42は、指定部41により開始位置が指定されると、識別子毎に、第1オートマトンにおける、指定された開始位置から次の境界までの重みが最良となる経路を探索する。つまり、指定部41は、指定された開始位置から次の境界までの経路のうち、経路の重みと次の境界から終了状態までの最良の経路とを合成した重みが最良となる経路を、識別子毎に探索する。そして、探索部42は、指定した開始位置から始まる全ての経路について次の境界まで探索が完了すると、識別子毎の探索済み経路の先端の状態を指定部41に返す。
以後、指定部41は、探索部42によって探索が完了する毎に、新たな開始位置を指定する。具体的には、指定部41は、第1オートマトンにおける、初期状態から探索済み経路の先端の状態までの累積重みと、当該探索済み経路の先端の状態から終了状態に至る最良経路の重みとを加えた合成重みが最良となる探索済み経路における先端の状態を、開始位置として指定する。なお、指定部41は、変換開始時においては、初期状態のみで構成される経路を探索済み経路であるとして合成重みを算出して、開始位置を指定する。そして、指定部41は、全ての経路の探索が終了状態まで完了した場合、処理を完了する。
状態登録部43は、探索部42による探索開始時において、第1オートマトンのそれぞれの初期状態に対応して、第2オートマトンに新たな初期状態を登録する。これにより、状態登録部43は、第2オートマトンに初期状態を追加することができる。
また、状態登録部43は、探索部42による探索において、開始位置から次の境界まで探索が達した場合、探索して得られた経路の先端の状態に対応して、第2オートマトンに新たな状態を登録する。すなわち、状態登録部43は、探索部42による探索において、開始位置から次の境界までの重みが最良となる経路の探索が完了するたびに第2オートマトンに新たな状態を登録する。これにより、状態登録部43は、第1オートマトンの境界位置に対応させて、第2オートマトンに状態を追加することができる。
また、状態登録部43は、探索部42による探索において、開始位置から終了状態まで探索が達した場合、探索して得られた経路の先端の状態に対応して、第2オートマトンに新たな終了状態を登録する。これにより、状態登録部43は、第2オートマトンに終了状態を追加することができる。
ただし、状態登録部43は、既に対応する新たな状態または終了状態が第2オートマトンに既に登録されている場合は、新たな状態および新たな終了状態は登録しない。これにより、状態登録部43は、探索部42が同一の状態を探索する場合には、第2オートマトンに同一の状態を重複して登録しないようにすることができる。
遷移登録部44は、探索部42による探索において、開始位置から次の境界まで探索が達した場合、探索して得られた経路における開始位置と先端の状態とに対応して、第2オートマトンに新たな遷移を登録する。すなわち、遷移登録部44は、探索部42による探索において、開始位置から次の境界までの重みが最良となる経路の探索が完了するたびに第2オートマトンに新たな遷移を登録する。また、遷移登録部44は、探索部42による探索において、開始位置から終了状態まで探索が達した場合、探索して得られた経路における開始位置と終了状態とに対応して、第2オートマトンに新たな遷移を登録する。これにより、遷移登録部44は、第2オートマトンに遷移を追加することができる。
より具体的には、遷移登録部44は、前状態、後状態、重み、および、入力記号列を、遷移として第2オートマトンに登録する。前状態は、開始位置の状態に対応して、第2オートマトンに登録された状態である。また、後状態は、探索して得られた重みが最良の経路の先端の状態(終了状態まで探索が達した場合には終了状態)に対応して、第2オートマトンに登録された状態である。また、重みは、探索して得られた重みが最良の経路における、累積重みである。また、入力記号列は、探索して得られた重みが最良の経路に割り当てられた入力記号列である。
出現位置登録部45は、第2オートマトンに新たな状態が登録される毎に(すなわち、開始位置から次の境界まで探索が達する毎に)、第1オートマトンに付与されている、対応する出現位置を、第2オートマトンに登録する。これにより、出現位置登録部45は、第2オートマトンの境界の出現位置を、第2オートマトンに付与することができる。
第1優先度付きキュー26および第2優先度付きキュー27のそれぞれは、内部に記憶している要素を優先度が高い順に出力する。
具体的には、第1優先度付きキュー26は、第1オートマトンにおける、探索部42による探索済み経路の先端の状態と、初期状態から探索済み経路の先端の状態までの累積重みとを含む情報の組を要素として記憶する。そして、第1優先度付きキュー26は、合成重みが最良となる探索済み経路の先端の状態を含む要素から順に出力する。なお、合成重みは、初期状態から探索済み経路の先端の状態までの累積重みと、当該探索済み経路の先端の状態から終了状態に至る最良経路の重みとを加えた重みである。
第2優先度付きキュー27は、第1オートマトンにおける、探索中の経路の先端の状態と、開始位置から探索途中の状態までの経路重みとを含む情報の組を要素として記憶する。そして、第2優先度付きキュー27は、経路重みと、当該探索途中の経路の先端の状態から終了状態に至る最良の経路の重みとを加えた重みが最良となる、探索中の経路の先端の状態を含む要素から順に出力する。
そして、指定部41および探索部42は、一例として、このような第1優先度付きキュー26および第2優先度付きキュー27のそれぞれにアクセスして、開始位置の指定および探索を進める。具体的には、開始位置から次の境界まで探索が達した場合、探索部42は、第1優先度付きキュー26に要素を書き込む。続いて、指定部41は、第1優先度付きキュー26から要素を1つ取り出す。そして、指定部41は、取り出した要素に含まれる探索済み経路の先端の状態を、次の開始位置として指定する。これにより、指定部41は、合成重みが最良となる探索済み経路における先端の状態を、開始位置として指定することができる。
また、探索部42は、第2優先度付きキュー27から要素を1つ取り出す。そして、探索部42は、取り出した要素に含まれる探索途中の状態から出る全ての遷移のそれぞれについて、次の状態を探索途中の状態とする新たな要素を生成し、生成した新たな要素を第2優先度付きキュー27に書き込むことにより探索を進める。これにより、探索部42は、開始位置から次の境界まで経路の探索を進める場合において、最良の経路から順に探索を進めることができる。
(処理フロー)
図2は、実施形態に係る変換装置20の処理フローを示す図である。つぎに、変換装置20の処理手順の概略を説明する。
まず、ステップS11において、変換装置20は、第1オートマトンを取得する。続いて、ステップS12において、変換装置20は、第1オートマトンのそれぞれの状態について、最良経路重みを算出する。変換装置20は、最良経路重みを外部から取得する場合には、算出処理をしなくてもよい。
続いて、ステップS13において、変換装置20は、第1オートマトンの初期状態のそれぞれに対応させて、第2オートマトンに初期状態を登録する。続いて、ステップS14において、変換装置20は、第2オートマトンに登録した初期状態に対して、第1オートマトンの対応する初期状態に付与されている出現位置を登録する。
続いて、変換装置20は、ステップS15とステップS20との間のループ処理を実行する。ステップS15において、変換装置20は、合成重みが最良となる探索済み経路における先端の状態を開始位置として指定する。なお、変換開始時においては、変換装置20は、初期状態のみで構成される経路を探索済み経路として合成重みを算出して、開始位置を指定する。
開始位置を指定すると、続いて、変換装置20は、ステップS16とステップS19との間のループ処理を実行する。まず、ステップS16において、変換装置20は、識別子毎に、開始位置から次の境界までの重みが最良となる経路を探索する。続いて、ステップS17において、変換装置20は、それぞれの識別子について、第2オートマトンに新たな遷移および新たな状態を登録する。続いて、ステップS18において、変換装置20は、それぞれの識別子について、第2オートマトンに登録した状態に対して、第1オートマトンに付与されている対応する出現位置を登録する。
ステップS19において、変換装置20は、全ての識別子について開始位置から始まる全ての経路を次の境界まで探索完了した場合には、内側のループを抜けて処理を外側のループに戻す。
続いて、ステップS20において、変換装置20は、第1オートマトンの開始状態から終了状態まで全ての経路について、探索完了した場合には、外側のループも抜けて、処理をステップS21に進める。そして、ステップS21において、変換装置20は、生成した第2オートマトンを出力して処理を終了する。
(擬似コード)
図3は、指定された開始位置から次の境界までの最良の経路を探索する処理を説明するための擬似コードを示す図である。図4は、開始位置を指定する処理を説明するための擬似コードを示す図である。
第1オートマトン(拡張WFSA)をA=(Q,E,Σ,K,I,F,λ,ρ)と表す。また、変換後の第2オートマトン(出現位置付きWFSA)をA’=(Q’,E’,Σ*,K,I’,F’,λ’,ρ’)と表す。
なお、Σ*の要素は、Σの要素から構成される列である。例えば、{a,b}∈Σであれば、{ε,a,b,aa,ab,ba,bb,aaa,・・・}∈Σ*である。また、本実施の形態では、第1オートマトンおよび第2オートマトンの初期重みおよび終了重みは0である。また、本実施の形態では、重みが小さい経路ほど良い経路であるとする。
擬似コードでは、状態qから終了状態の集合Fに含まれる状態までの最良の経路の重みを、w(q)で得ることができる。本実施形態においては、w(q)は、図1に示す最良経路重み記憶部23に予め記憶されている。
また、擬似コードにおいて、Bは、識別子の集合を表す。Pは、探索済みの状態の集合を表す。Mは、3つの値の組(Qに含まれる状態、Q’に含まれる状態、境界フラグが割り当てられている遷移の重み)の集合である。変換装置20は、探索が境界を通過する毎に必要に応じて3つの値の組を集合Mに追加する。
また、擬似コードにおいて、Sは、7つの値の組(状態,前の状態,重み,前の重み,入力記号列,前の入力記号,境界フラグ)を要素として記憶する優先度付きキューである。本実施形態においては、本実施形態においては、Sは、図1で示した第2優先度付きキュー27により実現される。
Sは、1つ目の値である状態をq、3つ目の値である重みをwqとする場合、wq+w(q)が優先度となる。pop(S)は、Sから最も優先度の高い要素を取り出す操作を表し、push(S,7つの値の組)は、Sに7つの値の組を要素として追加する操作を表す。本実施の形態では、重みが小さいほど良いので、pop(S)の操作により、優先度(wq+w(q))が最も小さい要素が取り出される。もし、重みが大きいほど良い経路であるとする場合には、pop(S)の操作により、優先度(wq+w(q))が最も大きい要素が取り出される。
また、擬似コードにおいて、Ssymは、5つの値の組(状態,前の状態,累積重み,重み,入力記号列)を要素として記憶する優先度付きキューである。Ssymは、図1で示した第1優先度付きキュー26により実現される。
Ssymは、1つ目の値である状態をq、3つ目の値である累積重みをwqとする場合、wq+w(q)が優先度となる。pop(Ssym)は、Ssymから最も優先度の高い要素を取り出す操作を表し、push(Ssym,5つの値の組)はSsymに5つの値の組を要素として追加する操作を表す。本実施の形態では、重みが小さいほど良いので、pop(Ssym)の操作により、優先度(wq+w(q))が最も小さい要素が取り出される。もし、重みが大きいほど良い経路であるとする場合には、pop(Ssym)の操作により、優先度(wq+w(q))が最も大きい要素が取り出される。
変換装置20は、後述する図4に示される擬似コードから、図3に示される擬似コードを呼び出す。この場合において、優先度付きキューSsym,集合M,qi,qpi,wi,xiが引き渡される。ここで、qiは、指定された開始位置となる状態である。qpiは、開始位置となる状態の前状態である。ただし、qiが初期状態の場合、前の状態はないため、qpiにはqiを割り当てる。wiは、qpiからqiまでの最良の経路の累積重みである。xiは、qpiからqiまでの最良の経路上の入力記号列である。
まず、図3に示す擬似コードを参照して、指定された開始位置から次の境界までの最良の経路を探索する処理を説明する。
1行目では、変換装置20は、集合Bと集合Pを空集合で初期化する。
2行目では、変換装置20は、状態qiに対応する第2オートマトンA’の状態を集合Mから取り出して、q’iとする。
3行目では、変換装置20は、優先度付きキューSを初期化する。初期化に使う7つの値の組の1番目の値はqi、2番目の値はqpi、3番目の値はwi、4番目の値は0、5番目の値はxi、6番目の値はε、7番目の値はfalseである。
4行目では、変換装置20は、優先度付きキューSが空集合か否かを判定する。変換装置20は、優先度付きキューSが空集合でない場合、5行目から34行目までを繰り返して処理し、優先度付きキューSが空集合である場合、処理を35行目に進める。
5行目では、変換装置20は、優先度付きキューSから要素を1つ取り出し、1番目の値をq、2番目の値をqp、3番目の値をw、4番目の値をwp、5番目の値をx、6番目の値をxp、7番目の値をbとする。
6行目では、変換装置20は、qが集合Pに含まれているか否かを判断する。変換装置20は、qが集合Pに含まれていない場合、7行目から34行目までを処理し、qが集合Pに含まれている場合、処理を4行目に戻す。
7行目では、変換装置20は、qを集合Pに追加する。6行目および7行目の処理により、変換装置20は、本擬似コードが呼び出されてから処理を終えるまでの間において、同じ状態に対して、7行目から34行目までを重複して処理することを防ぐことができる。これにより、変換装置20は、qが既に探索が完了した状態である場合、qからの探索を中止して計算量を削減することができる。
8行目では、変換装置20は、qが終了状態の集合Fに含まれるか否か、つまり、qが終了状態であるか否かを判定する。すなわち、ここでは、変換装置20は、探索が終了状態まで達したか否かを判定している。変換装置20は、qが終了状態の集合Fに含まれる場合、9行目から15行目を処理する。変換装置20は、qが終了状態の集合Fに含まれない場合、処理を16行目に進める。
16行目では、変換装置20は、bがtrueか否かを判定する。bがtrueである場合、探索が境界を通過したことを意味する。従って、ここでは、変換装置20は、探索が境界まで達したか否かを判定している。変換装置20は、bがtrueの場合、17行目から27行目を処理する。変換装置20は、bがtrueではない場合、29行目から34行目を処理する。
まず、29行目から34行目の処理を説明する。すなわち、探索が終了状態まで達しておらず、且つ、探索が境界まで達していない場合における変換装置20の処理を説明する。
29行目は、Eに含まれる遷移eのうち、前状態p(e)がqであるそれぞれの遷移、つまり、qから出ていくそれぞれの遷移について30行目から34行目を処理することを表す。従って、変換装置20は、qから出ていくそれぞれの遷移について30行目から34行目を処理する。
30行目では、変換装置20は、eの次状態n(e)が集合Pに含まれているか否かを判定する。eの次状態n(e)が集合Pに含まれていない場合、変換装置20は、31行目から34行目を処理する。eの次状態n(e)が集合Pに含まれている場合、次の遷移eについて、30行目から34行目の処理をする。なお、変換装置20は、6行目で同一の目的の判定処理を実行するので、30行目の判定処理を実行してなくてもよい。しかし、変換装置20は、30行目の判定処理を実行することにより、無駄な要素を優先度付きキューSに追加しなくてよく、計算量を少なくできる。
31行目では、変換装置20は、遷移eの境界フラグb(e)がtureか否かを判定する。変換装置20は、遷移eの境界フラグb(e)がtureの場合、32行目を処理し、遷移eの境界フラグb(e)がtureでない場合、34行目を処理する。
32行目では、変換装置20は、優先度付きキューSに、新たな7つの値の組(eの次状態n(e),q,w+w(e),w(e),x,i(e),true)を追加する。
34行目では、変換装置20は、優先度付きキューSに、新たなSに7つの値の組(eの次状態n(e),q,w+w(e),0,x・i(e),ε,false)を追加する。なお、x・i(e)は、入力記号列xの後ろに、遷移eに割り当てられている入力記号を連結する処理を表す。例えば、x=ab、i(e)=cであれば、x・i(e)=abcとなる。
続いて、17行目から27行目の処理を説明する。すなわち、探索が終了状態まで達しておらず、且つ、探索が境界まで達している場合における変換装置20の処理を説明する。
17行目では、変換装置20は、id(q)が集合Bに含まれているか否かを判定する。変換装置20は、id(q)が集合Bに含まれていない場合、18行目から27行目までを処理し、id(q)が集合Bに含まれている場合、処理を4行目に戻す。
18行目では、変換装置20は、id(q)を集合Bに追加する。17行目および18行目の処理により、変換装置20は、本擬似コードが呼び出されてから処理を終えるまでの間において、同一の識別子に対して、18行目から27行目までを重複して処理することを防ぐことができる。これにより、変換装置20は、同一の識別子については、優先度の最も高い経路、すなわち、最良の経路に対してのみ、19行目から27行目の処理を実行することができる。
19行目では、変換装置20は、1番目の値がqである3つの値の組が集合Mに含まれているか否かを判定する。変換装置20は、1番目の値がqである3つの値の組が集合Mに含まれている場合、20行目と21行目を処理し、含まれていない場合、23行目から26行目を処理する。
20行目では、変換装置20は、1番目の値がqである3つの値の組の2番目の値と3番目の値を集合Mから取り出し、それぞれq’nとwmとする。
21行目では、変換装置20は、第2オートマトンA’の遷移の集合であるE’に、新たな遷移を追加する。新たな遷移の前状態はq’i、次状態はq’n、入力記号列はx、重みはw−wmである。21行目を処理した後、変換装置20は、27行目を処理する。
23行目では、変換装置20は、第2オートマトンA’の状態の集合であるQ’に含まれない、新たな状態q’nを作成する。
24行目では、変換装置20は、第1オートマトンAのqpに割り当てられている出現位置を、新たな状態q’nに割り当てる。
25行目では、変換装置20は、第2オートマトンA’の状態の集合であるQ’に、新たな状態q’nを追加する。さらに、集合Mに3つの値の組(q,q’n,wp)を追加する。
26行目では、変換装置20は、第2オートマトンA’の遷移の集合であるE’に、新たな遷移を追加する。新たな遷移の前状態はq’i、次状態はq’n、入力記号列はx、重みはw−wpである。26行目を処理した後、変換装置20は、27行目を処理する。
27行目では、変換装置20は、優先度付きキューSsymに、新たな5つの値の組(q,qp,w,wp,xp)を追加する。
続いて、9行目から15行目の処理を説明する。すなわち、探索が終了状態まで達している場合における変換装置20の処理を説明する。
9行目では、変換装置20は、3つの値の組の1番目の値がqである要素が、集合Mに含まれているかを判定する。変換装置20は、3つの値の組の1番目の値がqである要素が集合Mに含まれている場合、10行目を処理し、含まれていない場合、12行目から14行目を処理する。
10行目では、変換装置20は、1番目の値がqである3つの値の組の2番目の値を集合Mから取り出し、q’nとする。10行目を処理した後、変換装置20は、15行目を処理する。
12行目では、変換装置20は、第2オートマトンA’の状態の集合であるQ’に含まれない、新たな状態q’nを作成する。
13行目では、変換装置20は、第1オートマトンAのqに割り当てられている出現位置を、新たな状態q’nに割り当てる。
14行目では、変換装置20は、第2オートマトンA’の状態の集合Q’と終了状態の集合F’に、新たな状態q’nを追加する。また、集合Mに、新たな3つの値の組(q,q’n,0)を追加する。14行目を処理した後、変換装置20は、15行目を処理する。
15行目では、変換装置20は、第2オートマトンA’の遷移の集合であるE’に、新たな遷移を追加する。新たな遷移の前状態はqi’、次状態はq’n、入力記号列はx、重みはwである。
そして、変換装置20は、4行目の処理の結果、優先度付きキューSに何ら要素が含まれなくなると、最後に35行目を処理する。35行目では、変換装置20は、処理結果として、Ssymと集合Mとを返す。
つぎに、図4に示す擬似コードを参照して、開始位置を指定する処理を説明する。変換装置20は、第1オートマトンAを取得した後に、図4の101行目からの変換処理を開始する。なお、第2オートマトンA’は、変換処理を実行することにより作成されるので、開始時点においては状態および遷移を含まない。より具体的には、Q’、E’、I’、F’は、開始時点では空集合である。
101行目では、変換装置20は、Ssymと集合Mを空集合で初期化する。
102行目は、初期状態の集合Iに含まれるそれぞれの状態について103行目から106行目を処理することを表す。従って、変換装置20は、初期状態の集合Iに含まれるそれぞれの状態qについて、103行目から106行目を処理する。
103行目では、変換装置20は、第2オートマトンA’の状態の集合であるQ’に含まれない、新たな状態q’nを作成する。
104行目では、変換装置20は、第1オートマトンAのqに割り当てられている出現位置を、新たな状態q’nに割り当てる。
105行目では、変換装置20は、第2オートマトンA’の状態の集合Q’に、新たな状態q’nを追加する。また、変換装置20は、第2オートマトンA’の初期状態の集合I’に、新たな状態q’nを追加する。さらに、変換装置20は、集合Mに3つの値の組(q,q’n,0)を追加する。
106行目では、変換装置20は、優先度付きキューSsymに、新たな5つの値の組(q,q,0,0,ε)を追加する。
107行目では、変換装置20は、優先度付きキューSsymが空集合か否かを判定する。変換装置20は、優先度付きキューSsymが空集合でない場合、108行目から109行目までを繰り返して処理し、優先度付きキューSsymが空集合である場合、本擬似コードの処理を終了する。
108行目では、変換装置20は、Ssymから5つの値の組を取り出し、1番目の値をqi、2番目の値をqpi、4番目の値をwi、5番目の値をxiとする。
109行目では、変換装置20は、第1引数をSsym、第2引数を集合M、第3引数をqi、第4引数をqpi、第5引数をwi、第6引数をxiとして、図3に示した擬似コードを呼び出す。そして、図3に示した擬似コードの戻り値として、優先度付きキューSsymおよび集合Mが返される。従って、変換装置20は、戻された値により、Ssymおよび集合Mを更新する。
(具体的な処理例)
図5は、第1オートマトン(拡張WFSA)の一例を示す。図6は、図5に示す第1オートマトンを、変換装置20により不要な経路の削減をしたことにより生成される第2オートマトン(出現位置付きオートマトン)の一例を示す。
以下、変換装置20が、擬似コードに従って、図5の第1オートマトンを図6の第2オートマトンに変換する場合における、具体的な処理例を説明する。
図5および図6の丸は状態を表す。丸の中の数字は状態番号を表す。太線の丸は初期状態を表す。本例では、状態1が初期状態である。二重丸は終了状態を表す。図5の例では、状態14が終了状態である。図6の例では、状態4が終了状態である。
矢印は遷移を表す。矢印の元が前状態、矢印の指す先が次状態である。矢印付近に記載された文字列の/の左側は入力記号を表し、右側は重みを表す。それぞれの状態の丸に重ねて記載された小さな破線の丸の中の数字は、状態に割り当てられた出現位置を表す。本例では、遷移が1つ進む毎に値が1増えるように出現位置を割り当てているが、遷移が1つ進む毎に値が増加または減少するのであれば他の方法で出現位置を割り当ててもよい。また、出現位置が2次元の画像上の座標である場合、出現位置は2つの値から構成される。また、状態の近くに記載された四角の中の数字は識別子を表す。入力記号の上の^は境界フラグを表す。例えば、図5の状態3から状態9への遷移をe3→9とした場合、b(e3→9)=trueとなる。
なお、第1オートマトンと区別すため、本例の説明では、第2オートマトンの状態番号に’を付ける。変換処理を行う前における第2オートマトンは空であるので、Q’={}、E’={}、I’={}、F’={}となる。
まず、変換処理に先立って、第1オートマトンのそれぞれの状態について、その状態から終了状態までの最良経路の重みを計算しておく。本例では、w(1)=6、w(2)=5、w(3)=4、w(4)=3、w(5)=4、w(6)=6、w(7)=3、w(8)=4、w(9)=3、w(10)=2、w(11)=2、w(12)=2、w(13)=1、w(14)=0となる。
変換処理が開始されると、まず、図4の101行目で、MとSsymが初期化される。初期状態は状態1であるので、102行目でq=1となる。103行目で新しい状態を作成し、q’n=1’とする。この新しい状態は図6の状態1に対応する。t(q)=t(1)=1であるので、104行目でt(1’)=1となる。105行目で、Q’={1’}、I={1’}、M={(1,1’,0)}となる。106行目でSsymに5つの値の組を追加すると、Ssym={(1,1,0,0,ε)}となる。Ssymは空集合ではないので、108行目に進む。108行目で、qi=1、qpi=1、wi=0、xi=ε、Ssym={}となる。109行目で、図3の擬似コードを呼び出す。
図3の1行目でBとPが空集合で初期化される。2行目でq’i=1’となる。3行目で、Sに7つの値の組が追加され、S={(1,1,0,0,ε,ε,false)}となる。Sは空集合ではないので、5行目に進む。Sには1つしか要素がないので、優先度にかかわらず5行目で、q=1、qp=1、w=0、wp=0、x=ε、xp=ε、b=falseとなる。Sから要素が1つ取り出されたので、S={}である。今、q=1であり、Pに1は含まれていない。従って、7行目に進む。7行目で、Pに1が追加され、P={1}となる。状態1は終了状態ではないので、16行目に進む。bはfalseであるので、16行目の条件は満たさない。従って、29行目に進む。状態1から出ていく遷移は1本のみなので、その遷移について30行目から34行目が処理される。n(e)=2であるが、P={1}であるので30行目の条件を満たし、31行目へ進む。状態1から状態2への遷移の入力記号には^はないので、b(e)=falseである。従って、34行目で、S={(2,1,1,0,ε,ε,false)}となる。
4行目に戻る。Sは空集合ではないので、5行目に進む。5行目で、q=2、qp=1、w=1、wp=0、x=ε、xp=ε、b=falseとなる。また、S={}となる。Pに2は含まれていないので、7行目に進み、そこでP={1,2}となる。状態2は終了状態ではなく、b=falseであるので、29行目に進む。状態2から出ていく遷移は2本あるので、まず、次状態が状態3である遷移について30行目から34行目を処理する。n(e)=3であるので、30行目の条件は満たす。b(e)=falseであるので、31行目の条件は満たさない。従って、34行目でS={(3,2,2,0,A,ε,false)}となる。5番目の値がAであるのは、εは空記号列であるのでε・A=Aとなるためである。次に、次状態が状態5である遷移について同様に処理する。すると、34行目で、S={(3,2,2,0,A,ε,false),(5,2,3,0,B,ε,false)}となる。
4行目に戻る。Sは空集合ではないので、5行目に進む。1番目の値が3であるSの要素の優先度は、2+w(3)=2+4=6であり、1番目の値が5であるSの要素の優先度は、3+w(5)=3+4=7である。値が小さい方が優先度が高いので、5行目で、q=3、qp=2、w=2、wp=0、x=A、xp=ε、b=falseとなり、S={(5,2,3,0,B,ε,false)}となる。Pに3は含まれていないので7行目でP={1,2,3}となる。状態3は終了状態ではなく、b=falseであるので29行目に進む。状態3から出ていく遷移は2本あるので、まず、次状態が状態4である遷移について30行目から34行目を処理する。n(e)=4であるので、30行目の条件は満たす。b(e)=falseであるので、31行目の条件は満たさない。
従って、34行目でS={(5,2,3,0,B,ε,false),(4,3,3,0,A,ε,false)}となる。次に、次状態が状態9である遷移について同様に処理する。b(e)=trueであるため、32行目で、S={(5,2,3,0,B,ε,false),(4,3,3,0,A,ε,false),(9,3,4,2,A,C,true)}となる。
4行目に戻る。Sは空集合ではないので、5行目に進む。1番目の値が5であるSの要素の優先度は3+w(5)=3+4=7、1番目の値が4であるSの要素の優先度は3+w(4)=3+3=6、1番目の値が9であるSの要素の優先度は4+w(9)=4+3=7である。従って、5行目で、q=4、qp=3、w=3、wp=0、x=A、xp=ε、b=falseとなり、S={(5,2,3,0,B,ε,false),(9,3,4,2,A,C,true)}となる。7行目でP={1,2,3,4}となる。状態4は終了状態ではなく、b=falseであるので、29行目に進む。状態4から出ていく遷移は1本のみである。32行目で、S={(5,2,3,0,B,ε,false),(9,3,4,2,A,C,true),(10,4,4,1,A,C,true)}となる。
4行目に戻る。Sは空集合ではないので、5行目に進む。新たに追加されたSの要素の優先度は4+w(10)=4+2=6であるので、5行目で、q=10、qp=4、w=4、wp=1、x=A、xp=C、b=trueとなり、S={(5,2,3,0,B,ε,false),(9,3,4,2,A,C,true)}となる。7行目で、P={1,2,3,4,10}となる。状態10は終了状態ではなく、b=trueであるので、17行目に進む。今、Bは空集合であるので、18行目に進む。id(10)=7であるので、B={7}となる。1番目の値が10である3つの値の組はMには含まれていないので、23行目に進む。新しく状態を作成し、q’n=2’とする。新しく状態q’n=2’は、図6の状態2に対応する。t(qp)=t(4)=4であることから、24行目でt(2’)=4となる。25行目で、Q’={1’,2’}、M={(1,1’,0),(10,2’,1)}となる。26行目で遷移(1’,2’,A,3)をE’に追加する。27行目でSsym={(10,4,4,1,C)}となる。
4行目に戻る。Sは空集合ではないので、5行目に進む。Sに含まれる2つの要素の優先度は何れも7である。どちらから処理してもよいが、ここでは、1番目の値が9である要素をpop(S)でSから取り出すこととする。すると、q=9、qp=3、w=4、wp=2、x=A、xp=C、b=trueとなり、S={(5,2,3,0,B,ε,false)}となる。7行目でP={1,2,3,4,9,10}となる。状態9は終了状態ではなく、b=trueであるので、17行目に進む。id(9)=7であり、B={7}であるので、17行目の条件を満たさない。
4行目に戻る。Sは空集合ではないので、5行目に進む。Sの要素は1つであるので、q=5、qp=2、w=3、wp=0、x=B、xp=ε、b=false、S={}となる。7行目でP={1,2,3,4,5,9,10}となる。状態5は終了状態ではなく、b=falseであるので、29行目に進む。状態5から出ていく遷移は2本あるので、まず、次状態が状態6である遷移について30行目から34行目を処理する。n(e)=6であるので、30行目の条件は満たす。b(e)=falseであるので、31行目の条件は満たさない。従って、34行目でS={(6,5,4,0,B,ε,false)}となる。次に、次状態が状態7である遷移について同様に処理する。b(e)=trueであるため、32行目で、S={(6,5,4,0,B,ε,false),(7,5,4,1,B,ε,true)}となる。
4行目に戻る。Sは空集合ではないので、5行目に進む。1番目の値が6であるSの要素の優先度は4+w(6)=4+6=10、1番目の値が7であるSの要素の優先度は4+w(7)=4+3=7である。従って、5行目で、q=7、qp=5、w=4、wp=1、x=B、xp=ε、b=trueとなり、S={(6,5,4,0,B,ε,false)}となる。7行目でP={1,2,3,4,5,7,9,10}となる。状態7は終了状態ではなく、b=trueであるので、17行目に進む。id(7)=6、B={7}であるので18行目に進み、B={6,7}となる。1番目の値が7である3つの値の組はMには含まれていないので、23行目に進む。新しく状態を作成し、q’n=3’とする。新しい状態q’n=3は、図6の状態3に対応する。t(qp)=t(5)=3であることから、24行目でt(3’)=3となる。25行目で、Q’={1’,2’,3’}、M={(1,1’,0),(10,2’,1),(7,3’,1)}となる。26行目で遷移(1’,3’,B,3)をE’に追加する。27行目でSsym={(10,4,4,1,C),(7,5,4,1,ε)}となる。
4行目に戻る。Sは空集合ではないので、5行目に進む。Sの要素は1つであるので、q=6、qp=5、w=4、wp=0、x=B、xp=ε、b=falseとなり、S={}となる。7行目でP={1,2,3,4,5,6,7,9,10}となる。状態6は終了状態ではなく、b=falseであるので、29行目に進む。状態1から出ていく遷移は1本のみなので、その遷移について30行目から34行目が処理される。n(e)=8であるので30行目の条件を満たし、31行目へ進む。b(e)=trueであるため、32行目で、S={(8,6,6,2,B,ε,true)}となる。
4行目に戻る。Sは空集合ではないので、5行目に進む。Sの要素は1つであるので、q=8、qp=6、w=6、wp=2、x=B、xp=ε、b=trueとなり、S={}となる。7行目でP={1,2,3,4,5,6,7,8,9,10}となる。状態8は終了状態ではなく、b=trueであるので、17行目に進む。id(8)=6であり、B={6,7}であるので、17行目の条件を満たさない。
4行目に戻る。Sが空集合なので35行目に進み、SsymとMを戻り値として、図4の擬似コードの109行目に処理が戻る。そして、SsymとMが更新される。Ssym={(10,4,4,1,C),(7,5,4,1,ε)}、M={(1,1’,0),(10,2’,1),(7,3’,1)}である。
図4の107行目に戻る。Ssymは空集合ではないので、108行目に進む。優先度は1番目の値と3番目の値から計算される。1番目の値が10のSsymの要素の優先度は、3番目の値が4であるので、4+w(10)=4+2=6となる。同様に、1番目の値が7のSsymの要素の優先度は4+w(7)=4+3=7である。従って、qi=10,qpi=4,wi=1,xi=Cとなる。109行目で図3の擬似コードを呼び出す。
図3の1行目でBとPが空集合で初期化される。2行目で、q’i=2’となる。3行目で、Sに7つの値の組が追加され、S={(10,4,1,0,C,ε,false)}となる。Sは空集合ではないので、5行目に進む。Sには1つしか要素がないので、q=10、qp=4、w=1、wp=0、x=C、xp=ε、b=false、S={}となる。今、q=10であるので、Pに10は含まれていない。
従って、7行目に進む。7行目で、Pに10が追加され、P={10}となる。状態10は終了状態ではなく、bはfalseであるので、29行目に進む。状態2から出ていく遷移は2本あるので、まず、次状態が状態11である遷移について30行目から34行目を処理する。n(e)=11であるので、30行目の条件は満たす。b(e)=falseであるので、31行目の条件は満たさない。従って、34行目でS={(11,10,3,0,C,ε,false)}となる。次に、次状態が状態13である遷移について同様に処理する。すると、34行目で、S={(11,10,3,0,C,ε,false),(13,10,2,0,C,ε,false)}となる。
4行目に戻る。Sは空集合ではないので、5行目に進む。1番目の値が11であるSの要素の優先度は3+w(11)=3+2=5、1番目の値が13であるSの要素の優先度は2+w(13)=2+1=3である。従って、5行目で、q=13、qp=10、w=2、wp=0、x=C、xp=ε、b=falseとなり、S={(11,10,3,0,C,ε,false)}となる。7行目でP={10,13}となる。状態13は終了状態ではなく、b=falseであるので、29行目に進む。状態13から出ていく遷移は1本のみである。34行目で、S={(11,10,3,0,C,ε,false),(14,13,3,0,C,ε,false)}となる。
4行目に戻る。Sは空集合ではないので、5行目に進む。1番目の値が11であるSの要素の優先度は3+w(11)=3+2=5、1番目の値が14であるSの要素の優先度は3+w(14)=3+0=3である。従って、5行目で、q=14、qp=13、w=3、wp=0、x=C、xp=ε、b=falseとなり、S={(11,10,3,0,C,ε,false)}となる。7行目でP={10,13,14}となる。状態14は終了状態であるので9行目に進む。 M={(1,1’,0),(10,2’,1),(7,3’,1)}であるので9行目は満たさないので12行目に進む。12行目で新しい状態を作成し、q’n=4’とする。新しい状態q’n=4’は図6の状態4に対応する。13行目では、t(qp)=t(14)=7であるのでt(4’)=7となる。14行目でQ’={1’,2’,3’,4’}、F’={4’}、M={(1,1’,0),(10,2’,1),(7,3’,1),(14,4’,0)}となる。15行目で遷移(2’,4’,C,3)をE’に追加する。
4行目に戻る。Sは空集合ではないので、5行目に進む。Sの要素は1つであるので、q=11、qp=10、w=3、wp=0、x=C、xp=ε、b=falseとなり、S={}となる。7行目でP={10,11,13,14}となる。状態11は終了状態ではなく、b=falseであるので、29行目に進む。状態11から出ていく遷移は1本のみである。34行目で、S={(14,11,5,0,C,ε,false)}となる。
4行目に戻る。Sは空集合ではないので、5行目に進む。Sの要素は1つであるので、q=14、qp=11、w=5、wp=0、x=C、xp=ε、b=falseとなり、S={}となる。Pに14が含まれているため、6行目を満たさない。
4行目に戻る。Sが空集合なので35行目に進み、SsymとMを戻り値として、図4の109行目に処理が戻る。そして、SsymとMが更新される。Ssym={(7,5,4,1,ε)}、M={(1,1’,0),(10,2’,1),(7,3’,1),(14,4’,0)}である。
図4の107行目に戻る。Ssymは空集合ではないので、108行目に進む。Ssymの要素は1つであるので、qi=7,qpi=5,wi=1,xi=εとなる。109行目で、図3の擬似コードを呼び出す。これまでと同様に処理を進めると、遷移(3’,4’,C,4)がE’に追加される。
図4の107行目に戻る。Ssymは空集合なので、図4の擬似コードの処理は完了する。以上により、冗長な経路が取り除かれた第2オートマトンが図6のように作成される。
なお、本例では、図5のように、第1オートマトンの全ての状態に出現位置を割り当てたが、利用するのは初期状態と終了状態と境界フラグが割り当てられている遷移の前状態の出現位置のみであるので、これらに対応する状態にのみ出現位置を割り当てるようにしてもよい。また、本例では、識別子を必要な状態にのみ割り当てたが、全ての状態に識別子を割り当ててもよい。
(ハードウェア構成)
図7は、実施形態に係る変換装置20のハードウェアブロック図である。変換装置20は、CPU(Central Processing Unit)101と、操作部102と、表示部103と、ROM(Read Only Memory)105と、RAM(Random Access Memory)106と、記憶部107と、通信装置108と、バス109とを備える。各部は、バス109により接続される。
CPU101は、RAM106の所定領域を作業領域としてROM105または記憶部107に予め記憶された各種プログラムとの協働により各種処理を実行し、変換装置20を構成する各部の動作を統括的に制御する。また、CPU101は、ROM105または記憶部107に予め記憶されたプログラムとの協働により、操作部102、表示部103および通信装置108等を実現させる。
操作部102は、マウスやキーボード等の入力デバイスであって、ユーザから操作入力された情報を指示信号として受け付け、その指示信号をCPU101に出力する。
表示部103は、LCD(Liquid Crystal Display)等の表示装置である。表示部103は、CPU101からの表示信号に基づいて、各種情報を表示する。例えば、表示部103は、変換装置20が出力する入力記号列を表示する。なお、通信装置108または記憶部107等に入力記号列を出力する場合には、変換装置20は、表示部103を備えなくてもよい。
ROM105は、変換装置20の制御に用いられるプログラムおよび各種設定情報等を書き換え不可能に記憶する。RAM106は、SDRAM(Synchronous Dynamic Random Access Memory)等の揮発性の記憶媒体である。RAM106は、CPU101の作業領域として機能する。具体的には、変換装置20が用いる各種変数およびパラメータ等を一時記憶するバッファ等として機能する。
記憶部107は、フラッシュメモリ等の半導体による記憶媒体、磁気的または光学的に記録可能な記憶媒体等の書き換え可能な記録装置である。記憶部107は、変換装置20の制御に用いられるプログラムおよび各種設定情報等を記憶する。また、記憶部107は、第1オートマトンおよび第2オートマトンに係る各種の情報等を記憶する。なお、変換装置20が備える第1オートマトン記憶部21、最良経路重み記憶部23、第2オートマトン記憶部24、第1優先度付きキュー26および第2優先度付きキュー27は、ROM105、RAM106および記憶部107の何れにより実現されてもよい。
通信装置108は、外部の機器と通信して、第1オートマトンおよび第2オートマトン等の入力および出力等に用いられる。予め記録された第1オートマトンを用いる場合であり、第2オートマトンを表示部103または記憶部107に出力する場合には、変換装置20は、通信装置108を備えなくてもよい。
本実施形態の変換装置20で実行されるプログラムは、インストール可能な形式または実行可能な形式のファイルでCD−ROM、フレキシブルディスク(FD)、CD−R、DVD(Digital Versatile Disk)等のコンピュータで読み取り可能な記録媒体に記録されて提供される。
また、本実施形態の変換装置20で実行されるプログラムを、インターネット等のネットワークに接続されたコンピュータ上に格納し、ネットワーク経由でダウンロードさせることにより提供するように構成してもよい。また、本実施形態の変換装置20で実行されるプログラムをインターネット等のネットワーク経由で提供または配布するように構成してもよい。また、本実施形態の変換装置20で実行されるプログラムを、ROM等に予め組み込んで提供するように構成してもよい。
本実施形態の変換装置20で実行されるプログラムは、上述した変換装置20の各部(第1オートマトン記憶部21、最良経路重み算出部22、最良経路重み記憶部23、第2オートマトン記憶部24、変換部25(指定部41、探索部42、状態登録部43、遷移登録部44および出現位置登録部45)、第1優先度付きキュー26および第2優先度付きキュー27)を含むモジュール構成となっており、CPU101(プロセッサ)が記憶媒体等からプログラムを読み出して実行することにより上記各部が主記憶装置上にロードされ、変換装置20(第1オートマトン記憶部21、最良経路重み算出部22、最良経路重み記憶部23、第2オートマトン記憶部24、変換部25(指定部41、探索部42、状態登録部43、遷移登録部44および出現位置登録部45)、第1優先度付きキュー26および第2優先度付きキュー27)が主記憶装置上に生成されるようになっている。なお、変換装置20の一部または全部がハードウェアにより構成されていてもよい。
(効果)
以上のように、本実施形態に係る変換装置20は、第1オートマトンから不要な経路を除いた第2オートマトンを生成することができる。この際に、変換装置20は、第1オートマトンにおける同一の出現位置に対して同一の入力記号が割り当てられている複数の経路を、識別子毎に1つの経路に併合して、第2オートマトンを生成する。これにより、変換装置20によれば、同一の入力記号であっても、元となる探索ネットワークにおいて異なる経路を通過して生成された入力記号を(例えば、通過したHMMの状態が異なる場合)、経路を併合せずに別個の遷移に割り当てることができる。
さらに、変換装置20は、第1オートマトンにおける境界毎に探索を行って最良の経路を検出するので、境界毎に遷移を生成することができるとともに、それぞれの境界の出現位置を第2オートマトンに付与することができる。これにより変換装置20によれば、境界が発生したデータ位置、時刻または順番等を表す出現位置を保持した第2オートマトンを生成することができる。
(変形例)
図8は、変形例に係る変換装置20において実行される擬似コードを示す。
次に、変形例に係る変換装置20について説明する。第1オートマトン(拡張WFSA)は、同一の識別子を有する複数の経路上に異なる入力記号が割り当てられていてもよい。この場合、探索部42は、入力記号と識別子との組毎に、第1オートマトンにおける開始位置から次の境界までの重みが最良となる経路を探索する。これにより、探索部42は、最良の経路に割り当てられている入力記号とは異なる、最良の経路ではない経路に割り当てられている入力記号も、第2オートマトンに割り当てることができる。
入力記号と識別子との組毎に重みが最良となる経路を探索する場合、図3の擬似コードにおけるPおよびBに記憶させる要素を変更すればよい。具体的には、Pには、状態および入力記号列の2つの値の組を要素として記憶させる。また、Bには、識別子および入力記号列の2つの組を要素として記憶させる。
さらに、図3に示した擬似コードにおける、6行目、7行目、17行目、18行目、27行目、30行目を変更する。以下、擬似コードの相違点について説明する。本変形例の以下の説明で用いる行番号は、特に記載をしない限り、変更後の疑似コードである図8を指すものとする。
6行目では、変換装置20は、(q,x・xp)の組が集合Pに含まれているか否かを判断する。変換装置20は、(q,x・xp)の組が集合Pに含まれていない場合、7行目から35行目までを処理し、(q,x・xp)の組が集合Pに含まれている場合、処理を4行目に戻す。
7行目では、変換装置20は、(q,x・xp)の組を集合Pに追加する。
17行目では、変換装置20は、(id(q),x・xp)の組が集合Bに含まれているか否かを判定する。変換装置20は、(id(q),x・xp)の組が集合Bに含まれていない場合、18行目から28行目までを処理し、(id(q),x・xp)の組が集合Bに含まれている場合、処理を4行目に戻す。
20行目では、変換装置20は、(id(q),x・xp)の組を集合Bに追加する。
図3における27行目は、図8の18行目と19行目の2行に分けて処理をする。18行目では、変換装置20は、1番目の値がid(q)である組が集合Bに含まれているか否かを判定する。1番目の値がid(q)である組が集合Bに含まれている場合、変換装置20は、19行目を処理し、含まれていない場合には何ら処理をしない。19行目では、元の27行目と同一の処理をする。すなわち、図8の19行目では、変換装置20は、優先度付きキューSsymに、新たな5つの値の組(q,qp,w,wp,xp)を追加する。すなわち、変換装置20は、入力記号列を考慮せずに識別子がBに含まれていない場合にのみ元の27行目を処理している。
31行目では、変換装置20は、(n(e),x・i(e))の組が集合Pに含まれているか否かを判定する。(n(e),x・i(e))の組が集合Pに含まれていない場合、変換装置20は、32行目から35行目を処理する。(n(e),x・i(e))の組が集合Pに含まれている場合、次の遷移eについて、31行目から35行目の処理をする。31行目で行われる処理は、省略してもよい。
このような処理をすることにより、変形例に係る変換装置20は、最良の経路に割り当てられている入力記号とは異なる、最良の経路ではない経路に割り当てられている入力記号も、第2オートマトンに割り当てることができる。
(パターン認識装置)
図9は、実施形態に係るパターン認識システム200の構成を示す。以下、実施形態に係るパターン認識システム200を説明する。
パターン認識システム200は、入力された系列データのパターンを認識し、認識結果を第2オートマトン(出現位置付きWFSA)で出力する。なお、パターン認識システム200は、第2オートマトンから最良の経路上の1つの記号列を検出してユーザに提示してもよいし、第2オートマトンからN番目(Nは2以上の整数)までに良い経路上のN個の記号列を検出してユーザに提示してもよい。
パターン認識システム200は、パターン認識装置210と、変換装置20とを備える。パターン認識装置210は、系列データを入力してパターン認識をし、第1オートマトン(拡張WFSA)を出力する。変換装置20は、パターン認識装置210が出力した第1オートマトンを第2オートマトンに変換する。変換装置20は、図1から図8を参照して説明した装置であり、詳細な説明を省略する。
パターン認識システム200に入力される系列データは、パターンを表す系列データであればどのような系列データであってもよい。入力される系列データは、一例として、音声データ、筆跡を表すデータ、文字を表す画像データまたは手話等のジェスチャを表す動画像データ等である。
パターン認識装置210は、特徴抽出部211と、デコーダ212とを有する。
特徴抽出部211は、パターンを表す系列データを入力して、一定時間毎に、系列データの特徴量を取得する。そして、特徴抽出部211は、取得した系列データの特徴量をデコーダ212に渡す。なお、特徴量は、複数の値から構成される場合もある。この場合、複数の特徴量の組は、特徴ベクトルと呼ばれる。
特徴量は、その系列データの区間毎の特徴を表す情報であり、デコーダ212がスコアを算出するために用いられる。音声データを入力する場合、特徴抽出部211は、一例として、10ミリ秒単位(フレーム)毎に、特徴量を取得する。
デコーダ212は、特徴抽出部211から特徴量が入力される毎に、パターン認識を行い、認識結果を第1オートマトン(拡張WFSA)として出力する。この場合において、デコーダ212は、系列データのモデル(HMM、Gaussian Mixture Model、Neural Network等)と、モデルのつながり方が記録された探索ネットワーク(例えば、重み付き有限状態トランスデューサ,WFST)とを用いてパターン認識を行う。
例えば、パターン認識システム200が音声認識装置であれば、系列データは音声データである。モデルは例えば音節、音素、または、音素より細かい単位の音声をモデル化したデータである。モデルとして音素を表すモデルを用いる場合、デコーダ212はモデルを用いて、入力された音声に最も対応する音素を得ることができる。重み付き有限状態トランスデューサ(WFST)を用いるデコーダを用いる場合、探索ネットワークはWFSTである。WFSTは、音素を表すモデルの並び、単語に対応する音素の並び、および、単語の並びの確率モデルを含むことができる。認識の単位が単語である場合、第1オートマトンは、単語ラティスとなる。
また、パターン認識システム200がOCR装置であれば、認識したい画像から抽出した行が系列データとなる。英語であれば左から右に読むので、行を縦方向にスライスした画像データが左から右に順にパターン認識システム200に入力される。パターン認識システム200が手書き文字認識装置であれば、筆跡が系列データとなる。パターン認識システム200がOCR装置または手書き文字認識装置である場合、認識の単位は、一例として、単語または文字である。他は、音声認識装置の場合と同様である。
デコーダ212が、境界フラグ、出現位置、および識別子を付与した拡張WFSAを出力する方法について説明する。例えば非特許文献1および非特許文献2に記載されているように、従来技術を用いることでデコーダ212は、単語、文字、音素またはHMMの状態等の出現位置、つまり、それらが対応する入力された系列データの位置を出力することができる。従って、デコーダ212は、出力する拡張WFSAに出現位置を埋め込むことができる。また、非特許文献2に記載されているように、デコーダ212は、拡張WFSAの入力記号間の境界を検出することができる。例えば、入力記号が単語であれば、デコーダ212は、単語と単語の境界を検出することができる。従って、デコーダ212は、拡張WFSAに境界フラグを埋め込むことができる。また、デコーダ212は、非特許文献1に記載された技術を用いることにより、HMM状態ラティスを出力できる。
デコーダ212は、探索ネットワーク(例えばWFST)を探索しながら、最良の経路に対応するHMM状態ラティスの経路を作成する。従って、デコーダ212は、HMM状態ラティスのそれぞれの状態がWFSTのどの状態を通った時に作成されたかを記録することができる。従って、例えば、デコーダ212は、HMM状態ラティスの状態に対応するWFSTの状態を、識別子として付与してもよい。つまり、この場合、識別子はWFSTの状態を示す番号等であり、HMM状態ラティスのそれぞれの状態に識別子が割り当てられているということである。なお、デコーダ212は、HMM状態ラティスのそれぞれの状態がWFSTのどの遷移を通った時に作成されたかを記録することも、状態を記録するのと同様に行うことができる。従って、デコーダ212は、識別子をWFSTの状態に代えて遷移としてもよい。このようにしてデコーダ212は、境界フラグ、出現位置、識別子をHMM状態ラティスに割り当てることができる。
デコーダ212は、モデルに含まれる経路のうち重みが良い経路を見つける処理を行う過程で、デコーダ212の処理の開始状態からそれぞれの状態に至る経路の重みを計算する。デコーダ212の処理の開始状態を終了状態とし、デコーダ212の処理が完了した状態を初期状態とするWFSAをデコーダ212が生成するようにデコーダ212を構成すれば、変換装置20は、それぞれの状態から終了状態までの最良経路の重みを別途計算することなく得ることができる。なぜなら、デコーダ212により、処理の開始状態からそれぞれの状態までの最良経路の重みが計算済みであるからである。この場合、変換装置20に入力されるWFSAの遷移の向きは、デコーダ212が入力される特徴量の順序とは逆向きとなる。つまり、後から入力された特徴量に対応する入力記号ほどWFSAの初期状態に近い遷移に割り当てられることになる。そこで、入力記号列を出力する直前に入力記号列の並びを反転するように変換装置20を構成してもよい。
(処理フロー)
図10は、実施形態に係るパターン認識システム200の処理順序を示すフローチャートである。
まず、系列データの入力が開始されると、ステップS101において、パターン認識システム200は、系列データを取得する。続いて、ステップS102において、特徴抽出部211は、取得した系列データから特徴量を抽出してデコーダ212に供給する。
続いて、ステップS103において、デコーダ212は、探索ネットワークおよびモデルを用いて、入力した系列データの特徴量に対応する第1オートマトン(拡張WFSA)を生成する。続いて、ステップS104において、変換装置20は、第1オートマトンを第2オートマトン(出現位置付きWFSA)に変換する。続いて、ステップS105において、変換装置20は、第2オートマトンを出力する。
なお、パターン認識システム200は、図7に示した構成と同様のハードウェア構成により実現される。また、パターン認識システム200は、図7に示した構成と同様のハードウェア構成がプログラムを実行することにより、実現されてもよい。パターン認識システム200で実行されるプログラムは、パターン認識モジュール(特徴抽出モジュールおよびデコーダモジュール)および変換モジュールを含むモジュール構成となっており、CPU101(プロセッサ)が記憶媒体等からプログラムを読み出して実行することにより上記各部が主記憶装置上にロードされ、パターン認識システム200(パターン認識装置210および変換装置20)が主記憶装置上に生成されるようになっている。なお、パターン認識システム200の一部または全部がハードウェアにより構成されていてもよい。
以上のような実施形態に係るパターン認識システム200は、系列データのパターン認識をして、不要な経路を含まず、さらに、出現位置が付いたWFSAを生成することができる。これにより、パターン認識システム200は、WFSAからユーザに提示する記号列を生成する処理の計算量を低減させることができる。
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、請求の範囲に記載された発明とその均等の範囲に含まれる。