kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 ·...

138
Kaldiツールキットを用いた 音声認識システムの構築 篠崎隆宏 東京工業大学 工学院 情報通信系 www.ts.ip.titech.ac.jp 1 20161027SP研究会

Upload: others

Post on 27-May-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

Kaldiツールキットを用いた音声認識システムの構築

篠崎隆宏

東京工業大学 工学院 情報通信系

www.ts.ip.titech.ac.jp

12016年10月27日SP研究会

Page 2: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

• 音声認識システムの仕組み

• Kaldiツールキットの概要

• 日本語話し言葉音声認識のためのKaldi用CSJレシピ

• デモ用CSJレシピを用いたチュートリアル

2

概要

Page 3: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

音声認識システムの仕組み

3

Page 4: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

音声認識システムの全体構成

4

A/D変

特徴量抽出

デコーディング Hello!

マイク

計算機

Page 5: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

特徴量抽出

• 認識性能の向上

• 認識のための計算量やメモリ量の削減

5

特徴量抽出

Time

音声信号 特徴量系列

認識に有用な特徴を認識処理に都合の良い形で抽出

Page 6: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

音声ベクトルの切り出し

6

窓(フレーム) 幅 フレームシフト

Page 7: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

メル周波数ケプストラム(MFC)

7

Mel‐Scale Filter Bank 

Windowing

|DFT|

Mel‐Filter Bank

Log

IDFT

Liftering

MFC

波形の標本値系列Speech sound• 周波数の包絡情報を抽出するケプストラム特徴量の一種

• メル尺度のフィルタバンクを用いることで、人の聴覚特性をエミュレート

• 特徴量はメルケプストラム係数特徴量(MFCC)とも呼ばれる

Page 8: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

デルタ特徴量

• 特徴量の変化を特徴量として利用

8

211

ttt

ccd

Cepstrum ct

Delta cepstrum dtDifference

Time

Page 9: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

特徴量抽出の典型例

9

16kHz sampling16bit quantization

Frame length: 32ms (=512samples/16kHz)

Frame shift: 10ms

Feature sequence(MFC etc)Dim=12, Rate=100Hz

Features with delta and delta deltaDim=36, Rate=100

Page 10: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

• 各フレームの特徴量ベクトルに、前後のフレームの特徴量ベクトルを連結して拡張

10

特徴量のスプライシング(Splicing)

65 7 8 9 5

6

4 5

6

7

6

7

8

7

8

9

8

9

10

前後の1フレームを拡張する例

Page 11: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

統計的音声認識

音声信号(特徴ベクトル系列) Oが観測されたとき、

単語系列がWである事後確率 P(W|O)

この確率を最大化する単語列 → 認識結果

(最大事後確率則)

11

OWPWW

|maxargˆ

Page 12: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

音響モデルと言語モデル

• 事後確率最大化の式をベイズの定理を用いて変形

12

WPWXPXP

WPWXPXWPW

W

VW

|maxarg

|maxarg|maxargˆ

WXP | 音響モデル:発音カテゴリが与えられた条件での特徴量の出現確率

WP 言語モデル:認識対象カテゴリの事前確率

Wmaxarg 認識デコーダ:最適解の探索

Page 13: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

隠れマルコフモデル (HMM)

• 時系列データに対する確率モデル

• 状態集合、状態遷移確率、状態出力確率により定義される

13

1 2

o

opS 1

o

opS 2

0.8 0.2

0.4

0.62状態HMMの例

状態出力確率分布

状態遷移確率

Page 14: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

HMM 音響モデル

• Left‐to‐right型HMMの利用が一般的• 自己遷移か、「次」の状態への遷移のどちらかのみ

• 出力確率分布を持たない初期状態と最終状態を用意

14

1 3 40 2

3状態 left‐to‐right HMMの例

1.0

0.8

0.2

0.7

0.3

0.9

0.1

Page 15: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

混合ガウス分布モデル(GMM)• 複数のガウス分布を重み付きで重ねることで、複雑な分布の表現を可能としたもの

15

i

iiii SXNwXGMM ,|

iw

iN: 混合重み

: 要素ガウス分布(平均 μi 分散共分散行列 Si )

0.11

M

mkw

Page 16: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

アライメントと状態系列

• アライメント:HMM状態と特徴量系列の対応関係

• 状態系列:アライメントに対応した初期状態から最終状態までの状態遷移の道のり

16

s1 s3s5s0 s2

HMM

s4

時刻

Page 17: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

「隠れ」マルコフモデル

• 特徴量系列が与えられても、対応する状態系列は一意には定まらない

• 状態が外から見ると隠れているので「隠れ」マルコフモデル

17

特徴量系列

時刻 T

s1 s3s4s0 s2

HMM

0,1,1,1,1,1,2,2,2,3,4

0,1,1,2,2,2,2,2,3,3,4

0,1,1,1,2,2,2,3,3,3,4

状態系列特徴量と状態のアライメント

Page 18: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

• 初期状態から最終状態へたどるパスに沿って遷移確率と出力確率を積算

• それをすべてのパスについて計算し、和をとる

18

HMMによる確率の計算

NsNssssPsoPssPOP tFinSSS

TFintt

T

ttt ,,2,1,1,0,||| 0

11

長さTの特徴量系列 O=<o1, o2,…,oT> の確率:

S=<0, s1, s2,…,sT, N+1>, SS は全ての可能な状態系列

1 3 40 21.0

0.8

0.2

0.7

0.3

0.9

0.1

Page 19: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

音素モデルと発話HMMの合成

• 音素モデル(大語彙音声認識で一般的)

• 各音素を1つのHMMで表現

• 単語や文章は、音素HMMを繋げて表現

19

/i/

/h/

はい

/h/ /a/ /i/

/a/

Page 20: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

音素モデルのコンテキスト依存化

• 調音結合:同じ音素でも前後の音素に影響されてスペクトルが異なる

• トライホンモデル:音素モデルを前後の音素に応じて場合分けすることで、高精度化する

20

/a/a+s /a/ (後ろが/s/)

