论文地址:
https://arxiv.org/abs/1902.08295
【注】点击文末【阅读原文】即可访问。
View:
https://www.arxiv-vanity.com/papers/1902.08295/
Lingvo是什么?
Lingvo是在Tensorflow中构建神经网络的框架,特别是序列模型。
查看使用Lingvo的出版物列表,请在原文点击:Link。
快速入门
Docker
最简单的入门方法是使用我们提供的Docker脚本。 如果你想直接在机器上安装它,请查看下一节。
首先,安装docker。 然后,以下命令已经提供安装了Lingvo的工作shell。
代码语言:javascript复制LINGVO_DIR="/tmp/lingvo" # (change to the cloned lingvo directory, e.g. "$HOME/lingvo")
LINGVO_DEVICE="gpu" # (Leave empty to build and run CPU only docker)
sudo docker build --tag tensorflow:lingvo $(test "$LINGVO_DEVICE" = "gpu" && echo "--build-arg base_image=nvidia/cuda:10.0-cudnn7-runtime-ubuntu16.04") - < ${LINGVO_DIR}/docker/dev.dockerfile
sudo docker run --rm $(test "$LINGVO_DEVICE" = "gpu" && echo "--runtime=nvidia") -it -v ${LINGVO_DIR}:/tmp/lingvo -v ${HOME}/.gitconfig:/home/${USER}/.gitconfig:ro -p 6006:6006 -p 8888:8888 --name lingvo tensorflow:lingvo bash
bazel test -c opt //lingvo:trainer_test //lingvo:models_test
直接安装
直接安装就是上述Docker方法的替代选择。
安装的前提条件:
- TensorFlow安装(目前需要用到 tf-nightly ),
- 一个 C 编译器(官方只支持g 4.8),以及
- bazel构建系统。
建议到 docker/dev.dockerfile 查看更多详情。
运行MNIST图像模型
准备输入的数据
代码语言:javascript复制mkdir -p /tmp/mnist
bazel run -c opt //lingvo/tools:keras2ckpt -- --dataset=mnist --out=/tmp/mnist/mnist
你将会在 /tmp/mnist 文件夹获得以下文件:
- mnist.data-00000-of-00001: 53MB.
- mnist.index: 241 bytes.
运行模型
要在单机模式下运行训练器,请使用:
代码语言:javascript复制bazel build -c opt //lingvo:trainer
bazel-bin/lingvo/trainer --run_locally=cpu --mode=sync --model=image.mnist.LeNet5 --logdir=/tmp/mnist/log --logtostderr
几秒钟后,第100步训练精度应达到 85% ,结果如下所示:
代码语言:javascript复制INFO:tensorflow:step: 100 accuracy:0.85546875 log_pplx:0.46025506 loss:0.46025506 num_preds:256 num_samples_in_batch:256
工件将在 /tmp/mnist/log/control 中生成:
- params.txt:超参数
- model_analysis.txt:每层的模型大小。
- train.pbtxt:训练 tf.GraphDef
- events.*:tensorboard的事件文件。
在 /tmp/mnist/log/train 目录中,你将会获得:
- ckpt-* :检查点文件
- checkpoint :包含有关检查点文件的信息的文本文件。
运行机器翻译模型
要运行更精细的模型,你需要一个具有GPU的集群。 有关更多信息,请参阅 lingvo/tasks/mt/README.md 。
现有模型
自动语音识别
- asr.librispeech.Librispeech960Grapheme [1,2]
- asr.librispeech.Librispeech960Wpm [1,2]
图像
- image.mnist.LeNet5 [3]
语言建模
- lm.one_billion_wds.WordLevelOneBwdsSimpleSampledSoftmax [4]
机器翻译
- mt.wmt14_en_de.WmtEnDeTransformerBase [5]
- mt.wmt14_en_de.WmtEnDeRNMT [5]
- mt.wmtm16_en_de.WmtCaptionEnDeTransformer [5]
----------------
[1]: Listen, Attend and Spell. William Chan, Navdeep Jaitly, Quoc V. Le, and Oriol Vinyals. ICASSP 2016.
[2]: End-to-end Continuous Speech Recognition using Attention-based Recurrent NN: First Results. Jan Chorowski, Dzmitry Bahdanau, Kyunghyun Cho, and Yoshua Bengio. arXiv 2014.
[3]: Gradient-based learning applied to document recognition. Yann LeCun, Leon Bottou, Yoshua Bengio, and Patrick Haffner. IEEE 1998.
[4]: Exploring the Limits of Language Modeling. Rafal Jozefowicz, Oriol Vinyals, Mike Schuster, Noam Shazeer, and Yonghui Wu. arXiv, 2016.
[5]: The Best of Both Worlds: Combining Recent Advances in Neural Machine Translation. Mia X. Chen, Orhan Firat, Ankur Bapna, Melvin Johnson, Wolfgang Macherey, George Foster, Llion Jones, Mike Schuster, Noam Shazeer, Niki Parmar, Ashish Vaswani, Jakob Uszkoreit, Lukasz Kaiser, Zhifeng Chen, Yonghui Wu, and Macduff Hughes. ACL 2018.
参考
- API 文档
请在引用Lingvo时引用这篇论文。
代码语言:javascript复制@misc{shen2019lingvo,
title={Lingvo: a Modular and Scalable Framework for Sequence-to-Sequence Modeling},
author={Jonathan Shen and Patrick Nguyen and Yonghui Wu and Zhifeng Chen and others},
year={2019},
eprint={1902.08295},
archivePrefix={arXiv},
primaryClass={cs.LG}
}