Translate

2019年2月25日月曜日

ブログ記事「Lingvo: A TensorFlow Framework for Sequence Modeling for Sequence Modeling」を勝手に翻訳してみた

今朝のタイムラインに流れていたブログ記事 Lingvo: A TensorFlow Framework for Sequence Modeling for Sequence Modeling を勝手に翻訳したものです。

--------

Lingvo: シーケンスモデリングのための TensorFlow フレームワーク

  • 2019年2月23日
  • Jonathan Shen

Lingvo とは、 国際語エスペラント語 で「言語」を表します。Lingvo と命名したことは、まさにLingvoフレームワークのルーツを暗示しています - Lingvoは、機械翻訳、音声認識、そして音声合成のような言語関連タスクのためのシーケンスモデルに焦点を合わせてTensorFlowを使った一般的なディープラーニングフレームワークとして開発されました。
内部的には、Lingvoフレームワークは勢いを増し、Lingvoを使用している研究者の数はバルーンのように膨らんでいます。その結果、Lingvoを使用して作成された最先端の結果を含む出版済みの 論文 が今では多数あります。サポートされているアーキテクチャは、従来のRNNシーケンスモデルからTransformerモデルおよびVAEコンポーネントを含むモデルまで多岐にわたります。私たちの研究コミュニティの支持を示し、再現可能な研究努力を奨励するために、私たちはフレームワークをオープンソース化し、私たちの論文で使われているモデルを公開し始めています。

図1:Lingvoフレームワークの概要。評価と提供のためにモデルをインスタンス化、トレーニング、およびエクスポートする方法を概説しています。

Lingvo は共同研究を念頭に置いて構築されており、さまざまなタスクで共通のレイヤの実装を共有することでコードの再利用を促進しています。さらに、すべてのレイヤが同じ共通のインタフェースを実装し、同じ方法でレイアウトされています。これにより、よりクリーンでわかりやすいコードが生成されるだけでなく、他の人が別のタスクに対して行った改善を自分のタスクに適用することが非常に簡単になります。この一貫性を強化するには、より多くの規律 (dicipline) と共通語 (boilerplate) が必要になりますが、 Lingvo では、これを最小限に抑えて研究中の反復時間を短縮することを試みています。

コラボレーションのもう1つの側面は、再現可能な結果を共有することです。Lingvoは、チェックインモデルのハイパーパラメータ設定を集中管理する場所を提供します。これは重要な実験を文書化するのに役立つだけでなく、同一のモデルを訓練することによってあなたの結果を簡単に再現する方法を他の人に与えることになります。

def Task(cls):
  p = model.AsrModel.Params()
  p.name = 'librispeech'

  # encoder パラメータの初期化
  ep = p.encoder
  # データは240次元フレーム(80x3フレーム)で構成されており、
  # それらを個々に80次元フレームとして再解釈します。
  # 詳細は LibrispeechCommonAsrInputParams も参照のこと。
  ep.input_shape = [None, None, 80, 1]
  ep.lstm_cell_size = 1024
  ep.num_lstm_layers = 4
  ep.conv_filter_shapes = [(3, 3, 1, 32), (3, 3, 32, 32)]
  ep.conv_filter_strides = [(2, 2), (2, 2)]
  ep.cnn_tpl.params_init = py_utils.WeightInit.Gaussian(0.001)
  # Conv LSTM レイヤを無効化
  ep.num_conv_lstm_layers = 0

  # decoder パラメータの初期化
  dp = p.decoder
  dp.rnn_cell_dim = 1024
  dp.rnn_layers = 2
  dp.source_dim = 2048
  # unrolling ベースに基づく間、機能を使用する。
  dp.use_while_loop_based_unrolling = False

  tp = p.train
  tp.learning_rate = 2.5e-4
  tp.lr_schedule = lr_schedule.ContinuousLearningRateSchedule.Params().Set(
      start_step=50000, half_life_steps=100000, min=0.01)

  # Setting p.eval.samples_per_summary を大きな値に設定すると、
  # dev, devother, test, testother は完全に評価され(これらの各セットの
  # num_samplesは5000未満なので)、トレーニングサマリは5000サンプルで計算される
  p.eval.samples_per_summary = 5000
  p.eval.decoder_samples_per_summary = 0

  # オーバーフィットを防ぐために、可変重量ノイズを使用
  p.vn.global_vn = True
  p.train.vn_std = 0.075
  p.train.vn_start_step = 20000

  return p


Lingvo は NLP に焦点を当てることから始めましたが、それは本質的に非常に柔軟性があり、画像セグメンテーションや点群分類などのタスクのためのモデルはフレームワークを使ってうまく実装されています。Distillation、GAN、およびマルチタスクモデルもサポートされています。同時に、このフレームワークはスピードを犠牲にすることはなく、最適化された入力パイプラインと高速分散トレーニングを特徴としています。最後に、Lingvoはプロダクションの容易さを目指してまとめられており、モバイル推論のためのモデルの移植への明確な道筋さえあります。

コードに直接ジャンプするには、GitHubページcodelab を調べてください。Lingvoまたはそれがサポートする高度な機能の詳細については、私たちの 論文 を参照してください。
-----

個々に乗ってるコードを読む限りでは、自然言語処理系DLは基本エンコーダデコーダで、それぞれのレイヤ群をあらわすオブジェクトにパラメータをセットするだけでモデル構築ができるフレームワークのようだ。

でもね..機械学習やディープラーニングで苦労するのはモデルよりもデータの口金(くちがね)にあわせることであって、特に日本語などの分かち書きから始めないとだめな言語はとっても面倒になるのよ..そのあたりをカバーするフレームワークが本当はほしいんだけどなあ..

 

0 件のコメント:

既存アプリケーションをK8s上でコンテナ化して動かす場合の設計注意事項メモ

既存アプリをK8sなどのコンテナにして動かすには、どこを注意すればいいか..ちょっと調べたときの注意事項をメモにした。   1. The Twelve Factors (日本語訳からの転記) コードベース   バージョン管理されている1つのコードベースと複数のデプロイ 依存関係 ...