谷歌又开源了!tf-seq2seq 是一个用于 TensorFlow 的通用编码器-解码器框架(encoder-decoder framework),其可用于机器翻译、文本摘要、会话建模、图像描述等任务。
设计目标
谷歌介绍说,设计该框架的目标是希望其能满足以下目标:
通用性:我们最初是为机器翻译而开发了此框架,但之后也将其应用到很多不同类型的任务中,包括摘要、会话建模和图像描述。只要你的问题可以通过「以一种格式编码输入数据然后对其用另一种格式解码」的方式解决,那么你应该就可以使用或扩展地使用这个框架。
使用性:你可以仅用一行命令就训练一个模型。支持多种输入数据类型,包括标准的原始文本。
再现性:可以使用 YAML 文件配置训练流程和模型。这让其他人也能运行与你的模型一模一样的模型。
扩展性:代码是以一种模块化的方式构建的,这使得其易于扩展。比如,增加新类型的注意机制或编码器架构仅需要最少量的代码修改。
文档:所有的代码都使用标准的 Python docstrings 进行记录的,而且我们已经编写了能帮助你上手常见任务的指南。
良好的性能:为了代码的简洁性,我们没有试图榨干其所有性能,但该实现对于几乎所有生产和研究应用来说都已经足够快了。tf-seq2seq 也支持分布式训练,从而可在计算能力和训练时间之间进行权衡。
编码器
编码器用于读取源数据(source data),比如一个词序列或一张图像,然后产出一个在连续空间中的特征表示。比如,一个循环神经网络编码器可能会以一个词序列为输入,然后产生一个大致对应了该文本的含义的一个固定长度的向量。而一个基于卷积神经网络的编码器则可以以一张图像为输入,并生成包含了该图像的更高级特征的新内容。其中的思想是:由编码器所产生的表征可被解码器用来生成新数据,比如另一种语言的句子和图像的描述。可用编码器列表请参考:https://google.github.io/seq2seq/encoders/
解码器
解码器是基于编码器所产生的表征的生成模型。比如,一个循环神经网络解码器可以学习生成一个编码句子的另一种语言的表示。可用解码器列表请参考:https://google.github.io/seq2seq/decoders/
模型
模型定义了结合编码器和解码器的方式,以及计算和最小化损失函数的方式。模型也需要对从输入流程读取到的数据进行必要的预处理。这里实现的每个模型都是可被传递给 tf.contrib.learn Estimator 的 model_fn。可用模型列表请参考:https://google.github.io/seq2seq/models/
答疑
问:此框架和谷歌神经翻译(GNMT)相比如何?这里开源的是官方的实现吗?
答:不是,这并不是 GNMT 系统的官方开源实现。这个框架是自底向上构建的,可用于多种任务,神经机器翻译只是其中一种。我们尚未在该框架中复制 GNMT 架构,但我们欢迎这个方向的贡献:https://google.github.io/seq2seq/contributing/
相关框架
以下框架在功能上与 tf-seq2seq 类似:
OpenNMT (Torch):http://opennmt.net/
Neural Monkey (Tensorflow):https://github.com/ufal/neuralmonkey
NEMATUS (Theano):https://github.com/rsennrich/nematus
©本文为机器之心编译,转载请联系本公众号获得授权。
✄------------------------------------------------
加入机器之心(全职记者/实习生):[email protected]
投稿或寻求报道:[email protected]
广告&商务合作:[email protected]