s‐a+g /a/ (前が/s/で後ろが/g/)g‐a+o /a/  (前が/g/で後ろが/o/)

:

a       s       a      g       a        o

モノフォン(mono phone)

トライフォン(tri phone)

Page 21: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

状態共有トライホン

21

Q

Yes No

YesNo

QQ

Q Q a -a+k

a -a+p

i-a+k

y-a+s

j-a+t

Q

Q

Yes No

YesNo Yes

No

Q

QQ

Q QQ

分類木

/a/の第三状態の分類木

• クラスタリングに基づき状態を共有化

分類木

/a/の第一状態の分類木

Page 22: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

Feature (Constrained) MLLR

22

S

SP XP

X

bA XXfS

仮定:1. データX(話者Xさんの音声)の分布 P(X) は分かっているが, 

実際に扱うデータ(話者Sさんの音声) Sは違う分布に従う2. SはXに対してアフィン変換を適用したものである3. アフィン変換のパラメタ Aと bは未知

最尤法によりAと bを推定、データSに逆変換をかけることで分布 P(X)とのミスマッチを解消

Page 23: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

• 話者適応技術を応用することで、学習時における話者の違いを正規化

23

話者適応学習(SAT)

話者正規化データ

話者Sのデータ

話者Bのデータ

話者Cのデータ

モデル学習に利用

Page 24: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

多層パーセプトロン(MLP)• 構成ユニット(神経細胞に相当)

• 多層パーセプトロンはユニットが集まったレイヤーが多階層に積み重なったもの

24

iii bxwhy

h: activation functionw: weightb:bias

2x

y

ix1x

1x 2x nx

1y my

出力層

入力層

隠れ層

Page 25: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

HMM状態出力分布へのMLPの利用

25

s1 s3s4s0 s2

MLP‐HMM

s1 s3s4s0 s2

GMM‐HMM

Softmaxlayer

sp

XsMLPspXspsXp |||

XGMMsXp s|

Page 26: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

音素HMMでのMLPの利用

26

/a/ /i/ /N/

Softmax

Sigmoid

Sigmoid

Input speech feature

Start End

Page 27: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

学習の枠組み

学習用データベース

正解出力

学習用サンプル(入力データ)

差が小さくなるようにパラメタWを調整する

ネットワークによる推定値

27

Page 28: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

最急降下法によるパラメタ推定

• 最急降下法ではn次元の変数Wを入力とする関数f=f(W)の局所最小解を以下により求める

1. Wの初期値をW0決める

2. 次式によりWの各要素を更新する

3. 収束が得られるまでステップ2を繰り返す

t

tt wWfww

1 :Learning rate (小さな正の数)

28

Page 29: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

3. ネットワークの出力側から入力側に向かって

順に を伝搬させていけば、フォワードプ

ロパゲーションの結果と合わせることで全ての

重みについての偏微分が効率的に求まる

jj a

E

バックプロパゲーション

• MLPにおける偏微分の評価を効率的に行う方法

ijw

jkw

ii

ijj

jj

xwa

ay

xi

j

jjkk

kk

xwaaz

i

jij

j

jij

xaE

wa

aE

wE

1.重みwjiの誤差関数Eへの影響はajを

必ず経由することから、以下が成り立つ

j

k

k kj aa

aE

aE

2. 和ajの誤差関数Eへの影響は、yjにつながるい

ずれかのユニットを必ず経由することから、以下

が成り立つ。すなわちakが求まっていればajは

容易に求まる

jj a

E

逆向に伝搬させる

yj

zk

29

Page 30: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

制約付きボルツマンマシン(RBM)

• 2部グラフの構造を持つボルツマンマシンで、片側が全て観測変数(可視層)、他方が全て隠れ変数 (隠れ層)であるもの

30

h1 h2

v1 v2

h3

v3 v4 可視層

隠れ層

3214321 ,,,,,, hhhvvvvS

