以下に添付図面を参照して、オートマトン決定化装置、決定化方法及び決定化プログラムの最良な実施形態を詳細に説明する。
[第1の実施形態]
図1は、本実施形態に係るオートマトン決定化装置100のハードウェア構成を示したブロック図である。図1に示したように、オートマトン決定化装置100は、CPU(Central Processing Unit)1、操作部2、表示部3、ROM(Read Only Memory)4、RAM(Random Access Memory)5、記憶部6等を備え、各部はバス7により接続されている。なお、後述するオートマトン決定化装置200、300及び400においても、オートマトン決定化装置100と同様のハードウェア構成を有するものとする。
CPU1は、RAM5の所定領域を作業領域として、ROM4又は記憶部6に予め記憶された各種制御プログラムとの協働により各種処理を実行し、オートマトン決定化装置100を構成する各部の動作を統括的に制御する。また、CPU1は、ROM4又は記憶部6に予め記憶された所定のプログラムとの協働により、後述する各機能部の機能を実現させる。
操作部2は、マウスやキーボード等の入力デバイスであって、ユーザから操作入力された情報を指示信号として受け付け、その指示信号をCPU1に出力する。
表示部3は、LCD(Liquid Crystal Display)等の表示装置により構成され、CPU1からの表示信号に基づいて、各種情報を表示する。
ROM4は、オートマトン決定化装置100の制御にかかるプログラムや各種設定情報等を書き換え不可能に記憶する。
RAM5は、SDRAM等の揮発性の記憶媒体であって、CPU1の作業エリアとして機能し、具体的には、後述する逐次決定化処理時において生成される各種変数やパラメータの値等を一時記憶するバッファ等の役割を果たす。
記憶部6は、磁気的又は光学的に記録可能な記憶媒体を有し、オートマトン決定化装置100の制御にかかるプログラムや各種設定情報等を書き換え可能に記憶する。また、記憶部6は、後述する逐次決定化処理で処理の対象となる非決定性FSAや後述する非決定性WFST等のオートマトンに係る各種の情報を予め記憶する。
図2は、CPU1とROM4又は記憶部6に予め記憶された所定のプログラムとの協働により実現される、オートマトン決定化装置100の機能的構成を示した図である。同図に示したように、オートマトン決定化装置100は決定化処理部11、部分集合生成部12、部分決定化部13、繰り返し処理部14を備えている。
決定化処理部11は、非決定性FSAをサブセット構成法とよばれる公知の方法により決定化する機能部である。以下、決定化処理部11が行う決定化の方法を、従来の決定化方法という。
ここで、決定化処理部11が行う従来の決定化方法について説明する。図3は、非決定性FSAであるA1=(Q1,Σ,E1,I1,F1)の一例を示した図である。Q1は状態の集合を、Σは入力記号の集合を、E1は遷移の集合でE1⊆Q1×Σ×Q1を、I1は初期状態の集合を、F1は受理状態の集合を夫々意味している。また、遷移の集合E1の各要素である遷移をδとして、prev(δ)を遷移元の状態、next(δ)を遷移先の状態、input(δ)を遷移の入力記号であるとする。なお、prev(δ)∈Q1、next(δ)∈Q1、input(δ)∈Σである。
図3の場合、Q1={0,1,2,3}、Σ={a,b,c}、I1={0}、F1={0}となる。なお、FSAの状態名は整数値で表現されているものとしている。この例の場合、遷移の集合E1は図4で示した遷移表のように表すことができる。ここで、図4は、図3に示した非決定性FSAの遷移表を示した図である。同図に示したように、遷移の種別を表す「遷移」と、遷移元の状態を表す「遷移元状態」と、遷移先の状態を表す「遷移先状態」と、この遷移に付与された「入力記号」と、が対応付けられている。この遷移表において、例えば行R1は、入力記号aによる状態0から状態1への遷移δ0を表している。
なお、図3で示したFSAが非決定性FSAであるということは、一の入力記号に対応する遷移先の状態数を数えることで判別することができる。例えば、現在の状態が初期状態である状態0であるとき、入力記号aがこのFSAに入力された場合を参照すると、遷移先の状態は状態1か状態2となり、遷移先の状態は1つに定まらない。このことから、図3のFSAが非決定性FSAであることがわかる。
決定化処理部11は、図3で示した非決定性FSAをサブセット構成法によって決定化するため、図5で示した決定化処理を実行する。以下、決定化処理部11が行う決定化処理について説明する。なお、本処理の前提として、非決定性FSAであるA1=(Q1,Σ,E1,I1,F1)を決定化した決定性FSAを、A2=(Q2,Σ,E2,i2,F2)とする。ここでi2は初期状態であり、この処理によって決定化を実行する前、つまりステップS11が実行される前のF2やE2やQ2は空集合であるものとする。また、決定化処理の実行時に生成される、後述するqsub、q'sub、x、δ’等の各種変数は作業エリアとして機能するRAM5に一時記憶されるものとする。なお、図中の「φ」は空集合を表す。
まず、決定化処理部11は、A2の初期状態i2にI1を代入し(ステップS11)、このA2の初期状態であるi2をキューSに1つの要素として追加する(ステップS12)。
次いで、決定化処理部11は、Sが空集合か否かを判定する(ステップS13)。ここで、Sを空集合でないと判定した場合には(S13;Yes)、決定化処理部11は、Sから要素を一つ取り出しqsubに代入した後(ステップS14)、現在のqsubに関してΣに含まれた要素(入力記号)全てに対してステップS16〜23の処理を行ったか否かを判定する(ステップS15)。
ステップS15において、Σの要素全てに対して処理を行ったと判定した場合には(ステップS15;Yes)、ステップS13の処理へと再び戻る。また、ステップS15において、Σの要素全てに対して処理を行っていないと判定した場合には(ステップS15;No)、決定化処理部11は、まだ処理していない入力記号をxに代入する(ステップS16)。
続いて、決定化処理部11は、qsubに含まれる状態のうち入力記号xを伴う遷移の遷移先の状態の集合をq'subに代入する(ステップS17)。次に決定化処理部11は、入力記号xによりqsubからq'subに遷移することのできる遷移δ’をE2に追加する(ステップS18)。
次いで、決定化処理部11は、q'subが既にQ2に存在しているか否かを判定する。ここで、存在すると判定した場合(ステップS19;Yes)、ステップS15の処理へと再び戻る。
一方、q'subがQ2に存在していないと判定した場合(ステップS19;No)、決定化処理部11は、q'subをQ2に追加する(ステップS20)。続いて決定化処理部11は、q'subの要素がF1に含まれているか否かを判定する(ステップS21)。ここで、q'subの要素がF1に含まれていないと判定した場合には(ステップS21;No)、ステップS23の処理へと直ちに移行する。
また、ステップS21において、q'subの要素がF1に含まれていると判定した場合には(ステップS21;Yes)、決定化処理部11は、q'subを受理状態の集合F2に追加し(ステップS22)、ステップS23の処理へと移行する。
続くステップS23では、決定化処理部11がSにq'subを追加した後(ステップS23)、ステップS15の処理へと再び戻る。
一方、ステップS13において、Sを空集合と判定した場合には(ステップS13;No)、ステップS24へと移行し、Q2に追加された状態の名前を付け替えた後(ステップS24)、本処理を終了する。この名前の付け替えについては後述する。
なお、受理状態に到達できない経路にある状態や遷移は除去することとしてもよい。また、Sはキューである必要はなく、例えばスタック等、要素を1つずつ追加、取り出しでき、空であるかどうかを確認できるものであればその態様は問わないものとする。
図6は、上記した決定化処理により図3の非決定性FSA A1を決定化した決定性FSA A2を示した図である。また、図6での遷移の集合E2は、図7に示した遷移表で表される。なお、図6では、名前の付け替えの処理(ステップS24)前の状態を示している。
図6において、各状態の「{}」で囲まれた中の数字はQ1の要素であり、「{}」で囲まれた全体の集合は上述したステップS20で追加された各q'subに対応するものである。具体的に、状態B11は{0}、状態B12は{1,2}、状態B13は{0,3}のように、集合Q1の部分集合として表現されている。以下、この部分集合が名前として割り当てられた状態のこと、すなわち、名前の付け替え前のQ2に含まれている状態のことを「決定化済み状態」という。
上述したステップS24で行う名前の付け替えの処理は、決定化済み状態の名前、つまり、状態の集合Q1の部分集合として表現された名前を、単一の名前に置き換える処理のことを意味している。例えば、図6の場合、名前の付け替え前のQ2の要素、つまり決定化済み状態の名前は整数値の集合で表されている。このように状態の名前を集合として保持するのは効率が悪いので、それぞれの集合に互いに異なる整数値を割り当てる。つまり、状態B11の{0}を0に、状態B12の{1,2}を1に、状態B13の{0,3}を2に名前を付け替える。図8は、この図6の状態の名前を付け替えた結果の一例を示した図である。同様に図6の遷移表である図7での「遷移元状態」と「遷移先状態」との名前も付け替えることができる。
このように名前の付け替えを行うことで、状態の名前をQ1の部分集合として保持する必要がなくなり、決定化後のFSAを記憶しておくために必要な記憶域を削減できる。さらに具体的には、整数が4バイトで表現されていた場合、名前の付け替え前は状態名を記憶するために状態名とその数を記憶しておく必要があるため、状態名の記憶に20バイト、状態名の数を記憶するために12バイトで計32バイト必要であるが、名前の付け替え後は12バイトで済むようになる。
しかしながら、決定化処理部11の決定化処理のみでは状態数や遷移数が増えるに伴い、Q1の部分集合として表現される名前の長さも増加するため、決定化済み状態を記憶しておくために大きなメモリ量が必要となる。そのため、本実施形態では、部分集合生成部12、部分決定化部13、繰り返し処理部14により、後述する逐次決定化処理を実行し非決定性FSAの決定化を行うことで、決定化済み状態q'subに含まれている状態の数を減らし、決定化済み状態を記憶しておくためにメモリ量を削減する。
以下、本実施形態で行う逐次決定化処理の概要について説明する。q'subに含まれる状態がどのように作成されるのかは、上述した図5のステップS17で説明したとおりである。Q2に含まれている決定化済み状態qsubから入力記号aにより遷移した先の状態がq'subであるとすると、qsubに含まれる各状態から入力記号aをとって遷移した先の状態は全てq'subに含まれることになる。ここで、aは入力記号の集合Σに含まれる入力記号である。したがって、E1に含まれる遷移のうち、遷移元の状態がqsubに含まれており、且つ、その入力記号がaであるような遷移の数がq'subに含まれる状態数の上限値となる。
さて、qsubに含まれた状態が遷移元であり、入力記号がaであり、q'subに含まれている状態が遷移先であるようなE1に含まれる遷移の集合をδsubとすると、決定化の操作はδsubに含まれている遷移を1つの遷移にまとめているとみなすことで処理することができる。実際、決定化後のFSA A2において、qsubから入力記号aをとってq'subへと遷移する遷移はただ1つである。δsubに含まれる遷移の数がq'subに含まれる状態数の上限値であるから、δsubをいくつかの集合に分割することができればq'subに含まれる状態数の上限値を減らすことができる。つまり、決定化済み状態を記憶するための記憶域を削減するためにはδsubを分割すればよいということがわかる。
ところが、δsubに含まれた全ての遷移を分割しても、それらの遷移については決定化したことにはならない場合がある。例えば、δsubに含まれる入力記号aに係る2つの遷移(δ0、δ1)を分割したとすると、qsubから入力記号aをとって遷移する遷移先の状態は2つになる。これはつまり決定化できていないということである。そこで、本実施形態では、δsubに含まれた全ての遷移について分割を行うのでなく、δsubに含まれた遷移のうち一部の遷移を分割し、残りの遷移については分割しないようにする。以下、δsubのうち分割を行わない遷移のことを「決定化対象とする遷移」という。また、δsubに含まれた遷移のうち一部の遷移を分割して決定化すること、つまり非決定性FSAの遷移の一部を決定化することを「部分決定化」という。ただし、全ての遷移について決定化することも、この部分決定化の概念に含めるものとする。
また、部分決定化によって決定化済み状態を記憶するための記憶域を削減することができるが、部分決定化を1回行っただけでは非決定性FSAは決定化できない。そこで、繰り返し処理部14は、全ての遷移が決定化されるまで決定化対象とする遷移を変えながら、部分決定化部13により部分決定化を繰り返し実行させる。部分決定化では、図5で説明した処理のステップS24と同様に、実行されるたびに状態の名前を付け替えるため、決定化済み状態を記憶するための記憶域は部分決定化が終了するたびに不要となる。
つまり、この部分決定化を繰り返して実行する方法で必要となる決定化済み状態を記憶するためのメモリ量は、各回の部分決定化が必要となった決定化済み状態を記憶するためのメモリ量のうちで最も多いものと同値となる。すなわち、図5で説明した従来の決定化の方法よりも、決定化済み状態を記憶するためのメモリ量を削減することが可能となる。
以下、部分集合生成部12、部分決定化部13、繰り返し処理部14について説明する。
部分集合生成部12は、決定化対象とする遷移の入力記号の部分集合Σi(iは1以上の整数)を、後述する決定化処理の繰り返し回数に応じて生成する機能部である。
具体的に、部分集合生成部12は、所定の規則に基づいて処理の対象となる非決定性FSAの集合Σに含まれた入力記号を配列し、配列後の入力記号のうち、一部の入力記号を抽出した部分集合Σiを、後述する部分決定化処理の繰り返し回数に応じて順次生成する。
ここで、入力記号の配列決定時の基準となる所定の規則は、特に問わないものとする。なお、本実施形態では、下記式(1)で表した関数v(x)で得られる値が大きいほど、上位の順位となるよう定めた関係式r(v(x))を所定の規則として用いるものとする。
ここで、「x」は処理対象となる非決定性FSAの集合Σに含まれた何れかの入力記号であって、当該xを入力記号とする遷移の集合をExとしている。ただし、ExはE1に含まれているものとする。QxはExに属する遷移の遷移元となる状態の集合である。さらに、Exの要素数をN(Ex)、Qxの要素数をN(Qx)、Q1の要素数をN(Q1)としている。
ここで、上記式(1)の計算結果に基づき、当該計算結果の値が大きいほど上位の順位となるよう各入力記号を配列することは、各入力記号に係る遷移の個数が多いものから配列することと同義である。なお、上記式(1)においてN(Q1)の部分を所定の定数値としてもよい。また、配列決定時の指標となる所定の規則は、上記例に限定されないものとする。
また、部分集合生成部12により生成される部分集合Σiは、下記式(2)の条件を満たすものとする。ここで、「n」は後述する部分決定化処理を繰り返す総数(繰り返し総数)を表しており、Σn=Σである。
集合Σの分割方法は、上記式(2)の条件を満たす限り特に問わないものとするが、本実施形態では、iの増加とともに、決定化の対象となる遷移の入力記号の数を略等間隔で増加させる態様を採用する。
以下、図9を参照して、部分集合生成部12で実行される部分集合生成処理の動作を説明する。まず、部分集合生成部12は、上述した所定の規則に基づいて、非決定性FSAの集合Σに含まれた各入力記号を配列する(ステップS31)。
次いで、部分集合生成部12は、N(Σ)を入力記号の総数として、ΣiにN(Σ)×i/n個だけ並べた順に入力記号を代入し、これをn回繰り返すことで繰り返しの回数i毎のΣiを順次生成する(ステップS32)。言い換えると、入力記号を引数に取り、順位(1以上の整数)を返す関数rとし、入力記号をxとしたときr(x)≦N(Σ)×i/nを満たす入力記号の集合をiの値毎にΣiに代入する。
上述した部分集合生成処理の動作を、図3に示した非決定性FSAを用いて説明する。まず、部分集合生成部12は、式(1)で示した関数v(x)を用いて、その値を入力記号毎に計算すると、v(a)=(2+4)/(1+4)=1.2、v(b)=(2+4)/(2+4)=1.0、v(c)=(1+4)/(1+4)=1.0が得られる。ここで、関数v(x)の返す値が同じとなる場合には、入力記号が文字であれば割り当てられた文字コード等の値を基準に順序を決める等すればよいし、整数値であればその値自体を基準に順序を決めるなどすればよい。次いで、部分集合生成部12は、v(x)の大きに応じて上位の順位となるよう定めた関係式r(x)を用いることで、r(v(a))=1、r(v(b))=2、r(v(c))=3を導出する。
ここで、繰り返し総数n=3が設定されたものとすると、部分集合生成部12は、部分集合Σiとして繰り返し回数i(i=1〜3)毎に、Σ1={a}、Σ2={a,b}、Σ3={a,b,c}を生成する。
図2に戻り、部分決定化部13は、部分集合生成部12により生成されたΣiに基づいて、決定化の対象とする遷移を選択するとともに、決定化の対象とならない遷移に係る入力記号を異なる入力記号に置き換え、図5で説明した従来の決定化方法を利用することで、決定化の対象とする遷移についての決定化(部分決定化)を行う。
また、繰り返し処理部14は、部分決定化部13を制御し、繰り返し総数nに応じた回数だけ部分決定化処理を繰り返し実行させる。
以下、図10、11を参照して、部分決定化部13及び繰り返し処理部14により実行される逐次決定化処理について説明する。なお、本処理の前提として、部分集合生成部12により部分集合Σiが予め生成されているものとする。また、逐次決定化処理の実行時に生成される、後述するEr、Ed、xnew等の各種変数は作業エリアとして機能するRAM5に一時記憶されるものとする。
図10は、本実施形態における逐次決定化処理の手順を示したフローチャートである。まず、繰り返し処理部14は、繰り返し回数を計数するための変数iを1に設定すると(ステップS41)、このiの値に応じた部分決定化処理(ステップS42)を部分決定化部13に実行させる。以下、図11を参照して、ステップS42の部分決定化処理について説明する。
図11は、ステップS42の部分決定化処理の手順を示したフローチャートである。まず、部分決定化部13は、決定化の対象となる遷移、つまり遷移の入力記号がΣiに含まれている遷移の集合をErに代入する(ステップS51)。次いで、部分決定化部13は、決定化の対象とならない遷移、つまり遷移の入力記号がΣiに含まれていない遷移の集合をEdに代入する(ステップS52)。なお、Σiのiは、ステップS41又は後述するステップS45で設定されたiの値に対応する。
続いて、部分決定化部13は、Edに属する全ての遷移δdについて、後述するステップS54、55の処理を施したか否かを判定する(ステップS53)。ここで、未処理の遷移δdが存在すると判定した場合(ステップS53;No)、部分決定化部13は、下記式(3)を満たすxnew、即ち、Edの遷移の入力記号が互いに異なる入力記号となり、且つ、Σiとも異なる入力記号となるような入力記号xnewを生成する(ステップS54)。
次いで、部分決定化部13は、この生成したxnewを遷移δdにかかる入力記号と置き換え(ステップS55)、ステップS53の処理へと再び戻る。
一方、ステップS53において、Edに属する全ての遷移δdについて、ステップS54、55の処理を施したと判定した場合には(ステップS53;Yes)、ステップS56の処理へと移行する。
次に、部分決定化部13は、Edに属した遷移δdをErへと追加した後(ステップS56)、このErを含む非決定性FSA Ar=(Q1,Σr,Er,I1,F1)の決定化処理を決定化処理部11に実行させ、その結果をA'r(A'r=(Q2,Σr,E'r,i2,F2))に代入する(ステップS57)。ここで、Σrは入力記号を置き換えた後の入力記号の集合である。なお、ステップS57で行われる決定化処理の手順は、図5で説明したものと同様であるため、説明を省略する。
続いて、部分決定化部13は、A'rの入力記号ΣrをステップS55で置き換える前の元の入力記号に戻した後、このA'rをA2=(Q2,Σ,E2,i2,F2)に代入し(ステップS58)、ステップS43の処理へと移行する。ここでA2は、A1のうちΣiに属する入力記号を持つ遷移のみを決定化したFSAとなっている。
図10に戻り、繰り返し処理部14は、iの値が繰り返し回数の最大値であるnを下回るか否かを判定する(ステップS43)。ここで、iの値がnを下回ると判定した場合には(ステップS43;Yes)、繰り返し処理部14は、ステップS42で決定化されたFSA A2をFSA A1とし(ステップS44)、iの値を1増やした後(ステップS45)、ステップS42の処理へと再び戻る。
また、ステップS43において、iの値がn以上と判定した場合には(ステップS43;No)、本処理を終了する。ここで、最終的に得られたFSA A2は処理対象となった非決定性FSA A1を決定化したものとなっている。
上述した逐次決定化処理の動作を、図3で示した非決定性FSA A1を基に、図12〜17を用いて説明する。なお、繰り返し総数nは3とし、部分集合生成部12により生成された部分集合Σiが、Σ1={a}、Σ2={a,b}、Σ3={a,b,c}であるものとする。
まず、1回目(i=1)の決定化に関して、入力記号の名前を付け替えた時点(図11のステップS57の時点)でのFSA Arを図12に示す。この例では、状態1から状態0へ遷移する遷移の入力記号bをBと置き換え、状態2から状態3へ遷移する遷移の入力記号bをCと置き換え、状態3から状態0へ遷移する遷移の入力記号cをDと付け替えている。
部分決定化部13は、このFSA Arを図5で説明した決定化の方法によって決定化する。状態名の名前の付け替え前、つまり図5でのステップS24を実行する直前のFSAを図13に示す。そして、決定化処理部11が状態番号を振りなおし、部分決定化部13が、入力記号を元に戻して1回目の決定化が完了する。この状態が図14である。
同様に2回目(i=2)の決定化処理中において、図14で示した状態2から状態0へ遷移する遷移の入力記号cをCに置き換えて決定化した後、状態名を付け替える直前の結果を図15に示している。さらに状態番号を振りなおし、入力記号を元に戻したものが図16である。
既に決定化された状態ではあるが、部分決定化部13は、繰り返し処理部14の制御に応じて3回目(i=3)の決定化を行う。ここで、図17は、状態名を付け替える直前の結果を示した図である。置き換えた入力記号はないので、入力記号については元に戻す処理は何も行わず、状態名のみ付け替えた最終結果は上述した図8と同様となる。
ところで、図5で説明した従来の決定化の方法のみを用いた場合での、決定化済み状態に含まれた要素の合計数は、図6に示したように5個である。一方、図10で説明した決定化の方法による1回目の決定化の結果において、決定化済み状態に含まれた要素の合計数は図13から分かるように4個である。また、同様に2回目は図15より4個、3回目は図17より3個となる。
したがって、繰り返し決定化処理を行った中での最大の合計要素数は4個となり、決定化処理のみを用いた従来の決定化による方法よりも合計要素数の最大値を減らすことができる。つまり、決定化済み状態の記憶に必要なメモリ量を減らすことができる。
以上のように、本実施形態によれば、非決定性FSAに含まれた遷移から、決定化の対象とする遷移を一部選び、この決定化対象とする遷移を毎回変えながら繰り返し決定化を行うことで、一回の決定化で記憶する決定化済み状態の名称のうち、それを構成する非決定性オートマトンに含まれた状態の延べ数を減少させることができるため、決定化の実行時に要するメモリ量を減少させることができる。
なお、先に述べたオートマトン決定化装置100における各処理を実行するプログラムを、インストール可能な形式又は実行可能な形式でCD−ROM、フロッピー(R)ディスク(FD)、DVD等のコンピュータで読み取り可能な記録媒体に記録して提供する態様としてもよい。
また、オートマトン決定化装置100における各処理を実行するプログラムを、インターネット等のネットワークに接続されたコンピュータ上に格納し、ネットワーク経由でダウンロードさせることにより提供するように構成しても良い。
この場合には、プログラムは、オートマトン決定化装置100において上記記録媒体から読み出して実行することによりRAM5上にロードされ、上記ソフトウェア構成で説明した各部がRAM5上に生成される。
[第2の実施形態]
上述した第1の実施形態では、部分決定化処理を行う毎に入力記号の置き換えを行う態様を説明した。本実施形態では入力記号の置き換えを行うことなく、非決定性FSAの決定化を実現し、当該決定化に必要となるメモリ量を削減することが可能なオートマトン決定化装置200について説明する。なお、上述した第1の実施形態と同様の構成については、同一の符号を付与しその説明を省略する。
図18は、図1に示したCPU1とROM4又は記憶部6に予め記憶された所定のプログラムとの協働により実現される、本実施形態のオートマトン決定化装置200の機能的構成を示した図である。同図に示したように、オートマトン決定化装置200は部分集合生成部12、部分決定化部21、繰り返し処理部14を有している。
ここで、部分決定化部21は、処理対象の非決定性FSAに含まれた遷移にかかる入力記号から、一の入力記号を処理対象として順次選択し、この処理対象の入力記号に係る遷移を抽出した遷移の集合Edを生成する。また、部分決定化部21は、Edに含まれる遷移から、決定化対象とする遷移を選択し、この選択した遷移について決定化を行う。ここで、Edの生成に係る抽出方法は、特に問わないものとするが、本実施形態では、第1の実施形態で説明した、部分集合Σiに基づいて行うものとする。
以下、図19〜21を参照して、部分決定化部21及び繰り返し処理部14により実行される、本実施形態の逐次決定化処理について説明する。なお、本処理の前提として、部分集合生成部12により部分集合Σiが予め生成されているものとする。また、逐次決定化処理の実行時に生成される、後述する各種変数は作業エリアとして機能するRAM5に一時記憶されるものとする。
図19は、本実施形態における逐次決定化処理の手順を示したフローチャートである。まず、繰り返し処理部14は、繰り返し回数を計数するための変数iを1に設定すると(ステップS61)、このiの値に応じた部分決定化処理(ステップS62)を部分決定化部21に実行させる。以下、図20を参照して、ステップS62の部分決定化処理について説明する。
図20は、ステップS62の部分決定化処理の手順を示したフローチャートである。まず、部分決定化部21は、A2の初期状態i2にI1を代入し(ステップS71)、このi2をキューSに追加する(ステップS72)。この時点でSにはi2のみが記憶されている。
次いで、部分決定化部21は、Sが空集合か否かを判定し、空集合でないと判定した場合には(S73;Yes)、Sから要素を一つ取り出しqsubに代入した後(ステップS74)、現在のqsubに関してΣに含まれた要素(入力記号)全てに対して処理を行ったか否かを判定する(ステップS75)。ここで、Σの要素全てに対して処理を行ったと判定した場合には(ステップS75;Yes)、ステップS73の処理へと再び戻る。
一方、ステップS75において、Σの要素全てに対して処理を行っていないと判定した場合には(ステップS75;No)、部分決定化部21は、まだ処理していない入力記号のうちの1つをxに代入する(ステップS76)。
続いて、部分決定化部21は、入力記号xを伴うqsubに含まれる状態からの遷移の集合をEdに代入した後(ステップS77)、このEdが空集合か否かを判定する(ステップS78)。ここで、Edを空集合と判定した場合(ステップS78;No)、ステップS75の処理へと再び戻る。
一方、ステップS78において、Edを空集合でないと判定した場合(ステップS78;Yes)、部分決定化部21は、Edから遷移を選択する遷移選択処理(ステップS79)を実行する。以下、図21を参照して、ステップS79の遷移選択処理について説明する。
まず、部分決定化部21は、ステップS76で代入した入力記号xが、部分集合Σiに含まれているか否かを判定する(ステップS791)。なお、Σiのiは、ステップS61又は後述するステップS65で設定されたiの値に対応する。
ここで、入力記号xが部分集合Σiに含まれていると判定した場合には(ステップS791;Yes)、遷移の集合EtにEdを代入し(ステップS792)、図20のステップS80の処理へと移行する。
一方、ステップS791において、入力記号xが部分集合Σiに含まれないと判定した場合には(ステップS791;No)、Edから任意の遷移を一つ取り出し、遷移の集合Etに代入した後(ステップS793)、図20のステップS80の処理へと移行する。
図20に戻り、部分決定化部21は、ステップS79で選択した遷移の集合Etに属する遷移をEdから除去する(ステップS80)。続いて、部分決定化部21は、Etに含まれる遷移をδとしたとき、遷移δの遷移先の状態の集合qsをq'subに代入する(ステップS81)。
次いで、部分決定化部21は、δ'の遷移元の状態がqsubであり、δ'の遷移先の状態がq'subであり、δ'の入力記号がxであるδ'を、E2に追加した後(ステップS82)、q'subがQ2に存在しているか否かを判定する(ステップS83)。ここで、q'subが既にQ2に存在していると判定した場合には(ステップS83;Yes)、ステップS78の処理へと再び戻る。
一方、ステップS83において、q'subがQ2に存在しないと判定した場合、つまりq'subが新たな状態であると判定した場合には(ステップS83;No)、部分決定化部21は、Q2にq'subを追加する(ステップS84)。続いて部分決定化部21は、q'subの要素がF1に含まれているか否かを判定する(ステップS85)。ここで、q'subの要素がF1に含まれていないと判定した場合には(ステップS85;No)、ステップS87の処理へと直ちに移行する。
また、ステップS85において、q'subの要素がF1に含まれていると判定した場合には(ステップS85;Yes)、部分決定化部21は、q'subを受理状態の集合F2に追加した後(ステップS86)、ステップS87の処理へと移行する。
続くステップS87では、部分決定化部21がSにq'subを追加した後(ステップS87)、ステップS78の処理へと再び戻る。
一方、ステップS73において、Sを空集合と判定した場合には(ステップS73;No)、ステップS88へと移行し、Q2に追加された状態の名前を付け替えた後(ステップS88)、図19のステップS63へと移行する。
図19に戻り、繰り返し処理部14は、iの値が繰り返し回数の最大値であるnを下回るか否かを判定する(ステップS63)。ここで、iの値がnを下回ると判定した場合には(ステップS63;Yes)、繰り返し処理部14は、ステップS62で導出されたFSA A2をFSA A1とし(ステップS64)、iの値を1増やした後(ステップS65)、ステップS62の処理に再び移行する。
また、ステップS63において、iの値がn以上と判定した場合には(ステップS63;No)、本処理を終了する。ここで、最終的に得られたFSA A2は処理対象となった非決定性FSA A1を決定化したものとなっている。
以上のように、本実施形態によれば、非決定性FSAに含まれた遷移から、決定化の対象とする遷移を一部選び、この決定化対象とする遷移を毎回変えながら繰り返し決定化を行うことで、一回の決定化で記憶する決定化済み状態の名称のうち、それを構成する非決定性オートマトンに含まれた状態の延べ数を減少させることができるため、決定化の実行時に要するメモリ量を減少させることができる。
また、本実施形態によれば、決定化の対象とする遷移を直接指定することができるため、入力記号による遷移の選択以外の方法でも決定化の対象となる遷移を選択することができる。
[第3の実施形態]
第1の実施形態で説明した方法は、FSAだけでなくFSAを拡張したオートマトンの決定化に対しても同様に適用することが可能である。本実施形態では、FSAを拡張したオートマトンの決定化を行うオートマトン決定化装置300について説明する。なお、上述した第1の実施形態と同様の構成については、同一の符号を付与しその説明を省略する。
図22は、CPU1とROM4又は記憶部6に予め記憶された所定のプログラムとの協働により実現される、オートマトン決定化装置300の機能的構成を示した図である。同図に示したように、オートマトン決定化装置300は決定化処理部31、部分集合生成部12、部分決定化部32、繰り返し処理部33を備えている。
決定化処理部31は、遷移先の状態が複数存在する重み付き有限状態オートマトン(Weighted Finite State Automaton;WFSA)、有限状態トランスデューサ(Finite State Transducer;FST)、重み付き有限状態トランスデューサ(Weighted Finite State Transducer;WFST)等の非決定性FSAを拡張した非決定性状態にあるオートマトン(非決定性オートマトン)の決定化を行う。
ここで、WFSAとは、FSAの遷移に重みを加えたものである。したがって、WFSAの遷移には、入力記号と重みとが割り当てられていることになる。なお、ここで「重み」とは、何らかの確率値やスコア、ペナルティ等であり、入力記号を受理する経路に沿って所定の規則(足し算、かけ算、最小値、最大値等)によって演算されるものである。
また、FSTはFSAの遷移の入力記号に出力記号を加えたものであり、入力記号からなる記号列を入力として与えると、出力記号からなる記号列を出力する。このFSTは、例えば記号列の変換に利用されている。
また、WFSTは、WFSAの遷移に割り当てられた入力記号、重みに加え、出力記号も付与するようにしたモデルである。つまり、WFSTでは、遷移に対して入力記号、出力記号及び重みの3つの要素が割り当てられていることになる。このWFSTは、例えば音声認識におけるモデルを表現するものとして利用されている。
これらFSAの拡張モデル(特に、WFSAやFST)を決定化するための方法は、Finite-state transducers in language and speech processing, Mehryar Mohri, Computational Linguistics, Volume 23, Issue 2(June 1997) Pages.269-311等に記載されている。なお、決定化処理部31は、これら公知の方法を利用した決定化処理を行う機能部である。以下、決定化処理部31が行う決定化の方法を、従来の決定化方法という。
以下、決定化処理部31が行う従来の決定化方法について説明する。なお、ここでは、WFSTを処理の対象とし、決定化の対象となる非決定性WFSTをT1=(Q1,Σ,Δ,E1,I1,F1,λ1,ρ1)とし、決定化後のT1を決定性WFST T2=(Q2,Σ,Δ,E2,i2,F2,λ2,ρ2)とする。
上記した非決定性WFST T1において、Q1は状態の集合、Σは入力記号の集合、Δは出力記号の集合、E1は遷移の集合でE1⊆Q1×Σ×Δ×K×Q1、I1は初期状態の集合、F1は受理状態の集合である。また、λ1は初期重み関数であって、初期状態を引数にとり当該引数に渡した初期状態に割り当てられた初期重みを返す関数である。ρ1は終了重み関数であって、受理状態を引数にとり当該引数に渡した受理状態に割り当てられた終了重みを返す関数である。なお、T2に関するQ2、E2、F2、ρ2に関しても同様である。ただし、i2は初期状態、λ2は初期重みである。Kは重みを表す集合であって、例えば整数全体や正の整数全体、実数全体であったりする。
図23は、決定化処理部31が行う決定化処理の手順を示したフローチャートである。まず、決定化処理部31は、F2を空集合とした後(ステップS91)、全ての初期状態の初期重みのうち、最も小さい値をλ2に代入する(ステップS92)。
次いで、決定化処理部31は、T1の状態名(q)、文字列、重みの3つ組を要素とする集合を生成し、T2の初期状態名としてi2に代入する(ステップS93)。この3つ組のうち、文字列を「余りの文字列」と呼ぶこととし、ステップS93では空文字列であるεを設定する。一方、3つ組のうちの重みを「余りの重み」と呼ぶこととし、ステップS93ではλ1(q)−λ2を代入する。
続いて、決定化処理部31は、キューSにi2を追加した後(ステップS94)、Sが空集合か否かを判定する(ステップS95)。ここで、Sが空でないと判定した場合には(ステップS95;Yes)、決定化処理部31は、Sに含まれた要素を1つ取り出し、取り出した要素をq2に代入する(ステップS96)。
次に、決定化処理部31は、q2に含まれた状態名、余りの文字列、余りの重みの3つ組の集合(q,l,w)のうち、qがT1の受理状態の集合F1に含まれているか否かを判定する(ステップS97)。ここで、qがT1の受理状態の集合F1に含まれていないと判定した場合には(ステップS97;No)、ステップS100の処理へと直ちに移行する。
また、ステップS97において、qがT1の受理状態の集合F1に含まれていると判定した場合には(ステップS97;Yes)、決定化処理部31は、q2をT2の受理状態の集合F2に追加する(ステップS98)。
次いで、決定化処理部31は、q2に属する3つ組(q,l,w)のqのうち、受理状態の集合F1に含まれた全てのqについてw+ρ1(q)を計算し、その最小値をq2の終了重みとしてρ2(q2)に代入する(ステップS99)。
続いて、決定化処理部31は、Σに含まれた全ての要素(入力記号)について、後述するステップS101からステップS109の処理を実行したか否かを判定する(ステップS100)。ここで、Σのすべての要素について処理を実行したと判定した場合には(ステップS100;Yes)、ステップS95の処理へと再び戻る。
一方、ステップS100において、未処理の要素が存在すると判定した場合には(ステップS100;No)、決定化処理部31は、まだ処理していない入力記号のうちの1つをxに代入した後(ステップS101)、Γ(q2,x)が空か否かを判定する(ステップS102)。ここで、Γ(q2,x)は、Γ(q2,x)={(q,l,w)∈q2|δ∈E1,prev(δ)=q,input(δ)=x}である。つまり、q2に含まれている3つ組(q,l,w)のうち、入力記号がxであり遷移元がqである遷移δがE1に存在するという条件をみたす3つ組(q,l,w)の集合を示している。
ステップS102において、Γ(q2,x)を空と判定した場合には(ステップS102;No)、ステップS100の処理へと再び戻る。また、ステップS102において、Γ(q2,x)を空でないと判定した場合には(ステップS102;Yes)、決定化処理部31は、遷移元がq2で入力記号がxである遷移の重みを算出し、この算出結果をw2に代入する(ステップS103)。ここで代入されるw2の値は、Γ(q2,x)に属する3つ組(q,l,w)の全てに対する次の値のうち最も小さい値となる。その値とは、E1に属する遷移のうち、遷移元がq且つ入力記号がxであるような遷移δの重みのうちで最も小さい値にwを足した値である。なお、weight(δ)は遷移δの重みを表す。
続いて、決定化処理部31は、遷移元がq2で入力記号がxである遷移の出力記号を算出し、この算出結果をl2に代入する(ステップS104)。ここで代入されるl2の値は、Γ(q2,x)に属する3つ組(q,l,w)の全てに対する次の文字列のうち、前方最長一致をとったものとなる。その文字列とはE1に属する遷移のうち、遷移元がqかつ入力記号がxであるような遷移δの出力記号の前方最長一致をとった文字列の前方に文字列lをつなげたものである。例えば、Γ(q2,x)に属する3つ組(q,l,w)が1つだけで且つ条件を満たすδが2つあるとし、その出力記号output(δ)がABとACであり、文字列lがPであるとすると、l2に代入される文字列はPAとなる。
次いで、決定化処理部31は、q2から入力記号xによって遷移する遷移先の状態q'2を生成する(ステップS105)。ここで、q'2を生成するには、T1の状態名と余りの文字列と余りの重みとで構成される3つ組の集合を生成しなければならない。そのうち、状態はν(q2,x)に属しているもので、その要素をq'とするものである。なお、ν(q2,x)={q'|(q,l,w)∈q2,δ∈E1,prev(δ)=q,input(δ)=x,next(δ)=q'}である。つまり、q2に属する3つ組(q,l,w)に関して、E1に属する遷移δのうち、遷移元の状態がqであり、入力記号がxであるような遷移の遷移先の状態をq'としたとき、この条件を満たすq'の集合が、ν(q2,x)の返す値である。
3つ組の2番目の値である余りの文字列は、q'に対して次のような文字列になる。その文字列とは、集合γ(q2,x)に属する4つ組(q,l,w,δ)の夫々に対し、lの後ろにδの出力文字列を加えた文字列の前方からl2の文字列を除去した文字列を算出し、それらの文字列の前方最長一致をとったものとなる。ここで、γ(q2,x)={(q,l,w,δ)∈q2×E1|prev(δ)=q,input(δ)=x}である。つまり、q2に含まれている3つ組(q,l,w)のうち、入力記号がxであり且つ遷移元がqであるようなE1に属する遷移を含めた4つ組(q,l,w,δ)の集合が、γ(q2,x)の返す値である。
3つ組の3番目の値である余りの重みは、q'に対して次のような重みとなる。その重みの値は、集合γ(q2,x)に属する4つ組(q,l,w,δ)の夫々に対して、wにδの重みを加えw2を引いた値のうち、最も小さい値となる。以上の計算により生成される3つ組の集合がq'2となる。
続くステップS106において、決定化処理部31は、q2からq'2への遷移をE2に追加する(ステップS106)。ここで追加した遷移の入力記号はxであり、出力記号はl2であり、重みはw2である。
次いで、決定化処理部31は、ステップS105で生成したq'2がQ2に含まれているか否かを判定し、含まれていると判定した場合には(ステップS107;No)、ステップS100の処理へと再び戻る。
また、ステップS105において、q'2がQ2に含まれていないと判定した場合には(ステップS107;Yes)、決定化処理部31は、q'2をQ2に追加し(ステップS108)、Sにq'2を追加した後(ステップS109)、ステップS100の処理へと再び戻る。
一方、ステップS95において、Sが空であると判定した場合には(ステップS95;No)、決定化処理部31は、T1を決定化したT2の状態の集合Q2に属している状態の名前を付け替え(ステップS110)、本処理を終了する。
つまり、名前の付け替え前はQ2に属する状態の名前はQ1に属する状態名と余りの出力記号と余りの重みの3つ組の集合で表現されていたが、決定化処理が完了すれば不要であるため、それを新しい名前に付け替える。新しい名前は例えば、0から順に各状態に番号を振るなどとすればよく、この処理によって記憶域を削減できる。なお,WFSTのようにFSAを拡張したモデルにおいても、名前の付け替え前のQ2に含まれる状態のことをFSAの場合と同様に「決定化済み状態」という。
以上で説明した決定化処理によりWFSTを決定化した場合の一例を、図24〜26を用いて説明する。図24は、決定化前の非決定性WFST T1を示した図である。同図において、「0/0」と書かれている状態が初期状態であり、「/」の左側が状態番号を、右側が初期重みを表している。また、2重丸で描かれている状態「1/0」と「2/2」はそれぞれ受理状態であり、「/」の左側が状態番号を、右側が終了重みを表している。つまり、状態1の終了重みは0で、状態2の終了重みは2であることを示している。また、各遷移に書かれている文字は「入力記号:出力記号/重み」という意味で,例えば状態0から状態1への遷移の場合、入力記号がaで出力記号がAで重みが1であることを示している。
図25は、決定化処理のステップS110により名前の付け替えを行う直前のWFSTを示した図である。ここで、B21で示した状態は初期状態であって、3つ組の集合は(0,ε,0)であり、初期重みは0である。つまり、このB21に対応する決定化前の状態は、状態0であり、余りの出力記号は空文字列であり、余りの重みは0であることを示している。
B22で示した状態は受理状態であり、終了重みは1である。また、この状態B22に対応する決定化前の状態1,2のうち、状態1に関する3つ組では余りの文字列が空文字列であり、余りの重みは1である。また、状態2に関する3つ組では余りの文字列が空文字列であり、余りの重みは0である。なお、他の状態B23〜B25についても同様である。
図26は、決定化処理のステップS110により名前の付け替えを行った後のWFST、つまり決定化後のWFSTを示した図である。この図26と図25とに含まれた状態名を比較することで、名前の付け替えにより状態名を記憶するために必要なメモリ量が減少することがわかる。例えば、図25においてB24で示した状態は「{(0,ε,2),(1,A,1),(2,A,0)}/1」であり、3つ組を3つ含む集合と終了重みを記憶している。一方、図26において、B24に対応するB31で示した状態では、「3/1」となり、状態番号と終了重みを記憶するだけとなっている。
しかしながら、上記した決定化処理部31による決定化の方法のみでは、WFSTの状態数や遷移数が増えるに伴い、決定化済み状態を記憶しておくために大きなメモリ量が必要となる。そのため、本実施形態では、部分集合生成部12、部分決定化部32、繰り返し処理部33を備えることで、決定化済み状態を記憶するためのメモリ量の削減を行う。以下、部分決定化部32、繰り返し処理部33について説明する。
部分決定化部32は、繰り返し回数iに対応した入力記号の部分集合Σiに基づいて、決定化の対象とする遷移を選択するとともに、決定化の対象とならない遷移に係る入力記号を異なる入力記号に置き換え、図23で説明した従来の決定化方法を利用することで、決定化の対象とする遷移についての決定化(部分決定化)を行う。
繰り返し処理部33は、部分決定化部32を制御し、繰り返し総数nに応じた回数だけ部分決定化処理を繰り返し実行させる。
次に、図27、28を用いて、部分決定化部32及び繰り返し処理部33により実行される逐次決定化処理について説明する。なお、本処理の前提として、部分集合生成部12により部分集合Σiが予め生成されているものとする。また、逐次決定化処理の実行時に生成される、後述する各種変数は作業エリアとして機能するRAM5に一時記憶されるものとする。
図27は、本実施形態における逐次決定化処理の手順を示したフローチャートである。まず、繰り返し処理部33は、繰り返し回数を計数するための変数iを1に設定すると(ステップS121)、このiの値に応じた部分決定化処理(ステップS122)を部分決定化部32に実行させる。以下、図28を参照して、ステップS122の部分決定化処理について説明する。
図28は、ステップS122の部分決定化処理の手順を示したフローチャートである。まず、部分決定化部32は、決定化の対象となる遷移、つまり遷移の入力記号がΣiに含まれている遷移の集合をErに代入する(ステップS131)。次いで、部分決定化部32は、決定化の対象とならない遷移、つまり遷移の入力記号がΣiに含まれていない遷移の集合をEdに代入する(ステップS132)。なお、Σiのiは、ステップS121又は後述するステップS125で設定されたiの値に対応する。
続いて、部分決定化部32は、Edに属する全ての遷移δdについて、後述するステップS134、135の処理を施したか否かを判定する(ステップS133)。ここで、未処理の遷移δdが存在すると判定した場合(ステップS133;No)、部分決定化部32は、上記した式(3)を満たすxnew、即ち、Edの遷移の入力記号が互いに異なる入力記号となり、且つ、Σiとも異なる入力記号となるような入力記号xnewを生成する(ステップS134)。そして、部分決定化部32は、この生成したxnewを遷移δdにかかる入力記号と置き換え(ステップS135)、ステップS133の処理へと再び戻る。
一方、ステップS133において、Edに属する全ての遷移δdについて、ステップS134、135の処理を施したと判定した場合には(ステップS133;Yes)、ステップS136の処理へと移行する。
次に、部分決定化部32は、Edに属した遷移δdをErに追加した後(ステップS136)、このErを含む非決定性WFST Tr=(Q1,Σr,Δ,Er,I1,F1,λ1,ρ1)の決定化処理を決定化処理部31に実行させ、その結果をT'r(T'r=(Q2,Σr,Δ,E'r,i2,F2,λ2,ρ2))に代入する(ステップS137)。ここで、Σrは入力記号を置き換えた後の入力記号の集合である。なお、ステップS137で行われる決定化処理の手順は、図23で説明したものと同様であるため、説明を省略する。
続いて、部分決定化部32は、T'rの入力記号ΣrをステップS135で置き換える前の元の入力記号に戻した後、このT'rをT2=(Q2,Σ,Δ,E2,i2,F2,λ2,ρ2)に代入し(ステップS138)、図27のステップS123の処理へと移行する。ここでT2は、T1のうちΣiに属する入力記号を持つ遷移のみを決定化したWFSTとなっている。
図27に戻り、繰り返し処理部33は、iの値が繰り返し回数の最大値であるnを下回るか否かを判定する(ステップS123)。ここで、iの値がnを下回ると判定した場合には(ステップS123;Yes)、繰り返し処理部33は、ステップS122で決定化されたWFST T2をWFST T1とし(ステップS124)、iの値を1増やした後(ステップS125)、ステップS122の処理へと再び戻る。
また、ステップS123において、iの値がn以上と判定した場合には(ステップS123;No)、本処理を終了する。ここで、最終的に得られたWFST T2は処理対象となった非決定性WFST T1を決定化したものとなっている。
上述した逐次決定化処理の動作を、図24で示した非決定性WFST T1を基に、図29〜31を用いて説明する。なお、繰り返し総数nは2とし、部分集合生成部12により生成された部分集合Σiが、Σ1={a}、Σ2={a,b}であるものとする。
まず、1回目(i=1)の決定化に関して、決定化を行い且つ状態名を置き換える前(ステップS110を実行する直前)のWFSTを図29に示す。この図から、入力記号はaの遷移については決定化できていることが分かる。また、入力記号bについては、b1、b2という記号に置き換えられており、元に戻すとどちらもbとなるので、入力記号bに係る遷移についてはまだ決定化されていないことが分かる。なお、続くステップS110の処理により状態名を付け替え、さらに続くステップS138の処理により、図29の入力記号を元の入力記号に戻した結果のWFSTは、図30のようになる。
次に2回目(i=2)の決定化を実行する。つまり、図30のWFSTを決定化する。この決定化の結果、図30のWFSTは図31のようになる。なお、図31では状態名の付け替え前のWFSTを示している。状態名を付け替えると図26のようになる。
ところで、図23で説明した決定化処理(従来の決定化方法)のみを用いて図24のWFSTを決定化すると、状態名の付け替え前では図25のように表されることは上述したとおりである。このとき、記憶しなければならない3つ組(状態名、余りの文字列、余りの重み)の数を数えると、状態B21には{(0,ε,0)}で1個、状態B22には{(1,ε,1),(2,ε,0)}で2個、状態B23には{(0,ε,0),(3,ε,1)}で2個、状態B24には{(0,ε,2),(1,A,1),(2,A,0)}で3個、状態B25には{(0,ε,0),(1,ε,1),(2,ε,0)}で3個となり、合計11個である。
一方、図27、28で説明した逐次決定化処理により図24のWFSTを決定化すると、1回目の決定化では図29のようになり、状態B41には{(0,ε,0)}で1個、状態B42には{(1,ε,1),(2,ε,0)}で2個、状態B43には{(3,ε,0)}で1個となり、合計4個である。また、2回目の決定化では図31のようになり、同様に数えると合計8個となる。
したがって、逐次決定化処理による決定化の方法では、決定化の際に状態名として記憶しなければならない3つ組の数は最大8個となり、決定化処理のみを用いた決定化の方法よりも合計要素数の最大値を減らすことができる。つまり、決定化済み状態の記憶に必要なメモリ量を減らすことができる。
次に本実施形態にかかるオートマトン決定化装置300の変形例として、本実施形態にかかる決定化の方法(逐次決定化処理)を音声認識装置に適用した態様について説明する。
図32は、音声認識装置500の構成を模式的に示した図である。図32に示したように、音声認識装置500は、図示しないマイク等を介して入力される音声信号から音声認識に必要となる特徴量を抽出する特徴量抽出部501と、後述するWFSTの合成と最適化を行う合成最適化部502と、合成最適化部502で最適化されたWFSTに基づいて、抽出された特徴量を文字列へと変換するデコーダ503と、を備えている。
また、音声認識装置500は、図示しない記憶手段に、音響モデル504、単語辞書505、言語モデル506を予め夫々記憶している。ここで、音響モデル504にはどの音素が入力された音声信号に最も近いかを判断するための情報が保持されている。また、単語辞書505には各単語がどういった音素列で構成されているかが保持されている。また、言語モデル506には認識対象の言語においてどの単語の並びが尤もらしいかどうかを判断するための情報(スコア)が保持されている。
なお、音声認識装置500では、これら音響モデル504、単語辞書505及び言語モデル506は、上述したWFSTで表現されているものとする。このような音声認識装置で用いられるWFSTの作成方法の例は、Mehryar Mohri, Michael Riley著, Integrated Context-Dependent Networks in Very Large Vocabulary Speech Recognition, EUROSPEECH '99, Volume 2, Page 811-814に記載されている。
具体的に、音響モデル504には一般にHMM(Hidden Markov model)が用いられるが、この場合、入力記号を遷移確率と出力確率を計算する関数の番号に、出力記号を音素にすることでWFSTとして表現できる。ただし、このWFSTの重みは入力記号で指定された番号の関数を使って動的に、つまりデコーダ503が特徴量を受け取ったときに計算されることになる。
また、単語辞書505では、音素を入力記号とし、単語を出力記号としたWFSTで表現することができる。また、言語モデルでは、単語を入力記号と出力記号とし、重みとして言語モデルのスコアを用いることで表現できる。
合成最適化部502は、複数のWFSTを1つに合成する公知の手法により、音響モデル504を表すWFST、単語辞書505を表すWFST、言語モデル506を表すWFSTの何れか又は全てを1つのWFSTに合成する。
また、合成最適化部502は、合成したWFSTを含む夫々のWFSTに対して、デコーダ503の処理量が少なくなるように、また、デコーダ503で処理しやすいように最適化を行う。この最適化を行なう処理の一つに本実施形態にかかる逐次決定化処理が含まれているものとする。即ち、合成最適化部502には、上述した本実施形態の逐次決定化処理を実行するオートマトン決定化装置300が含まれている。
デコーダ503は、合成最適化部502で合成・最適化されたWFSTを用いて、特徴量抽出部501により抽出された音声信号の特徴量を文字列へと変換し、これを認識結果として出力する。文字列への変換には例えばビタビ探索を用いることができる。
図33は、合成最適化部502により単語辞書505を表すWFSTと、言語モデル506を表すWFSTとを合成したWFSTに対して、上述した逐次決定化処理を行なう際に必要となる記憶域の変化を示した図である。ここで、実線で示したグラフは、本実施形態の決定化の方法(逐次決定化処理)により決定化を行った結果を示している。また、比較のため、従来の決定化の方法により決定化を行った結果を破線により示している。
横軸は図23のステップS95からステップS109までの処理を繰り返した回数を表しており、そのオーダーは「×1000」となっている。言い換えると、キューSに投入された決定化後の状態に関し、いくつの状態まで処理したかを示している。縦軸はQ2に含まれている決定化済み状態に含まれている3つ組(状態名,余りの文字列,余りの重み)の総数を表しており、そのオーダーは「×1000000」となっている。また、決定化を行なう前の状態数は18688個であり、遷移数は230930個である。また、入力記号の数は60個である。
図33において、従来の決定化の方法により決定化を行った結果を点線で示している。図から明らかなように、従来の決定化の方法では、処理した状態数が増えるに伴い、決定化済み状態に含まれている3つ組の総数は急激に増加し、C11で示した点で処理が完了している。
一方、本実施形態の決定化の方法(逐次決定化処理)により決定化を行った結果を実線で示している。この例では6回繰り返しており、1回の部分決定化で決定化される遷移の入力記号の数を、繰り返しのたびに10個ずつ増やしている。決定化済み状態に含まれている3つ組の総数は単調増加せず、図27におけるステップS122の部分決定化処理が完了するたびに、0個になる。これは決定化後、名前の置き換え処理が行なわれるためである。
図33において、C21は一連の処理の中で1回目の部分決定化が完了した点を示しており、C22は2回目の部分決定化が完了した点を示している。以後同様にC23〜25は、3回目〜5回目の部分決定化が完了した点を示しており、C26は6回目の決定化が完了した点(逐次決定化処理が完了した点)を示している。
この図33から明らかなように、本実施形態にかかる決定化の方法(逐次決定化処理)では、従来の決定化の方法に比べ繰り返す回数は増えるものの、決定化済み状態を記憶しておくための記憶域を減らすことが可能である。
以上のように、本実施形態によれば、非決定性WFSTに含まれた遷移から、決定化の対象とする遷移を一部選び、この決定化対象とする遷移を毎回変えながら繰り返し決定化を行うことで、一回の決定化で記憶する決定化済み状態のうち、それを構成する3つ組の個数を減少させることができるため、決定化の実行時に要するメモリ量を減少させることができる。
なお、本実施形態では、非決定性WFSTの決定化について説明したが、これに限らず、WFSAやFST等のFSAを拡張したオートマトンについても、本実施形態の決定化の方法を適用することが可能である。
[第4の実施形態]
上述した第3の実施形態では、部分決定化処理を行う毎に入力記号の置き換えを行う態様を説明した。本実施形態では入力記号の置き換えを行うことなく、非決定性WFSTの決定化を実現し、当該決定化に必要となるメモリ量を削減することが可能なオートマトン決定化装置400について説明する。なお、上述した第3の実施形態と同様の構成については、同一の符号を付与しその説明を省略する。
図34は、図1に示したCPU1とROM4又は記憶部6に予め記憶された所定のプログラムとの協働により実現される、オートマトン決定化装置400の機能的構成を示した図である。同図に示したように、オートマトン決定化装置400は、部分集合生成部12、部分決定化部41及び繰り返し処理部33を備えている。
ここで、部分決定化部41は、上述した決定化処理時において、決定化済み状態に含まれた非決定性WFSTの状態が遷移元であるような遷移のうち、入力記号が同じ遷移から決定化する遷移を所定の遷移選択方法によって選択し、この選択した遷移から決定化済み状態を生成する。ここで、所定の遷移選択方法は、特に問わないものとするが、本実施形態では、第1の実施形態で説明した、部分集合Σiに基づいて行うものとする。
以下、図35〜37を参照して、部分決定化部41及び繰り返し処理部33により実行される、本実施形態の逐次決定化処理について説明する。なお、本処理の前提として、部分集合生成部12により部分集合Σiが予め生成されているものとする。
図35は、本実施形態における逐次決定化処理の手順を示したフローチャートである。まず、繰り返し処理部33は、繰り返し回数を計数するための変数iを1に設定すると(ステップS141)、このiの値に応じた部分決定化処理(ステップS142)を部分決定化部41に実行させる。以下、図36を参照して、ステップS142の部分決定化処理について説明する。
図36は、ステップS142の部分決定化処理の手順を示したフローチャートである。まず、部分決定化部41は、F2を空集合とした後(ステップS151)、全ての初期状態の初期重みのうち、最も小さい値をλ2に代入する(ステップS152)。
次いで、部分決定化部41は、T1の状態名(q)、文字列、重みの3つ組を要素とする集合を生成し、T2の初期状態名としてi2に代入する(ステップS153)。この3つ組のうち、文字列を「余りの文字列」と呼ぶこととし、ステップS153では空文字列であるεを設定する。一方、3つ組のうちの重みを「余りの重み」と呼ぶこととし、このステップではλ1(q)−λ2を代入する。
続いて、部分決定化部41は、キューSにi2を追加した後(ステップS154)、Sが空集合か否かを判定する(ステップS155)。ここで、Sが空でないと判定した場合には(ステップS155;Yes)、部分決定化部41は、Sに含まれた要素を1つ取り出し、取り出した要素をq2に代入する(ステップS156)。
次に、部分決定化部41は、q2に含まれた状態名、余りの文字列、余りの重みの3つ組の集合(q,l,w)のうち、qがT1の受理状態の集合F1に含まれているか否かを判定する(ステップS157)。ここで、qがT1の受理状態の集合F1に含まれていないと判定した場合には(ステップS157;No)、ステップS160の処理へと直ちに移行する。
また、ステップS157において、qがT1の受理状態の集合F1に含まれていると判定した場合には(ステップS157;Yes)、部分決定化部41は、q2をT2の受理状態の集合F2に追加する(ステップS158)。
次いで、部分決定化部41は、q2に属する3つ組(q,l,w)のqのうち、受理状態の集合F1に含まれた全てのqについてw+ρ1(q)を計算し、その最小値をq2の終了重みとしてρ2(q2)に代入する(ステップS159)。
続いて、部分決定化部41は、集合Σに含まれたすべての要素(入力記号)について、後述するステップS161からステップS172の処理を実行したか否かを判定する(ステップS160)。ここで、Σに含まれた全ての要素(入力記号)について処理を実行したと判定した場合には(ステップS160;Yes)、ステップS155の処理へと再び戻る。
一方、ステップS160において、未処理の要素が存在すると判定した場合には(ステップS160;No)、部分決定化部41は、まだ処理していない入力記号のうちの1つをxに代入する(ステップS161)。
次に、部分決定化部41は、q2に属する3つ組(q,l,w)の集合において、E1に属する遷移δのうち、遷移元がqであり且つ入力記号にxをとる遷移の集合をEdに代入した後(ステップS162)、このEdが空集合か否かを判定する(ステップS163)。ここで、Edを空集合と判定した場合には(ステップS163;No)、ステップS160の処理に再び戻る。
一方、ステップS163において、Edが空集合でないと判定した場合(ステップS163;Yes)、部分決定化部41は、Edから遷移を選択する遷移選択処理(ステップS164)を実行する。以下、図37を参照して、ステップS164の遷移選択処理について説明する。
図37は、ステップS164の遷移選択処理の手順を示したフローチャートである。まず、部分決定化部41は、ステップS161で代入した入力記号xが、部分集合Σiに含まれているか否かを判定する(ステップS1641)。なお、Σiのiは、ステップS141又は後述するステップS145で設定されたiの値に対応する。
ここで、入力記号xが部分集合Σiに含まれていると判定した場合には(ステップS1641;Yes)、遷移の集合EtにEdを代入し(ステップS1642)、図36のステップS165の処理へと移行する。
一方、ステップS1641において、入力記号xが部分集合Σiに含まれないと判定した場合には(ステップS1641;No)、Edから任意の遷移を一つ取り出し、遷移の集合Etに代入した後(ステップS1643)、図36のステップS165の処理へと移行する。
図36に戻り、部分決定化部41は、ステップS164で選択した遷移の集合Etに属する遷移をEdから除去する(ステップS165)。
続いて、部分決定化部41は、遷移元がq2で入力記号がxである遷移の重みを算出し、この算出結果をw2に代入する(ステップS166)。ここで代入されるw2の値は、Γ'(q2,x)に属する3つ組(q,l,w)の全てに対する次の値のうち最も小さい値となる。その値とは、Etに属する遷移のうち、遷移元がq且つ入力記号がxであるような遷移δの重みのうちで最も小さい値にwを足した値である。なお、Γ'(q2,x)={(q,l,w)∈q2|δ∈Et,prev(δ)=q,input(δ)=x}である。
次に、部分決定化部41は、遷移元がq2で入力記号がxである遷移の出力記号を算出し、この算出結果をl2に代入する(ステップS167)。ここで代入されるl2の値は、Γ'(q2,x)に属する3つ組(q,l,w)の全てに対する次の文字列のうち、前方最長一致をとったものとなる。その文字列とはEtに属する遷移のうち、遷移元がqかつ入力記号がxであるような遷移δの出力記号の前方最長一致をとった文字列の前方に文字列lをつなげたものである。例えば、Γ'(q2,x)に属する3つ組(q,l,w)が1つだけで且つ条件を満たすδが2つあるとし、その出力記号output(δ)がABとACであり、文字列lがPであるとすると、l2に代入される文字列はPAとなる。
次いで、部分決定化部41は、q2から入力記号xによって遷移する遷移先の状態q'2を生成する(ステップS168)。ここで、q'2を生成するには、T1の状態名と余りの文字列と余りの重みとで構成される3つ組の集合を生成しなければならない。そのうち、状態はν'(q2,x)に属しているもので、その要素をq'とするものである。なお、ν'(q2,x)={q'|(q,l,w)∈q2,δ∈Et,prev(δ)=q,input(δ)=x,next(δ)=q'}である。つまり、q2に属する3つ組(q,l,w)に関して、Etに属する遷移δのうち、遷移元の状態がqであり、入力記号がxであるような遷移の遷移先の状態をq'としたとき、この条件を満たすq'の集合が、ν'(q2,x)の返す値である。
3つ組の2番目の値である余りの文字列は、q'に対して次のような文字列になる。その文字列とは、集合γ'(q2,x)に属する4つ組(q,l,w,δ)の夫々に対し、lの後ろにδの出力文字列を加えた文字列の前方からl2の文字列を除去した文字列を算出し、それらの文字列の前方最長一致をとったものとなる。ここで、γ'(q2,x)={(q,l,w,δ)∈q2×Et|prev(δ)=q,input(δ)=x}である。つまり、q2に含まれている3つ組(q,l,w)のうち、入力記号がxであり且つ遷移元がqであるようなEtに属する遷移を含めた4つ組(q,l,w,δ)の集合が、γ'(q2,x)の返す値である。
3つ組の3番目の値である余りの重みは、q'に対して次のような重みとなる。その重みの値は、集合γ'(q2,x)に属する4つ組(q,l,w,δ)の夫々に対して、wにδの重みを加えw2を引いた値のうち、最も小さい値となる。以上の計算により生成される3つ組の集合がq'2となる。
続くステップS169において、部分決定化部41は、q2からq'2への遷移をE2に追加する(ステップS169)。ここで追加した遷移の入力記号はxであり、出力記号はl2であり、重みはw2である。
次いで、部分決定化部41は、ステップS168で生成したq'2がQ2に含まれているか否かを判定し、含まれていると判定した場合には(ステップS170;No)、ステップS163の処理へと再び戻る。
また、ステップS170において、q'2がQ2に含まれていないと判定した場合には(ステップS170;Yes)、部分決定化部41は、q'2をQ2に追加し(ステップS171)、Sにq'2を追加した後(ステップS172)、ステップS163の処理へと再び戻る。
一方、ステップS155において、Sを空集合と判定した場合には(ステップS155;No)、部分決定化部41は、T1を決定化したT2の状態の集合Q2に属している状態の名前を付け替え(ステップS173)、図35のステップS143の処理へと移行する。
図35に戻り、繰り返し処理部33は、iの値が繰り返し回数の最大値であるnを下回るか否かを判定する(ステップS143)。ここで、iの値がnを下回ると判定した場合には(ステップS143;Yes)、繰り返し処理部33は、ステップS142で決定化されたWFST T2をWFST T1とし(ステップS144)、iの値を1増やした後(ステップS145)、ステップS142の処理へと再び戻る。
また、ステップS143において、iの値がn以上と判定した場合には(ステップS143;No)、本処理を終了する。ここで、最終的に得られたWFST T2は処理対象となった非決定性WFST T1を決定化したものとなっている。
以上のように、本実施形態によれば、非決定性WFSTに含まれた遷移から、決定化の対象とする遷移を一部選び、この決定化対象とする遷移を毎回変えながら繰り返し決定化を行うことで、一回の決定化で記憶する決定化済み状態のうち、それを構成する3つ組の個数を減少させることができるため、決定化の実行時に要するメモリ量を減少させることができる。
また、本実施形態によれば、決定化の対象とする遷移を直接指定することができるため、入力記号による遷移の選択以外の方法でも決定化の対象となる遷移を選択することができる。
なお、本実施形態では、非決定性WFSTの決定化について説明したが、これに限らず、WFSAやFST等のFSAを拡張したオートマトンについても、本実施形態の決定化の方法を適用することが可能である。
以上、発明の実施の形態について説明したが、本発明はこれに限定されるものではなく、本発明の主旨を逸脱しない範囲での種々の変更、置換、追加などが可能である。