1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

CTCってなんだろな?

Posted at

はじめに

この記事では音声認識モデルによく用いられるCTCに関して簡単にまとめています。読みにくい部分や間違いなどあるかもしれません。ご容赦ください。

CTCとは

CTCはend2endモデルに分類される。音声認識などでよく用いられている印象がある。

\begin{align}
x&: 入力系列\\
y_t^k&:フレームtにおける出力のうちノードkの値\\
l&: トークン系列\\
\pi&: アライメント系列
\end{align}

CTCを用いて行いたいことは$x$から$y$を予測することである。ただしCTCモデルは直接$y$を出力するのではなく、$x$を入力して$\pi$を出力し、$\pi$を次の1,2の順に実行することで$y$を得る。

  1. 連続して出現している同一トークンを削除する。
  2. ブランクトークン"-"を削除する。

例えば $\pi=[-,o,o,-,o,i,i,i]$ は $y=[o,o,i]$ に変換される。

具体例

教材には抽象的な表現しかなかったのでこのページでは具体例を紹介します。
以下のように記号を設定する。

\begin{align}
x&: 音声波形[x_0,...,x_7]\\
y_t^k&:フレームtに対応する音素がkである確率(k=a,u,-)\\
l&: ターゲットテキスト[a,u]\\
\pi&: アライメント[-,a,u],[a,a,u],[a,-,u],[a,u,u],[a,u,-]
\end{align}

$x$が「会う」と認識される確率は

\begin{align}
&\quad P([a,u]|x)\\
&=P([-,a,u]|x)+P([a,a,u]|x)+P([a,-,u]|x)+P([a,u,u]|x)+P([a,u,-]|x)\\
&=y_-^0 y_a^1 y_u^2+y_a^0 y_a^1 y_u^2+y_a^0 y_-^1 y_u^2+y_a^0 y_u^1 y_u^2+y_a^0 y_u^1 y_-^2
\end{align}

とあらわされる。
ここで、$y_a^1$に対する$L_{CTC}$の勾配を求めると

\begin{align}
&\quad\frac{\partial L_{CTC}}{\partial y_a^1}\\
&=-\frac{1}{P([a,u]|x)}\frac{\partial}{\partial y_a^1}P([a,u]|x)\\
&=-\frac{1}{P([a,u]|x)}(y_-^0 y_u^2+y_a^0 y_u^2)\\
&=-\frac{1}{P([a,u]|x)\cdot y_a^1}(y_-^0 y_a^1 y_u^2+y_a^0 y_a^1 y_u^2)\\
&=-\frac{1}{P([a,u]|x)\cdot y_a^1}P(l=[a,u],\pi_1=a|x)

\end{align}

となる。同様にして他のパラメータに対する勾配も求められる。

参考文献

  • 高島遼一, Pythonで学ぶ音声認識, インプレス社, 2021.
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?