jojonki / arXivNotes

IssuesにNLP(自然言語処理)に関連するの論文を読んだまとめを書いています.雑です.🚧 マークは編集中の論文です(事実上放置のものも多いです).🍡 マークは概要のみ書いてます(早く見れる的な意味で団子).
https://github.com/jojonki/arXivNotes/issues
195 stars 8 forks source link

2018: PyText: A Seamless Path from NLP research to production #172

Open jojonki opened 5 years ago

jojonki commented 5 years ago

PyText: A Seamless Path from NLP research to production Ahmed Aly, Kushal Lakhotia, Shicong Zhao, Mrinal Mohit, Barlas Oguz, Abhinav Arora, Sonal Gupta, Christopher Dewan, Stef Nelson-Lindall, Rushin Shah
https://arxiv.org/abs/1812.08729 Blog: https://code.fb.com/ai-research/pytext-open-source-nlp-framework/ Github: https://github.com/facebookresearch/pytext Doc: https://pytext-pytext.readthedocs-hosted.com/en/latest/

概要

DNNベースのNLPをモデル化するためのPyTorchベースのフレームワークPyTextの紹介.experimentationとproductionの両場面に対して,モデルコンポーネントのシンプルで拡張できるインタフェースと,最適化されたCaffe2の実行エンジンを通してモデルのエキスポートができる.PyTextによってexperimentationとproductionのワークフローをPyTextを通して行うことにより,優れたモデルアイデアをすばやく作り,productionフェーズにシームレスに持っていくことができる.

イントロ

ニューラルネットを作るにあたって,experimentationとproductionには要件のギャップがある.Define by Runのフレームワーク(PyTorch,TensorFlow Eager,Chainer)とかは動的グラフが作れて開発やデバッグが行いやすいが,推論時のオーバーヘッドが大きく,production時には課題となる.静的グラフを構築するDefine and Run形式のCaffe2やTensorflowでは,使うのが大変であり,実験期間は長くなる.NLPのモデルは動的であることが多く,静的グラフではなかなか難しい.

そこでPyTextはPyTorch 1.0を使って,下記の達成を狙っている.

  1. 新しいもモデルのアイデアを簡単に早く実験できる
  2. 最小限の負荷でビルド済みモデルを簡単に利用できる
  3. 研究者とエンジニアがビルド,評価するにあたってクリアなワークフローを定義し,最小限のコストでプロダクションにモデルを展開できる
  4. デプロイしたモデルの推論時に高いパフォーマンスを保証する(低遅延,高スループット)

他のフレームワークもあるが,欠点がある.

フレームワークデザイン

PyTextでは,データハンドリング,メトリクスのレポート,学習方法,など自由にカスタムできる.またコンポーネントを自由に追加してもよいし,人気のタスクにおいてはそのまま使えるパイプラインがいくつか用意されている

コンポーネント

PyTextのすべてはコンポーネントからなる.コンポーネントはパラメタによって定義される.

screen shot 2019-01-14 at 12 04 34 pm

現在は下記のコンポーネントがある.

データオーバービュー

TrainとPredictの2モードがある.Trainでは,Data Handlerを通してバッチを生成し,学習と評価を行える.その後,学習モデルはPyTorchフォーマットでシリアライズされ,静的なCaffe2グラフにも変換できる.Predictでは学習済みモデルを読み込み,与えられたテストデータに対する予測を行う.

モデリングサポート

用語

モデル概要

モデルを,Token Embedding,Represenatation,Decoder,Output layersに分割した.各Moduleは保存可能で,Module毎に他モデルから再利用できたりする.それぞれ説明していく

これらのmodulesはベースの実装から構成されており,簡単に拡張できる

マルチタスクモデル学習

マルチタスク学習もサポートする(Joint Learning).Modules間でパラメタ共有ができる.マルチタスクにおいて下記を想定している.

  1. n個のタスクがある場合,n個のデータソースを指定する.
  2. マルチタスク設定で再利用するためには,シングルタスクのシナリオで実装されている必要がある

マルチタスクモデルの例

Figure 3には文を入力して,文書のクラス予測と文に対するタギングする例.

screen shot 2019-01-14 at 12 55 58 pm

Figure 4には,query-documentの関係性を学習するタスク.個別にqueryとdocumentの分類タスクを行うことで,学習表現のロバスト性を向上させることができる.

screen shot 2019-01-14 at 12 56 05 pm

Model Zoo

PyTextはNLPに特化.サポートしているモデルの種類を以下の通り.

Production Workflow

screen shot 2019-01-14 at 1 05 15 pm

From Idea to Production

上記ステップに沿って,アイデアからProductionへと移行できる.大まかな流れとして,まずPyTextでモデルを実装し,オフラインのテストデータで様子を見る.そして,PyTorchベースの推論サービスをpublishし,小規模でライブトラフィックのデータで評価.次に自動でそのモデルをCaffe2のネットに出力.操作フローが複雑だったり,カスタムなデータ構造によってPyTorch 1.0経由による変換はサポートされていない場合がある.そういったときはPyTorch C++ APIを利用し,torch.nn.Moduleというクラスを書き直し,Caffe2オペレーターにラップできるようにする.そして,モデルをCaffe2のprediction serviceとして,publishし,ライブトラフィックを捌くようにする

ベンチマーク

screen shot 2019-01-14 at 1 12 12 pm

PythonとC++モデル(Caffe2エキスポート済みモデル or PyTorch C++ APIで書き直されたもの)を比べた.実験は,CPUのみのマシンで行った.JointBiLSTMにおいては,劇的に改善.RNNGにおいては,わずかに改善.しかしproductionの環境においてPythonがサポートされていないことも多いので,十分に有用.

Production Challenges

データの前処理

PyTorchの1つの制約に,文字テンソルをサポートしていないことがある,つまり,文字操作やindexingは,モデルの外で行う必要がある.そこでC++の特徴化ライブラリ(現在はPyTextのオープンソースリポジトリには含まれていない)を書いた.これはPybindでアクセス可能であり,Figure 6に示すように,ランタイムのサービスの一部として,推論時にも利用できる.このライブラリは生データを下記のように前処理する.

下記のように特徴化ライブラリはTraining/Inferenceで共有される

screen shot 2019-01-14 at 2 13 33 pm

語彙管理

モデル内で語彙の管理を行っていないという制約もある.下記の2つのソリューションを考えてみた

  1. リモートにおける特徴化サービスを利用して語彙を管理する
  2. モデルのexport後,Caffe2グラフを後処理し,その語彙をネットの前に追加する

我々は,2つ目の手法に最適化した.というのも,異なるユースケース及び言語において,学習時と推論時の語彙間における同期とバージョニングを維持するのは簡単ではないためである.// 🤔ここはこれしか書いていないのでよく分からない

Future Work

来るフィーチャーは多岐にわたる

結論

DNNベースのNLPのモデリングのためのPyTextを紹介.PyTextはPyTorch上で動作し,開発時とデプロイ時のギャップを埋めることを目的としている.アイデアをいち早く解決し,そこからシームレスに実サービスへのデプロイを静的グラフであるCaffe2モデルにexportできる.またカスタムも可能で,拡張性もある

コメント

参考

jojonki commented 5 years ago

Podcastでも解説しました https://anchor.fm/lnlp-ninja/episodes/ep18-PyText-A-Seamless-Path-from-NLP-research-to-production-e2umue