RBMの例

)( sigmoid)|1(),( sigmoid)|1(

bias :,,),(,

ij

ijjiji

ijij

jii j

jjiiji

jiji

awhvpbwvhp

bahbvahwvE

hv

hv

Page 31: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

RBM事前学習を用いたDNNの学習

31

④ DNNの初期化

Softmax layerSupervision signal

入力パターン入力パターン=v0

h0 = v1

h1 = v2

⑤ DNN教師付き学習

“事前学習” “最適化”

RBM

RBM

RBM

Page 32: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

DNN‐HMM音響モデルの学習

1. GMM‐HMMを通常の手順で学習

2. 全学習データについて、HMM状態のフレームアライメントを求める

3. 入力特徴量からHMM状態を推定するDNNを学習。入力はセグメント特徴量とするのが一般的

4. GMM‐HMMのGMMをDNNに置き換えDNN‐HMMを得る

5. (DNN‐HMMを用いた再アライメント)

32

定数:,||| CCsP

xsPxPsP

xsPsxPt

ttt

t

tttt

Page 33: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

N‐gram言語モデル

• 単語出現の条件付き確率のコンテキストを直近のN‐1単語に限定したモデル

33

T

ttNtt

T

ttt

TTT

wwwPwP

wwwPwP

wwwwPwwwwPwwwPwwPwPwwwwP

2111

2111

1213214213121321

|

|

||||

N‐gram近似(N‐1単語以前のコンテキストを無視)

例(2‐gram):

例(3‐gram):

P(本日は晴天なり) = P(本日)P(は|本日)P(晴天|は)P(なり|晴天)

P(本日は晴天なり) = P(本日)P(は|本日)P(晴天|本日は)P(なり|は晴天)

Page 34: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

デコーディング

34

HMM音響モデル

発音辞書N‐gram

言語モデル

• 各種モデルを統合して巨大な探索空間を構成• 最小コストパス探索問題を解くことで認識単語列を求める

Page 35: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

Kaldiツールキットの概要

35

Page 36: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

Kaldi 音声認識ツールキット

• 歴史:• 2009年のJohns Hopkins University workshopが起源

• 国際的な開発チームにより非常に活発に開発が継続されている

• 最新の音声認識技術が多く取り入れられている

• 入手• Githubから無料で配布

• http://kaldi‐asr.org/doc/index.html

• Apache license, version 2.0 

36

git clone https://github.com/kaldi-asr/kaldi.git kaldi --origin upstream

Page 37: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

Kaldi実行に必要な計算機のスペック

• 大語彙認識システムを構築する場合の例

37

CPUCore i7

メモリ32GByte

GPU*GeForce GTX 970

*ゲーム用のGPUを科学

技術計算に用いるのはメーカーの保証外(自己

責任)。動作保証が必要な場合はTesla K20Xなど

*ディープニューラルネットワーク(DNN)の学習を行うのにGPUはほぼ必須*Kaldiのインストールの前にCUDAをインストール*コマンドの動作を試してみるだけならノートパソコンでも可

Page 38: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

Kaldiツールキットの構成

38

Kaldi独自コマンド

(src)

外部ツールキットOpenfst, IRSLM, etc.

(tools)

各種認識システム用スクリプト群(レシピ)英語、日本語、耐雑音、etc.

(egs)

Page 39: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

Kaldiのインストール

pikaia1 $ cd kaldi/pikaia1 $ lsCOPYING  INSTALL  README.md  egs misc src tools  windowspikaia1 $ less INSTALL # インストール手順の説明を読む

pikaia1 $ cd tools/ # 外部ツールキットの自動ダウンロードとコンパイル

pikaia1 $ make ‐j 4 pikaia1 $ cd ../src/ # kaldiコマンドのコンパイル

pikaia1 $ ./configure pikaia1 $ make  depend  –j 4 pikaia1 $ make  –j  4

39

Page 40: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

一部手動ダウンロードの必要なツール

• 大部分の依存ツール(openfst等)はtoolsディレクトリに自動でダウンロードされインストールされますが、一部ライセンスの関係で手動ダウンロードの必要なツールもあります

• SRILMのインストール例• SRILMのソースコードを入手

• Toolsディレクトリに設置

$ mv srilm.tgz kaldi/tools• Kaldiに用意されているインストーラを用いてインスト―ル

$  cd kaldi/tools$ ./install_srilm.sh

40

http://www.speech.sri.com/projects/srilm/

Page 41: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

Kaldiにおける入出力

• パイプラインが多用されている

• 各種ファイルをKaldi独自のark形式で保存

• Rspecifier/Wspecifierによる入出力の統一的な取扱い

41

Page 42: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

データの読み込み:Rspecifier

42

rspecifier 意味

ark:foo.ark アーカイブファイルfoo.arkを読み込む

scp:foo.scp スクリプトファイルfoo.scpを読み込む

ark:- 標準入力から入力する

ark:gunzip –c foo.ark.gz| 圧縮されたfoo.ark.gzを読み込む

Page 43: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

データの書き込み:Wspecifier

wspecifier 意味ark:foo.ark アーカイブをfoo.arkに書き込む

scp:foo.scp スクリプトをfoo.scpに書き込む

ark:- (バイナリ形式で)標準出力に出力する

ark,t:- テキスト形式で標準出力に出力する

ark,t:|gzip –c > foo.gz テキスト形式の出力を圧縮しfoo.gzに書込

ark,scp:foo.ark,foo.scp アーカイブ・スクリプトの両形式で同時に書込

43

Page 44: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

日本語話し言葉音声認識のためのKaldi用CSJレシピ

44

Page 45: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

CSJレシピを用いた日本語音声認識システムの構築

• KaldiがインストールされたLinuxマシン• 日本語を扱うためnkfも必要

• 日本語話し言葉コーパス(CSJ)• 音声データはKaldiに含まれていないので別途入手

• CSJは国立国語研究所より購入可能

http://pj.ninjal.ac.jp/corpus_center/csj/

• モデル学習に必要な時間• フルの学習を行う場合、先のスペックのPCで3‐4週間

45

用意するもの

Page 46: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

CSJレシピについて

• 東工大篠崎研究室メンバーとアメリカMERL研究所渡部により共同開発

• DNN構造や学習条件などのシステムパラメタは東工大のスーパーコンピュータTSUBAME2.5を用い、進化計算により最適化

• CSJ標準評価セットで91%超の認識精度を実現

46

Page 47: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

CSJレシピのディレクトリ構成

47

egs

csj

conf

local

steps

utils

# 独自の処理を行うためのスクリプト

# 他のレシピと共通のスクリプト

# 他のレシピと共通のスクリプト

# 設定ファイル

s5 cmd.sh    path.sh     run.sh

メイン実行スクリプト

ジョブ投入設定スクリプト

パス設定スクリプト

Page 48: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

事前設定

• cmd.sh• バッチジョブシステム実行かローカル実行かを指定する

(PCでローカル実行の場合はrun.plの使用を指定)

• path.sh• Kaldiパッケージをインストールした場所等の設定

• run.sh• CSJデータのパス(CSJDATATOP)• CSJのバージョン(CSJVER)

48

Page 49: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

49

CSJレシピの学習プロセス

CSJ

初期アライメント

MFCC

MonoHMM

TriHMM

SATHMM

DNNHMM

S‐DNNHMM

Splicing(±4)

LDA(40x117)

MLLT(40x40)

アライメント

アライメント

アライメント

アライメント

ラティス

MFCC+Δ+ΔΔ

TriHMM

アライメント

Splicing(±17)

(demoでは±5)

dim=13 dim=39

dim=40

dim=40

dim=1400

01

02

03

00

04

08

09

07

(青い数字はcsj_demoのステップ番号)

FMLLR(40x41)

Page 50: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

DNN音声認識システムの構築と認識実験

50

pikaia1 $pikaia1 $pikaia1 $pikaia1 $ nohup ./run.sh >& run.log &# Wait 3‐4 weeks ……………………………………………………. ………………………………………………………………………………..………………………………………………………………..…………………….

Page 51: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

認識結果の確認

• GMM‐HMM, DNN‐HMMの各学習ステージ毎に認識評価が自動で行われている

• GMM‐HMM (tri‐phone)の単語誤り率の確認

less exp/tri3/decode_eval1_csj/wer_10 • DNN‐HMM(系列学習)の単語誤り率の確認

less exp/dnn5b_pretrain‐dbn_dnn_smbr_i1lats/decode_eval1_csj/wer_10

51

正解単語数

削除誤り挿入誤り置換誤り

正解単語数

誤認識単語数

単語誤り率

)(WER

Page 52: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

CSJ以外のレシピについて

• データの入手先• 多くのデータは有料入手先:LDC等https://www.ldc.upenn.edu/

• 一部無料のデータありtedlium, voxforge, etc.

• 実行時の注意• SWB等レシピ開発がクラスタマシン上で行われているものがあり、デフォルトの並列実行数のままPC上で実行すると過負荷でマシンが落ちる。。。

52

Page 53: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

デモ用CSJレシピを用いたチュートリアル

53

Page 54: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

• 概要:• ノートパソコンで手軽に動作確認できるように使用するデータをぎりぎりまで切り詰め、また初心者の学習用に各コマンドを独立して試せるようにしたもの

• デコーディングの際にラティスを作成しないようにしている以外は、基本的に一般公開版と同じ動作手順

• 入手方法• 篠崎研究室のホームページで公開していますhttp://www.ts.ip.titech.ac.jp/demos/index.html

54

デモ用CSJレシピ(csj_demo)

*大学の組織改革で、近いうちにURLを変更する予定です私の所属は東京工業大学・工学院・情報通信系です

Page 55: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

メインスクリプトと確認用スクリプト

• メインスクリプト• ファイル/ディレクトリ名の番号順にスクリプトを実行することで、GMM‐HMMおよびDNN‐HMMの学習とそれらを用いた認識が実行される

• ファイル名にsynopが含まれているスクリプト• 基本となるコマンドをコマンドラインから手で入力して動作を確認するためのもの

• 実行結果は全てsynoptmpディレクトリに保存され、後段ステップには影響しない

55

Page 56: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

各ステップの概要

A) 00_*:データの前処理と特徴量抽出B) 01_* ‐ 06_*:GMM‐HMMの学習C) 07_* ‐ 09_*:DNN‐HMMの学習

