Papers

Deep Speech 2: End-to-End Speech Recognition in English and Mandarin

書誌情報

  • 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を追加したが、その際にラベルのついていないデータのためのラベル付パイプラインを追加

  1. アライメント:訓練済みRNNで書き起こす
  2. セグメンテーション:発話を7秒平均くらいで長いspaceで切る
  3. 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以上だけに刈り込みを行う
曽根岡 侑也

曽根岡 侑也

東京大学 松尾豊研究室 リサーチエンジニア
東京大学大学院工学系研究科, 松尾豊研究室卒. クロードテック株式会社CEO. IPA未踏クリエータ. Paypal Battle Hack Tokyo優勝.
Bitnami