第4章 フロントエンド処理・特徴量抽出

目次

フロントエンド処理
直流成分除去
スペクトルサブトラクション
特徴量抽出
サポートする特徴量
特徴量抽出パラメータの指定方法
正規化処理
ケプストラム平均正規化 (CMN)
ケプストラム分散正規化 (CVN)
周波数ワーピング(声道長正規化)
リアルタイム認識における正規化
実時間エネルギー正規化
実時間ケプストラム平均・分散正規化
プラグインによる拡張について

Juliusは,入力音声から音声認識のための音声特徴量を抽出する.音声特徴量は,短時間ごとに切り出された音声信号から抽出される特徴ベクトルの時系列であり,特徴抽出後,得られた特徴量列に対して認識処理(解探索)を行う. また,Julius には特徴抽出の前処理としていくつかのフロントエンド処理が実装されている.プラグインによって処理を追加することもできる. この章では,Julius の特徴量抽出を含むフロントエンド処理,および設定方法について説明する.

フロントエンド処理

フロントエンド処理は,入力音声波形に対する最初の信号処理段階である.これらは,特徴量抽出の前に行われる.以下に使用可能な処理を列挙する.

直流成分除去

特徴量抽出の前段階として,直流成分除去を行える.直流成分であるオフセット値の推定方法として,短時間音声区間(フレーム)ごとに行う方法(オプション-zmeanframe)と,長時間平均を用いる方法(オプション-zmean)の二とおりが用意されている.前者は,特徴抽出の直前において,切り出された短時間フレームごとにオフセット推定と除去を行う.後者は,Julius起動後,無音を含めた最初の 48,000 サンプル分の振幅平均を直流成分(オフセット)として以降の入力の直流成分除去を行う. -zmeanframeHTKZMEANSOURCE と同じ処理である.

オプション指定時の注意:前者の -zmeanframe は,特徴量抽出のオプションであり,音響モデルごとに指定する必要がある.特に,複数の音響モデルを使用する場合,音響モデルごとに個別に指定する必要がある.一方,後者の -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) も行える.

指定できるパラメータは HTK に準拠している。基本パラメータ種 (basic parameter kind: basekind) は MFCC のみサポートする。 修飾子は全ての修飾子 (_N, _D, _A, _Z, _0) をサポートする。また、CRCチェックサム付き_K や圧縮済み _C の特徴量ファイルも読み込める。パワー項と _0が両方指定されている場合、それらは両方とも特徴量ベクトルに含まれる。

音声波形を直接認識できるのは,音響モデルが以上で述べたような MFCC をベー スとする特徴量で学習されている場合のみである.Julius は MFCC以外の音響モデルも扱うことができるが,その場合,波形ファイルやマイクなどの音声入力を直接認識することはできない.代わりに, HTK 形式の特徴量パラメー タファイルのみを入力とすることができる (-input mfcfile) .

複数の音響モデルを用いる場合,特徴量抽出条件は使用する音響モデルごとに独立して設定する必要がある.同一の特徴量を用いる場合でも,それぞれの音響モデルごとに繰り返し指定する必要がある点に注意されたい.特に,サンプリングレート・窓幅・窓シフト長は全ての音響モデルで値が一致している必要がある(一致していなければ Julius はエラー終了する).

特徴量抽出パラメータの指定方法

認識時には,特徴量の型以外にも,フレーム窓幅やシフト幅,フィルタバンク数,各種正規化の有無などの抽出条件を,モデル学習時と正確に一致させる必要がある.特徴量の抽出条件や各種パラメータの設定方法は,オプションで値を直接指定するほかに, HTK で学習時に使った Config ファイルを直接読み込んだり,音響モデルを Julius 用のバイナリ音響モデルへ返還するときにヘッダ内に条件を埋め込んだりできる.各設定方法の詳細を以下に述べる.

方法1:直接指定

特徴量抽出条件の設定オプション,および HTK の設定との対応を, 表 4.1. 「特徴量抽出条件の設定オプションとデフォルト値」に示す.

表 4.1. 特徴量抽出条件の設定オプションとデフォルト値

オプション内容デフォルト値対応するHTKオプション
パラメータ種,ケプストラム次数は音響モデルによって与えられる.デフォ ルト値の (*) は HTK のデフォルト値と異なる.また対応オプションの (*) はHTKと指定する数のユニットが異なる.
 パラメータ種"MFCC"TARGETKIND
 ケプストラム次数-NUMCEPS
