G検定(ジェネラリスト検定)
してぃーしー
CTC
CTC
Connectionist Temporal Classification
CTCは、入力の各フレームに1文字(または空白記号)を出力し、それを折りたたんで最終的な文字列を得る、音声認識のためのアルゴリズムおよび損失関数です。
詳しい説明
CTCとは何か
CTC(Connectionist Temporal Classification)は、音声認識で使われるアルゴリズムであり、同時に損失関数の名前でもあります。Graves et al.(2006)によって提案されました。音声認識ではエンコーダデコーダ方式が広く使われますが、CTCはそれとはまったく異なるやり方で、音声と文字列の対応づけという問題に取り組みます。
CTCの直感は、入力の各フレームごとに1文字を出力する、というものです。音声は短い時間の区切り(フレーム)が並んだ長い系列であり、書き起こした文字列はそれよりずっと短いのが普通です。そこでCTCは、まずフレームと同じ数だけ文字を並べた系列(アライメント)を作り、そこから最終的な出力を組み立てます。
空白記号と折りたたみ関数
フレームごとに1文字を出すだけでは、同じ文字が何フレームも続いたときにそれを1文字とみなすのか、本当に同じ文字が連続しているのかを区別できません。また、発音の合間など、どの文字にも当たらないフレームの扱いも問題になります。CTCはこれらの問題を、書き起こしに使う文字の集合に特別な空白記号(blank symbol)を加えることで解決します。
そのうえでCTCは、折りたたみ関数(collapsing function)Bを使って、アライメントAから出力Yを作ります。折りたたみ関数は、連続して繰り返す文字をまとめ、空白記号を取り除きます。たとえば、同じ文字が何フレームか続いた部分は1文字にまとめられ、空白記号のフレームは消えます。本当に同じ文字が2回続く語では、間に空白記号をはさむことで、まとめられずに2文字として残せます。
この折りたたみ関数は多対一の対応です。つまり、多くの異なるアライメントが同じ出力文字列に対応します。どのフレームでどの文字を出したかという細かな違いは、折りたたんだ後には区別されません。
条件付き独立性の仮定
CTCは、ある1つのアライメントに確率を割り当てる際に、強い条件付き独立性の仮定を置きます。入力Xが与えられたとき、各時刻でのCTCモデルの出力は、他の時刻の出力とは独立であるとみなします。これにより、各フレームの出力確率を個別に扱えるようになります。その一方で、前後に出した文字どうしの関係は、モデルの出力の段階では直接考慮されないことになります。
推論では、各フレームに1文字(または空白記号)を出力して系列Aを作り、それを折りたたみ関数Bに渡して出力Yを得ます。この意味で、CTCは系列モデリングのタスクとして扱えます。
自己教師あり音声モデルとの組み合わせ
CTCは、Wav2Vec2.0やHuBERTのような自己教師あり音声モデル(SSLとも呼ばれます)と組み合わせて使われます。これらのモデルは音声の抽象的な表現を学習するエンコーダであり、デコードのための損失関数としてCTC損失と組み合わせることで、音声認識に利用できます。微調整の際には、CNNの部分を固定し、それ以外の部分をCTC損失を使って音声認識向けに訓練するという使われ方をします。
試験で問われること
G検定
- CTCが入力の各フレームごとに1文字を出力するという考え方に立ち、エンコーダデコーダ方式とは異なるアルゴリズムおよび損失関数であることを説明できますか。
- CTCが書き起こしの文字集合に空白記号を加える理由と、折りたたみ関数が空白記号を取り除き連続する同じ文字をまとめて出力を作る仕組みを説明できますか。
- 折りたたみ関数が多対一の対応であり、多くの異なるアライメントが同じ出力文字列に対応することを説明できますか。
- 入力が与えられたとき各時刻の出力が他の時刻と独立であるというCTCの条件付き独立性の仮定と、Wav2Vec2.0やHuBERTなどの自己教師あり音声モデルをCTC損失で微調整する使われ方を説明できますか。
最終更新日: 2026/09/23