56

Page 57: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

A)データの前処理と特徴量抽出

57

Page 58: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

本ステップの概要

1.sdbファイルからラベルファイルを作成

2.言語モデルの学習

3.音声特徴量の抽出

58

Page 59: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

実行方法

59

$ cd  ~/kaldi/egs/csj_demo/s5_demo1$ ./00_0prep_csj2kaldi.sh$ ./00_1make_mfcc_cmvn.sh

Page 60: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

音素/HMM状態セットの構成

• 音素セット• 単語内の位置で場合分けしている

• Begin (e.g. a_B)• End (e.g. a_E)• Internal (e.g. a_I)• Singletone (e.g. a_S)

• HMM状態数• utils/prepare_lang.shで設定

60

Page 61: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

音声データの切り出し

• 切り出したwavデータをアーカイブ形式で保存

61

$ source path.sh$ extract‐segments ¥scp,p:wav.scp(wavデータのIDおよびパス) ¥segments(セグメントの時間情報) ¥ark:extract_segment(出力先)

実行例 (00_1mfcc_synop.shを参照)行末の¥は改行を無いことにする

Page 62: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

特徴量の抽出

• MFCC特徴量の抽出

62

$ compute‐mfcc‐feats ¥‐‐config=mfcc.conf(コンフィグファイル) ¥

ark:extract_segment(wavデータ) ¥

ark:mfcc(出力先)

実行例 (00_1mfcc_synop.shを参照)

Page 63: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

CMVN正規化係数の計算

• CMVN統計量の計算

63

$compute‐cmvn‐stats ¥‐‐spk2utt=ark:spk2utt(話者ごとの発話リスト) ¥

ark:mfcc(mfccファイル) ¥

ark:cmvn(出力先)

実行例 (00_1mfcc_synop.shを参照)

Page 64: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

Wavデータのセグメント情報の参照

64

$ wav‐to‐duration ark:extract_segment ark,t:destfile

Page 65: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

特徴量ファイルのテキスト化

65

$ copy‐feats ark:mfcc.ark ark,t:destfile

$ copy‐feats ark:cmvn.ark ark,t:destfile

(正規化ファイルも特徴量と同じフォーマット)

Page 66: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

B) GMM‐HMMの学習

66

Page 67: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

本ステップの概要

1. モノフォンの学習

2. トライフォンの学習

3. 特徴量変換(LDA,MLLT)を用いた

トライフォンの学習

4. fMLLRを用いた話者適応学習(SAT)5. bMMIによる識別学習

6. bMMI + f‐bMMIによる識別学習

67

Page 68: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

モノフォンの学習

68

Page 69: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

実行方法

69

$ cd  01_mono$ ./01_run.sh

Page 70: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

処理の流れ

steps/train_mono.sh

i. モノフォンモデルの学習準備と初期化

ii. モノフォンのEM学習

utils/mkgraph.shiii. 認識用WFSTの作成

steps/decode_nolat.sh

iv. 評価セットの認識

70

Page 71: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

i. モノフォンモデルの学習準備と初期化

1. MFCCにCMVNを適用し、動的特徴量を付加

2. 初期モデルを作成

3. 発話ごとのFSTファイルを作成(発話ラベル)

4. 初期パラメタの簡易推定1. アライメントファイル(均等分割)の作成

2. 統計量の蓄積

3. 最尤推定によるパラメタ更新

71

Page 72: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

CMVNの適用と動的特徴量の付加

72

$ apply‐cmvn ¥‐‐utt2spk=ark:utt2spk(発話と話者のマッピング) ¥scp:cmvn.scp(cmvn正規化定数のリスト) ¥scp:feats.scp(特徴量のリスト) ¥ark:‐(標準出力) | ¥add‐deltas ¥ark:‐(標準入力) ¥ark:feats_norm(出力先)

実行例 (01_synops.shを参照)

パイプで2つのコマンドを接続

Page 73: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

初期モデルの作成

73

