What's New in Rev.3.2

## Rev.3.3の新機能および変更点

Rev.3.3 の 3.2 からの新機能および変更点は 以下のようになっています．

- 新たな使い方を提供する機能の追加
  - サーバーモジュールモード
  - 複数文法同時認識
- 雑音対応
  - スペクトルサブトラクション
- 使用可能モデルの拡張
  - マルチパス音響モデル対応版Julius/Julian
- 性能の改善（バグフィックスによる）
- その他機能の追加

以下に詳細を述べます．

## 機能拡張

### マルチパス音響モデル対応版 Julius/Julianの提供

従来のJulius/Julianは，高速な処理を重視して音響モデルの状態遷移に制約 がありました．すなわち，音響HMMにおいて初期状態から，あるいは最終状態 への遷移が１つであるモデルしか扱えませんでした．

Rev.3.3 からは，従来と同様の制約を持つ『通常版』と別に，新たに『マルチ パス音響モデル対応版』の Julius/Julian を提供します．このバージョンは， 初期状態からの複数遷移および最終状態への複数遷移を含むモデルを扱うこと ができます．これによって，マルチパス音響モデルなど，複雑なモデル内遷移 を持つ音響モデルを使用することができます．

この拡張された『マルチパス音響モデル対応版』は，ループ・スキップを含む ほぼ任意のモデル内遷移に対応しています．（ただし，初期状態から最終状態 への直接遷移のみ未対応です）

『マルチパス音響モデル対応版』は，通常版とは別のソースアーカイブとして提 供されます．コンパイルおよび使用方法は通常版と同一です． なおアルゴリズムの拡張により，同じモデルを用いた際の認識速度は通常版に 比べて若干(1% 前後)低下しますのでご注意ください．

マルチパス版のためのアルゴリズム変更については，参考文献[6]をご覧ください．

### サーバーモジュールモードの追加

実行中の Julius/Julian をサーバー・クライアント形式で外部プロセスから 制御する機能が追加されました．

起動時にオプション "`-module`" をつけることで『サーバーモ ジュールモード』で起動します．クライアントと接続後認識を開始し，クライ アントへは認識結果や音声トリガ情報などのメッセージが送信され，クライア ントからは認識開始や中断の指示が行えます．またJulianでは，クライアント からの認識文法切り替え・複数文法同時認識が行えます．

クライアントは tcp/ip ソケットを通じて Julius/ Julian と通信します．サ ンプルのクライアントプログラム "`jcontrol`" が収められてい ます．使用方法と使用例については，サーバーモジュー ルモードについてあるいはjcontrolマニュアルをご覧ください．

### (Julian) 複数文法同時認識のサポート

#### 文法の動的切り替え

Julianのサーバーモジュールモードにおいて，認識用文法を認識プロセス実行 中に外部から（再起動なしに）切り替えることができるようになりました．文 法はクライアントからソケットを介して Julian へ流し込みます．音声認識が 行われている最中に文法の切り替えが指示された場合は，その音声入力が終了 して入力待ち状態になったときにはじめて更新されます．

動作の詳細はサーバーモジュールモードについて ，jcontrolマニュアル，および参考文献[7]をご覧ください．

#### 複数文法の同時認識

さらに上記の拡張として，Julianで複数の文法を同時に用いて認識することが 可能になりました．

文法の追加および削除は，サーバーモジュールモードでクライアントから行い ます．音声認識実行中に指示があった場合，その音声入力が終了して入力待ち 状態になったときに更新されます．また，Julian に読み込まれた個々の文法 の一時的な ON/OFF (activate/deactivate) も可能です．

実現の仕組みとしては，全文法をJulian内部で結合し，単一のグローバル文法 を生成してその上で認識が行われる単一デコーディング方式を採っています． 全文法中の候補の中でもっとも尤度の高かった候補が認識結果として出力され ます．

詳細はサーバーモジュールモードについて，jcontrolマニュアルおよび参考文献[7]をご覧ください．

### スペクトルサブトラクションのサポート

入力音声に対するスペクトルサブトラクション(SS)を実装しました． 「入力の先頭(の無音部)でSSを行う」「あらかじめ計算したノイズスペクトル を用いる」の2通りの方法が使用可能です．

1. ファイル入力の場合：入力の先頭(の無音部)でSSを行う

           -sscalc		SS を行なう
           -sscalclen msec	-sscalc 時，各ファイルの先頭の msec 分を無音部
                               とみなし，その範囲の平均スペクトルで SS を行な
                               う．単位はミリ秒（default: 300ms）

2. マイク入力の場合：あらかじめ計算した SS 値をファイルから読み込む

           -ssload filename	filename から SS 用のノイズスペクトルデータを
       			読み込む．ノイズスペクトルデータは，あらかじめ
       			作成ツール "mkss" で作成しておく．

また，以下のパラメータ設定オプションが追加されました．

        -ssalpha		SS の減算係数（default: 2.0）
        -ssfloor		SS のフロアリング値（default: 0.5）

SS はパワースペクトルで行なっています．

    	|S(f)|^2 = |Y(f)|^2 - \alpha |N(f)|^2

この減算計数 alpha の値を `-ssalpha` で指定します．デフォルトは 2.0 です．

