音声認識 - デコーダ (WFST、Lattice)

       与えられた音響観測シーケンスとしてデコードするという前提の下で、ベイジアンによって得られるO=\left \{ o_{1},o_{2},...,o_{T} \right \}最も可能性の高い単語のシーケンスを見つけます。W=\left \{ w_{1},w_{2},...,w_{N} \right \}

        W=argmax_{w}P\left ( W|O \right )=argmax_{w}P\left ( O|W \right )P\left ( W \right )

        デコードの目的は、デコード空間内で初期状態から最終状態までの 1 つ以上の最適なパスを見つけることです。

        デコーダは音声認識システムの重要な部分であり、主なデコード方法は次のとおりです。

        1) ダイナミック デコーダ: ダイナミック デコーダは、幅優先探索を使用して元の探索ネットワーク内に複数の仮説を同時に生成し、ネットワークが大きくなりすぎないように枝刈りアルゴリズムに依存します。

        2) 重み付き有限状態トランスデューサー (重み付き有限状態トランスデューサー): 重み付き有限状態トランスデューサーは、有限状態オートマトン アルゴリズムを使用して状態レベルのネットワーク構造を表現および最適化し、最短パス アルゴリズムを使用してグラフ構造を検索します。

        3) マルチパス検索: 最初は、単語内バイナリ言語モデルが使用されます。いくつかの単純なモデルを使用していくつかの仮説を生成できます。仮説は、最初のパスで取得された N-best リストまたは単語グリッド上のより正確な単語間モデルを使用して再スコア付けされます。

ビタビに基づくオリジナルのダイナミック デコーダ:

        ビタビに基づく元の動的デコーダは、幅優先探索を使用して元の探索ネットワーク内で複数の仮説を同時に生成し、ネットワークが大きくなりすぎないように枝刈りアルゴリズムに依存しています。

        動的復号化ネットワークは、辞書を状態ネットワークにコンパイルするだけであり、これが検索空間を構成します。

        4 単語の辞書を例にとると、その辞書には次の 4 つの単語が含まれています。

        形成される検索空間は、線形辞書、ツリー辞書に分けることができます。

1) 線形辞書

        まず、辞書内のすべての単語を対応する音素状態シーケンスに置き換えて並列ネットワークを形成し、言語モデルを組み合わせてネットワークのループ接続を決定します。 -gram言語モデル:

         2 グラムおよび 3 グラムの言語モデルを使用すると、いくつかのまれな組み合わせを排除できるため、デコード プロセスの枝刈り計算が容易になります。デコード ネットワークの概略図は次のとおりです。

         ここで、sp は単語間のスペースです。

        辞書を用いて構築された並列(ループバック)ネットワークを取得した後、観測系列(音声情報)に応じて、横軸を時間、縦軸を状態として状態系列を水平展開します。

         この図では、3 つの状態ごとに音素が表されます。

        ビタビアルゴリズムによれば、時間の経過とフレームの移動に応じて、各パスの累積確率を最後の単語の最後の状態と徐々に比較し、最適なパス、つまり最終的な復号文を取得します。デコードが終了します。

        ( HMM 復号化問題 (Viterbi、A*、ビーム探索)_weixin_43284996 のブログ - CSDN ブログ)

        デコード プロセスは、トークン パッシング (トークン パッシング) などのプルーニング アルゴリズムによって最適化できます。

        しかしながら、上記の復号ネットワークは、すべての単語の音素状態列を並列ネットワーク接続することによって形成されていることがわかり、語彙が大きい場合には、記憶と計算の複雑さが非常に高くなる。

2) ツリー辞書

        線形辞書の問題を解決するために、ツリー辞書が提案されています。

        各音素の状態ごとに決定木を構築します。

         ツリー構造は音素のパスに従って対応する単語を取得するものですが、非線形辞書は最初に単語を推定し、次に単語から対応する音素パスを入力します。(しかし、これにより、言語モデルは常に電話パスの最後で使用されることになります。これは、言語モデルを早期に導入することで実現できますか?)

        同じ状態の多数のノードがマージされるため、探索空間の規模が大幅に縮小され、復号処理の計算負荷が軽減される。

要約:

        大規模な辞書の復号処理では、ビタビに基づく独自の動的デコーダでは計算量が多く、復号速度も遅い。

        デコードを高速化するには:

        一方で、枝刈りを実行することができ、デコード時に最適なパスが選択され、枝刈り閾値を超えたパスは後続の操作を行わずに直接削除されます。

        一方、知識ソースは静的ネットワーク (WFST) にプリコンパイルして、デコードに直接使用できます。

WFST に基づくビタビ静的デコーダ:

        デコードを高速化するために、動的知識ソースを事前にコンパイルして静的ネットワークを形成し、デコード中に直接呼び出すことができます。
HMM 状態列を入力し、単語列とそれに関連するスコアを直接取得します。

        前述の HMM モデル、トライフォン モデル、辞書、言語モデルの WFST 形式をそれぞれ H、C、L、G で表します。

(WFST の導入とネットワーク構築プロセスは、 Weighted Finite-State Transducer/WFST_weixin_43284996 のブログ - CSDN ブログで参照できます)

        このデコーダでは、音響部分 (観測シーケンスから HMM 状態シーケンス) は、入力特徴に従って個別に計算する必要があり、HCLG に含まれるその他の情報は、入力、出力、およびネットワーク内の転送アークの重み。

        静的ネットワークは探索空間を完全に拡張しているため、ノード間の転送重みに従って音響確率と累積確率を計算するだけで済み、復号速度が非常に高速です。

        デコード プロセスでは、トークン伝播メカニズムであるトークン パッシングを使用します。これは、実際にはビタビ デコードの一般的なバージョンです。

        ただし、実際の使用では、ビタビ復号の最適なパスが最適な出力結果 (例: 言語シーンの変化) であることを保証することが難しいため、後続の処理のためにさまざまな認識候補結果を保存するためにラティスがよく使用されます。