-smpFreq Hz入力波形のサンプリングレート16000SOURCERATE (*)
-fsize samplesウィンドウ幅400 (=25ms in 16kHz)WINDOWSIZE (*)
-fshift samplesウィンドウシフト長160 (=10ms in 16kHz)TARGETRATE (*)
-zmeanframeフレーム単位の直流成分除去noZMEANSOURCE
-preemph value高域強調係数0.97PREEMCOEF
-fbank valueフィルタバンクチャンネル数24 (*)NUMCHANS
-ceplif valueケプストラムのリフタリング係数22CEPLIFTER
-delwin frames一次差分計算用窓幅2DELTAWINDOW
-accwin frames二次差分計算用窓幅2ACCWINDOW
-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.0SILFLOOR
-usepowerフィルタバンク解析で振幅の代わりにパワーを使う (rev.4.0.2)noUSEPOWER
-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 と異なるので注意すること.

  • 窓関数はハミング窓に固定されている.

方法2:HTK Configの読み込み

方法1のように個々のパラメータを指定する代わりに, HTK の Config ファイルを直接読みこませることができる.オプション -htkconfHTK Config ファイルを与えると,Julius は与えられたファイルを解析し,対応する設定を見つけるとその設定値を Julius の設定値に変換してセットする.なお,表中に無い設定項目は無視される.

この方法2を用いる場合,Config ファイル内で明示的に指定されていないパラメータのデフォルト値は,Julius独自のものではなく HTK のデフォルト値となる.

方法3:バイナリHMMファイルへのパラメータ埋め込み

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) が最も優先される.

正規化処理

環境や話者の影響を軽減するため,算出後の特徴量に対して正規化処理を行うことができる.以下に可能な処理を述べる.

ケプストラム平均正規化 (CMN)

長時間のケプストラム平均を差し引くケプストラム平均正規化 (cepstral mean normalization; CMN) を行うことができる.使用する音響モデルが CMN 付きのMFCCで学習されている場合(すなわちMFCC型定義に "_Z" が含まれているとき),CMN が自動的に有効となる.

ファイル入力では,CMNは発話単位で行われる.すなわち,その入力発話自身のケプストラム平均を求めたあと CMN が実行され,認識処理が行われる.マイクなどのリアルタイム入力では,発話全体の特徴量が得られないため,代わりに後述の MAP-CMN が用いられる.このため,マイクなどの直接認識時とファイル入力時では認識結果が異なる場合がある点に注意されたい.

ケプストラム分散正規化 (CVN)

CMNに加えて,ケプストラムの分散が 1 になるよう正規化を行うケプストラム分散正規化(cepstral variance normalization; CVN) を行うことができる.オプション-cvn で有効化される.処理単位や直接認識時の注意点は CMN と同じである.HTK の CVN の実装とは分散推定の単位が異なるので同一ではない.

周波数ワーピング(声道長正規化)

オプション -vtln で周波数ワーピングを行うことができる. オプションにつづけてワーピング係数,下端周波数,上端周波数を指定する. あるいは,HTK Config 読み込み時にワーピングに関する設定がある場合にも有効化される.この機能は,主に声道長正規化 (vocal tract length normalization; VTLN) のために用いられるものである.なお,Julius自身には,VTLN のための周波数ワーピング係数のパラメータ推定は実装されていない.

リアルタイム認識における正規化

マイクやネットワーク入力では,入力と認識処理が並行して行われるが,この場合,その発話全体の情報に基づく特徴量正規化が行えない.以下,リアルタイム認識における正規化処理について説明する.

実時間エネルギー正規化

特徴量の中にエネルギー項がある場合(すなわちMFCC型定義に "_E" があり "_N" がないとき), 発話全体の平均で正規化することがある.Juliusでは,オプション -enormal を指定することでこのエネルギー項正規化を行える.

Juliusでは,音響モデルの特徴量タイプにこの実時間エネルギー正規化が指定されている場合,リアルタイム認識では,直前の発話のエネルギー平均を用いて正規化が行われる.ただし,起動して最初の発話は正規化が行われず,また直前の入力から入力環境が大きく変化すると追従できないことがあるので注意すること.[6]

実時間ケプストラム平均・分散正規化

リアルタイム認識では,通常の CMN の代わりに MAP-CMN が行われる. MAP-CMN では,入力開始時はあらかじめ与えられているケプストラム平均を初期値として CMN をスタートし,入力が進むにつれて徐々にその発話自身のケプストラム平均を使う.なお,オプションでこの MAP-CMN の振る舞いを制御したり,初期値をあらかじめ与えることができる.通常,初期値としては,直前の発話の平均が用いられる.

また,分散正規化(CVN)が有効化されているときは,CVNに対しても上記と同様の方法で処理が行われる.

プラグインによる拡張について

プラグインでフロントエンド処理を追加できる.入力ストリーム全体,あるいは零交差によるトリガ部分の音声データに対して処理を行うプラグイン,および特徴量ベクトルに対して(認識前に)処理をかけるプラグインを記述できる. また,音声入力や特徴量入力のデバイスをプラグインとして追加することもできる. 詳しくはプラグインの章を参考のこと.



[6] 基本的に,リアルタイム認識用の音響モデルでは, 正規化エネルギー項は使わないほうがよい.