- 「CTC(音声認識)」について学びたいけど理解できるか不安・・・
- 「CTC(音声認識)」を使うメリットが分からない?
- 「CTC(音声認識)」を分かりやすく教えて!
CTC(Connectionist Temporal Classification)とは、音声認識モデルの1つでありますが興味があっても難しそうで何から学んだらよいか分からず、勉強のやる気を失うケースは非常に多いです。
※音声認識(ASR:Automatic Speech Recognition)とは、入力信号を音声特徴ベクトルに変換、その音声特徴ベクトルの系列から対応する単語列を推定するタスクです。
私は過去に基本情報技術者試験(旧:第二種情報処理技術者試験)に合格し、また2年程前に「一般社団法人 日本ディープラーニング協会」が主催の「G検定試験」に合格しました。現在、「E資格」にチャレンジ中ですが3回不合格になり、この経験から学習の要点について学ぶ機会がありました。
そこで、この記事では「CTC」のポイントを解説します。
この記事を参考に「CTC」が理解できれば、E資格に合格できるはずです。
1.CTC(Connectionist Temporal Classification)
音声認識(ASR:Automatic Speech Recognition)とは、入力信号を音声特徴ベクトルに変換、その音声特徴ベクトルの系列から対応する単語列を推定するタスク
ここでは音声認識モデルの1つであるCTC(Connectionist Temporal Classification)[Graves+,2006]について解説する。
- CTCはEnd-to-Endモデルの中でも比較的初期に提案されたモデル
(従来手法のように隠れマルコフモデル(HMM)を使用しない) - ディープニューラルネットワーク(DNN)だけで音響モデルを構築する手法として提案[Graves+,2006]
- 従来の3つのモジュールに分割する手法ではDNNの出力をHMMを用いて
ラベル(音素)列の確率に変換する必要があった
→ CTCではHMMを介さずに直接ラベル列の確率を出力することが可能になっている
- 「ブランク(blank)」と呼ばれるラベルの導入
- 「前向き・後ろ向きアルゴリズム(forward-backward algorithm)」を用いたDNNの学習
2.ブランク(blank)の導入
RNN(Recurrent Newral Network:再起型ニューラルネットワーク)に音声系列を入力すると、フレーム数だけ出力が得られる。

なぜ、最終的には削除するブランクを、わざわざ導入するのかなあ?

ブランクを導入する理由は次の2つだよ!!
- 同一ラベルが連続するテキスト系列を表現するため
- 厳密にアライメントを決定させないため
【例題】”xyz”という3文字の音声を認識することを考える。CTCでは”x”、”y”、”z”の他に、ブランク文字”_”を出力として加える。モデルは各時刻においてこの4クラスを識別し、出力された系列に対して次の2つのステップを行い、出力文字列を得る。
- ①同じ文字が連続して出力された際は1つの文字としてマージする。(”zz”、”zzz” → “z”)
- ②ブランク文字を削除する(”x_y_z” → “xyz”)
以下の選択肢のうち、CTCの出力が文字列”xyz”とならないものを選べ。
1.”x_yy_z_”
2.”_xxx_xy_z_”
3.”xxyyzzz”
4.”xy_z”
【解答】2
理由:”xy”は連続した残ってしまうため出力は”xxyz”となる
3.前向き・後向きアルゴリズムを用いたRNNの学習(1)
音声認識モデルは、P(ℓ|x)が最大となるようなテキスト系列ℓを音声認識結果として出力する
学習の際は正解テキスト系列ℓ*における確率 P(ℓ*|x)が最大となるように
RNN(再帰型ニューラルネットワーク)のパラメータ調整を行う
CTCにおいて最小化すべき損失関数
編集中
4.前向き・後向きアルゴリズムを用いたRNNの学習(2)
- 計算例
“xyz”という3文字の音声を認識することを考える。CTCでは”x”、”y”、”z”の他に、ブランク文字”_”を出力として加える。モデルは各時刻においてこの4クラスを識別し、出力された系列に対して次の2つのステップを行い、出力文字列を得る。
①同じ文字が連続して出力された際は1つの文字としてマージする。(”zz”、”zzz” → “z”)
②ブランク文字を削除する(”x_y_z” → “xyz”)
CTCのネットワークの出力が以下の表のようになった場合、”xy”という文字列の尤度p(“xy”)の値は以下のとおりである。
時刻 | 1 | 2 | 3 | 4 |
---|---|---|---|---|
”x”の確率 | 1/2 | 1/2 | 1/4 | 0 |
”Y”の確率 | 1/4 | 0 | 1/4 | 1 |
”_”の確率 | 1/4 | 1/2 | 1/2 | 0 |
xーxーxーy → 1/2*1/2*1/4*1=2/32
xーxーyーy → 1/2*1/2*1/4*1=2/32
xーxー_ーy → 1/2*1/2*1/2*1=4/32
xー_ーyーy → 1/2*1/2*1/4*1=2/32
xー_ー_ーy → 1/2*1/2*1/2*1=4/32
_ーxーxーy → 1/4*1/2*1/4*1=1/32
_ーxーyーy → 1/4*1/2*1/4*1=1/32
_ーxー_ーy → 1/4*1/2*1/2*1=2/32
_ー_ーxーy → 1/4*1/2*1/4*1=1/32
2/32+2/32+4/32+2/32+4/32+1/32+1/32+2/32+1/32=19/32
5.CTCによる音声認識
- 学習されたネットワークを用いてCTCではどのように音声認識(デコーディング)が行われるのか?
- デコーディングの処理方法はいくつか存在する。
- ここでは best path decoding と呼ばれるシンプルな方法を取り上げる。
- 計算例
“xyz”という3文字の音声を認識することを考える。CTCでは”x”、”y”、”z”の他に、ブランク文字”_”を出力として加える。モデルは各時刻においてこの4クラスを識別し、出力された系列に対して次の2つのステップを行い、出力文字列を得る。
①同じ文字が連続して出力された際は1つの文字としてマージする。(”zz”、”zzz” → “z”)
②ブランク文字を削除する(”x_y_z” → “xyz”)
CTCのネットワークの出力が以下の表のようになった場合、”xy”という文字列の出力される確率値は以下のとおりである。
xーxー_ーy → 1/2*1/2*1/2*1=1/8
時刻 | 1 | 2 | 3 | 4 |
---|---|---|---|---|
”x”の確率 | 1/2 | 1/2 | 1/4 | 0 |
”Y”の確率 | 1/4 | 0 | 1/4 | 1 |
”_”の確率 | 1/4 | 1/2 | 1/2 | 0 |
6.まとめ
最後まで読んで頂きありがとうございます。
皆様のキャリアアップを応援しています!!
コメント