======================================================================
Julius チュートリアル
(1998/02/20)
(1998/04/15 改)
(1999/02/20 改)
(1999/04/20 改)
(2000/02/14 改)
======================================================================
ここでは,Juliusの基本的な使い方について説明します.準備から起動,音
声データの認識を流れを追って説明したあと,選択可能な音声入力ソースやバ
イナリN-gramファイルの利用,エラーについて解説します.
目次
1. ファイルの準備
1.1. モデル定義ファイル
1.2. 設定ファイル(jconfファイル)の編集
2. Juliusの起動
3. 音声データの入力
4. 認識と結果出力
5. 音声入力ソースの選択
6. バイナリN-gramファイルの利用
7. 起動時のエラーについて
1.ファイルの準備
===================
1.1.モデル定義ファイル
---------------------------
Juliusが動作するために必要なモデル定義ファイルを用意します.
最低限必要なのは,
┌────────────────────────────┐
│・音響HMM定義ファイル …HTKのHMM定義ファイル形式 │
│・単語2-gramファイル …ARPA標準形式 │
│・単語辞書ファイル …HTKの辞書形式とほぼ同じ │
└────────────────────────────┘
の3つです.第2パス探索により高精度な認識を行うためには,さらに
┌────────────────────────────┐
│・逆向き単語3-gramファイル …ARPA標準形式 │
└────────────────────────────┘
が必要です.また triphone HMM を用いる場合は
┌────────────────────────────┐
│・HMMlistファイル …独自形式 │
└────────────────────────────┘
が必要です.
※ 単語2-gramファイルと逆向き単語3-gramファイルの代わりに,それら
をあらかじめコンパイルした『バイナリN-gramファイル』を使うこと
で,読み込みを高速にできます.これについては第6節を参照してく
ださい.
各ファイルの形式に関する詳細,Juliusでの制限事項については
付属の Format.txt を参照してください.
1.設定ファイル(jconfファイル)の編集
========================================
Juliusの動作設定は基本的に「jconf ファイル」と呼ばれるファイルに記述
します.ソースアーカイブ内にサンプル "Sample-j.jconf" があるので,これ
を適当な場所にコピーして,自分の環境に合わせて編集します.
各設定については,Sample-j.jconf内のコメントおよびオンラインマニュア
ルを参考にしてください.
2.Juliusの起動
=================
Juliusの起動はコマンドラインから行います.
起動時に "-C jconfファイル" で jconf ファイルを指定します.
----------------------------------------------------------------------
|% julius -C jconfファイル名
----------------------------------------------------------------------
jconf内の各設定は,この時点でコマンドラインオプションとして与えること
も可能です."-C jconfファイル" の*後ろ*で指定することで,jconfファ
イル内の設定を上書きできます.又複数のjconfファイルを指定したときは後
の設定が優先されます.
たとえば,jconfファイル内ではマイク入力 -input mic が指定して
あるが音声ファイル入力を行いたい場合,以下のように指定できます.
----------------------------------------------------------------------
|% julius -C jconfファイル名 -input rawfile
----------------------------------------------------------------------
ここでエラーが発生した場合は第7節をご覧下さい
3.音声データ入力
=================================
起動が終了すると,音声データの入力待ちになります.
音声入力ソースは起動時に "-input {rawfile|mfcfile|mic|netaudio}" の
形で指定します.
例えば "-input rawfile" としたときは,次のようなプロンプトが出てキー
入力待ち状態になります.
----------------------------------------------------------------------
|enter filename->
----------------------------------------------------------------------
与えることのできる音声データは16kHz,16bitのみです.詳しくは付属の文
書 "Format.txt" をご覧下さい.
4.認識の実行と結果の出力
===========================
ファイル名を与えるとJuliusはその入力に対して音声認識を行います.
認識処理全体は2パスで行われます("-1pass"で1パスのみの実行も可).
まず入力全体に対し第1パスの2-gramを用いたフレーム同期のビーム探索で
を行います.途中結果としてベスト仮説を出力します.以下は出力例です.
----------------------------------------------------------------------
|input speechfile: sample/EF043002.hs
|58000 samples (3.62 sec.)
|### speech analysis (waveform -> MFCC)
|length: 361 frames (3.61 sec.)
|attach MFCC_E_D_Z->MFCC_E_N_D_Z
|### Recognition: 1st pass (LR beam with 2-gram)
|.......
|pass1_best: 師匠 の 指導 力 が 問わ れる ところ だ 。
|pass1_best_wordseq: 師匠+シショー+2 の+ノ+67 指導+シドー+17 力+
|リョク+28 が+ガ+58 問わ+トワ+問う+44/21/3 れる+レル+46/6/2 ところ+ト
|コロ+22 だ+ダ+70/48/2 。+。+74
|pass1_best_phonemeseq: silB | sh i sh o: | n o | sh i d o: | ry o k
|u | g a | t o w a | r e r u | t o k o r o | d a | sp | silE
|pass1_best_score: -8944.117188
----------------------------------------------------------------------
pass1_best: が求めるベスト仮説の文字列です.
pass1_best_wordseq: は同じくN-gram表記の文字列,
pass1_best_phonemeseq: は同じく音素表記列("|" は単語区切り)
pass1_best_score: は仮説のスコア(対数尤度)です.
第1パス終了後,さらに高精度な第2パスが実行されます.
第2パスでは第1パスで得られた中間結果を元に,3-gramを用いて単語単位の
スタックデコーディングを行います.
----------------------------------------------------------------------
|### Recognition: 2nd pass (RL heuristic best-first with 3-gram)
|samplenum=361
|sentence1: 首相 の 指導 力 が 問わ れる ところ だ 。
|wseq1: 首相+シュショー+2 の+ノ+67 指導+シドー+17 力+リョク+28 が
|+ガ+58 問わ+トワ+問う+44/21/3 れる+レル+46/6/2 ところ+トコロ+22 だ+
|ダ+70/48/2 。+。+74
|phseq1: silB | sh u sh o: | n o | sh i d o: | ry o k u | g a | t o w
|a | r e r u | t o k o r o | d a | sp | silE
|score1: -8948.578125
|478 generated, 478 pushed, 16 nodes popped in 361
----------------------------------------------------------------------
"sentence1:" の部分が最終的な認識結果です.
認識終了後は 3.のプロンプトへ戻ります.続けてファイル名を入力する
ことで何度も音声認識を行うことができます.
なお起動時に -quiet オプションを付けた場合,以下のように結果だけの出
力になります.
----------------------------------------------------------------------
|58000 samples (3.62 sec.)
|pass1_best: 師匠 の 指導 力 が 問わ れる ところ だ 。
|sentence1: 首相 の 指導 力 が 問わ れる ところ だ 。
----------------------------------------------------------------------
-progout をつけると第1パスの結果が漸次的に出力されます
以上で基本的な使い方は終りです.
5.音声入力ソースの選択
=========================
入力音声のソースは,以下の2〜4種類から選択できます.
"-input rawfile" 音声波形データファイル
一文連続発声を記録した音声波形ファイルを読み込んで認識します.
ファイル形式はRAW(16kHz,16bit signed short,mono,big-endian)
もしくはWAV(無圧縮,16kHz,16bit)です.
コンパイル時に libsndfile を組み込んでいれば,さらに多様な形式
の音声ファイルを入力とすることができます.
なお一回の入力で認識できる時間長にはシステム上の制限があります.
詳しくは Format.txt をご覧下さい.
"-input mfcfile" HTK形式のパラメータファイル(MFCC)
音声波形データから特徴抽出済みの特徴パラメータファイルを読み込
んで認識します.ファイル形式は HTKのパラメータファイル形式です.
音響HMMの学習パラメータと同じ特徴パラメータ型であることが必要
です.特徴パラメータファイルはこの学習パラメータと同じ型である
か,もしくは含んでいる必要があります.
特徴パラメータファイルの作成は別のツールを使います.wav2mfcc
はMFCCタイプの特徴パラメータファイルをHTKフォーマットで生成で
きます.HTK がある場合は,もちろん HCopyコマンド で作ることが
できます.
"-input mic" マイクからの直接入力
マイク端子からの音声Live入力を認識します.
詳しくはパッケージに付属の README.mic をご覧下さい.
サポートOSは Linux (OSS or ALSA), Solaris, IRIX です.
入力開始と同時に解析が始まります.このとき,起動時に "-demo"
を指定しておけば,解析途中の候補が漸次的に出力されます.次に長
い無音区間が現れたらそこで第1パスの解析をやめて第2パスへ移行し,
最終結果を出力します.その後また入力待ちになる,を繰り返します.
なお第1発話目は正しい結果が出てきません(CMNパラメータ取得のた
め)のでご注意下さい.
"-input netaudio -NA server:0" DatLinkからの直接入力
DatLinkサーバから入力音声をパイプラインで受け取り,認識します.
"-input mic" と同じく,入力と同時に解析が始まります.
使用するには,DatLink に付属の NetAudio ライブラリが
必要です.configureがライブラリのチェックに失敗する場合は,
NetAudioのlib, includeがあるディレクトリを
"--with-netaudio-dir=directory" の形で指定してください.
"-NA" で,音声を読み込んでくるNetAudioサーバのホスト名とユニッ
ト番号を指定します.多くの場合"DatLinkの接続されたホスト名:0"
となります.
"-input mfcfile" 以外はJuliusが内部で音響特徴抽出を行いますが,
使用できるのは25次元のMFCC_E_D_N_Zのみです.これ以外の特徴パラメータを
必要とするHMM音響モデルを使用する場合は,抽出済みの特徴パラメータファ
イル(.mfc)を "-input mfcfile" で与えるようにしてください.
6.バイナリN-gramファイルの利用
=================================
ARPA形式の単語2-gramファイルおよび逆向き3-gramファイルは,あらかじめ
コンパイルして1つのバイナリN-gramファイルに変換しておくことができます.
バイナリN-gramを使うことで,Julius起動時のN-gramの読み込み時間が大幅に
短縮できます(数十秒 -> 数秒).
変換には mkbingram を使います.以下は 2-gram.arpa と rev-3-gram.arpa
からバイナリN-gramファイル new.bingram に変換する場合のコマンドです.
% mkbingram 2-gram.arpa rev-3-gram.arpa new.bingram
jconfファイルでは,"-nlr 2-gram.arpa -nrl rev-3-gram.arpa" の代わりに
"-d new.bingram" と指定します.
(注意)このバイナリN-gramはCMU-TKのバイナリ形式とは非互換です.
7.起動時のエラー
===================
Juliusが扱うことの出来るHMMや単語N-gramのタイプやサイズには,いくら
かの制限があります.
Julius起動時に,モデルファイル名を正しく指定したにも関わらずエラーが
生じる場合は,そのモデルがこの制限を満たしていない可能性があります.
特に,以下の制限には注意してください.
1)HMMの遷移に関する制限
2)N-gramの語彙数制限(65,535語)
3)単語語彙のサイズ制限(65,535語)
以上