以下に本発明の実施の形態を説明するが、本発明の構成要件と、発明の詳細な説明に記載の実施の形態との対応関係を例示すると、次のようになる。この記載は、本発明をサポートする実施の形態が、発明の詳細な説明に記載されていることを確認するためのものである。従って、発明の詳細な説明中には記載されているが、本発明の構成要件に対応する実施の形態として、ここには記載されていない実施の形態があったとしても、そのことは、その実施の形態が、その構成要件に対応するものではないことを意味するものではない。逆に、実施の形態が構成要件に対応するものとしてここに記載されていたとしても、そのことは、その実施の形態が、その構成要件以外の構成要件には対応しないものであることを意味するものでもない。
本発明の一側面のデータ出力装置は、
時系列のデータを出力するデータ出力装置(例えば、図1の音声合成装置)において、
状態の遷移に応じてデータが出力される状態遷移確率モデルの各状態について、所定の間隔の時刻ごとの、状態がデータを出力する状態確率(例えば、式(19)の状態確率Pi(t))を推定する状態確率推定手段(例えば、図1の状態確率推定部3)と、
前記状態確率と、状態が出力する代表的なデータ(例えば、式(22)の平均ベクトルμi)とに基づいて、状態遷移確率モデルが出力する所定の間隔の時刻ごとのデータ(例えば、式(22)のE[x])を求め、時系列のデータとして出力する時系列データ生成手段(例えば、図1のベクトル時系列生成部4)と
を備える。
本発明の一側面のデータ出力方法またはプログラムは、
状態の遷移に応じてデータが出力される状態遷移確率モデルの各状態について、所定の間隔の時刻ごとの、状態がデータを出力する状態確率(例えば、式(19)の状態確率Pi(t))を推定する状態確率推定ステップ(例えば、図3のステップS2)と、
前記状態確率と、状態が出力する代表的なデータ(例えば、式(22)の平均ベクトルμi)とに基づいて、状態遷移確率モデルが出力する所定の間隔の時刻ごとのデータ(例えば、式(22)のE[x])を求め、時系列のデータとして出力する時系列データ出力ステップ(例えば、図3のステップS3)と
を含む。
以下、図面を参照して、本発明の実施の形態について説明する。
図1は、本発明を適用した音声合成装置の一実施の形態の構成例を示している。
図1において、音声合成装置は、HMM記憶部1、選択部2、逆フィルタ5、およびベクトル時系列出力部10から構成されている。そして、ベクトル時系列出力部10は、状態確率推定部3とベクトル時系列生成部4とから構成されている。
HMM記憶部1は、音声合成に用いられる複数のHMMを記憶している。
選択部2は、HMM記憶部1に記憶されたHMMの中から、音声合成に用いるHMMを選択し、状態確率推定部3とベクトル時系列生成部4に供給する。
状態確率推定部3は、選択部2から供給されるHMMの各状態について、所定の間隔の時刻ごとの、状態がベクトルを出力する状態確率を推定し、ベクトル時系列生成部4に供給する。
ベクトル時系列生成部4は、状態確率推定部3から供給される状態確率と、選択部2から供給されるHMMの状態が出力する代表的なベクトルとに基づいて、所定の間隔の時刻ごとのベクトルを求め、時系列のベクトル(ベクトルの時系列)として出力する。
逆フィルタ5は、ベクトル時系列生成部4が出力する時系列のベクトルをフィルタリングすることにより、音声信号(合成音)を得て出力する。
ここで、ベクトル時系列生成部4が出力するベクトルが、例えば、メルケプストラム係数をコンポーネントとする特徴ベクトルである場合には、逆フィルタ5としては、例えば、MLSAフィルタを採用することができる。さらに、ベクトル時系列生成部4が出力するベクトルが、例えば、メルケプストラム係数をコンポーネントとする特徴ベクトルである場合には、HMM記憶部1には、メルケプストラム係数をコンポーネントとする特徴ベクトルを、HMMの学習用の学習データとして用い、例えば、学習データが出力される尤度を最大化する学習の方法であるBaum-Welch 法により学習が行われたHMMが記憶されている。
次に、図2は、図1のHMM記憶部1に記憶されているHMMの例を示している。
HMMは、状態遷移確率と出力確率密度関数とをモデルのパラメータ(モデルパラメータ)として定義される確率モデルである。
図2のHMMは、left-to-right型と呼ばれるHMMで、図中○印で示すN+2個の状態S0,S1,・・・,SN-1,SN,SN+1が、左から右方向に並んでいる。状態S0乃至SN+1のうちの、最も左の状態S0は初期状態と呼ばれ、最も右の状態SN+1は終了状態と呼ばれる。図2のleft-to-right型と呼ばれるHMMでは、初期状態S0と終了状態SN+1を除く状態Si(i=1,2,・・・,N)において、自身への状態の遷移(自己遷移)と、自身の右隣への状態の遷移とだけが許されている。ここで、図2では、矢印が状態の遷移を表している。
また、図2のHMMでは、初期状態S0から、その右隣の状態S1に状態遷移するようになっている。従って、状態S0から状態S1への状態遷移確率a01は、1である。さらに、終了状態SN+1では、状態遷移が生じないようになっている。そして、状態遷移は、初期状態S0から始まって、終了状態SN+1に到達して終了する。
さらに、図2のHMMでは、初期状態S0と終了状態SN+1を除く状態Si(i=1,2,・・・,N)において、ベクトルxが出力される確率密度(確率分布)を表す出力確率密度関数bi(x)が定義されている。ここでは、出力確率密度関数bi(x)は、例えば、平均ベクトルμi と共分散行列Σi によって定義される正規分布を表す式(4)で与えられることとする。
ここで、式(4)において、Kは、確率変数であるベクトルxの次元数を表し、上付のT は行列の転置を表す。
なお、図2では、自己遷移と、自身の右隣への状態の遷移とだけが許されているHMMを採用することとしたが、その他、さらに、右側の他の状態への遷移も許されているHMMを採用することが可能である。また、left-to-right型でないHMMを採用することも可能である。
次に、図3のフローチャートを参照して、図1の音声合成装置の処理について説明する。
まず最初に、ステップS1において、選択部2は、HMM記憶部1に記憶されたHMMの中から、音声合成に用いるHMMを選択し、状態確率推定部3とベクトル時系列生成部4に供給して、ステップS2に進む。
ステップS2では、状態確率推定部3は、選択部2から供給されるHMMの各状態について、所定の間隔の時刻ごとの、状態がベクトルを出力する状態確率を推定する状態確率推定処理を行い、その結果得られる状態確率を、ベクトル時系列生成部4に供給して、ステップS3に進む。
ステップS3では、ベクトル時系列生成部4は、状態確率推定部3から供給される状態確率と、選択部2から供給されるHMMの状態が出力する代表的なベクトルとに基づいて、所定の間隔の時刻ごとのベクトルを求めるベクトル時系列生成処理を行い、その結果得られる時系列のベクトル(ベクトルの時系列)を出力して、ステップS4に進む。
ステップS4では、逆フィルタ5が、ベクトル時系列生成部4が出力する時系列のベクトルをフィルタリングすることにより、音声信号を得て出力し、処理を終了する。
次に、図1の状態確率推定部3が図3のステップS2で行う状態確率推定処理について説明する。
状態確率推定処理では、HMMの状態確率が推定される。HMMの状態確率とは、HMMの各状態についての、所定の間隔の時刻ごとの、状態がベクトルを出力する確率であり、時刻tにおいて、状態Siがベクトルxを出力する状態確率をPi(t)と表す。
状態確率Pi(t)は、時刻tに、ベクトルxを出力する状態Siを確率的に与える。
ここで、上述したように、HMMでは、初期状態S0と終了状態SN+1を除く状態S1乃至SNに出力確率密度関数bi(x)が定義されており、初期状態S0と終了状態SN+1からは、ベクトルが出力されず、他のN個の状態S1乃至SNからベクトルxが出力される可能性がある。
また、時刻t=0 において初期状態S0 から状態遷移が始まり、その後、適宜、自己遷移をしながら、状態S1, S2, S3,・・・,SNと遷移し、最終時刻t=T+1において状態 SN+1 に到達することとすると、状態S1から状態SNまでの状態遷移においてベクトルxが出力される。つまり、時刻t=1から時刻t=Tまでの、時間幅が1の時間間隔の各時刻tでベクトルxが出力される。時刻t=1から時刻t=Tまでの、時間幅が1の時間間隔の各時刻でベクトルxが出力されることによって得られるベクトルxの時系列の長さはTで表される。この、時系列の長さがTの、ベクトルxの時系列(時系列のベクトルx)を、x1,x2,x3,・・・,xTで表す。
状態確率推定処理では、時系列のベクトルx1,x2,x3,・・・,xTを求めるために必要となるHMMの状態確率Pi(t)を、t=1,2,・・・,Tの各時刻tについて、出力確率密度関数bi(x)が定義されたすべての状態S1,S2,・・・,SNに対して推定する。
なお、t=1,2,・・・,Tのうちのいずれかの時刻tでは、HMMのある状態が、ベクトルxtを、必ず出力する。従って、式(5)に示すように、ベクトルxを出力しうる状態S1, S2, S3,・・・,SNのすべてに関して、時刻tにおける状態確率Pi(t)のサメーションをとると1になる。
状態確率Pi(t)は、上述したように、時刻tにおいて、状態Siがベクトルxを出力する確率(状態Siへの状態遷移によって状態Siからベクトルxが出力される確率)であるので、状態確率Pi(t)を求めるにあたり、まず、HMMにおいて、状態Siに留まっている時間(状態Siで自己遷移している時間)を考える。
ここで、図4は、図2のleft-to-right型のHMMにおける状態遷移の仕方の例を示している。
図4では、時刻t=0において、初期状態S0 から状態遷移が始まり、時刻t=1において、状態(初期状態)S0から右隣の状態S1に遷移している。その後、時刻t=2,3,4それぞれにおいて、状態S1から状態S1に遷移(自己遷移)し、時刻t=5において、状態S1から右隣の状態S2に遷移している。さらに、時刻t=6,7それぞれにおいて、状態S2から状態S2に自己遷移し、時刻t=8において、状態S2から右隣の状態S3に遷移している。その後、順次、自己遷移または右隣の状態に遷移し、時刻t=T-2において、状態SN-1から右隣の状態SNに遷移している。そして、時刻t=T-1,Tそれぞれにおいて、状態SNから状態SNに自己遷移し、最終時刻t=T+1において、状態SNから右隣の終了状態SN+1に遷移している。
いま、ある時刻tにおいて、状態Si-1から右隣の状態Siに遷移し、その後、自己遷移をn-1回だけ繰り返し、さらにその後に右隣の状態Si+1に遷移した場合、状態Siには、時間nだけ留まる。この、状態Siに留まる時間nを、継続時間(または継続時間長)と呼ぶこととすると、状態Siの継続時間が時間nになる確率は、状態Siから状態Siに自己遷移する確率である状態遷移確率aiiを用いて、式(6)で与えられる。
ここで、式(6)において、状態遷移確率aiiは、状態Siから状態Siに自己遷移する確率であるから、1-aiiは、状態Siから他の状態に遷移する確率である。
状態Siの継続時間nの期待値E[n]は、式(6)を用いると、式(7)で表される。
式(7)の継続時間nの期待値E[n]は、状態S1,S2,・・・,SNすべてについて求めることができ、いま、状態Siの継続時間nの期待値E[n]を、diと表すこととする。ここで、状態Siの継続時間nの期待値diは、図4に示すように、状態Siにおいて自己遷移が生じる回数(の期待値)に対応する。
状態S1,S2,・・・,SNそれぞれの継続時間の期待値d1,d2,・・・,dNを、式(8)に示すように累積することで、初期状態S0から終了状態SN+1に遷移するまでの全体の継続時間(全体継続時間)Tを求めることができる。
式(8)で表される全体継続時間Tが、HMMから出力されるベクトル時系列x1,x2,x3,...,xTの長さとなる。
なお、式(8)の全体継続時間Tは、HMMから出力されるベクトル時系列x1,x2,x3,...,xTの長さ、つまり、ベクトル時系列x1,x2,x3,...,xTにおけるベクトルの個数であり、従って、整数値であるため、全体継続時間Tを求めるのに用いられる式(7)の継続時間の期待値di(=E[n])は、例えば、小数点以下を切り上げるなどして整数化することとする。
HMMにおいて、状態が、式(7)によって求められる状態Siの継続時間の期待値diにしたがって遷移していった場合の、状態の系列(状態遷移系列)において、状態Si-1から右隣の状態Siに遷移する時刻tを、tiと表すことにする。
ここで、図4では、上述したように、状態S1から右隣の状態S2に遷移する時刻t2が5になっており、状態S2から右隣の状態S3に遷移する時刻t3が8になっている。また、状態SN-1から右隣の状態SNに遷移する時刻tNはT-2になっている。
なお、図2のHMMでは、状態遷移は、必ず、初期状態S0から状態遷移は始まり、初期状態S0からは、必ず、右隣の状態S1に遷移するから、状態S0から右隣の状態S1に遷移する時刻t1は、必ず1である。
さらに、図2のHMMでは、状態の遷移は、最後に、状態SNから終了状態SN+1に遷移して終了し、状態SNから終了状態SN+1に遷移する直前の遷移の時刻tは、全体継続時間Tに等しいから、状態SNから右隣の状態SN+1に遷移する時刻tN+1は、必ずT+1である。
以上のように、初期状態S0から状態S1に遷移する時刻t1は必ず1であり、さらに、
状態SNから終了状態SN+1に遷移する時刻tN+1は必ずT+1である。また、状態Siの継続時間の期待値diは、式(7)で求めることができる。
従って、初期状態S0から状態S1に遷移する時刻t1(=1)を初期値とし、ある状態Si-1から他の状態Siに遷移する時刻tiに対して、状態Siの継続時間の期待値diを加算することにより、状態遷移が初期状態S0から始まって終了状態SN+1で終了する状態遷移系列において、状態Siから他の状態Si+1に遷移する時刻ti+1を求めることができる。
ここで、以下、適宜、状態Si-1から他の状態(右隣の状態)Siに遷移する時刻tを、遷移時刻tといい、上述のように、状態Siの継続時間の期待値diを用いた加算を行うことにより求められる遷移時刻tiを、期待遷移時刻tiという。
いま、遷移時刻tが、所定の確率分布にしたがうとし、その所定の確率分布として、例えば、正規分布(ガウシアン)を仮定すると、状態Si-1から他の状態Siに遷移する遷移時刻tの確率密度(確率分布)を表す確率密度関数qi(t)は、式(9)で与えられる。
式(9)の確率密度関数qi(t)によれば、図5に示すように、状態Si-1から他の状態Siに遷移する遷移時刻tは、平均値が期待遷移時刻tiで、分散がσ2の正規分布にしたがう。また、式(9)の確率密度関数qi(t)によれば、分散σ2が非常に小さいと、状態Siに遷移する遷移時刻tが確定的な値tiになり、分散σ2が大きくなるにしたがって、状態Siに遷移する遷移時刻tが確率的な値になる。
ここで、以下、適宜、式(9)の確率密度関数(によって与えられる確率)qi(t)を、前向き遷移確率と呼ぶこととする。
図6は、前向き遷移確率qi(t)とHMMの状態との関係を示している。
前向き遷移確率qi(t)は、時刻tにおいて、状態Si-1から他の状態Siに遷移する遷移確率を与える。同様に、前向き遷移確率qi+1(t)は、時刻tにおいて、状態Siから他の状態Si+1に遷移する遷移確率を与える。
さらに、時刻tにおいて、状態Siで自己遷移をする確率は、前向き遷移確率qi+1(t)を用いた式1-qi+1(t)で与えられる。
一方、以上の式(9)の前向き遷移確率qi(t)を求めた場合と同様に、状態遷移が終了状態SN+1から始まって初期状態S0で終了する状態遷移系列を考えると、その状態遷移系列については、状態Si+1から他の状態Siに遡って遷移する時刻tを求めることができる。この、状態Si+1から他の状態Siに遡って遷移する時刻tは、終了状態SN+1から状態SNに遡って遷移する時刻tN'(=T)を初期値とし、ある状態Si+2から他の状態Si+1に遡って遷移する時刻ti+1'に対して、状態Siの継続時間の期待値diを加算することにより求めることができる。
ここで、以下、適宜、状態Si+1から他の状態(左隣の状態)Siに遡って遷移する時刻tを、逆遷移時刻tといいい、上述のように、状態Siの継続時間の期待値diを用いた加算を行うことにより求められる逆遷移時刻ti'を、逆期待遷移時刻ti'という。
いま、逆遷移時刻tが、遷移時刻tと同様に、所定の確率分布にしたがうとし、その所定の確率分布として、例えば、正規分布を仮定すると、状態Si+1から他の状態Siに遷移する逆遷移時刻tの確率密度を表す確率密度関数ri(t)は、式(9)と同様の式(10)で与えられる。
式(10)の確率密度関数ri(t)によれば、図5に示した確率密度関数(前向き遷移確率)qi(t)と同様に、状態Si+1から他の状態Siに遡って逆遷移する逆遷移時刻tは、平均値が逆期待遷移時刻ti'で、分散がσ'2の正規分布にしたがう。また、式(10)の確率密度関数ri(t)によれば、分散σ'2が非常に小さいと、状態Siに遷移する遷移時刻tが確定的な値tiになり、分散σ'2が大きくなるにしたがって、状態Siに遷移する逆遷移時刻tが確率的な値になる。
ここで、以下、適宜、式(10)の確率密度関数(によって与えられる確率)ri(t)を、後ろ向き遷移確率と呼ぶこととする。
図7は、後ろ向き遷移確率ri(t)とHMMの状態との関係を示している。
なお、図7では、後ろ向きの状態遷移(状態を遡る遷移)を表すために、状態遷移を表す矢印の向きを、図6とは逆向きに図示してある。
後ろ向き遷移確率ri(t)は、時刻tにおいて、状態Si+1から他の状態Siに遡って遷移する遷移確率を与える。同様に、後ろ向き遷移確率ri-1(t)は、時刻tにおいて、状態Siから他の状態Si-1に遡って遷移する遷移確率を与える。
さらに、時刻tにおいて、状態Siで自己遷移をする確率は、後ろ向き遷移確率ri-1(t)を用いた式1-ri-1(t)で与えられる。
次に、状態遷移が初期状態S0から始まって終了状態SN+1で終了する状態遷移系列について、時刻t=0において、状態Siから遷移が始まる確率を、Pfi(0)と表すこととすると、図2のHMMでは、時刻t=0に初期状態S0から必ず遷移が始まるので、時刻t=0において、状態S0から遷移が始まる確率Pf0(0)は、式(11)に示すように1となる。
また、時刻t=0において、状態S0から必ず遷移が始まるということは、時刻t=0において、状態S0以外の状態S1,S2,・・・,SN,SN+1から遷移が始まることはあり得ないので、時刻t=0において、状態S0以外の状態Siから遷移が始まる確率Pfi(0)は、式(12)に示すように0となる。
図2のleft-to-right型のHMMについては、時刻tに状態Siに存在する(いる)確率Pfi(t)、つまり、時刻tにおいて、状態Siから遷移が始まる確率Pfi(t)は、式(11)の確率Pf0(0)と、式(12)の確率Pfi(0)とを初期値とする、式(9)の前向き遷移確率qi(t)を用いた、式(13)の漸化式を用いて計算することができる。
ここで、式(13)の右辺の第1項Pfi-1(t-1)qi(t)は、時刻t-1に状態Si-1にいて、次の時刻tに状態Siに遷移する確率を表す。また、式(13)の右辺の第2項Pfi(t-1)(1-qi+1(t)は、時刻t-1に状態Siにいて、次に時刻tに状態Siに自己遷移する確率を表す。
なお、時刻t=0以外の時刻では、初期状態S0から遷移が始まることはあり得ないため、時刻t=0以外の時刻において、初期状態S0から遷移が始まる確率Pf0(t)は、式(14)に示すように0である。
以下、適宜、以上のようにして求められる、時刻tにおいて、状態Siから遷移が始まる確率Pfi(t)を、前向き状態確率Pfi(t)と呼ぶ。
ここで、図8は、前向き状態確率Pfi(t)を模式的に示した表である。
図8の表において、横軸は状態Siを表し、縦軸は時刻tを表している。そして、横軸のある状態Siの列と、縦軸のある時刻tの行とが交差する欄に、時刻tにおいて、状態Siから遷移が始まる前向き状態確率Pfi(t)が記述されている。
図8の表の欄のうちの、時刻tが0の欄は、式(11)および式(12)にしたがって記述されていき、状態Siが初期状態S0の欄は、式(11)および式(14)にしたがって記述されていく。そして、以下、他の欄には、式(13)の漸化式を計算することにより得られる前向き状態確率Pfi(t)が順次記述されていく。
次に、時刻tにおいて、状態Siから遷移が始まる確率は、状態遷移が、終了状態SN+1から始まって初期状態S0で終了する状態遷移系列についても考えることができる。
そこで、いま、時刻t=T+1において、状態Siから遡る遷移(後ろ向きの遷移)が始まる確率を、Pbi(T+1)と表すこととすると、図2のHMMでは、時刻t=T+1に最終状態SN+1から必ず後ろ向きの遷移が始まるので、時刻t=T+1において、状態SN+1から後ろ向きの遷移が始まる確率PbN+1(T+1)は、式(15)に示すように1となる。
また、時刻t=T+1において、状態SN+1から必ず後ろ向きの遷移が始まるということは、時刻t=T+1において、状態SN+1以外の状態SN,SN-1,・・・,S1,S0から遷移が始まることはあり得ないので、時刻t=T+1において、状態SN+1以外の状態Siから遷移が始まる確率Pbi(T+1)は、式(16)に示すように0となる。
図2のleft-to-right型のHMMについては、時刻tに状態Siに存在する(いる)確率Pbi(t)、つまり、時刻tにおいて、状態Siから後ろ向きの遷移が始まる確率Pbi(t)は、式(15)の確率PbN+1(T+1)と、式(16)の確率Pbi(T+1)とを初期値とする、式(10)の後ろ向き遷移確率ri(t)を用いた、式(17)の漸化式を用いて計算することができる。
なお、時刻t=T+1以外の時刻では、終了状態SN+1から後ろ向きの遷移が始まることはあり得ないため、時刻t=T+1以外の時刻において、終了状態SN+1から遷移が始まる確率PbN+1(t)は、式(18)に示すように0である。
以下、適宜、以上のようにして求められる、時刻tにおいて、状態Siから後ろ向きの遷移が始まる確率Pbi(t)を、後ろ向き状態確率Pbi(t)と呼ぶ。
ここで、図9は、後ろ向き状態確率Pbi(t)を模式的に示した表である。
図9の表において、横軸は状態Siを表し、縦軸は時刻tを表している。そして、横軸のある状態Siの列と、縦軸のある時刻tの行とが交差する欄に、時刻tにおいて、状態Siから後ろ向き遷移が始まる後ろ向き状態確率Pbi(t)が記述されている。
図9の表の欄のうちの、時刻tがT+1の欄は、式(15)および式(16)にしたがって記述されていき、状態Siが終了状態SN+1の欄は、式(15)および式(18)にしたがって記述されていく。そして、以下、他の欄には、式(17)の漸化式を計算することにより得られる後ろ向き状態確率Pbi(t)が順次記述されていく。
式(13)の前向き状態確率Pfi(t)は、状態遷移が初期状態S0から始まって終了状態SN+1で終了する状態遷移系列について、時刻tにおいて、状態Siから遷移が始まる確率であり、式(17)の後ろ向き状態確率Pbi(t)は、状態遷移が終了状態SN+1から始まって初期状態S0で終了する状態遷移系列について、時刻tにおいて、状態Siから遷移が始まる確率であるから、これらの前向き状態確率Pfi(t)と、後ろ向き状態確率Pbi(t)を掛け合わせることにより、時刻tに状態Siに存在する(居る)確率、つまり、状態Siがベクトルxを出力する状態確率(ベクトルxを出力する状態が状態Siである確率)Pi(t)を求めることができる。
そこで、状態確率Pi(t)を、式(19)で定義することとする。
なお、式(19)の状態確率Pi(t)は、前向き状態確率Pfi(t)と、後ろ向き状態確率Pbi(t)との乗算値を、その乗算値の、状態S1乃至SNについてのサメーション(Σ)で正規化しているので、上述の式(5)を満たす。
式(19)の状態確率Pi(t)は、出力確率密度関数bi(x)が定義されたすべての状態S1,S2,・・・,SNについて、状態遷移時に何らかのベクトルが出力される各時刻t=1,2,・・・,Tごとに計算することができる。
ここで、図10は、状態確率Pi(t)を模式的に示した表である。
図10の表において、横軸は状態Siを表し、縦軸は時刻tを表している。そして、横軸のある状態Siの列と、縦軸のある時刻tの行とが交差する欄に、時刻tにおいて、状態Siからベクトルが出力される確率である状態確率Pi(t)が記述されている。
図10の表の各欄には、図8の表の前向き状態確率Pfi(t)と、図9の表の後ろ向き状態確率Pbi(t)とを用いて、式(19)を計算することにより得られる状態確率Pi(t)が記述される。
次に、図11は、以上のようにして状態確率Pi(t)を推定する状態確率推定処理を行う図1の状態確率推定部3の構成例を示している。
状態確率推定部3は、継続時間長算出部21、期待遷移時刻算出部22、前向き遷移確率決定部23Fおよび後ろ向き遷移確率決定部23B、前向き状態確率算出部24Fおよび後ろ向き状態確率算出部24B、並びに状態確率算出部25から構成されている。
継続時間長算出部21には、選択部2(図1)からHMM(の状態遷移確率aij)が供給される。
継続時間長算出部21は、選択部2から供給されるHMMの状態遷移確率aijを用いて、式(7)で表される状態Siの継続時間nの期待値di(=E[n])を、状態S1,S2,・・・,SNすべてについて算出し、期待遷移時刻算出部22に供給する。
さらに、継続時間長算出部21は、状態S1,S2,・・・,SNそれぞれの継続時間の期待値d1,d2,・・・,dNを用いて、式(8)の全体継続時間Tを求める。そして、継続時間長算出部21は、全体継続時間Tを必要なブロックに供給する。
期待遷移時刻算出部22は、継続時間長算出部21から供給される、状態S1,S2,・・・,SNそれぞれの継続時間の期待値d1,d2,・・・,dNを用いて、期待遷移時刻tiと、逆期待遷移時刻ti'とを求め、期待遷移時刻tiを、前向き遷移確率決定部23Fに供給するとともに、逆期待遷移時刻ti'を、後ろ向き遷移確率決定部23Bに供給する。
前向き遷移確率決定部23Fは、期待遷移時刻算出部22から供給される期待遷移時刻tiを用い、式(9)の前向き遷移確率qi(t)を求め、前向き状態確率算出部24Fに供給する。なお、式(9)の前向き遷移確率qi(t)の分散σ2としては、例えば、あらかじめ定められた固定値を採用することもできるし、後述するようにして求められる値を採用することもできる。
後ろ向き遷移確率決定部23Bは、期待遷移時刻算出部22から供給される逆期待遷移時刻ti'を用い、式(10)の後ろ向き遷移確率ri(t)を求め、後ろ向き状態確率算出部24Bに供給する。なお、式(10)の後ろ向き遷移確率ri(t)の分散σ'2としては、例えば、あらかじめ定められた固定値を採用することもできるし、後述するようにして求められる値を採用することもできる。
前向き状態確率算出部24Fは、前向き遷移確率決定部23Fから供給される式(9)の前向き遷移確率qi(t)を用いて、式(13)の漸化式を計算することにより前向き状態確率Pfi(t)を求め、状態確率算出部25に供給する。
後ろ向き状態確率算出部24Bは、後ろ向き遷移確率決定部23Bから供給される式(10)の後ろ向き遷移確率ri(t)を用いて、式(17)の漸化式を計算することにより後ろ向き状態確率Pbi(t)を求め、状態確率算出部25に供給する。
状態確率算出部25は、前向き状態確率算出部24Fから供給される前向き状態確率Pfi(t)と、後ろ向き状態確率算出部24Bから供給される後ろ向き状態確率Pbi(t)とを用いて、式(19)の状態確率Pi(t)を求め、後段のベクトル時系列生成部4(図1)に供給する。
次に、図12のフローチャートを参照して、図11の状態確率推定部3が図3のステップS2で行う状態確率推定処理について説明する。
継続時間長算出部21は、選択部2(図1)からHMMの供給を受け、ステップS21において、選択部2からのHMMの状態遷移確率aijを用いて、式(7)で表されるHMMの各状態Siの継続時間nの期待値di(=E[n])を算出し、期待遷移時刻算出部22に供給して、ステップS22に進む。
ステップS22では、期待遷移時刻算出部22は、継続時間長算出部21からの継続時間の期待値d1,d2,・・・,dNを用いて、期待遷移時刻tiと、逆期待遷移時刻ti'とを求め、期待遷移時刻tiを、前向き遷移確率決定部23Fに供給するとともに、逆期待遷移時刻ti'を、後ろ向き遷移確率決定部23Bに供給して、ステップS23に進む。
ステップS23では、前向き遷移確率決定部23Fが、期待遷移時刻算出部22からの期待遷移時刻tiを用い、式(9)の前向き遷移確率qi(t)を求め、前向き状態確率算出部24Fに供給するとともに、後ろ向き遷移確率決定部23Bが、期待遷移時刻算出部22からの逆期待遷移時刻ti'を用い、式(10)の後ろ向き遷移確率ri(t)を求め、後ろ向き状態確率算出部24Bに供給して、ステップS24に進む。
ステップS24では、前向き状態確率算出部24Fが、前向き遷移確率決定部23Fからの前向き遷移確率qi(t)を用い、式(13)の前向き状態確率Pfi(t)を求めて、状態確率算出部25に供給するとともに、後ろ向き状態確率算出部24Bが、後ろ向き遷移確率決定部23Bからの後ろ向き遷移確率ri(t)を用いて、式(17)の後ろ向き状態確率Pbi(t)を求めて、状態確率算出部25に供給して、ステップS25に進む。
ステップS25では、状態確率算出部25が、前向き状態確率算出部24Fからの前向き状態確率Pfi(t)と、後ろ向き状態確率算出部24Bからの後ろ向き状態確率Pbi(t)とを用いて、式(19)の状態確率Pi(t)を求め、後段のベクトル時系列生成部4(図1)に供給して、状態確率推定処理を終了する。
次に、図1のベクトル時系列生成部4が図3のステップS3で行うベクトル時系列生成処理について説明する。
ベクトル時系列生成処理では、状態確率推定部3で得られる状態確率Pi(t)と、HMMの状態Siに定義されている出力確率密度関数bi(x)に基づき、ベクトル時系列 x1,x2,x3,・・・,xTが生成される。
いま、HMMから時刻tにベクトルxが出力(観測)される確率分布(確率密度)を表す確率密度関数を、Ft(x)と表すこととする。
状態確率Pi(t)は、時刻tに、状態Siから何らかのベクトルが出力される確率であり、出力確率密度関数bi(x)は、状態Siからベクトルxが出力される確率密度であるから、時刻tにおいて、HMMからベクトルxが出力される確率密度、即ち、HMMのいずれかの状態Siからベクトルxが出力される確率密度を表す確率密度関数Ft(x)は、式(20)で与えられる。
ここで、出力確率密度関数bi(x)が、式(4)に示した正規分布で与えられ、状態確率Pi(t)が、式(5)を満たす確率であることを考慮すれば、確率密度関数Ft(x)は、複数の正規分布(ガウシアン)を混合して得られる混合正規分布にしたがう。
即ち、式(20)の確率密度関数Ft(x)における状態確率Pi(t)は、式(4)に示した正規分布(出力確率密度関数bi(x))に対して与えられる混合重みに相当する。但し、式(20)において、混合重みである状態確率Pi(t)は、時刻tとともに変化する。
式(20)の確率密度関数Ft(x)によって、時刻tにHMMからベクトルxが出力される確率密度が与えられる場合、時刻tにHMMから出力されるベクトルxの期待値E[x]は、式(21)で与えられる。
式(21)に、式(20)を代入することにより、時刻tにHMMから出力されるベクトルxの期待値E[x]は、式(22)で求めることができる。
ここで、式(22)の上から2行目におけるbi(x)・xの、ベクトルxに関する-∞から+∞に亘る積分∫(bi(x)・x)dxは、出力確率密度関数bi(x)で確率密度が与えられるベクトルxの代表的なベクトルとしての、ベクトルxの期待値となるが、出力確率密度関数bi(x)が式(4)に示した正規分布で与えられる場合には、式(22)の上から3行目に示すように、式(4)の正規分布を規定する平均ベクトルμiとなる。
式(22)によれば、時刻tに出力されるベクトルxの期待値E[x]は、HMMの各状態S1,S2,・・・,SNにおいて定義される出力確率密度関数b1(x),b2(x),・・・,bN(x)がしたがう正規分布を規定する平均ベクトルμ1,μ2,・・・,μNを、混合重みP1(t),P2(t),・・・,PN(t)で線形結合することで計算されることになる。
ベクトル時系列生成処理では、式(22)により求められるベクトルxの期待値E[x]が、時刻t=1,2,・・・,Tについてそれぞれ求められ、ベクトル時系列x1,x2,・・・,xTとして出力される。
次に、図13は、以上のようにして、所定の間隔の時刻t=1,2,・・・,Tごとのベクトルを求め、ベクトル時系列x1,x2,・・・,xTとして出力するベクトル時系列生成処理を行う図1のベクトル時系列生成部4の構成例を示している。
ベクトル時系列生成部4は、期待値取得部31と期待値算出部32とから構成される。
期待値取得部31には、選択部2(図1)からHMM(の出力確率密度関数bi(x))が供給される。期待値取得部31は、選択部2から供給されるHMMの出力確率密度関数bi(x)から、その出力確率密度関数bi(x)が表す確率分布にしたがうベクトルxの期待値を求め、即ち、式(22)の上から2行目におけるbi(x)・xの、ベクトルxに関する-∞から+∞に亘る積分∫(bi(x)・x)dxの演算結果を求め、期待値算出部32に供給する。
ここでは、上述したように、出力確率密度関数bi(x)は正規分布であるため、期待値取得部31では、その正規分布を規定する平均ベクトルμiが、ベクトルxの期待値として求められる。
期待値算出部32には、期待値取得部31からベクトルxの期待値としての平均ベクトルμiが供給される他、状態確率推定部3(図1)から状態確率Pi(t)が供給される。期待値算出部32は、期待値取得部31から供給される平均ベクトルμiと、状態確率推定部3から供給される状態確率Pi(t)とを用いて、式(22)の上から3行目の演算を行うことにより、HMMの各状態S1,S2,・・・,SNにおいて定義される出力確率密度関数b1(x),b2(x),・・・,bN(x)がしたがう正規分布を規定する平均ベクトルμ1,μ2,・・・,μNを、混合重みP1(t),P2(t),・・・,PN(t)で線形結合した線形結合結果、つまり、時刻tにHMMから出力されるベクトルxの期待値E[x]を、時刻t=1,2,・・・,Tごとに求め、その結果得られるベクトル時系列x1,x2,・・・,xTを出力する。
次に、図14のフローチャートを参照して、図13のベクトル時系列生成部4が行う図3のステップS3のベクトル時系列生成処理について説明する。
期待値取得部31は、選択部2(図1)からHMMの供給を受け、ステップS31において、選択部2から供給されるHMMの出力確率密度関数bi(x)から、その出力確率密度関数bi(x)が表す確率分布にしたがうベクトルxの期待値を、選択部2からのHMMにおいて出力確率密度関数b1(x),b2(x),・・・,bN(x)が定義されている各状態S1,S2,・・・,SNについて求め、期待値算出部32に供給する。
即ち、期待値取得部31は、選択部2からのHMMにおいて出力確率密度関数b1(x),b2(x),・・・,bN(x)が定義されている各状態S1,S2,・・・,SNについて、出力確率密度関数b1(x),b2(x),・・・,bN(x)が表す正規分布を規定する平均ベクトルμ1,μ2,・・・,μNを求め(取得し)、期待値算出部32に供給する。
そして、ステップS31からステップS32に進み、期待値算出部32は、期待値取得部31から供給される平均ベクトルμ1,μ2,・・・,μNと、状態確率推定部3から供給される時刻tについての状態確率P1(t),P2(t),・・・,PN(t)との積和演算を行い、その積和演算結果ΣPi(t)・μiを、時刻tにHMMから出力されるベクトルxの期待値xt(=E[x])として求める。
期待値算出部32は、ステップS32において、時刻t=1,2,・・・,Tごとに、HMMから出力されるベクトルxの期待値x1,x2,・・・,xTを求めて、ステップS33に進み、そのベクトルxの期待値x1,x2,・・・,xTを、全体継続時間がTのベクトル時系列x1,x2,・・・,xTとして出力して、ベクトル時系列生成処理を終了する。
以上のように、状態の遷移に応じてベクトルxが出力されるHMMの各状態Siについて、所定の間隔の時刻tごとの、状態Siがベクトルxを出力する状態確率Pi(t)を推定し、その状態確率Pi(t)と、状態Siが出力する代表的なベクトルとしての、例えば、平均ベクトルμiとに基づいて、HMMが出力する所定の間隔の時刻tごとのベクトルx1,x2,・・・,xTを求めるようにしたので、即ち、ベクトルxを出力するべきHMMの状態を確定せずに、状態確率Pi(t)によって確率的に表し、その状態確率Pi(t)に基づいて、HMMが出力するベクトルxの期待値を解析的に計算することで、ベクトル時系列x1,x2,・・・,xTを生成するようにしたので、動的特徴量を用いることなく、かつ、ベクトル時系列の生成を繰り返し試行することもなく、効率的に、滑らかに変化するベクトル時系列を生成することができる。
即ち、ある状態Siから他の状態Si+1に遷移する遷移時刻t(および逆遷移時刻t')が確率分布にしたがうとして、その遷移時刻tが、状態Siの自己遷移が継続する継続時間diを用いて求められ、さらに、その遷移時刻tを用いて、時刻tにおいて状態Siがベクトルxを出力する状態である確率を表す状態確率Pi(t)が求められる。従って、状態確率Pi(t)が高くなる状態Siが、時刻tの進行に伴い、状態S1から状態SNへと移行するように、状態確率Pi(t)は滑らかに変化し、この状態確率Pi(t)の滑らかな変化に応じて、状態確率Pi(t)を用いて生成されるベクトル時系列は滑らかに変化する。
ここで、状態確率Pi(t)が時刻tに応じて変化することが、最終的に得られるベクトル時系列x1,x2,・・・,xTの時間的な変化の特性を大きく左右する。
即ち、例えば、全ての状態Siにおいて、状態確率Pi(t)が時刻tに依存しない一定値とすると、時間的に変化しないベクトル時系列x1,x2,・・・,xTが得られる。
また、例えば、各時刻tにおいて、ある1つの状態の状態確率Pi(t)だけが1となり、その他の状態の状態確率Pi(t)が0となるとすると、各時刻tにおいてベクトルxを出力する状態が1つの状態に固定(確定)され、その結果、ベクトル時系列が出力されるときの状態遷移系列が固定される。この場合、その固定された状態遷移系列の各状態から出力される平均ベクトルを並べたベクトル時系列が得られる。
なお、上述の場合には、HMMの各状態Siにおいて定義される出力確率密度関数bi(x)が正規分布にしたがうこととしたが、出力確率密度関数bi(x)としては、正規分布以外の、例えば、混合正規分布などの、平均ベクトルを計算することができる確率分布を表す関数を採用することができる。
さらに、出力確率密度関数bi(x)としては、平均ベクトルを厳密(正確に)に求めることができない確率分布であっても、平均ベクトルを近似的に求めることができる確率分布を表す関数を採用することが可能である。
即ち、出力確率密度関数bi(x)としては、式(22)の上から2行目におけるbi(x)・xの、ベクトルxに関する-∞から+∞に亘る積分∫(bi(x)・x)dxの演算、つまり、状態Siから出力される尤度が最大のベクトルx(状態Siから出力されるベクトルxの期待値E[x])を求める演算を、厳密にまたは近似的に行うことができる関数を採用することができる。
なお、式(22)の上から2行目におけるbi(x)・xの、ベクトルxに関する-∞から+∞に亘る積分∫(bi(x)・x)dxの演算結果としては、上述した平均ベクトルμiなどの他、例えば、出力確率密度関数bi(x)の最大値を与えるベクトルxなどの、状態Siが出力確率密度関数bi(x)が表す確率分布にしたがって出力するベクトルxのうちの、いわば代表的なベクトルを採用することができる。
また、上述の場合には、状態遷移確率モデルとして、left-to-right型のHMMを採用することとしたが、HMMは、left-to-right型に限定されるものではなく、例えば、状態のスキップを伴う状態遷移を持つHMMや、後ろ向きの状態遷移を持つHMM、さらには、全ての状態間の遷移が定義されたHMMであっても良い。
さらに、状態遷移確率モデルとしては、HMM以外の状態遷移確率モデルを採用することが可能である。HMM以外の状態遷移確率モデルとしては、例えば、ベイジアンネットワークなどの、状態確率Pi(t)を推定することができる状態遷移確率モデルがある。
ベイジアンネットワークでは、変数間の依存関係をグラフ構造で表し、各ノードに条件付き確率を割り当てることで、時系列データのモデル化が行われる。
なお、ベイジアンネットワークのグラフ構造の決定は、例えば、学習に用いられる学習データの尤度とグラフ構造の複雑さとを考慮したモデルを選択することにより行われ、条件付き確率の推定には、例えば、最尤推定法やEM(Expectation Maximaization)アルゴリズムなどが利用される。ここで、ベイジアンネットワークの詳細については、例えば、本村陽一、「不確実性モデリングのための情報表現:ベイジアンネット」、2001年、ベイジアンネットチュートリアルなどに記載されている。
また、上述したように、状態確率Pi(t)が時刻tに応じて変化することが、最終的に得られるベクトル時系列x1,x2,・・・,xTの時間的な変化の特性を大きく左右することから、ベクトル時系列x1,x2,・・・,xTの特性は、状態確率Pi(t)、ひいては、状態確率Pi(t)を求めるのに用いられる式(9)の前向き遷移確率qi(t)の分散σ2や、式(10)の後ろ向き遷移確率ri(t)の分散σ'2を調整することにより変化させることが可能である。
例えば、分散σ2やσ'2を小さくすると、状態Si-1から状態Siに遷移する時刻が確定的な値に近づき、その結果、HMMがベクトル時系列を出力するときの状態の遷移の仕方、つまり、状態遷移系列も確定的になっていくので、そのような確定的な状態遷移系列の各状態から、各状態に定義されている出力確率密度関数bi(x)の平均ベクトルを順に出力したようなベクトル時系列が得られる。
一方、分散σ2やσ'2を大きくすると、状態確率Pi(t)が高くなる状態Siが、時刻tの進行に伴い、状態S1から状態SNへと移行するように、状態確率pi(t)が滑らかに変化し、この状態確率Pi(t)の滑らかな変化に応じて、滑らかに変化するベクトル時系列が得られる。
図15および図16は、分散σ2およびσ'2を変えて、ベクトル時系列を求めたシミュレーションの内容を説明する図である。
即ち、図15は、HMMの学習に用いた学習データを示している。
シミュレーションでは、長さ(全体継続時間)Tが100の1次元のベクトルの時系列、つまり、長さTが100の、スカラーのデータの時系列を、HMMの学習データとして用いた。
図15においては、横軸を時刻tとするとともに、縦軸をデータの値として、学習データが示されている。
図15の学習データは、時刻t=0において、0であり、時刻tの進行とともに滑らかに減少して、時刻t=50付近で最小値となっている。さらに、図15の学習データは、最小値となった後、時刻tの進行とともに滑らかに増加して、時刻t=100において、再び0となっている。
HMMの学習は、図15の学習データを用いて、Baum-Welch法により行った。また、HMMとしては、状態数が10のleft-to-right型のHMMを用い、出力確率密度関数は正規分布に従うものとして学習を行った。
図16は、ベクトル時系列出力部10(図1)において、上述のような学習によって得られたHMMから生成された1次元のベクトル(スカラーのデータ)の時系列を示している。
図16においては、図15と同様に、横軸は時刻tを表し、縦軸はデータの値を表す。
なお、HMMから1次元のベクトルの時系列を生成するシミュレーションでは、状態確率Pi(t)を求めるのに用いられる式(9)の前向き遷移確率qi(t)の分散σ2と、式(10)の後ろ向き遷移確率ri(t)の分散σ'2とを、HMMのすべての状態で同一の値に固定した。そして、その固定の分散σ2およびσ'2の値としては、0.0001,36.0,400の3種類の値を用いた。
図16は、分散σ2およびσ'2の値として、0.0001,36.0,400の3種類の値を用いた場合のそれぞれにおいて得られたベクトル時系列を示している。
図16によれば、分散σ2およびσ'2の値として、0.0001という非常に小さな値を採用した場合には、上述したように、HMMがベクトル時系列を出力するときの状態遷移系列が確定的になり、その確定的な状態遷移系列の各状態から出力確率密度関数を表す正規分布を規定する平均ベクトル(平均値)が並んだような、いわば変化が段階的なベクトル時系列が出力されることを確認することができる。
また、図16によれば、分散σ2およびσ'2の値として、36.0という大きな値を採用した場合には、滑らかに変化するベクトル時系列が出力されることを確認することができる。さらに、図16によれば、分散σ2およびσ'2の値として、400というより大きな値を採用した場合には、ベクトル時系列を時間に応じて変化する波形として見たときに、その波形が、いわば怠けたベクトル時系列が出力されることを確認することができる。
以上のように、分散σ2およびσ'2の値を調整することにより、HMMから出力されるベクトル時系列の特性を変化させることができる。
なお、図16においては、分散σ2およびσ'2の値を36.0にした場合に得られるベクトル時系列が、図15の学習データに近いものとなっている。このことから、分散σ2およびσ'2の値を適切に調整することで、学習データと近い特性のベクトル時系列を生成することができることが分かる。
また、分散σ2およびσ'2(の値)の調整は、例えば、ユーザによる、図示せぬ操作部の操作や、図1の状態確率推定部3およびベクトル時系列生成部4から構成されるベクトル時系列出力部10を使用するアプリケーション(図1では、音声合成装置)からの要求などに応じて行うことができる。
さらに、分散σ2およびσ'2(の値)の調整(決定)は、その他、例えば、式(7)で求められる各状態Siの継続時間の期待値di(=E[n])に基づいて行うこともできる。
即ち、式(9)の前向き遷移確率qi(t)の分散σ2は、時刻tに状態Si-1から状態Siへの遷移(前向きの遷移)が行われる直前の、状態Si-1での自己遷移が連続する継続時間の期待値di-1に基づいて、例えば、式(23)により決定することができる。
式(23)において、cfは定数であり、例えばcf=0.5が用いられる。
式(23)によれば、式(9)の前向き遷移確率qi(t)の分散σ2が、状態Siに前向きの遷移が行われる直前の状態Si-1の継続時間の期待値di-1に基づき、その継続時間の期待値di-1が長ければ大きな値に決定され、継続時間の期待値di-1が短ければ小さな値に決定される。
同様に、式(10)の後ろ向き遷移確率ri(t)の分散σ'2は、時刻tに状態Si+1から状態Siに遡る遷移(後ろ向きの遷移)が行われる直前の、状態Si+1での自己遷移が連続する継続時間の期待値di+1に基づいて、例えば、式(24)により決定することができる。
式(24)において、cbは定数であり、例えばcb=0.5が用いられる。
式(24)によれば、式(10)の後ろ向き遷移確率ri(t)の分散σ'2が、状態Siに後ろ向きの遷移が行われる直前の状態Si+1の継続時間の期待値di+1に基づき、その継続時間の期待値di+1が長ければ大きな値に決定され、継続時間の期待値di+1が短ければ小さな値に決定される。
次に、上述の場合には、式(7)の継続時間の期待値di(=E[n])を、例えば、小数点以下を切り上げるなどして、整数化して用いることとしたが、この整数化に起因して、HMMから出力されるベクトル時系列には、整数化をしない場合に対して誤差が生じる。
この誤差は、継続時間の期待値diとして、小数点以下を含む値を用いるようにすることで低減することができる。
即ち、上述の場合には、明示的な説明は省略したが、HMMの学習に用いられる学習データの時間間隔が1であることを前提として、HMMからは、時間幅が1の時間間隔の各時刻tでベクトルxが出力されることとしたため、時刻tは整数値のみをとり、従って、継続時間の期待値diも整数値のみをとることとしたが、HMMからベクトルxが出力される時刻として、小数点以下を含む値を想定することにより、継続時間の期待値diも、小数点以下を含む値を用いることができ、これにより、HMMから出力されるベクトル時系列に生じる誤差を低減することができる。
即ち、状態確率推定部3(図1)において、式(7)の継続時間の期待値diを、例えば、小数点以下第2位以下を切り上げるなどして、小数第1位まで求める。さらに、状態確率推定部3において、小数第1位まで求めた継続時間の期待値diを用いて、式(9)の前向き遷移確率qi(t)と、式(10)の後ろ向き遷移確率ri(t)とを求め、さらには、式(9)の前向き遷移確率qi(t)を用いて、式(13)の漸化式で表される前向き状態確率Pfi(t)を求めるとともに、式(10)の後ろ向き遷移確率ri(t)を用いて、式(17)の漸化式で表される後ろ向き状態確率Pbi(t)を求める。
但し、式(13)の漸化式で表される前向き状態確率Pfi(t)と、式(17)の漸化式で表される後ろ向き状態確率Pbi(t)とは、時刻tの刻み幅(時間間隔)を0.1として求める。
そして、状態確率推定部3では、時刻tの刻み幅を0.1として求められた前向き状態確率Pfi(t)と後ろ向き状態確率Pbi(t)とを用い、時刻tの刻み幅を0.1とする式(19)の状態確率Pi(t)、即ち、Pi(0.0),Pi(0.1),Pi(0.2),Pi(0.3),・・・,Pi(T+0.8),Pi(T+0.9),Pi(T+1.0)を求める。
ここで、図17は、時刻tの刻み幅を1として求められる状態確率Pi(t)(図17上側)と、時刻tの刻み幅を0.1として求められる状態確率Pi(t)(図17下側)とを示している。
時刻tの刻み幅が0.1の状態確率Pi(t)が求められた後は、ベクトル時系列生成部4(図1)において、時刻tの刻み幅を0.1とする状態確率Pi(t)のうちの、時刻t=1,2,3,・・・,Tにおける値を用い、式(22)の演算を行うことにより、時刻tの刻み幅が1のベクトル時系列を得ることができる。
以上のように、状態確率Pi(t)を計算する時刻tの刻み幅を小さくすることで、全体の処理量は大きくなるが、継続時間の期待値diの整数化によりベクトル時系列に生じる誤差を低減することができる。
なお、時刻tの刻み幅は、処理量と誤差とをバランスさせて決定することが望ましい。
さらに、ここでは、時刻tの刻み幅を1から0.1に変更して状態確率Pi(t)を計算することとしたが、時刻tの刻み幅は、その他、例えば、0.5や0.01その他の値を採用することが可能であり、この時刻tの刻み幅によって、HMMから出力されるベクトル時系列に生じる誤差(HMMから出力されるベクトル時系列の精度)と、全体の処理量とを調整することができる。
また、HMMから出力されるベクトル時系列の時間間隔は、状態確率Pi(t)を求める時刻tの刻み幅を最小値として調整することができる。即ち、上述のように、時刻tの刻み幅を0.1として状態確率Pi(t)を求めた場合には、HMMから出力されるベクトル時系列の時間間隔は、上述のように、1とすることもできるし、その他、例えば、0.5や0.1などとすることもできる。
状態確率Pi(t)を求める時刻tの刻み幅や、HMMから出力されるベクトル時系列の時間間隔の調整は、例えば、ユーザによる、図示せぬ操作部の操作や、図1のベクトル時系列出力部10を使用するアプリケーションからの要求などに応じて行うことができる。
次に、上述の場合には、1つのHMMからベクトル時系列を生成したが、ベクトル時系列は、複数のHMMを結合して得られるHMM(以下、適宜、結合HMMという)から生成することも可能である。
図18は、left-to-right型の2つのHMM#1と#2とを結合した結合HMMを示している。
図18では、状態S0乃至SN1+1を有するleft-to-right型のHMM#1と、状態S'0乃至S'N2+1を有するleft-to-right型のHMM#2とが、その順番で結合され、1つの結合HMMとなっている。
即ち、図18では、HMM#1の終了状態SN1+1と、HMM#2の初期状態S'0とが削除され、HMM#1の状態SN1と、HMM#2の状態S'1とが接続されることにより、HMM#1と#2とが結合されている。
結合HMMも、1つのHMMと同様に扱うことができ、従って、ベクトル時系列出力部10は、上述した、1つのHMMからベクトル時系列を生成する場合と同様に、結合HMMからベクトル時系列を生成することができる。
なお、結合HMMでは、HMM#1の状態SN1から、HMM#1の終了状態SN1+1に代えて、HMM#2の状態S'1に遷移するようになっており、結合HMMにおいて、HMM#1の状態SN1からHMM#2の状態S'1に遷移するときも、滑らかに変化するベクトル時系列を得ることができる。
また、上述の場合には、2つのHMM#1と#2を結合したが、3以上のHMMを結合することも可能である。
次に、図19のフローチャートを参照して、上述のように、HMMを結合して、ベクトル時系列を生成する場合の図1の音声合成装置の処理について説明する。
ステップS51において、図1の選択部2は、HMM記憶部1に記憶されたHMMの中から、音声合成に用いる複数のHMMを選択して、ステップS52に進み、その複数のHMMを、図18で説明したように結合して、結合HMMを得る。そして、選択部2は、結合HMMを、状態確率推定部3とベクトル時系列生成部4に供給して、ステップS52からステップS53に進む。
ステップS53では、状態確率推定部3は、選択部2から供給される結合HMMの各状態Siについて、所定の間隔の時刻tごとの状態確率Pi(t)を推定する状態確率推定処理を行い、その結果得られる状態確率Pi(t)を、ベクトル時系列生成部4に供給して、ステップS54に進む。
ステップS54では、ベクトル時系列生成部4は、状態確率推定部3から供給される状態確率Pi(t)と、選択部2から供給される結合HMMの状態Siが出力する代表的なベクトルとしての、例えば平均ベクトルμiとに基づいて、所定の間隔の時刻tごとのベクトルを求めるベクトル時系列生成処理を行い、その結果得られるベクトル時系列を出力して、ステップS55に進む。
ステップS55では、逆フィルタ5が、ベクトル時系列生成部4が出力するベクトル時系列をフィルタリングすることにより、音声信号を得て出力し、処理を終了する。
次に、図2に示したようなleft-to-right型のHMMは、ベクトル時系列のあるパターン(時系列パターン)を表現する(モデル化する)のに適している。
従って、図20に示すような、left-to-right型のHMMに対して、その終了状態SN+1の直前の状態SNから、初期状態S0の直後の状態S1に戻るような遷移を与えたHMMを考えた場合、状態SNから状態S1への遷移が行われることによって、元のHMMが表現する時系列パターンが繰り返されるような、いわば周期的な軌道のベクトル時系列(波形が周期的なベクトル時系列)を生成することが可能となる。
図20に示した、状態SNから状態S1への遷移が与えられたHMMから出力される周期的な軌道のベクトル時系列は、上述した結合HMMを利用することにより生成することができる。
即ち、周期的な軌道のベクトル時系列の、例えば、1周期分のベクトル時系列に対応する時系列パターンを表現するHMMをコピーして3つ用意する。ここで、この3つのHMMを、HMM#1,#2,#3と呼ぶこととする。
そして、図21に示すように、同一の3つのHMM#1,#2,#3を、その順で、図18の場合と同様に結合して、結合HMMとする。いま、同一の3つのHMM#1,#2,#3の1つが、状態S0乃至SN+1を有する場合、結合HMMは、図21に示すように、HMM#1の状態SNに、HMM#2の状態S1が接続され、さらに、HMM#2の状態SNに、HMM#3の状態S1が接続された、状態S1乃至SNが3回繰り返して並ぶHMMとなる。そして、この結合HMMは、周期的な軌道のベクトル時系列の、3周期分のベクトル時系列に対応する時系列パターンを表現する。
以上のような、同一の3つのHMM#1,#2,#3が結合された結合HMMも、図18の場合と同様に、1つのHMMと同様に扱うことができ、従って、ベクトル時系列出力部10は、上述した、1つのHMMからベクトル時系列を生成する場合と同様に、結合HMMからベクトル時系列を生成することができる。
図21の結合HMMからベクトル時系列を生成した場合、周期的な軌道のベクトル時系列の、3周期分のベクトル時系列が得られることとなるが、以下のようにすることで、任意の周期分のベクトル時系列を得ることが可能となる。
即ち、状態確率推定部3(図3)において、図21の結合HMMについて、状態確率Pi(t)を求めた後、その状態確率Pi(t)の中で、HMM#2の状態S1乃至SNに対応する分の状態確率Pi'(t)だけを取り出す。そして、ベクトル時系列生成部4において、その状態確率Pi'(t)から求まるベクトル時系列を1周期分として出力し、これを繰り返すことで周期的な軌道のベクトル時系列を生成することが可能となる。
ここで、図21の結合HMMにおいては、HMM#2の左側のHMM#1と、HMM#2の右側のHMM#3との影響により、HMM#1の状態SNからHMM#2の状態S1に亘って得られるベクトル時系列と、HMM#2の状態SNからHMM#3の状態S1に亘って得られるベクトル時系列は滑らかに変化するものとなることから、HMM#2の状態S1乃至SNに対応する分の状態確率Pi'(t)から求まるベクトル時系列を1周期分として出力することを繰り返すことで得られるベクトル時系列においても、HMM#2の状態SNから状態S1に亘って得られる部分は滑らかに変化することになる。
次に、図22のフローチャートを参照して、上述のように、HMMを結合して、周期的な軌道のベクトル時系列を生成する場合の図1の音声合成装置の処理について説明する。
ステップS61において、図1の選択部2は、HMM記憶部1に記憶されたHMMの中から、音声合成に用いる1つのHMMを選択して、ステップS62に進み、その1つのHMMをコピーし、同一の3つのHMM#1,#2,#3を得る。さらに、選択部2は、3つのHMM#1,#2,#3をその順に結合し、これにより、図21に示した結合HMMを得る。そして、選択部2は、結合HMMを、状態確率推定部3とベクトル時系列生成部4に供給して、ステップS62からステップS63に進む。
ステップS63では、状態確率推定部3は、選択部2から供給される結合HMMの各状態Siについて、所定の間隔の時刻tごとの状態確率Pi(t)を推定する状態確率推定処理を行って、ステップS64に進み、状態確率推定処理の結果得られる状態確率Pi(t)から、HMM#2の状態S1乃至SNに対応する分の状態確率Pi'(t)だけを取り出し、ベクトル時系列生成部4に供給して、ステップS65に進む。
ステップS65では、ベクトル時系列生成部4は、ベクトル時系列生成処理を、状態確率推定部3からの状態確率Pi'(t)と、選択部2から供給される結合HMMのうちのHMM#2の部分とを用いて行い、その結果得られる1周期分のベクトル時系列を出力して、ステップS66に進む。
ステップS66では、逆フィルタ5が、ベクトル時系列生成部4が出力するベクトル時系列をフィルタリングすることにより、音声信号を得て出力し、ステップS67に進む。
ステップS67では、ベクトル時系列生成部4が、ベクトル時系列の出力を、例えば、あらかじめ定められた回数などの所定の回数だけ繰り返して行ったかどうかを判定し、まだ、所定の回数だけ繰り返し行っていないと判定した場合、ステップS65に戻り、以下、同様の処理が繰り返される。なお、2回目以降のステップS65では、ベクトル時系列生成処理を再度行っても良いが、ベクトル時系列生成処理を行わずに、1回目のステップS65で出力したベクトル時系列を記憶しておき、そのベクトル時系列を出力しても良い。
一方、ステップS67において、ベクトル時系列の出力を所定の回数だけ繰り返し行ったと判定された場合、処理を終了する。
なお、図21では、同一の3つのHMM#1,#2,#3を結合するようにしたが、同一の4以上のHMMを結合しても良い。この場合、その4以上のHMMを結合した結合HMMから得られる状態確率Pi(t)から、先頭のHMMと最後のHMMとを除く1以上のHMMに対応する分の状態確率Pi'(t)だけを取り出し(抽出し)、その状態確率Pi'(t)を用いて、ベクトル時系列を生成すれば良い。
次に、上述の場合には、HMMの各状態Siの継続時間の期待値diの総和である式(8)の全体継続時間Tを、HMMから出力されるベクトル時系列の長さ(ベクトル時系列のベクトルの個数)としたが、HMMから出力されるベクトル時系列の長さは、例えば、ユーザによる、図示せぬ操作部の操作や、図1のベクトル時系列出力部10を使用するアプリケーションからの要求などに応じて調整することができる。
HMMから出力されるベクトル時系列の長さの調整は、例えば、期待遷移時刻ti(および逆期待遷移時刻ti')を求めるときに用いられる継続時間の期待値diを、例えば、式(25)にしたがって調整することによって行うことができる。
式(25)において、係数αを1.0とした場合、継続時間の期待値diは、式(7)で求められる値(E[n])のままとなる。また、式(25)において、係数αを1.0よりも大の値とした場合、継続時間の期待値diは、式(7)で求められる値よりも大となり、逆に、係数αを1.0よりも小の値とした場合、継続時間の期待値diは、式(7)で求められる値よりも小となる。
継続時間の期待値diを、例えば、式(25)にしたがって調整することにより、式(8)で求められる全体継続時間T、つまり、HMMから出力されるベクトル時系列の長さは、調整をしない場合(αが1.0の場合)のα倍となる。
なお、式(25)における係数αは、HMMの状態Siすべてについて同一の値とすることもできるし、状態Siごとに変えることもできる。即ち、状態S1の継続時間の期待値d1の調整には、例えば、α=0.7を用い、状態SNの継続時間の期待値dNの調整には、例えば、α=1.5を用いること等が可能である。式(25)における係数αを、HMMの状態Siごとに変えた場合、HMMから出力されるベクトル時系列の長さを部分的に調整することが可能となる。
次に、以上においては、図1のベクトル時系列出力部10において、1つのHMM(結合HMMを含む)を用いて、そのHMMから出力されるベクトル時系列を生成するようにしたが、その他、例えば、複数のHMMを用いて、その複数のHMMそれぞれから出力されるベクトル時系列を混合(合成)したベクトル時系列、即ち、複数のHMMそれぞれから出力されるベクトル時系列の、いわば中間的なベクトル時系列を生成することが可能である。
ここで、複数のHMMそれぞれから出力されるベクトル時系列を混合したベクトル時系列は、その複数のHMMを、1つのHMMに混合(合成)し、そのHMM(以下、適宜、合成HMMという)から出力されるベクトル時系列であると考えることができる。
なお、合成HMMは、結合HMMのような、単純に、複数のHMMの状態どうしを接続(結合)したHMMとは異なる。即ち、仮に、HMMを、xy座標系上の点で表すことができるとすると、合成HMMは、直感的には、例えば、xy座標系上の2点が与えられたときに、その2点を使って、その2点を通る直線上の任意の点を表現することができるが如く、2つのHMMを表す2点を通る直線上の任意の点で表されるHMMである。
図23は、2つのHMM#1と#2を用いて、そのHMM#1から出力されるベクトル時系列とHMM#2から出力されるベクトル時系列とを混合した中間的なベクトル時系列を生成する方法を説明する図である。
図23において、HMM#1は、N+2個の状態S0,S1,S2,・・・,SN,SN+1からなるleft-to-right型のHMMであり、HMM#2は、M+2個の状態S'0,S'1,S'2,・・・,S'M,S'M+1からなるleft-to-right型のHMMである。
いま、HMM#1(から出力されるベクトル時系列)と、HMM#2(から出力されるベクトル時系列)とを、β:1−βの比率で混合することとする。
ここで、以下、適宜、βを、混合係数という。また、混合係数βは、0.0<=β<=1.0の範囲の値であるとする。
混合係数β=1.0の場合には、HMM#1だけを用いて生成されるベクトル時系列と同一のベクトル時系列が生成されなければならず、混合係数β=0.0の場合、HMM#2だけを用いて生成されるベクトル時系列と同一のベクトル時系列が生成されなければならない。そして、混合係数βが、0より大で1より小さい値である場合、その混合係数βの値に応じて、HMM#1を用いて生成されるベクトル時系列とHMM#2を用いて生成されるベクトル時系列とを混合した中間的なベクトル時系列が生成されなければならない。
そこで、まず、HMM#1の各状態Siの継続時間の期待値d1,d2,・・・,dNを、式(7)により求めるとともに、HMM#2の各状態S'jの継続時間の期待値d'1,d'2,・・・,dMを、式(7)により求める。
HMM#1の全体継続時間(HMM#1を用いて生成されるベクトル時系列の長さ)Tは、式(26)に示すように、HMM#1の各状態Siの継続時間の期待値d1,d2,・・・,dNの総和となる。
同様に、HMM#2の全体継続時間(HMM#2を用いて生成されるベクトル時系列の長さ)T'は、式(27)に示すように、HMM#2の各状態S'jの継続時間の期待値d'1,d'2,・・・,dMの総和となる。
式(26)のHMM#1の全体継続時間Tと、式(27)のHMM#2の全体継続時間T'とは、必ずしも一致するとは限らない。そこで、HMM#1を用いて生成される長さがTのベクトル時系列と、HMM#2を用いて生成される長さがT'のベクトル時系列とを混合した中間的なベクトル時系列(以下、適宜、混合ベクトル時系列という)の長さT''を、どのようにするかが問題となるが、例えば、混合係数βに基づき、式(28)にしたがって決定することとする。
HMM#1を用いて生成される長さがTのベクトル時系列と、HMM#2を用いて生成される長さがT'のベクトル時系列との長さを、式(28)で求められる混合ベクトル時系列の長さT''に調整する(一致させる)ため、HMM#1を用いて生成されるベクトル時系列の長さを調整する係数γと、HMM#2を用いて生成されるベクトル時系列の長さを調整する係数γ'とを、それぞれ、式(29)と式(30)とにより求める。
そして、HMM#1の各状態Siの継続時間の期待値d1,d2,・・・,dNを、係数γを用いて、γ×d1,γ×d2,・・・,γ×dNに調整する。同様に、HMM#2の各状態S'jの継続時間の期待値d'1,d'2,・・・,dMも、係数γ'を用いて、γ'×d'1,γ'×d'2,・・・,γ'×d'Mに調整する。
以上の結果、HMM#1の全体継続時間はγ×T(=T'')となり、HMM#2の全体継続時間はγ'×T'(=T'')となって、いずれも、式(28)の混合ベクトル時系列の長さT''となる。
以上のように、HMM#1の全体継続時間と、HMM#2の全体継続時間とが、式(28)の混合ベクトル時系列の長さT''となるように、HMM#1の各状態Siの継続時間の期待値d1,d2,・・・,dNを、それぞれγ×d1,γ×d2,・・・,γ×dNに調整するとともに、HMM#2の各状態S'jの継続時間の期待値d'1,d'2,・・・,dMを、それぞれγ'×d'1,γ'×d'2,・・・,γ'×d'Mに調整した後、HMM#1について、調整後の継続時間の期待値γ×diを用いて、状態確率を求めるとともに、HMM#2についても、調整後の継続時間の期待値γ×d'jを用いて、状態確率を求める。
ここで、HMM#1について求められる状態確率を、Pi(t)と表し、HMM#2について求められる状態確率を、P'j(t)と表す。
HMM#1については、各状態Si(i=1,2,・・・,N)に対して時刻t=1,2,・・・,T''の状態確率Pi(t)が求められ、HMM#2については、各状態S'j(j=1,2,・・・,M)に対して時刻t=1,2,・・・,T''の状態確率P'j(t)が求められる。
HMM#1の状態確率Pi(t)は、時刻tにおいて、HMM#1の状態S1, S2, S3,・・・,SNがベクトルを出力する確率を表し、HMM#2の状態確率P'j(t)は、時刻tにおいて、HMM#2の状態S'1, S'2, S'3,・・・,S'Mがベクトルを出力する確率を表す。
即ち、時刻tにおいて、HMM#1の状態S1, S2, S3,・・・,SNがベクトルを出力する確率は、それぞれ、P1(t),P2(t),P3(t),・・・,PN(t)であり、HMM#2の状態S'1, S'2, S'3,・・・,S'Mがベクトルを出力する確率は、それぞれ、P'1(t),P'2(t),P'3(t),・・・,P'M(t)である。
混合ベクトル時系列の時刻tのベクトルxtは、時刻tにおいて、HMM#1から出力されるベクトルと、HMM#2から出力されるベクトルとを、混合係数βにしたがった比率β:1−βで混合したベクトルであり、式(31)で与えられる。
ここで、式(31)において、μiは、HMM#1の状態Siに定義された出力確率密度関数から求められる平均ベクトルであり、μ'jは、HMM#2の状態S'jに定義された出力確率密度関数から求められる平均ベクトルである。
式(31)にしたがい、ベクトルxtを、時刻t=1,2,・・・.,T''それぞれに対して求めることにより、長さがT''のベクトル時系列x1,x2,・・・,xT''を得ることができる。
なお、式(5)から、HMM#1の状態S1乃至SNに亘る状態確率Pi(t)のサメーションΣPi(t)と、HMM#2の状態S1乃至SMに亘る状態確率P'j(t)のサメーションΣP'j(t)とは、いずれも1であり、従って、式(31)の混合係数β、状態確率Pi(t)、P'j(t)については、式(32)が成立する。
式(31)および式(32)によれば、混合ベクトル時系列の時刻tのベクトルxtは、HMM#1とHMM#2のすべての状態から出力される平均ベクトルを線形結合したベクトルとなっており、その線形結合に用いられる重みが混合係数β、状態確率Pi(t)、および状態確率P'j(t)によって調整されることになる。
また、上述の場合には、混合係数βが、式0.0<=β<=1.0を満たすものとして説明を行ったが、混合係数βの値が負の場合であっても、1.0より大きい場合であっても、式(32)は成立する。従って、任意の値の混合係数βを採用して、式(31)によりベクトルxtを求めることができる。混合係数βが、式0.0<=β<=1.0を満たす値である場合には、HMM#1と#2との、いわば内分点に相当する合成HMMから出力されるベクトル時系列を求めることができる。また、混合係数βが、例えば、-1.0のような負の値である場合や、例えば、1.5のような1.0より大きい値である場合には、HMM#1と#2との、いわば外分点に相当する合成HMMから出力されるベクトル時系列を求めることができる。
ここで、上述のような混合ベクトル時系列の生成は、HMM#1の状態数NとHMM#2の状態数Mが一致する場合であっても、一致しない場合であっても行うことができる。
また、上述の場合には、継続時間の期待値をそのまま用いて求められる式(26)のHMM#1の全体継続時間Tと、式(27)のHMM#2の全体継続時間T'とを用い、式(28)にしたがって、混合ベクトル時系列の長さT"を決定するようにしたが、混合ベクトル時系列の長さT"は、その他、例えば、式(25)によって、HMM#1や#2の継続時間の期待値を調整し、その調整後の継続時間の期待値を用いて求められるHMM#1と#2の全体継続時間を用いて決定することも可能である。
また、上述の場合には、2つのHMM#1と#2を混合するようにしたが(HMM#1から出力されるベクトル時系列とHMM#2から出力されるベクトル時系列とを混合するようにしたが)、その他、3以上のHMMを混合することも可能である。
次に、図24のフローチャートを参照して、上述のように、HMMを混合する場合に、図11の状態確率推定部3で行われる状態確率推定処理について説明する。なお、ここでは、2つのHMM#1と#2を混合することとし、その2つのHMM#1と#2が、選択部2(図1)によって、HMM記憶部1から読み出され、状態確率推定部3に供給されることとする。
継続時間長算出部21は、選択部2(図1)からHMM#1と#2の供給を受け、ステップS71において、選択部2からのHMM#1の状態遷移確率aijを用いて、式(7)で表されるHMM#1の各状態Siの継続時間nの期待値di(=E[n])を算出するとともに、選択部2からのHMM#2の状態遷移確率a'ijを用いて、式(7)で表されるHMM#2の各状態S'jの継続時間nの期待値d'j(=E[n])を算出して、ステップS72に進む。
ステップS72では、継続時間長算出部21は、HMM#1の各状態Siの継続時間nの期待値diと、HMM#2の各状態S'jの継続時間nの期待値d'jとを調整する。
即ち、継続時間長算出部21は、HMM#1の全体継続時間(HMM#1を用いて生成されるベクトル時系列の長さ)Tを、式(26)にしたがい、HMM#1の各状態Siの継続時間の期待値d1,d2,・・・,dNの総和をとることによって求めるとともに、HMM#2の全体継続時間(HMM#2を用いて生成されるベクトル時系列の長さ)T'を、式(27)にしたがい、HMM#2の各状態S'jの継続時間の期待値d'1,d'2,・・・,dMの総和をとることによって求める。
さらに、継続時間長算出部21は、HMM#1の全体継続時間T、HMM#2の全体継続時間T'、および混合係数βを用い、式(28)にしたがって、HMM#1と#2とを混合した合成HMMから出力される混合ベクトル時系列の長さT''を求める。
ここで、混合係数βは、例えば、あらかじめ設定しておくことができる。また、混合係数βは、例えば、ユーザが、図示せぬ操作部を操作することにより、あるいは、図1の状態確率推定部3およびベクトル時系列生成部4から構成されるベクトル時系列出力部10を使用するアプリケーションから与えることができる。
継続時間長算出部21は、混合ベクトル時系列の長さT''を求めると、その長さT''に基づき、HMM#1を用いて生成されるベクトル時系列の長さを調整する係数γを、式(29)にしたがって求めるとともに、HMM#2を用いて生成されるベクトル時系列の長さを調整する係数γ'を、式(30)にしたがって求める。
そして、継続時間長算出部21は、HMM#1の各状態Siの継続時間の期待値d1,d2,・・・,dNを、係数γを用いて、γ×d1,γ×d2,・・・,γ×dNに調整するとともに、HMM#2の各状態S'jの継続時間の期待値d'1,d'2,・・・,dMも、係数γ'を用いて、γ'×d'1,γ'×d'2,・・・,γ'×d'Mに調整する。
その後、継続時間長算出部21は、HMM#1の各状態Siの継続時間の期待値の調整後の値γ×d1,γ×d2,・・・,γ×dNと、HMM#2の各状態S'jの継続時間の期待値の調整後の値γ'×d'1,γ'×d'2,・・・,γ'×d'Mを、期待遷移時刻算出部22に供給して、ステップS72からステップS73に進む。
ステップS73では、期待遷移時刻算出部22は、継続時間長算出部21からのHMM#1の各状態Siの継続時間の期待値の調整後の値γ×d1,γ×d2,・・・,γ×dNを用いて、期待遷移時刻tiと、逆期待遷移時刻ti'とを求め、期待遷移時刻tiを、前向き遷移確率決定部23Fに供給するとともに、逆期待遷移時刻ti'を、後ろ向き遷移確率決定部23Bに供給して、ステップS74に進む。
ステップS74では、前向き遷移確率決定部23Fが、期待遷移時刻算出部22からの期待遷移時刻tiを用い、式(9)の前向き遷移確率qi(t)を求め、前向き状態確率算出部24Fに供給するとともに、後ろ向き遷移確率決定部23Bが、期待遷移時刻算出部22からの逆期待遷移時刻ti'を用い、式(10)の後ろ向き遷移確率ri(t)を求め、後ろ向き状態確率算出部24Bに供給して、ステップS75に進む。
ステップS75では、前向き状態確率算出部24Fが、前向き遷移確率決定部23Fからの前向き遷移確率qi(t)を用い、式(13)の前向き状態確率Pfi(t)を求めて、状態確率算出部25に供給するとともに、後ろ向き状態確率算出部24Bが、後ろ向き遷移確率決定部23Bからの後ろ向き遷移確率ri(t)を用いて、式(17)の後ろ向き状態確率Pbi(t)を求めて、状態確率算出部25に供給して、ステップS76に進む。
ステップS76では、状態確率算出部25が、前向き状態確率算出部24Fからの前向き状態確率Pfi(t)と、後ろ向き状態確率算出部24Bからの後ろ向き状態確率Pbi(t)とを用いて、式(19)の状態確率Pi(t)、即ち、HMM#1の各状態Si(i=1,2,・・・,N)が各時刻t(=1,2,・・・,T''(=γ×T))においてベクトルを出力する確率である状態確率Pi(t)を求める。
ステップS73乃至S76の処理は、HMM#2についても同様にして行われ、これにより、状態確率算出部25では、HMM#2についての式(19)の状態確率Pi(t)、即ち、HMM#2の各状態Sj(j=1,2,・・・,N)が各時刻t(=1,2,・・・,T''(=γ'×T'))においてベクトルを出力する確率である状態確率P'j(t)も求められる。
そして、状態確率算出部25は、HMM#1についての状態確率Pi(t)と、HMM#2についての状態確率P'j(t)とを、後段のベクトル時系列生成部4(図1)に供給して、状態確率推定処理を終了する。
次に、図25のフローチャートを参照して、上述のように、HMMを混合する場合に、図13のベクトル時系列生成部4で行われるベクトル時系列生成処理について説明する。なお、ここでは、図24の場合と同様に、2つのHMM#1と#2を混合することとし、その2つのHMM#1と#2が、選択部2(図1)によって、HMM記憶部1から読み出され、ベクトル時系列生成部4に供給されることとする。
ベクトル時系列生成部4には、選択部2(図1)からHMM#1と#2が供給されるとともに、状態確率推定部3(図1)から、図24の状態確率推定処理が行われることにより得られるHMM#1についての状態確率Pi(t)と、HMM#2についての状態確率P'j(t)とが供給される。
期待値取得部31は、選択部2(図1)からHMM#1と#2の供給を受け、ステップS81において、選択部2から供給されるHMM#1の出力確率密度関数bi(x)から、その出力確率密度関数bi(x)が表す確率分布にしたがうベクトルxの期待値を、選択部2からのHMM#1において出力確率密度関数b1(x),b2(x),・・・,bN(x)が定義されている各状態S1,S2,・・・,SNについて求め、期待値算出部32に供給する。
即ち、期待値取得部31は、選択部2からのHMM#1において出力確率密度関数b1(x),b2(x),・・・,bN(x)が定義されている各状態S1,S2,・・・,SNについて、出力確率密度関数b1(x),b2(x),・・・,bN(x)が表す正規分布を規定する平均ベクトルμ1,μ2,・・・,μNを求め、期待値算出部32に供給する。
同様に、期待値取得部31は、選択部2からのHMM#2についても、HMM#2において出力確率密度関数b'1(x),b'2(x),・・・,b'M(x)が定義されている各状態S'1,S'2,・・・,S'Mについて、出力確率密度関数b'1(x),b'2(x),・・・,b'M(x)が表す正規分布を規定する平均ベクトルμ'1,μ'2,・・・,μ'Mを求め、期待値算出部32に供給する。
そして、ステップS81からステップS82に進み、期待値算出部32は、状態確率推定部3(図1)からのHMM#1についての状態確率Pi(t)と、HMM#2についての状態確率P'j(t)との供給を受け、期待値取得部31から供給されるHMM#1についての平均ベクトルμ1,μ2,・・・,μNと、状態確率推定部3から供給される時刻tについてのHMM#1の状態確率P1(t),P2(t),・・・,PN(t)との積和演算、つまり、式(31)の右辺第1項の括弧内のサメーションの演算を行い、その積和演算結果ΣPi(t)・μiを、時刻tにHMM#1から出力されるベクトルの期待値として求める。
同様に、期待値算出部32は、期待値取得部31から供給されるHMM#2についての平均ベクトルμ'1,μ'2,・・・,μ'Mと、状態確率推定部3から供給される時刻tについてのHMM#2の状態確率P'1(t),P'2(t),・・・,P'M(t)との積和演算、つまり、式(31)の右辺第2項の括弧内のサメーションの演算を行い、その積和演算結果ΣP'j(t)・μ'jを、時刻tにHMM#2から出力されるベクトルの期待値として求める。
期待値算出部32は、ステップS82において、時刻t=1,2,・・・,T''ごとの、HMM#1から出力されるベクトルxの期待値ΣPi(t)・μiと、HMM#2から出力されるベクトルxの期待値ΣP'j(t)・μ'jとを求めると、ステップS83に進み、式(31)にしたがい、時刻tごとに、HMM#1から出力されるベクトルxの期待値ΣPi(t)・μiと、HMM#2から出力されるベクトルxの期待値ΣP'j(t)・μ'jとを、混合係数βに基づく比率β:1-βで混合し、全体継続時間がT''の混合ベクトル時系列x1,x2,・・・,xTを求める。そして、期待値算出部32は、ステップS83からステップS84に進み、混合ベクトル時系列x1,x2,・・・,xTを出力して、ベクトル時系列生成処理を終了する。
以上のように、各時刻tにおいて、HMMの各状態Siがベクトルを出力する確率である状態確率Pi(t)を導入し、その状態確率Pi(t)に基づき、HMMが出力するベクトルxの期待値を解析的に計算することで、ベクトル時系列x1,x2,・・・,xTを生成するようにしたので、滑らかに変化する時系列データを容易に得ることができる他、状態確率Pi(t)を求める時刻tの時間間隔の調整等によって、HMMから出力されるベクトル時系列の長さや時間間隔その他の特性の調整を容易に行うことが可能となる。
また、複数のHMMどうしを結合した結合HMMからのベクトル時系列の生成や、周期的なベクトル時系列の生成、さらには、複数のHMMを混合した合成HMMからのベクトル時系列(混合ベクトル時系列)の生成なども容易に行うことが可能となる。
即ち、例えば、1の状態から他の1の状態に遷移する時刻(期待遷移時刻ti、逆期待遷移時刻t'i)が所定の確率分布としての、例えば、正規分布にしたがうこととして、状態確率Pi(t)が推定されるが、その正規分布の分散(式(9)の分散σ2や式(10)の分散σ'2)を調整可能としたので、その調整によって、HMMから出力されるベクトル時系列の特性を、容易に調整することができる。
さらに、例えば、状態確率Pi(t)を推定する時刻の間隔も、1だけでなく、0.1等に調整可能としたので、その調整によって、HMMから出力されるベクトル時系列のベクトル間の時間間隔を、容易に調整することができる。
また、例えば、複数のHMMを結合することにより得られる新たな状態遷移確率モデルとしての結合HMMの各状態について、状態確率Pi(t)を推定することにより、複数のHMMそれぞれから出力されるベクトル時系列を並べたベクトル時系列であって、滑らかに変化するベクトル時系列を、容易に生成することができる。
さらに、例えば、同一の3つのHMM#1,#2,#3を結合した結合HMMについて、状態確率Pi(t)を推定して、その状態確率Pi(t)のうちの、HMM#2の各状態に対応する分の状態確率Pi'(t)だけを取り出し、その状態確率Pi'(t)に基づいて、ベクトル時系列を生成することにより、周期的なベクトル時系列を、容易に生成することができる。
また、例えば、HMM#1の状態確率Pi(t)と、HMM#2の状態確率P'j(t)とを、HMM#1が出力するベクトル時系列の長さと、HMM#2が出力するベクトル時系列の長さとが同一になるように調整をして推定し、HMM#1の状態確率Pi(t)とHMM#1の状態が出力する代表的なデータとしての平均ベクトルμi、および、HMM#2の状態確率P'j(t)とHMM#2の状態が出力する代表的なデータとしての平均ベクトルμ'jに基づいて、ベクトル時系列を生成することにより、HMM#1とHMM#2とを混合した合成HMMが出力する混合ベクトル時系列を、容易に得ることができる。即ち、HMM#1および#2のいずれでもない合成HMMが出力するベクトル時系列を、容易に得ることができる。
次に、上述した一連の処理は、ハードウェアにより行うこともできるし、ソフトウェアにより行うこともできる。一連の処理をソフトウェアによって行う場合には、そのソフトウェアを構成するプログラムが、汎用のコンピュータ等にインストールされる。
そこで、図26は、上述した一連の処理を実行するプログラムがインストールされるコンピュータの一実施の形態の構成例を示している。
プログラムは、コンピュータに内蔵されている記録媒体としてのハードディスク105やROM103に予め記録しておくことができる。
あるいはまた、プログラムは、フレキシブルディスク、CD-ROM(Compact Disc Read Only Memory),MO(Magneto Optical)ディスク,DVD(Digital Versatile Disc)、磁気ディスク、半導体メモリなどのリムーバブル記録媒体111に、一時的あるいは永続的に格納(記録)しておくことができる。このようなリムーバブル記録媒体111は、いわゆるパッケージソフトウエアとして提供することができる。
なお、プログラムは、上述したようなリムーバブル記録媒体111からコンピュータにインストールする他、ダウンロードサイトから、ディジタル衛星放送用の人工衛星を介して、コンピュータに無線で転送したり、LAN(Local Area Network)、インターネットといったネットワークを介して、コンピュータに有線で転送し、コンピュータでは、そのようにして転送されてくるプログラムを、通信部108で受信し、内蔵するハードディスク105にインストールすることができる。
コンピュータは、CPU(Central Processing Unit)102を内蔵している。CPU102には、バス101を介して、入出力インタフェース110が接続されており、CPU102は、入出力インタフェース110を介して、ユーザによって、キーボードや、マウス、マイク等で構成される入力部107が操作等されることにより指令が入力されると、それにしたがって、ROM(Read Only Memory)103に格納されているプログラムを実行する。あるいは、また、CPU102は、ハードディスク105に格納されているプログラム、衛星若しくはネットワークから転送され、通信部108で受信されてハードディスク105にインストールされたプログラム、またはドライブ109に装着されたリムーバブル記録媒体111から読み出されてハードディスク105にインストールされたプログラムを、RAM(Random Access Memory)104にロードして実行する。これにより、CPU102は、上述したフローチャートにしたがった処理、あるいは上述したブロック図の構成により行われる処理を行う。そして、CPU102は、その処理結果を、必要に応じて、例えば、入出力インタフェース110を介して、LCD(Liquid Crystal Display)やスピーカ等で構成される出力部106から出力、あるいは、通信部108から送信、さらには、ハードディスク105に記録等させる。
ここで、本明細書において、コンピュータに各種の処理を行わせるためのプログラムを記述する処理ステップは、必ずしもフローチャートとして記載された順序に沿って時系列に処理する必要はなく、並列的あるいは個別に実行される処理(例えば、並列処理あるいはオブジェクトによる処理)も含むものである。
また、プログラムは、1のコンピュータにより処理されるものであっても良いし、複数のコンピュータによって分散処理されるものであっても良い。さらに、プログラムは、遠方のコンピュータに転送されて実行されるものであっても良い。
なお、本実施の形態では、ベクトル時系列を出力するベクトル時系列出力部10を、音声合成装置に適用した場合について説明したが、ベクトル時系列出力部10は、音声合成装置の他、ベクトル時系列、つまり、時系列の信号を入力として、その時系列の信号にしたがって処理を行う各種のシステム、即ち、例えば、時系列の信号であるモータ信号にしたがってアクチュエータ(モータ)を駆動することにより、腕や脚に対応する部分を動かすロボットなどに適用することができる。
また、本実施の形態における「ベクトル」には、1次元のベクトル、つまり、スカラー量も含まれる。
さらに、本発明の実施の形態は、上述した実施の形態に限定されるものではなく、本発明の要旨を逸脱しない範囲において種々の変更が可能である。
1 HMM記憶部, 2 選択部, 3 状態確率推定部, 4 ベクトル時系列生成部, 5 逆フィルタ, 10 ベクトル時系列出力部, 21 継続時間長算出部, 22 期待遷移時刻算出部, 23F 前向き遷移確率決定部, 23B 後ろ向き遷移確率決定部, 24F 前向き状態確率算出部, 24B 後ろ向き状態確率算出部, 25 状態確率算出部, 31 期待値取得部, 32 期待値算出部, 101 バス, 102 CPU, 103 ROM, 104 RAM, 105 ハードディスク, 106 出力部, 107 入力部, 108 通信部, 109 ドライブ, 110 入出力インタフェース, 111 リムーバブル記録媒体