第9章 複数モデルを用いた認識

目次

インスタンスの宣言
音響モデルインスタンス (-AM)
言語モデルインスタンス (-LM)
認識処理(デコーディング)インスタンス (-SR)
オプションの記述位置について
インスタンス宣言を用いた Jconf ファイルの例

Julius は 4.0 より,複数のモデルの並列音声認識をサポートしている. 複数の言語モデルや音響モデルを用いて,入力に対して並列に認識を行い, 複数の結果を一度に得ることができる.

複数のモデルを用いるには,オプション指定時に,モデルやパラメータの指定の前にインスタンス宣言-AM, -LM, -SR を行う.ここではインスタンス宣言の書式,および複数インスタンスの宣言方法について述べる.

インスタンスの宣言

音響モデルインスタンス (-AM)

-AM name

-AMは,name という名前の音響モデルインスタンスを新たに宣言する.-AMが指定されるたびに新たなインスタンスが生成され,それ以降にある音響モデルおよび特徴量抽出パラメータは,そのインスタンスに格納される.以下は2つの音響モデルを用いる場合のインスタンス宣言の例である.

 -AM AM1
 ....(音響モデル1関連の設定)
 -AM AM2
 ....(音響モデル2関連の設定)

インスタンス指定を一つも行わない場合,暗黙のインスタンス名は _default となる.ただし,Julius は -AM が指定されている場合,最初の -AM より前にあるパラメータは破棄してしまう.複数モデルを用いる場合は,必ず上記のように各モデルごとに最初に -AM で宣言する必要がある.

音響モデルインスタンスに格納されるパラメータは,音響モデルのファイルや計算アルゴリズムに関する設定,ならびにそのモデルで使用する特徴量の設定である.Julius は音響モデルごとに個別に特徴量抽出を行える.このため, 複数の音響モデルを用いる場合,特徴量抽出のパラメータ設定は,モデルごとに行う必要がある点に注意されたい.たとえすべてのモデルで同一の特徴量を用いる場合でも,その特徴量抽出の設定をすべての音響モデルインスタンスで繰り返し記述する必要がある.なお,格納されるオプションの完全なリストは,マニュアルの「音響モデルおよび特徴量抽出」のセクションにある.

GMM については,オプション-AM_GMMを指定することで,それ以降に GMM のための特徴量抽出の設定を定義できる. -AM_GMM が指定されない場合,GMM は最初に定義された音響モデルインスタンスの特徴量を共有する.

-AM_GMM

なお,Julius は1つの音声入力をモデル間で共有するため,下記のオプションについては全インスタンスで同一の値が設定されている必要がある. Juliusは,起動時にこれらのパラメータをチェックし,同一の値が指定されていない場合エラーとする.

  • 入力音声のサンプリングレート (-smpFreq または -smpPeriod, あるいはHTK Config 内の SOURCERATE)

  • フレームシフト (-fshift)

  • フレームサイズ (-fsize)

言語モデルインスタンス (-LM)

-LMは言語モデルのインスタンス宣言である.いくつかの言語モデルタイプ(単語N-gram, 文法,単単語認識等)が指定できる.一つのインスタンスには1つの言語モデルタイプのみ指定できる.

認識処理(デコーディング)インスタンス (-SR)

-SRは認識処理単位であり,上記のモデルインスタンスを参照しながら実際に認識を行う処理インスタンスを定義する.参照する音響モデルインスタンス名と言語モデルインスタンス名をそれぞれ指定し,続けて認識処理のためのパラメータ(重み・ビーム幅等)を指定する.

オプションの記述位置について

インスタンス宣言を用いた設定では,各指定オプションは,その時点で宣言されているインスタンスについての指定と解釈される.このため,各種オプションは,対応するインスタンス宣言の後に書く.例えば,音響モデルおよび特徴量関連のオプションは-AMの後に,言語モデル関係は -LM のあとに,デコーディング用パラメータは -SR のあとに書く必要がある.また,音声入力の設定などの全体オプションは,最初のインスタンス宣言の前か,あるいはオプション -GLOBAL の後に書く.以下に例を示す.

 (global options)
 -AM am1
 (AM related options)
 -LM lm1
 (LM related options)
 -SR search1 am1 lm1
 (Search related options)
 -GLOBAL
 (global options)

-SR の後に LM オプションを記述するなど,異なる場所にオプションを書くとエラーとなる.どのオプションがどのインスタンスの種類に対応するかは,リファレンスマニュアルを参照のこと.

このオプション位置の制約および -GLOBAL オプションは, バージョン 4.1 で導入された.それ以前の Julius-4.0 では,上記の制約は存在せず,例えば -LM の後に AM オプションを記述するなど自由な記述ができた.しかし,オプションとインスタンスの関係があいまいになるため,上記のようなセクション付けが行われるようになった.4.0 での仕様に戻したい場合は,オプション -nosectioncheck を指定する.これにより,4.0 で動いている jconf をそのまま使うこともできる.

インスタンス宣言を用いた Jconf ファイルの例

以下は,1つの音響モデルと複数の言語モデルを用いる場合の例である. AM1, LM1, LM2, SR1, SR2 は任意のインスタンス名である.

 -AM AM1
 ....(音響モデル関連の設定)
 -LM LM1
 ....(言語モデル1および特徴量抽出関連の設定)
 -LM LM2
 ....(言語モデル2および特徴量抽出関連の設定)
 -SR SR1 AM1 LM1
 ....(AM1 + LM1 の認識処理の設定)
 -SR SR2 AM1 LM2
 ....(AM1 + LM2 の認識処理の設定)

あるインスタンス内のパラメータは,他のインスタンスとは共有されずに完全に独立している.このため,特徴量抽出や言語モデル重みなど,モデルに付随するパラメータは全てインスタンスごとに改めて定義する必要がある点に注意が必要である.

複数モデルの指定を行う場合,全てのモデルにおいてまず最初に上記のように名前を宣言すること.最初のインスタンス宣言の前にあるパラメータは,グロー バルなパラメータを除いて,無視される.

また,4.0現在では,複数の音響モデルに対して一つの言語モデルを用いる組合せは直接サポートされていない.これは,言語モデルの一部の処理が音響モデルに依存しているためである.この制限は,同じ言語モデルを複数指定することで回避できる.例えば,以下のように設定を行いたい場合,

 -AM am_1 -AM am_2
 -LM lm (LM spec..)
 -SR search1 am_1 lm
 -SR search2 am_2 lm

以下のように同じ言語モデルを複数回指定してそれぞれの音響モデルに割り付ければよい.

 -AM am_1 -AM am_2
 -LM lm_1 (LM spec..)
 -LM lm_2 (same LM spec..)
 -SR search1 am_1 lm_1
 -SR search2 am_2 lm_2