$ gmm‐init‐mono ¥‐‐shared‐phones=sets.int(確率分布を共有する音素) ¥‐‐train‐feats=ark:feats_norm(特徴量) ¥topo(HMMトポロジー) ¥39(特徴量の次元数) ¥0.mdl(初期モデルの出力先) ¥tree(treeファイルの出力先)

実行例 (01_synops.shを参照)

Page 74: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

発話ごとのFSTファイルを作成

74

$ compile‐train‐graphs ¥tree(treeファイル) ¥0.mdl(モデルファイル) ¥L.fst(辞書のFSTファイル) ¥ark:text.int(textのint形式ファイル) ¥ark:fsts(出力先)

実行例 (01_synops.shを参照)

Page 75: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

均等分割アライメントの作成

75

$ align‐equal‐compiled ¥ark:fsts(発話ごとのFST) ¥ark:feats_norm(特徴量ファイル) ¥ark,t:align_equal_compiled(出力先)

実行例 (01_synops.shを参照)

Page 76: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

統計量の蓄積

76

$ gmm‐acc‐stats‐ali ¥0.mdl(初期モデル) ¥ark:feats_norm(特徴量ファイル) ¥ark:align_equal_compiled(アライメントファイル) ¥0.acc(出力先)

実行例 (01_synops.shを参照)

Page 77: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

最尤推定によるパラメタ更新

77

$ gmm‐est ¥‐‐mix‐up=136(総混合数) ¥0.mdl(入力モデル) ¥0.acc(入力統計量) ¥1.mdl(出力先)

実行例 (01_synops.shを参照)

Page 78: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

ii. モノフォンのEM学習

初期パラメタの簡易推定の後、EM学習を行う

① アライメントをとる

② 統計量を蓄積する

③ 混合数を増加/モデルを更新する

①から③を繰り返して学習を行う

78

Page 79: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

アライメントの計算

79

$ gmm‐align‐compiled ¥‐‐transition‐scale=1.0(遷移確率重み) ¥‐‐acoustic‐scale=0.1(音響尤度重み) ¥‐‐beam=6(beam幅) ¥‐‐retry‐beam=24(二度目のbeam幅) ¥1.mdl_bsil(モデル) ¥ark:fsts(FSTファイル) ¥ark:feats_norm(特徴量ファイル) ¥ark,t:ali.1(出力先)

実行例 (01_synops.shを参照)

Page 80: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

統計量の蓄積

80

$ gmm‐acc‐stats‐ali ¥1.mdl(モデル) ¥ark:feats_norm(特徴量ファイル) ¥ark:ali.1(アライメントファイル) ¥1.acc(出力先)

実行例 (01_synops.shを参照)

Page 81: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

混合数の増加/モデル更新

81

$ gmm‐est ¥‐‐write‐occs=2.occs(十分統計量の出力先) ¥‐‐mix‐up=136(総混合数) ¥1.mdl(モデル) ¥1.acc(統計量) ¥2.mdl(出力先)

実行例 (01_synops.shを参照)

Page 82: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

iii. 認識用WFSTの作成

• HMMの状態遷移:H、(音素コンテキスト:C)、辞書:L、言語モデル:GをそれぞれWFSTとして表現後、一つのWFST:HCLGに合成

82

HMM(H)

Context(C)

Lexicon(L)

Grammar(G)

認識用WFST(HCLG)

Page 83: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

iv. 評価セットの認識

• 認識にはラティスあり/なしの2種類の方法がある(本実習では主に実行の早いラティスなしを利用)

• ラティスあり:gmm-latgen-faster

(steps/decode_nolats.sh)• ラティスなし:gmm-decode-faster

(steps/decode.sh)• 認識結果の計算にはcompute-werを用いる

(品詞を削除するためにlocal/wer_hyp_filterを使用)

83

Page 84: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

ラティスを作成する認識(GMM‐HMM)gmm‐latgen‐faster ¥‐‐max‐active=7000(デコーダの最大アクティブ) ¥‐‐beam=11.0(ビーム幅) ¥‐‐lattice‐beam=6.0(ラティスビーム) ¥‐‐acoustic‐scale=0.083333(音響尤度の比率) ¥‐‐word‐symbol‐table=words.txt(出力シンボル) ¥HCLG.fst(FST) ¥“ark,s,cs:apply‐cmvn ‐‐utt2spk=ark:utt2spk scp:cmvn.scp scp:feats.scp ark:‐ | add‐deltas  ark:‐ark:‐ |”(特徴量) ¥“ark:|gzip ‐c > lat.1.gz”(出力先)

84

Rspecifierにパイプラインを指定している

Wspecifierにパイプラインを指定している

Page 85: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

ラティスを作成しない認識(GMM‐HMM)

gmm‐decode‐faster ¥‐‐max‐active=7000(デコーダの最大アクティブ) ¥‐‐beam=11.0(ビーム幅) ¥‐‐acoustic‐scale=0.083333(音響尤度の比率) ¥‐‐word‐symbol‐table=words.txt(出力シンボル) ¥HCLG.fst(FST) ¥“ark,s,cs:apply‐cmvn ‐‐utt2spk=ark:utt2spk scp:cmvn.scp scp:feats.scp ark:‐ | add‐deltas  ark:‐ark:‐ |”(特徴量) ¥“ark:|gzip ‐c > words.1.gz”(出力先)

85

Page 86: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

認識率の計算

compute‐wer ‐‐text ‐‐mode=present ¥ ark:ref.txt ark,p:hyp.txt

86

present: 認識結果に含まれる発話のみを評価all: 認識結果が無い場合、結果が空として集計strict:認識結果が無い場合エラー終了

正解文 認識結果

Page 87: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

バイナリ・テキスト変換

• 決定木ファイル

$  copy‐tree ‐‐binary=false tree destfile• GMM‐HMM 統計量ファイル

$  gmm‐sum‐accs ‐‐binary=false destfile hmm.acc• GMM‐HMM モデルファイル

$  gmm‐copy ‐‐binary=false hmm.mdl destfile• ラティスファイル