また，上記のスペクトル減算の結果マイナス値となるスペクトル成分に対して はフロアリングを行います．このフロアリング値としては「減算前の元スペク トルパワーの定数倍」を用います．この定数値を `-ssfloor` で 指定します．デフォルトは 0.5 です．

### その他の機能拡張

#### 音声入力の拡張

ネットワーク経由の入力("`-input adinnet`")が正式にサポート されました．他のクライアントホストで録音した音声をネットワーク経由で Julius/Julian に送り込んで認識することができます．音声入力クライアント としては，付属ツール "`adintool`" を用いることができま す．

音声の切り出しについては，

- 入力波形データを全て送って Julius/Julian 側で音声区間切り出しを行う
- クライアント(`adintool`)側で音声区間切り出しを行い，個々 の区間を逐次 Julius/ Julian へ送信して認識する

のいずれのスタイルも可能です． 詳しくは `adintool` のマニュアルの実行例を参照してください．

また，標準入力からの音声入力 ("`-input stdin`") が新たにサポートされました． 音声波形フォーマットは RAW(16bit, BE)あるいは WAV(無圧縮) のどちらかの みです．

#### CMNパラメータのファイル保存・読み込みのサポート

起動時オプション "`-cmnsave filename`" で CMN のパラメータ をファイルに書き出すことができます．Julius/Julian では CMN パラメータ は最新の5秒分の入力を用いて認識終了ごとに逐次更新しているため，このファ イルも１入力ごとに上書きで更新されます．

また，"`-cmnload filename`" で上記で保存した CMN パラメータを読 み込んで初期値とすることができます．ファイルが無い場合は無視されます．

想定する使用法としては，"`-cmnsave foo.cmn -cmnload foo.cmn`" とすることで，

1. 起動時にファイル `foo.cmn` があれば読み込む
2. 認識中の最新の CMNパラメータが随時 `foo.cmn` に保存される

という動作を行い，Julius/Julian を停止・再起動させても常に最新の CMN パラメータを最初の発話から使用することができるようになります．

#### 状態単位のセグメンテーションのサポート

従来のセグメンテーションのオプション "`-walign`"（単語単位）, "`-palign`"（音素単位）に加えて，HMM状態単位のセグメンテー ション "`-salign`" が可能になりました．モデル内の状態系列の 番号もあわせて出力されます．

#### RCLASSを含む hmmdefs のサポート

MLLR適応のための regression tree を含む音響モデルファイルを直接読み込 めるようになりました．

## ツールの整備

付属ツールが増強・整備されました．これらは全て Julius / Julian と同時 にインストールされます．

- Juliusのライブラリを使用した音声入力ツール "`adintool`" を整備しました．音声ファイルからの音声区間連続切り出し，Julius/Julian のネットワーク経由入力 ("`-input adinnet`") への音声送信な どの使い方ができます．詳細は各マニュアルをご覧ください．
  - "`adinrec`" - マイク入力録音ツール（１発話を切り出してファイルに記録）
  - "`adintool`" - 多目的音声区間検出・記録・送信ツール
- これまで別途配布していた，Julian 用の文法作成ツールを収録しました．
  - "`mkdfa.pl`, `mkfa`" - 文法コンパイラ
  - "`yomi2voca.pl`" - ひらがな→音素表記変換スクリプト(IPA音素体系用)
  - "`generate`" - 受理文ランダム生成ツール
  - "`accept_check`" - 入力文の受理/非受理検証ツール
  - "`nextword`" - 次単語予測検証ツール

## 実装の改善

### 基本性能の改良

#### 認識アルゴリズム実装の改善

Julius / Julian 共通：

- モデル内のループ遷移が正しく扱えていなかったバグを修正

Julius のみ：

- 第２パスのビーム幅設定 ("`-b2`") のアルゴリズムが正しく実装されていな かったバグを修正
- ある単語の最終音素が１状態のモデルで，かつその同音語が辞書内にある 場合に，言語確率が正しく与えられないことがあるバグを修正
- 第1パスにおいて 1-gram factoring 使用時の単語間遷移の扱いを改善し 処理量を削減

以上の実装の修正により，Julius で認識速度と認識精度が若干改善されました．

#### 使用メモリ量の削減

以下の改善が施されました．

- マイク入力時にHMM状態の出力確率キャッシュを入力長にあわせて動的に 確保するよう改良され，使用メモリサイズが削減されました．
- (Julian) 文法のカテゴリ対情報をビット単位で保持することでメモリサ イズを押えるよう改良されました．

### ドキュメンテーションの整理

#### オンラインマニュアルの整備

英語(`.man`) および日本語(`.man.ja`)があります． デフォルトでは英語マニュアルがインストールされます．日本語マニュアルを 上書きインストールしたい場合は，Julius/Julian インストール時に

    % make install.man.ja

としてください．

#### ソース内のコメントを大幅に修正

ソース内のコメントを大幅に修正しました． `libsent` 以下は英語コメントのみ， `julius` 以下主要部分を日本語と英語で併記しています．

### その他

- "`-filelist listfile`" を特徴量ファイル入力 "`-input mfcfile`" 入力でも可能にした．
- "`-delwin`" でデルタウィンドウ幅を指定可能にした．
- hmmdefs内で"`<NUMMIXES> 1`"という定義があるとき に読み込みに失敗する問題を修正．
- 空白を含むモデル名を扱えなかったバグを Fix．
- その他，細かいバグフィックス

Last modified: 2002/09/11 21:00:39