---
title: 【Pythonで学ぶ音声認識】第7章：End-to-Endモデルによる連続音声認識（7.1～7.3節）
tags: 
author: [京都大学人工知能研究会KaiRA](https://www.docswell.com/user/kyoto-kaira)
site: [Docswell](https://www.docswell.com/)
thumbnail: https://bcdn.docswell.com/page/VJNMPMXM78.jpg?width=480
description: Pythonで学ぶ音声認識の輪読会第9回の発表スライドです。 2023年12月14日(木) 18:30～
published: December 28, 23
canonical: https://www.docswell.com/s/kyoto-kaira/Z4Q7VJ-2023-12-28-143239
---
# Page. 1

![Page Image](https://bcdn.docswell.com/page/VJNMPMXM78.jpg)

音声認識 7章 1~3節
Connectionist Temporal Classification
京都大学工学部電気電子工学科4回生
三宅大貴
0


# Page. 2

![Page Image](https://bcdn.docswell.com/page/YE9N3N8WE3.jpg)

フルニューラルネットモデルへ
DNN-HMMのように多段的な学習を行うのではなく、一度にすべて
のモデルの学習を行いたい(End-to-End)
Connectionist Temporal Classification (CTC)
⚫ Attention encoder-decoder モデル
を扱う
⚫
1


# Page. 3

![Page Image](https://bcdn.docswell.com/page/GE8KMK8R7D.jpg)

Recurrent neural network (RNN)
(unidirectional) RNNの計算式
2


# Page. 4

![Page Image](https://bcdn.docswell.com/page/LELZ3ZR2JR.jpg)

RNNの弱点
𝑡 = 0~𝑇 まで計算した後に誤差逆伝播を行う (BPTT; Back
Propagation Through Time)
→勾配爆発や勾配消失が起きる
勾配消失の結果、初期の入力は学習にほぼ寄与しない(遠い過去の
情報を見れない)
3


# Page. 5

![Page Image](https://bcdn.docswell.com/page/4JMVDVR9JW.jpg)

Long short-term memory (LSTM)
LSTMの計算式
入力、出力、隠れ状態をそれぞれどれだけ保持するかを動的に決定
Residual構造により勾配消失を防ぐ
4


# Page. 6

![Page Image](https://bcdn.docswell.com/page/PJR242R9E9.jpg)

Gated recurrent unit (GRU)
GRUの計算式
GRUよりも省パラメータ
5


# Page. 7

![Page Image](https://bcdn.docswell.com/page/PEXD2DR37X.jpg)

Gradient Clipping
LSTMやGRUで勾配消失は防げても勾配爆発は防げない
→Gradient Clipping
6


# Page. 8

![Page Image](https://bcdn.docswell.com/page/3EKXMXRN7D.jpg)

Connectionist temporal classification (CTC)
フレームごとのラベル付けを諦める
CTCでは各時刻(フレーム)ごとに各トークンの事後確率を予測する
トークンのラベル数は音素(や仮名、単語)にブランク(空)トークン
を加えた数だけ用意する
予測されたトークン列に以下の操作 𝓑 を加えて認識結果とする
⚫ 連続するトークンを1トークンとする
⚫ ブランクトークンを除去する
例えば 𝓑 [o, −, −, o, i, i, i, −] = [o, o, i]となる
7


# Page. 9

![Page Image](https://bcdn.docswell.com/page/L735Y58ZE5.jpg)

CTCの学習
トークン列の予測結果 𝑙 の事後確率は以下で計算できる
損失関数はトークン列の事後確率に対するクロスエントロピーとする
8


# Page. 10

![Page Image](https://bcdn.docswell.com/page/87DD5DM47G.jpg)

損失関数の微分
各出力に対する勾配は以下のように求まる
𝑃 𝒍, 𝜋𝑡 = 𝑘 𝒙 は時刻 𝑡 に(𝑠 番目の)トークン 𝑘 と予測される前向き
確率 𝛼𝑠𝑡 と後ろ向き確率 𝛽𝑠𝑡 から計算される(次ページ)
9


# Page. 11

![Page Image](https://bcdn.docswell.com/page/VJPXGXRV78.jpg)

前向き確率と後ろ向き確率
10


# Page. 12

![Page Image](https://bcdn.docswell.com/page/2EVL6LRRJQ.jpg)

パスの遷移方法
11


# Page. 13

![Page Image](https://bcdn.docswell.com/page/57GXNXM6EL.jpg)

前向き確率の計算方法
𝑡 = 0 の時はブランク or 𝒍 の1文字目のみを考える(最終的に 𝒍 にな
るパスのみを考えているため)
𝒍′ は拡張トークン列
𝒍′2𝑖 = blank
𝒍′2𝑖+1 = 𝒍𝑖
それ以降は前ページの遷移にそって更新
12


# Page. 14

![Page Image](https://bcdn.docswell.com/page/4EQ8Q8R2JP.jpg)

後ろ向き確率の計算方法
𝑡 = 𝑇 − 1 の時はブランク or 𝒍 の最後の文字で終わると考える
それ以降は前向き確率と同様に更新
13


# Page. 15

![Page Image](https://bcdn.docswell.com/page/KJ42N28PE1.jpg)

まとめ
まとめ１
Recurrentな構造のモデルを使うことでEnd-to-Endで学習できる
まとめ２
CTCではブランクトークンを導入しフレームごとにトークンを予測する
まとめ３
前向き確率と後ろ向き確率によってトークン列の事後確率が計算できる
14


# Page. 16

![Page Image](https://bcdn.docswell.com/page/LE1M5M2X7G.jpg)

15


