序列到序列算法
Amazon SageMaker 序列到序列是一种指导式学习算法,其中的输入是一个令牌序列(例如,文本、音频),生成的输出是另一个令牌序列。示例应用程序包括:机器翻译 (从一种语言输入一个句子,并预测该句子在另一种语言中将是什么)、文本摘要 (输入较长的单词串并预测较短的摘要单词串)、语音到文本 (在标记中转换为输出语句的音频剪辑)。最近,这个领域中的问题已经通过深度神经网络成功地建模,这些网络显示比以前的方法有了显著的性能提升。Amazon SageMaker seq2seq 将递归神经网络 (RNN) 和积神经网络 (CNN) 模型作为编码解码器体系结构来使用。
序列到序列算法的输入/输出接口
训练
SageMaker seq2seq 需要采用 RecordIO-Protobuf 格式的数据。但是,通常情况下,需要整数而不是浮点数的标记。
seq2seq 示例笔记本
在进行预处理后,可以调用该算法进行训练。该算法需要有三个通道:
-
train
:它应包含训练数据 (例如,预处理脚本生成的train.rec
文件)。 -
validation
:它应包含验证数据 (例如,预处理脚本生成的val.rec
文件)。 -
vocab
:它应包含两个词汇表文件(vocab.src.json
和vocab.trg.json
)
如果算法在这三个通道中都找不到数据,则训练会导致错误。
推理
对于托管终端节点,推理支持两种数据格式。要使用空格分隔的文本标记执行推理,请使用 application/json
格式。否则,使用 recordio-protobuf
格式,以便使用整数编码的数据。这两种模型均支持对输入数据进行批处理。application/json
格式还允许您可视化关注矩阵。
-
application/json
:需要 JSON 格式的输入,返回 JSON 格式的输出。内容和接受类型都应该是application/json
。每个序列都将是一个带有空格分隔标记的字符串。当批中的源序列数较小时,建议使用此格式。它还支持以下附加配置选项:configuration
: {attention_matrix
:true
}:返回特定输入序列的关注矩阵。 -
application/x-recordio-protobuf
:需要recordio-protobuf
格式的输入,返回recordio-protobuf format
格式的输出。内容和接受类型都应该是applications/x-recordio-protobuf
。对于此格式,源序列必须转换为整数列表以便进行后续的 protobuf 编码。建议使用此格式进行批量推理。
对于批量转换,推理支持 JSON 行格式。批量转换需要 JSON 行格式的输入,返回 JSON 行格式的输出。内容和接受类型都应该是 application/jsonlines
。输入的格式如下所示:
content-type: application/jsonlines {"source": "source_sequence_0"} {"source": "source_sequence_1"}
响应的格式如下:
accept: application/jsonlines {"target": "predicted_sequence_0"} {"target": "predicted_sequence_1"}
有关如何将输入和输出序列化和反序列化为特定格式以进行推理的其他详细信息,请参阅序列到序列示例笔记本。
序列到序列算法的 EC2 实例建议
目前,Amazon SageMaker seq2seq 仅在 GPU 实例类型上支持,并且仅设置为在单个机器上训练。不过,您也可以使用带有多个 GPU 的实例。seq2seq 算法支持 P2、P3、G4dn 和 G5 GPU 实例系列。
序列到序列示例笔记本
有关说明如何使用 SageMaker 序列到序列算法来训练英语到德语翻译模型的示例笔记本,请参阅使用 SageMaker Seq2Seq 的英语到德语机器翻译示例