$  lattice‐copy ark:foo.lat ark,t:destfile$  lattice‐copy “ark:gunzip –c foo.lat.gz |” ark,t:destfile

87

Page 88: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

ファイル情報の表示

• GMM‐HMMファイル: gmm‐info foo.mdl: hmm‐info foo.mdl

• 特徴量の次元数:feat‐to‐dim scp:feats.scp ‐

• 決定木ファイル: tree‐info tree

88

Page 89: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

アライメントの確認

89

$ show‐alignments phones.txt foo.mdl ark:ali.*

Page 90: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

状態決定木ファイルのグラフ化

90

$ draw‐tree phones.txt tree | ¥dot ‐Tps ‐ Gsize=8,10.5 | ¥ps2pdf ‐ tree.pdf 

*graphvizのインストールが必要

Page 91: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

トライフォンの学習

91

Page 92: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

実行方法

92

$ cd  ../02_delta$ ./01_run.sh

Page 93: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

処理の流れ

steps/train_deltas.sh

i. 決定木の作成とトライフォンの初期化

ii. トライフォンのEM学習

utils/mkgraph.shiii. 認識用WFSTの作成

steps/decode_nolat.sh

iv. 評価セットの認識

93

Page 94: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

決定木用統計ファイルの作成

• モノフォンをもとにトライフォン統計量を蓄積

94

$ acc‐tree‐stats ¥‐‐ci‐phones=1:2:3:4:5:6:7:8:9:10(無音のID) ¥final.mdl(モノフォンの最終のモデル) ¥ark:feats_norm(特徴量) ¥ “ark:gunzip ‐c ali.1.gz|”(アライメント) ¥treeacc(出力先)

実行例 (01_synops.shを参照)

Page 95: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

決定木用質問リストの自動生成

• 統計量から音素コンテクストの質問を作成

95

$ cluster‐phones ¥treeacc(トライフォン統計量) ¥sets.int(全音素のint形式リスト) ¥questions.int(出力先)

実行例 (01_synops.shを参照)

Page 96: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

決定木状態クラスタリング

• 決定木によりトライフォン状態をクラスタリング

96

$ build‐tree ¥‐‐max‐leaves=600(最大リーフノード数) ¥treeacc(トライフォン統計量) ¥roots.int(根の定義ファイル) ¥questions.qst(質問リスト) ¥topo(トポロジー) ¥tree(出力先)

実行例 (01_synops.shを参照)

Page 97: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

状態共有トライフォンモデルの作成

97

$ gmm‐init‐model ¥‐‐write‐occs=1.occs(十分統計量の出力先) ¥tree(treeファイル) ¥treeacc(トライフォン統計量) ¥topo(HMMトポロジー定義ファイル) ¥1.mdl(モデル出力先)

実行例 (01_synops.shを参照)

• 決定木に従いトライフォン状態を共有化

Page 98: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

トライフォンのEM学習

• 基本的にモノフォンと同様

① 強制アライメントをとる

② 統計量を蓄積する

③ 混合数を増加/モデルを更新する

①から③を繰り返して学習を行う

98

Page 99: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

特徴量変換とトライフォンの再学習

• スプライシングによりフレームを連結した特徴量を作成

• LDAにより次元圧縮

• MLLTにより特徴量ベクトルの相関を削減

• 新たな特徴量でトライフォンを再学習

99

$ cd  ../03_feats_trans$ ./run.sh

実行方法

Page 100: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

話者適応学習(SAT)• 話者適応技術(fMLLR)を応用し、話者の特性を正規化した特徴量を作成

• 新たな特徴量でトライフォンを再学習

100

$ cd  ../04_sat$ ./run.sh

実行方法

Page 101: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

GMM‐HMMの識別学習

• bMMIによる識別学習

(steps/train_mmi.sh)

• f-bMMIとbMMIによる識別学習

(steps/train_mmi_fmmi.sh)

※識別学習を行うにはラティスが必要

(GMM-HMMにおけるラティスは

steps/make_denlats.shで作成する)

101

Page 102: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

実行方法

102

$ cd  ../05_mmi$ ./run.sh$ cd ../06_fmmi$ ./run.sh

※後段のDNN学習はSATモデルを元にしているので識別学習ステップは関係せず、省略可

Page 103: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

C) DNN‐HMMの学習

103

Page 104: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

本ステップの概要

1.DNN‐HMM学習用に予めfMLLRを適用したデータを作成しディスクに保存

2.DNNのプレトレーニングとファインチューニング

3.系列識別学習を用いたDNNの再学習

104

Page 105: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

fMLLRを適用したデータの作成

• 何度も使うので予め作成しておく

105

$ cd  ..$ ./07_prep_dnn.sh

実行方法

Page 106: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

プレトレーニングとファインチューニング

106

$ cd  08_dnn$ ./01_run.sh

実行方法

Page 107: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

処理の流れ

steps/nnet/pretrain_dbn.shi. RBMの積み重ねによるプレトレーニング

steps/nnet/{train.sh,train_scheduler.sh}ii. クロスエントロピーを目的関数とした

バックプロパゲーションによるファインチューニング

steps/nnet/decode.shiii. 評価セットの認識

107

Page 108: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

i. プレトレーニング

• 入力層の学習

• 隠れ層の学習

108

Page 109: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

入力層の学習

• Splice,CMVNをNnet形式にエンコード

• GB‐RBMの初期化

• Contrastive Divergence(CD)法による学習

• 学習したRBMをDBN形式に変換

109

Page 110: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

Splice,CMVNをNnet形式にエンコード

110

$ nnet‐forward ¥tr_splice5‐1.nnet(spliceの定義) ¥ark:“copy‐feats scp:train.scp ark:‐ |”(特徴量) ¥ark:‐(標準出力) | ¥compute‐cmvn‐stats ¥ark:‐(標準入力) ‐(標準出力) | ¥cmvn‐to‐nnet ‐(標準入力) ‐(標準出力) | ¥nnet‐concat ¥‐‐binary=false(出力形式の指定) ¥tr_splice5‐1.nnet(spliceの定義) ‐(標準入力) ¥tr_splice5‐1_cmvn‐g.nnet(出力先)

