書誌情報
- ICML2016
- 2015/12にarxiv投稿(arxiv版の方が内容が多いらしい)
- リンク
- Baiduの本気が伺える。
- 良い論文。258cited
概要
End2Endでの音声認識のDeep Speechの改良版。
それによってハンドクラフトの部分をなくし、多様な音、言語、アクセント、ノイズに対して強くなる。
今回の改良はHPCによって学習が7倍早くなったおかげである。
また、ただ精度を高めるだけではなく、deploy状況を考慮した工夫も追求している。
Intro
DLによってEnd2endで音声認識をやることで、ハンドクラフトをなくすことができるし、簡単に多言語対応ができる。
そこで、下記3点の改善を行なった。
- モデル
- データサイズ
- 計算スケール
先行研究
モデル
- 最近はASR(Automatic Speech Recognition)のパイプラインをDNNに置き換えるのがSotA達成している。特にCNNやRNNを使っている。
- RNNを用いたencoder/ decoderもよくあり、音声を可変長の潜在ベクトルに変換し、それをtextにdecodeする。最近の精度が高いものは、AttentionやCTClossを入れていて、pretrainしているモデルが多い。
データ
- DS1では7000hのデータを使用した。
- データ拡張としては、ノイズを追加する, 生活音をシミュレートするとうまくいくことがある。
- 既存のTTSを使って、音声 – テキストデータを生成する研究が幾つかあり、bootstrapには有効である(4時間、15時間の先行研究)
計算スケール
- 計算速度があがると試行回数が増える
- モデルの並列化、データの並列化が行われている
モデル
- 全部で11層でDS1の8倍、1sampleを使った学習に時間がかかる
- CNN 3層 + biGRU 7層 + 全結合 1層
SortaGrad
- カリキュラム学習の1つ, 1epoch目は短いsampleから入れる
Batch Norm (RNNは少し特殊)
- 収束が早い上に汎化する、γ, βは学習パラメータ
- RNNは下のレイヤーからの出力のみBNする
RNNのモデル
- GRUのほうが基本的にいい
- Simple RNNのほうが計算容量が少ないがモデルサイズを大きくできる
CNNのモデル
- 層を増やしてもあまり変わらない
- 2DだとNoisyに対して精度が上がる
CNNにStride追加 + bigram出力
- Stride追加することで、入力を少なくして時間を節約
- 出力はbigramにしないと入力がテキストより短くなり、精度が下がる
Row Convolution
- bi-directionはdeployでもつらいし計算量もいいのでやめたい
- 将来のtimestep2つ分のhの出力の重み和をすべてのRNNの上で行ない one-directionalに変更
言語モデル
- WERを向上するために、ロスにCTCの他に言語モデル、単語数を追加
Mandarin対応
- 特に大きな変更はなく、最終outputを6000種類の漢字に変換
データ
利用データ
英語と11940h 8m 発話, 中国語9400h 11m発話
パイプライン
DS1から3600h, 1400hを追加したが、その際にラベルのついていないデータのためのラベル付パイプラインを追加
- アライメント:訓練済みRNNで書き起こす
- セグメンテーション:発話を7秒平均くらいで長いspaceで切る
- Filter:Filter用のモデル?Ground Truthで単語編集距離を利用
- データ拡張:ノイズ追加をしたが、40%くらいだけにしないとダメになる。
- データ数に比例してWERは改善された
計算スケール
データ並列化
- DS1では非同期で並列化していたが、デバッグや再現性を考えて同期的SGDを利用
- GPUを増やした数だけ高速化できる
CTCのGPU化
- RNNの改善やCPU・GPU間の移動でCTCがボトルネックに
- CTCをGPU実装に
- 結果 20%の高速化
メモリ割り当て
- 音声で大きいモデルだとメモリ不足が起きる
- RNNのBP時が一番メモリを使用してしまう、特に長い音声に弱い
- メモリ割り当て部分を自作
結果
- AMTを用いて、人に書き起こしをしてもらい人と比較
- ground truthでもWER1%
- モデルサイズは大きいほどよく、十分に大きいとsimpleRNNとGRUの精度はあまり変わらない
- DS1を大きく改善した
- 1億パラメータで普通で7.73WER, noisyで13.06WER
- すごい綺麗な読み上げ:3.6WER (人間でも5.03WER)で人間超え
- アクセント別:7.55WER(人間4.85), 13.56WER(人間8.15)で人間には及ばない
- Noisy(CHiME, noisyと静かなところのpair):21.79WER(11.84)
- 中国語:短い文だとDS2が勝つ
Deploy環境
課題
- BiRNNは✕:最後までいかないと処理できない
- BeamSearch:コストが高い、中国語のように候補が多いときつい
- BatchNorm:Batchがないので厳しい
Batch Dispatch
- Batch Scheduler:リクエストごとではなくバッチで回すようにする
- 前のbatchが終わり次第、次のbatchを作る
- Latencyは増えるけどefficiencyはよくなる
16bit floating point
- inferenceは正確でなくていい可能性がある
- メモリ節約できてRNNしわわせ
- バッチサイズに併せてカーネルを最適化
ビームサーチ
- p =0.99以上だけに刈り込みを行う