# 探索空間の可視化機能について

Julius-3.4.1 より追加された探索空間の可視化機能を用いることで、Julius/Julianの内部でどのように解探索が行われているかをグラフィカルに眺めることができます。以下に使用方法について説明します。

## 準備

探索空間の可視化機能は、デフォルトでは無効になっています。有効にするには、`configure` に `--enable-visualize` オプションをつけてコンパイルしてください。

     Juliusの場合：
     % ./configure --enable-visualize
     Julianの場合：
     % ./configure --enable-visualize --enable-julian

なおコンパイルおよび実行には、 X11 環境と GTK ライブラリが必須です。

インストールされている Julius/Julian が、可視化機能付きでコンパイルされているかどうかを調べるには、`-setting` オプションを用います。下記のようにTuningsの項目に"Visualize"が含まれていれば、その Julius/Julian は可視化機能付きでコンパイルされています。

    % ./julius/julius --setting
    Julius rev.3.4.1 (fast)

    Engine configuration:
     - Base setup : fast
     - Tunings    : N-gram, Visualize
     - Compiled by: gcc -O6 -fomit-frame-pointer

また、`sox`がインストールされていれば、認識対象の音声データをその場で再生することもできます。

## 実行方法

Julius/Julian を起動し、通常どおり認識を行ってください（マイク入力でもファイル入力でも構いません）。最初の入力の認識が終わると、以下のようなウィンドウが現れます（クリックすると拡大します）。

画面の上部は入力音声の波形が表示されており、その下にJulius の第1パスの結果の単語トレリス全体が表示されています（特徴量ファイル入力の場合、音声波形は表示されません）。

詳しいグラフの見方と操作方法についてはあとで述べますので、とりあえず右下の「close」ボタンを押してください。するとウィンドウが閉じ、次の音声入力へと進みます。このように、１入力ごとに認識が終わると同時にこのウィンドウが表示され、ウィンドウが閉じられるまでJuliusは動作を一時停止します。

## グラフの見方

Julius/Julian では2パス探索を行っています。第1パスでは入力音声に対して2-gramを 用いて比較的簡単で高速な音声認識処理を行いますが、そのときにその解探索過程で登場した単語仮説すべてを「単語トレリス」という形で保存します。次の第2パスではより詳細な3-gramを用いて、この単語トレリスの上で単語間を再接続しながら最尤解を探索し、最終的な認識結果を出力します。

図のグラフには、第1パスの結果の単語トレリス全体、および第2パスの最終結果を表しています。各ラインはそれぞれ単語トレリス中に存在した単語仮説を表しています。ラインの右の端点は単語終端の位置、左の端点は単語始端の位置（＝その直前単語の終端）を表しています。縦軸は、デフォルトでは仮説単語のIDです。特に有望であった主要な仮説単語については、単語の出力表記が右の端点付近に出力されます。

各ラインの具体的な見方は下記の通りです。特に、オレンジのラインが第1パスの認識結果、赤のラインが第2パスの最終的な認識結果を表しています。

## 第２パスの探索過程の再現

最初の画面では上記のように第1パスの結果の単語トレリス空間が表示されていますが、 次に、その後の第2パスでどのように仮説の展開が行われたのかを見てみましょう。

第2パスのスタックデコーディングでどのように仮説が選択・展開されていったかを、グラフ上で再現することができます。以下の手順で過程を再現することができます。

1. ウィンドウ右側の「pass2 replay」にある「start」ボタンを押す
   →画面が切り替わる。グラフの縦軸は文仮説のゆう度となる（上に行くほどゆう度が高い）。
2. 「start」ボタン下のスライダを右へ動かしていくと、第2パスの仮説展開の様子が「最尤仮説取りだし→展開→格納」を1セットとして順に表示される。濃いラインが仮説スタックから取り出された最尤仮説を表し、そこから伸びる薄いラインが、展開されてスタックに格納された次仮説を表す。

スライダを動かすことで、任意の時点の仮説展開の様子を見ることが出来ます。

「start」ボタンをもう一度押して解除することで、元の単語トレリス表示に戻ります。

## 操作方法

右側にあるボタンでは、他にも単語トレリス表示の縦軸の切り替えや表示倍率の変更、音声の再生などを行うことが出来ます。以下に各ボタンの機能を列挙します。

- waveform：波形情報
  - 「play」…音声を再生する（要sox）
  - 「thres」…切り出しの閾値を波形上に上書き表示する。もう一度押すと消える。

- change view：グラフの縦軸を変更
  - 「word」…単語ID（単語の辞書登録順）
  - 「score」…累積ゆう度
  - 「beam」…フレームごとの一位候補からのゆう度差

- show/hide：表示項目の変更
  - 「arcs」…始終端の間のラインの部分の表示を ON/OFFする。

- view words：特定単語のみ表示
  - 文字列を入力してEnterを押すと、それを読みにもつ単語のみを表示。何も入力せずにEnterで全表示に戻る。

- zoom：時間軸（横軸）の表示倍率の変更
  - x2, x4, x8…入力フレームの長さとウィンドウの横幅が一致する状態を1倍として、それぞれ2倍、4倍、8倍に固定する。
  - fit…全体がウィンドウのサイズに収まるように自動調節する。

- pass2 replay：第２パスの探索過程を再現
  - 「start」…再現を開始する。もう一度押すと再現を止めて元に戻る。
  - 「0」…スライダを右へ動かすことで、POPした順に仮説展開の様子を図示する。

- close：ウィンドウを閉じる

## その他

### フォントについて

日本語の単語名が表示されない場合は、環境変数 LANG を日本語 (ja_JP.eucJP等)に設定してください。

     % setenv LANG ja_JP.eucJP
    あるいは
     % export LANG=ja_JP.eucJP

単語名表示用のフォントは `julius/visualize.c`の冒頭部分で以下のように定義されています。使用するフォントを変えたい場合はここを変更して再コンパイルしてください。

    #define FONTSET "-*-fixed-medium-r-normal--10-*-*-*-*-*-*-*"

Last modified: 2004/02/19