実行例 (01_1synop_pre‐train.sh を参照)

Page 111: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

GB‐RBMの初期化

111

$ echo "<NnetProto><Rbm> <InputDim> 440 <OutputDim> 256 <VisibleType> gauss 

<HiddenType> bern <ParamStddev> 0.1</NnetProto>" > 1.rbm.proto

$ nnet‐initialize ¥1.rbm.proto(入力層の形式) ¥1.rbm.init(出力先)

実行例 (01_1synop_pre‐train.sh を参照)

Page 112: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

CD法によるパラメタ推定

112

$ rbm‐train‐cd1‐frmshuff ¥‐‐learn‐rate=0.01(学習係数) ¥‐‐l2‐penalty=0.0002(L2正則化係数) ¥‐‐num‐iters=2(エポック数) ¥‐‐feature‐transform=tr_splice5‐1_cmvn‐g.nnet ¥ (特徴量変換)1.rbm.init(入力RBM) ¥ark:“copy‐feats scp:train.scp ark:‐ |”(特徴量) ¥1.rbm(更新したRBMの出力先)

実行例 (01_1synop_pre‐train.sh を参照)

Page 113: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

学習したRBMをDBNに変換

113

$ rbm‐convert‐to‐nnet ¥‐‐binary=true(出力形式) ¥1.rbm(入力RBM) ¥1.dbn(DBN出力先)

実行例 (01_1synop_pre‐train.sh を参照)

Page 114: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

隠れ層の学習

① 前段出力の正規化係数の計算

② BB‐RBMの初期化

③ CD法による学習

④ 学習したRBMをDBNに変換し、連結

指定した階層数になるまで①から④を繰り返す

114

Page 115: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

前段出力の正規化係数の計算

115

$ nnet‐forward ¥"nnet‐concat tr_splice5‐1_cmvn‐g.nnet 1.dbn ‐ |” ¥(入力層の情報)ark:“copy‐feats scp:train.scp ark:‐ |”(特徴量) ¥ark:‐(標準出力) | ¥compute‐cmvn‐stats ark:‐(標準入力) ‐(標準出力) | ¥cmvn‐to‐nnet ‐(標準入力) $depth.cmvn(出力先)

実行例 (01_2synop_pre‐train.shを参照)

Page 116: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

BB‐RBMの初期化

116

$ echo "<NnetProto><Rbm> <InputDim> 256 <OutputDim> 256 <VisibleType> bern

<HiddenType> bern <ParamStddev> 0.1  <VisibleBiasCmvnFilename> $depth.cmvn</NnetProto>" > depth.rbm.proto

$ nnet‐initialize ¥depth.rbm.proto(中間層の情報) ¥depth.rbm.init(出力先)

実行例 (01_2synop_pre‐train.shを参照)

Page 117: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

学習したRBMをDBNに変換・結合

117

$ rbm‐convert‐to‐nnet ¥‐‐binary=true(出力形式) ¥depth.rbm(RBM) ‐(標準出力) | ¥nnet‐concat (depth‐1).dbn(1層下までのRBM) ¥‐(標準入力) ¥depth.dbn(出力先)

実行例 (01_2synop_pre‐train.shを参照)

Page 118: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

ii. ファインチューニング

• PDF‐IDを用いたアライメントの作成

• PDFの出現回数をカウント(事前確率推定)(ベイズの定理を用いてDNN出力をHMM状態出力確率に変換するため)

• 出力層の作成

• 初期DNNの構成

• アライメントからDNN出力側データの作成

• ミニバッチを用いたバックプロパゲーション

118

Page 119: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

PDF‐IDを用いたアライメント作成

119

$ ali‐to‐pdf ¥final.mdl(モデル) ¥“ark:gunzip ‐c ali.*.gz |”(アライメント) ¥ark:pdf_ali(出力先)

実行例 (01_3synop_fine‐tuning.shを参照)

Page 120: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

PDFの出現回数のカウント

120

$ analyze‐counts ¥‐‐binary=false(出力形式) ¥ark:pdf_ali(PDF‐IDを用いたアライメント) ¥ali_train_pdf.counts(出力形式)

実行例 (01_3synop_fine‐tuning.shを参照)

Page 121: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

出力層の作成

121

$ utils/nnet/make_nnet_proto.py ¥num_fea(入力側の素子数) ¥num_tgt(出力層の数) ¥0(隠れ層の数:0=output) ¥1(隠れ層の素子数:1‐>ダミー) ¥> nnet.proto(出力先)

$ nnet‐initialize ¥nnet.proto(出力層の情報) ¥nnet.init(出力先)

実行例 (01_3synop_fine‐tuning.shを参照)

Page 122: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

初期DNNの構成

122

$ nnet‐concat ¥dbn(中間層のDBN) ¥nnet.init(出力層の情報) ¥nnet_depth.dbn_dnn.init(Nnet出力先)

実行例 (01_3synop_fine‐tuning.shを参照)

Page 123: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

DNN出力側データの作成

123

$ ali‐to‐post ¥ark:pdf_ali(PDF‐IDを用いたアライメント) ¥ark:pdf_post(出力先)

実行例 (01_3synop_fine‐tuning.shを参照)

Page 124: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

バックプロパゲーション

124

$ nnet‐train‐frmshuff ¥‐‐learn‐rate=0.008(学習率) ¥‐‐momentum=1.0e‐05(モーメンタム) ¥‐‐minibatch‐size=256(ミニバッチサイズ) ¥‐‐randomizer‐size=32768(シャッフルのバッファサイズ) ¥‐‐feature‐transform=feature_transform(入力特徴量の変換) ¥‐‐randomizer‐seed=777(seed) ¥“ark:copy‐feats scp:train.scp ark:‐ |”(特徴量) ¥ark:pdf_post(DNN事後確率) ¥in.nnet(DNN) ¥out.nnet(出力先)

実行例 (01_3synop_fine‐tuning.shを参照)

Page 125: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

学習率の扱いについて

steps/nnet/train_scheduler.sh で用いられている戦略

