論文メモ_1


VoiceFilter: Targeted Voice Separation by Speaker-Conditioned Spectrogram Masking
複数話者重畳音声から、特定話者の音声のみを分離する手法を提案。抽出したい話者のd-vectorと複数話者重畳音声を入力し、理想的なmaskを計算。

 

Learn Spelling from Teachers: Transferring Knowledge from LanguageModels to Sequence-to-Sequence Speech Recognition
seq-to-seq ASR modelを学習する際、別途学習したRNNLMで計算した書き起こしに対する事後確率をsoft-labelとして利用。外部LMからknowledge distillationを行う。

 

Robust neural machine translation with doubly adversarial inputs
NMTのためのadversarial exampleの生成方法を提案。encoderへの入力、decoderへの入力、いずれもadversarial inputを計算。

 

Fine-grained analysis of sentence embedding using auxiliary prediction tasks
CBOWおよびencoder-decoderでword embeddingを求め、それらがlength testやcontent test, order testといったlow level taskでどのような性能を示すか調査。(There is clearly more to be done in this area, but the authors do a good job shedding some light on what sentence embeddings can encode. We need more work like this that helps us understand what neural networks can model.)

 

Tensorflow 2.0でモデルを作成し、Tensorflow Serving(Python/C++)で動作させる

モデルの学習:
省略。tf.kerasを用いてモデルを構築する。tf.saved_model.save automatically determines a signature for the tf.keras.Model object. In the case of low-level API, see https://www.tensorflow.org/beta/guide/saved_model#exporting_custom_models .

 

SavedModelの作成:
tf.saved_model.save(model, export_dir, signature)
export_dirは、SavedModelを保存するディレクトリ。以降、saved_model/1として話を進める。
saved_model_cli show --dir saved_model/1 --tag_set serve --signature_def serving_default
などなどで、中身を確認できる。実際に値を流してテストもできる。詳しくは、
https://www.tensorflow.org/beta/guide/saved_model#details_of_the_savedmodel_command_line_interface
https://www.tensorflow.org/beta/guide/saved_model#saved_model_cli

 

TensorFlow Serving with Docker:
TF servingを起動。Dockerを使う場合は、例えば、
docker run -t --rm -p 8501:8501 --name blabla \
-v "/path/to/saved_model/1:/models/saved_model/1" \
-e MODEL_NAME=saved_model \
tensorflow/serving &
Python baseでclientを作成する場合は、以下のようになる (私のモデルの入力は、BTC Tensor)。
x = np.zeros((1, 10, 80), dtype=np.float32)
data = json.dumps({"signature_name": "serving_default",
"instances": x.tolist()})
headers = {"content-type": "application/json"}
json_response = requests.post('http://localhost:8501/v1/models/saved_model:predict',
data=data, headers=headers)
predictions = numpy.array(json.loads(json_response.text)["predictions"])

詳細は、
https://www.tensorflow.org/tfx/serving/docker
https://www.tensorflow.org/beta/guide/saved_model

 

C++:
他言語でも同様のrequestを書けばok。詳細は
https://github.com/tensorflow/serving/blob/master/tensorflow_serving/g3doc/api_rest.md
私がC++で実装した場合には、libcurlやnlohmann/jsonを用いた。


まとめ
- tf.kerasを使うとハッピーになれる。
- dockerは初めて使ったので、別の記事にまとめしたい。
- front-endもback-endも浦島太郎状態なので、勉強したい。
- curlpp (C++ wrapper around libcURL) について調べる。