認識アルゴリズム

音声区間の検出

ショートポーズセグメンテーション (Short-pause segmentation)
音声区間検出 (Voice Activity Detection : VAD) で区切れないような長い音声を、文中の短い無音で区切りながら逐次的に認識を行う機構。-spsegmentを指定することで有効となる ショートポーズセグメンテーション - 第8章 認識アルゴリズムとパラメータ julius マニュアル

単語や音素の位置

  • 単語単位 (-walign)
  • 音素単位 (-palign)
  • HMMの状態単位 (-salign)

単語アラインメント (word alignment) / -walign

=== begin forced alignment ===
-- word alignment --
 id: from  to    n_score    unit
 ----------------------------------------
[   0   36]  -24.533104  <s>    []
[  37   92]  -25.693394  こんにちは+感動詞      [こんにちは]
[  93   97]  -23.311035  、+補助記号    [、]
...
re-computed AM score: -7025.628418
=== end forced alignment ===

音素アラインメント (phoneme alignment) / -palign

=== begin forced alignment ===
-- phoneme alignment --
 id: from  to    n_score    unit
 ----------------------------------------
[   0   36]  -24.533104  silB
[  37   40]  -28.812912  k+o
[  41   44]  -30.902359  k-o+N
[  45   49]  -27.162842  o-N+n
[  50   53]  -26.598297  N-n+i
[  54   58]  -27.497852  n-i+ch
[  59   66]  -24.056824  i-ch+i
[  67   69]  -26.273642  ch-i+w
[  70   77]  -23.281586  i-w+a
[  78   92]  -24.182943  w-a+sp[w-a]
[  93   97]  -23.311035  a-sp[sp]
...
re-computed AM score: -7025.628418
=== end forced alignment ===

状態アラインメント (state alignment) / -salign

=== begin forced alignment ===
-- state alignment --
 id: from  to    n_score    unit
 ----------------------------------------
[   0   32]  -24.288939  silB #1
[  33   33]  -25.682983  silB #2
[  34   36]  -26.835632  silB #3
[  37   37]  -28.791016  k+o #1
[  38   39]  -29.340027  k+o #2
[  40   40]  -27.780579  k+o #3
[  41   42]  -29.470856  k-o+N #1
[  43   43]  -32.225220  k-o+N #2
[  44   44]  -32.442505  k-o+N #3
[  45   45]  -28.430298  o-N+n #1
[  46   48]  -27.015869  o-N+n #2
[  49   49]  -26.336304  o-N+n #3
..
re-computed AM score: -7025.628418
=== end forced alignment ===

無音区間

無音区間の検出処理は、JuliusLibではlibjulius\src\adin-cut.cにあります。

トラブル対処法

期待するように区間の検出ができないときには、libjulius\include\julius\define.hで次のマクロを定義します。

/* some definitions for short-pause segmentation */
#define SP_BREAK_EVAL         /* output messages for evaluation */
#define SP_BREAK_DEBUG        /* output messages for debug */
#define SP_BREAK_RESUME_WORD_BEGIN /* resume word = maxword at beginning of sp area */

SP_BREAK_EVALでは、処理の進捗を確認できます。

jlog("DEBUG: [%d %d %d]\n", time, count, (detected) ? 50 : 0);

// time 現在の入力フレーム
// count 検出された単語数
// detected 無音区間と認められるならばTRUE。つまり50と出力されるならば、無音区間

SP_BREAK_DEBUGでは、処理の過程を確認できます。

jlog("DEBUG: startword=[%s], last_nword=[%s]\n", …
jlog("DEBUG: sp start %d\n", time);
jlog("DEBUG: sp end %d\n", time);

など

認識結果の信頼度

  • 言語モデルの尤度 (score LM)
  • 音響モデルの尤度 (score AM)

単語信頼度

0.0~1.0の値をとり、1.0に近いほど競合候補が存在せず信頼度が高いことを意味します。

第1パス

 

第2パス

仮説のスタックサイズ (-s) が不足すると、「WARNING: id name: hypothesis stack exhausted, terminate search now」として探索が途中で打ち切られます。