WFST に基づく Lattice の静的デコード:

        従来の音声認識プロセスでは、通常、音響モデルのトレーニングに多くのリソースが消費されるため、音響モデルは頻繁に更新されず、音声認識システムが特定のシナリオに合わせて迅速に最適化することが困難になります。一方、復号効率を確保するためには、復号グラフの枝刈りが必要なステップであり、ビームサーチを直接使用するのが一般的である。この 2 つの問題を考慮すると、Lattice があります。

        デコード時に、最終的に N-best パスを取得するためにいくつかの枝刈り手法が使用されます。N-best パスを再決定した後に得られる WFST は Lattice です。

        HCLG と同様に、Lattice の入力は HMM 状態であり、その出力は単語のシーケンスです。ただし、kaldiでは、入力、出力ともに単語列となり、遷移時にHMMの状態などの情報が格納されるようにLatticeの生成と格納が最適化されているため、通常、Latticeはワードマップまたはワードラティスと呼ばれます。

         このように、音声認識の復号処理は 2 段階(2 パス)に分かれており、1 パス目で Lattice を取得するための復号を行い、2 パス目で Lattice 内の最短経路探索を行って 1-best の復号結果を取得します。

        具体的な手順は次のとおりです。

        1) N ベスト プルーニング:元のトークン パッシング アルゴリズムが新しい単語リンク レコード (単語リンク レコード、WLR) を作成するとき、最も高いスコアと最も尤度の高いトークンのみが保存されますが、改良されたアルゴリズムでは、最高スコア N トークンを持つトークン。ラティスは、独自の ForwardLink メカニズムを通じて生成されます。

        フレームごとに 1 つの ForwardList があり、フレーム インデックスに関連付けることができます。これは、エミッション アーク間のトークンの転送を記録し、リンク リストを使用して、現在のフレームのすべての状態にあるすべてのトークンを接続します。

        2) ラティスの構築:文の終わりに、すべての履歴情報が単語グリッドにバックトラックされます。この単語グリッドには、音響モデルと言語モデルのスコア、認識された単語とそれに対応する時間ステップが含まれます。このようにして、N 個の最良のパスまたは仮説を の単語グリッドで見つけることができます。

       3) 1-best 再評価: Lattice で元のパスを再スコアリングし、最適なパスを選択します。再スコアリングの際には、より大きな言語モデルやビジネスとの関連性がより強いモデルを使用でき、音響モデルは変更されずにデコード効果が確実に最適化されます。

        上記のデコーダーに基づいて、静的/動的ハイブリッド デコーダーが最適化に使用されることがあります。

       1)Lattice Pruning(格子トリミング)ワードグリッドは生成時に非常に大きくなる可能性があり、各状態は複数のトークンを保存しますが、大部分は最適なパスにほとんど影響を与えないため、精度を低下させることなく格子を刈り込むことができます。最適なパスとその尤度確率を計算し、任意のノードまたはアークについて、その順方向と逆方向の最尤確率を計算します。つまり、順方向と逆方向をスコア化し、それらを加算してアークを通過する可能性を取得します。この確率はこのエッジの事後確率として使用され、事後確率が非常に低いエッジは枝刈りの目的を達成するために削除されます。

        2) 音響モデルの再スコアリング (音響モデルの修正):ワード グリッドは、より複雑な音響モデルを再スコアリングするための有限状態制限文法として使用できます。したがって、再スコアリングに音響モデルを使用する場合、時間と音素のコンテキストが異なるためにコピーされた元の接続アークは、より小さい単語グリッドを使用して統合されます。下の図は、単語「TO」の前後のアークを示しています。統合されています。

        3) 言語モデルの再スコアリング (言語モデルの修正):元の単語グリッドは、音響モデルの影響を考慮する必要がない新しい言語モデルを使用して再スコアリングすることもできます。メタモデルによって生成された格子は、再スコアリングされます。 -scored, これにより、さらにいくつかのパスが導入されます。前後の比較図は次のとおりです。

                 4) 混同ネットワーク:混同ネットワークを生成する方法は、最初に最適なパスを見つけてから、徐々に他のエッジの配置を混同ネットワークに追加することです。特定のエッジの追加が元のネットワークの長さを超えても、依然としてエッジは混乱ネットワークに参加し、以前の最適パスに !NULL エッジを追加します。

要約:

         デコードの目的は、デコード空間内で初期状態から最終状態までの 1 つ以上の最適なパスを見つけることです。 

        ビタビに基づく元の動的デコーダは、幅優先探索を使用して元の探索ネットワーク内で複数の仮説を同時に生成し、ネットワークが大きくなりすぎないように枝刈りアルゴリズムに依存しています。空間の複雑さを軽減するために、リニア辞書の代わりにツリー辞書を使用できます。

        デコード速度をさらに向上させるために、知識ソースを静的ネットワークにプリコンパイルし、デコードに直接使用することができます。すなわち、WFSTが生成される。

        WFST では、ビタビ アルゴリズムのトークン パッシング アルゴリズムを使用して、最適なパスを見つけることができます。

        シナリオが異なるため、Viterbi によって計算された最適パスが必ずしも最も合理的なパスであるとは限らないため、Lattice が導入されます。最適な N-best パスを選択した後、再スコアリング後に最も合理的なパスを選択します。

        構築された格子については、静的/動的ハイブリッド デコーダーを最適化に使用することもできます

おすすめ

転載: blog.csdn.net/weixin_43284996/article/details/127465939