目次
Juliusは,入力音声から音声認識のための音声特徴量を抽出する.音声特徴量は,短時間ごとに切り出された音声信号から抽出される特徴ベクトルの時系列であり,特徴抽出後,得られた特徴量列に対して認識処理(解探索)を行う. また,Julius には特徴抽出の前処理としていくつかのフロントエンド処理が実装されている.プラグインによって処理を追加することもできる. この章では,Julius の特徴量抽出を含むフロントエンド処理,および設定方法について説明する.
フロントエンド処理は,入力音声波形に対する最初の信号処理段階である.これらは,特徴量抽出の前に行われる.以下に使用可能な処理を列挙する.
特徴量抽出の前段階として,直流成分除去を行える.直流成分であるオフセット値の推定方法として,短時間音声区間(フレーム)ごとに行う方法(オプション-zmeansource
)と,長時間平均を用いる方法(オプション-zmean
)の二とおりが用意されている.前者は,特徴抽出の直前において,切り出された短時間フレームごとにオフセット推定と除去を行う.後者は,Julius起動後,無音を含めた最初の 48,000 サンプル分の振幅平均を直流成分(オフセット)として以降の入力の直流成分除去を行う.
-zmeansource
は HTK の ZMEANSOURCE
と同じ処理である.
オプション指定時の注意:前者の -zmeansource
は,特徴量抽出のオプションであり,音響モデルごとに指定する必要がある.特に,複数の音響モデルを使用する場合,音響モデルごとに個別に指定する必要がある.一方,後者の -zmean
はグローバルオプションであり,
1回指定するだけでよい.
雑音のスペクトルを推定して音声信号から減算することで雑音の影響を抑圧する,スペクトルサブトラクションを行うことができる.これは,特にファン音などの定常雑音の除去に一定の効果を持つ.
雑音スペクトルの推定方法としては,(1) 各入力の最初の数百ミリ秒を雑音区間と仮定してその平均を雑音スペクトルとする(オプション
-sscalc
, -sscalclen
),(2) あらかじめ付属のツール mkss で雑音スペクトルを推定してファイルに保存しておき,それを -ssload
で読み込む方法 の2種類がある.音声ファイルに対する入力ではどちらかを指定できるが,
マイク等のオンライン入力では後者のみ使える.
減算の大きさは -ssalpha
で指定できる.雑音スペクトルのパワーにこの係数をかけた値が入力音声のスペクトルから差し引かれる.また,減算後に負になってしまう帯域については,減算を行う代わりに,入力スペクトルがフロアリング係数(-ssfloor
)倍される.
なお,スペクトルサブトラクションは特徴量抽出段階で行われるため, 音響モデルごとに指定する必要がある.複数音響モデルを使用する場合は音響モデルごとに個別に指定する必要があるので注意すること.
Julius で抽出できる特徴量は,メル周波数ケプストラム係数 (mel-frequency cepstral coefficient; MFCC) に基づく特徴量である.具体的には, HTK で抽出できるMFCCのバリエーションを網羅しており,MFCCおよびその派生パラメータ(パワー,0次ケプストラム,およびそれらの一次差分と二次差分)を抽出できる.また,正規化法として,ケプストラム平均正規化 (cepstral mean normalization; CMN) ,パワー項正規化,ケプストラム分散正規化 (cepstral variance normalization; CVN) をサポートする.また,ワーピング係数を与えることでいわゆる声道長正規化 (vocal tract length normalization; VTLN) も行える.
音声波形を直接認識できるのは,音響モデルが以上で述べたような MFCC をベー
スとする特徴量で学習されている場合のみである.Julius は MFCC以外の音響モデルも扱うことができるが,その場合,波形ファイルやマイクなどの音声入力を直接認識することはできない.代わりに,
HTK 形式の特徴量パラメー
タファイルのみを入力とすることができる (-input
mfcfile
) .
複数の音響モデルを用いる場合,特徴量抽出条件は使用する音響モデルごとに独立して設定する必要がある.同一の特徴量を用いる場合でも,それぞれの音響モデルごとに繰り返し指定する必要がある点に注意されたい.特に,サンプリングレート・窓幅・窓シフト長は全ての音響モデルで値が一致している必要がある(一致していなければエラーとなる).
認識時には,特徴量の型以外にも,フレーム窓幅やシフト幅,フィルタバンク数,各種正規化の有無などの抽出条件を,モデル学習時と正確に一致させる必要がある.特徴量の抽出条件や各種パラメータの設定方法は,オプションで値を直接指定するほかに, HTK で学習時に使った Config ファイルを直接読み込んだり,音響モデルを Julius 用のバイナリ音響モデルへ返還するときにヘッダ内に条件を埋め込んだりできる.各設定方法の詳細を以下に述べる.
特徴量抽出条件の設定オプション,および HTK の設定との対応を, 表 4.1. 「特徴量抽出条件の設定オプションとデフォルト値」に示す.
表 4.1. 特徴量抽出条件の設定オプションとデフォルト値
オプション | 内容 | デフォルト値 | 対応するHTKオプション |
---|---|---|---|
パラメータ種,ケプストラム次数は音響モデルによって与えられる.デフォ ルト値の (*) は HTK のデフォルト値と異なる.また対応オプションの (*) はHTKと指定する数のユニットが異なる. | |||
パラメータ種 | "MFCC" | TARGETKIND | |
ケプストラム次数 | - | NUMCEPS | |
-smpFreq Hz | 入力波形のサンプリングレート | 16000 | SOURCERATE (*) |
-fsize samples | ウィンドウ幅 | 400 (=25ms in 16kHz) | WINDOWSIZE (*) |
-fshift samples | ウィンドウシフト長 | 160 (=10ms in 16kHz) | TARGETRATE (*) |
-zmeanframe | フレーム単位の直流成分除去 | no | ZMEANSOURCE |
-preemph value | 高域強調係数 | 0.97 | PREEMCOEF |
-fbank value | フィルタバンクチャンネル数 | 24 (*) | NUMCHANS |
-ceplif value | ケプストラムのリフタリング係数 | 22 | CEPLIFTER |
-delwin frames | 一次差分計算用窓幅 | 2 | DELTAWINDOW |
-accwin frames | 二次差分計算用窓幅 | 2 | ACCWINDOW |
-lofreq Hz | 周波数カットオフの下限 | -1 (disable) | LOFREQ |
-hifreq Hz | 周波数カットオフの上限 | -1 (disable) | HIFREQ |
-rawe / -norawe | 高域強調前のエネルギーを使用 | no (*) | RAWENERGY |
-enormal / -noenormal | 対数エネルギー項を正規化 | no (*) | ENORMALISE |
-escale value | 対数エネルギー正規化のスケーリング係数 | 1.0 (disable) (*) | ESCALE |
-silfloor dB | 対数エネルギー正規化のフロアリング係数 | 50.0 | SILFLOOR |
-usepower | フィルタバンク解析で振幅の代わりにパワーを使う (rev.4.0.2) | no | USEPOWER |
-cvn / -nocvn | ケプストラム分散正規化 (rev.4.0.2) | no | - |
-vtln alpha flo fhi | 声道長正規化 (rev.4.0.2) | 1.0 any any (disable) | WARPFREQ,WARPLCUTOFF,WARPHCUTOFF |
表の最初の2項目「パラメータ種」および「ケプストラム次数」は, 使用する音響モデルのヘッダ情報から自動的に取得されるため, 明示的に指定する必要はない.
特徴量の設定のほとんどは,HTK と互換性がある.以下に,HTK との違いついて注意すべき点を列挙する.
デフォルト値に "(*)" がついているものは, HTK のデフォルト値と異なる.Julius のデフォルト値は,一緒に配布されている標準音響モデルの設定をデフォルトとしている.
対応するHTKオプションに "(*)" がついているものは,指定時の値のユニットが HTK と異なるので注意すること.
窓関数はハミング窓に固定されている.
方法1のように個々のパラメータを指定する代わりに,
HTK の Config ファイルを直接読みこませることができる.オプション -htkconf
で
HTK Config ファイルを与えると,Julius は与えられたファイルを解析し,対応する設定を見つけるとその設定値を Julius の設定値に変換してセットする.なお,表中に無い設定項目は無視される.
この方法2を用いる場合,Config ファイル内で明示的に指定されていないパラメータのデフォルト値は,Julius独自のものではなく HTK のデフォルト値となる.
Juliusの付属ツール mkbinhmm で, HTK ascii 形式の音響モデルを Julius 用バイナリHMMファイルへ変換できるが,その際に,出力ファイル内に特徴量抽出条件パラメータを埋め込むことが可能である.モデルに必要なパラメータをあらかじめ埋め込んでおけば,モデルを読み込む際に同時にそのモデルで必要な特徴量抽出条件もセットすることができ,モデルと別個にオプションを指定する必要がないメリットがある.
埋め込み方法は,mkbinhmm で Julius バイナリ形式へ変換する際に,mkbinhmm に対して Julius と同じ特徴量オプションを与える.与え方は,Julius と同様に,前述の1あるいは2の方法が使える.なお,特徴量に関係ないパラメータは無視されるので,Julius の認識時に使っているすべてのパラメータをそのままmkbinhmm に与えればよい.
%
mkbinhmm -htkconf ConfigFile -C ... hmmdefs binhmm
また,既にあるバイナリ音響モデルに対してパラメータ情報を追加・上書きするには,以下のようにバイナリ音響モデルを入力として与えればよい.
%
mkbinhmm -htkconf ConfigFile -C ... binhmm1 binhmm2
この方法は,バージョン 3.5.3 以降でサポートされている.この方法を用いることで,音響モデルの作成者は,そのモデルを用いた認識の際に必要な特徴量情報をモデル内に埋め込んでおくことができ,利用者側で設定する必要がなくなる.特に音響モデルを配布する場合などに推奨される方法である.
なお,複数の方法でパラメータが指定された場合,(1) オプション指定 (2)
-htkconf
の指定 (3) バイナリ音響モデルに埋め込まれた設定 (4)デフォルト値,の順で (1) が最も優先される.
環境や話者の影響を軽減するため,算出後の特徴量に対して正規化処理を行うことができる.以下に可能な処理を述べる.
長時間のケプストラム平均を差し引くケプストラム平均正規化 (cepstral
mean normalization; CMN) を行うことができる.使用する音響モデルが CMN
付きのMFCCで学習されている場合(すなわちMFCC型定義に
"_Z
" が含まれているとき),CMN が自動的に有効となる.
ファイル入力では,CMNは発話単位で行われる.すなわち,その入力発話自身のケプストラム平均を求めたあと CMN が実行され,認識処理が行われる.マイクなどのリアルタイム入力では,発話全体の特徴量が得られないため,代わりに後述の MAP-CMN が用いられる.このため,マイクなどの直接認識時とファイル入力時では認識結果が異なる場合がある点に注意されたい.
CMNに加えて,ケプストラムの分散が 1 になるよう正規化を行うケプストラム分散正規化(cepstral variance normalization; CVN) を行うことができる.オプション-cvn
で有効化される.処理単位や直接認識時の注意点は CMN と同じである.HTK の CVN の実装とは分散推定の単位が異なるので同一ではない.
マイクやネットワーク入力では,入力と認識処理が並行して行われるが,この場合,その発話全体の情報に基づく特徴量正規化が行えない.以下,リアルタイム認識における正規化処理について説明する.
特徴量の中に絶対値エネルギー項がある場合(すなわちMFCC型定義に
"_E
" があり "_N
" がないとき),
発話全体の平均で正規化することがある.Juliusでは,オプション
-enormal
を指定することでこのエネルギー項正規化を行える.
リアルタイム認識では,直前の発話のエネルギー平均から正規化が行われる. ただし,起動して最初の発話は正規化が行われず,また直前の入力から入力環境が大きく変化すると追従できないことがあるので注意すること. [6]
リアルタイム認識では,通常の CMN の代わりに MAP-CMN が行われる. MAP-CMN では,入力開始時はあらかじめ与えられているケプストラム平均を初期値として CMN をスタートし,入力が進むにつれて徐々にその発話自身のケプストラム平均を使う.なお,オプションでこの MAP-CMN の振る舞いを制御したり,初期値をあらかじめ与えることができる.通常,初期値としては,直前の発話の平均が用いられる.
また,分散正規化(CVN)が有効化されているときは,CVNに対しても上記と同様の方法で処理が行われる.