• クロスバリデーションセットの前エポックと現在のクロスエントロピーの値の相対改善率が規定値を下回る場合学習率を半減

• クロスバリデーションセットの相対改善率が規定値を下回ったら学習終了

125

Page 126: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

iii. 評価セットの認識

• ラティスあり:latgen-faster-mapped• 対応するラッパースクリプト: steps/nnet/decode.sh

• ラティスなし:decode-faster-mapped• 対応するラッパースクリプト: local/nnet/decode_dnn_nolats.sh(本ラッパースクリプトは公開版Kaldi内には無く、今実習のために作成したもの)

126

Page 127: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

ラティスを作成する認識(DNN‐HMM)$ nnet‐forward ¥‐‐no‐softmax=true ¥‐‐feature‐transform=final.feature_transform(特徴量変換) ¥‐‐class‐frame‐counts=prior_counts(PDFのフレームカウント) ¥final.nnet(モデル) ¥“ark,s,cs:copy‐feats scp:feats.scp ark:‐ |”(特徴量) ¥ark:‐(標準出力) | ¥latgen‐faster‐mapped ¥‐‐beam=13.0(ビーム) ¥‐‐lattice‐beam=8.0(ラティスビーム) ¥‐‐acoustic‐scale=0.0909(音響尤度の比率) ¥‐‐word‐symbol‐table=words.txt(出力シンボル) ¥final.mdl(モデル) ¥HCLG.fst ark:‐(FST) ¥“ark:|gzip ‐c > lat.1.gz”(出力先)

127

Page 128: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

ラティスを作成しない認識(DNN‐HMM)$ nnet‐forward ¥‐‐no‐softmax=true ¥‐‐feature‐transform=final.feature_transform(特徴量変換) ¥‐‐class‐frame‐counts=prior_counts(PDFのフレームカウント) ¥final.nnet(モデル) ¥“ark,s,cs:copy‐feats scp:feats.scp ark:‐ |”(特徴量) ¥ark:‐(標準出力) | ¥decode‐faster‐mapped ¥‐‐beam=13.0(ビーム) ¥‐‐acoustic‐scale=0.0909(音響尤度の比率) ¥‐‐word‐symbol‐table=words.txt(出力シンボル) ¥final.mdl(モデル) ¥HCLG.fst ark:‐(FST) ¥“ark:|gzip ‐c > words.1.gz”(出力先)

128

Page 129: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

DBN/Nnetのバイナリ・テキスト変換

129

$ nnet‐copy ‐‐binary=false foo.(dbn/nnet) destfile

Page 130: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

DNNファイルの概要表示

130

$ nnet‐info foo.nnet

Page 131: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

系列識別学習を用いたDNNの再学習

• 系列識別基準を用いたDNNパラメタの推定• 計算量は多いが、フレームベースのファインチューニングから更に認識率向上が期待できる

131

$ cd  ../09_dnn_s$ ./run.sh

実行方法

*ラティスの生成が必要steps/nnet/make_denlats.sh

*学習スクリプト本体(MPE基準)steps/nnet/train_mpe.sh

Page 132: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

Appendix

132

Page 133: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

バイナリ・テキスト形式の変換

• Kaldiでは多くのデータファイルはデフォルトではバイナリ形式で扱われる

• 入力ファイルがバイナリ形式かテキスト形式かは自動判定される

• Wspecifierを用いた出力の際ににオプション(t)で出力形式を指定できる

133

Page 134: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

バイナリテキスト変換コマンドリスト

• 特徴量ファイル(ark形式):

copy‐feats ark:foo.ark ark,t:destfile

• 特徴量ファイル(scpで読み込み元ファイルを指定):

copy‐feats scp:foo.scp ark,t:destfile

• ラティスファイル:

lattice‐copy ark:foo.lat ark,t:destfile

• ラティスファイル(圧縮形式):

lattice‐copy “ark:gunzip –c foo.lat.gz |” ark,t:destfile

• 単語リスト:

copy‐int‐vector ark:words.bin ark,t:destfile

• GMM‐HMMモデルファイル:

gmm‐copy –‐binary=false hmm.mdl destfile

134

Page 135: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

バイナリテキスト変換コマンドリスト

• GMM‐HMM統計量ファイル:

gmm‐sum‐accs ‐‐binary=false destfile hmm.acc

• Diagonal GMMモデルファイル:

gmm‐global‐copy ‐‐binary=false gmm.mdl destfile

• Diagonal GMM統計量ファイル:gmm‐global‐sum‐accs ‐‐binary=false destfile foo.acc

• DNNファイル(dbnまたはnnetファイル):nnet‐copy ‐‐binary=false foo.(dbn/nnet) destfile

• アライメントファイル:

ali‐to‐pdf final.mdl “ark:gunzip –c ali.*.gz |”   ark,t:destfile135

Page 136: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

バイナリテキスト変換コマンドリスト

• 決定木ファイル:

copy‐tree ‐‐binary=false tree destfile

• 整数形式(テキスト)の認識結果を単語に置換:

utils/int2sym.pl –f 2: word.txt int.hyp

136

Page 137: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

ファイル情報の表示

• GMM‐HMMファイル:

gmm‐info foo.mdl または、 hmm‐info foo.mdl

• GMMファイル:

gmm‐global‐info foo.dubm

• DNNファイル:

nnet‐info foo.nnet

• 音響モデルの情報:

am‐info foo.mdl

• 特徴量の次元数:

feat‐to‐dim scp:feats.scp

• 決定木ファイル:

tree‐info tree137

Page 138: Kaldiツールキットを用いた 音声認識システムの構築 · 2016-10-26 · RBM事前学習を用いたDNNの学習 31 ③ ② ① ④DNNの初期化 + Softmaxlayer

その他確認用コマンド

• アライメントの確認:

show‐alignments phons.txt foo.mdl ark:ali.* 

• 状態決定木ファイルの質問リストおよびリーフノードのPDF作成:

draw‐tree phones.txt tree | dot ‐Tps ‐Gsize=8,10.5 | ¥ps2pdf ‐ ~/tree.pdf

138