pytorch自然语言处理基础模型之七:Seq2Seq

这篇博客介绍了Seq2Seq模型的基础原理,包括Encoder和Decoder的结构,以及如何在PyTorch中实现一个简单的Seq2Seq模型。作者通过一个简单的翻译任务示例,展示了模型的训练过程和预测结果,说明了模型在处理序列到序列任务的能力。
摘要由CSDN通过智能技术生成

1、模型原理

       所谓Seq2Seq(Sequence to Sequence), 就是一种能够根据给定的序列,通过特定的方法生成另一个序列的方法。最基础的Seq2Seq模型包含了三个部分,即Encoder、Decoder以及连接两者的中间状态向量C,Encoder通过学习输入,将其编码成一个固定大小的状态向量c,继而将c传给Decoder,Decoder再通过对状态向量c的学习来进行输出。结构如图所示:
在这里插入图片描述
这里面的输入有三个:Encoder的输入, Encoder生产的隐藏状态(语义编码c),Decoder的输入(上图画的不是很准确,Decoder部分也应该包含输入)。

2、代码实现

       本文所用的数据为简单的六个词组,如下所示:

['man', 'women'], ['black', 'white'], ['king', 'queen'], ['girl', 'boy'], ['up', 'down'], ['high', 'low']

我们假设这是一个翻译模型,输入每个词组的第一个单词,经过Seq2Seq网络的训练后,模型可以给出该单词的“翻译”,例如当输入“man”时,我们希望模型给出的结果是“women”。

1. 导入需要的库,设置数据类型

import numpy as np
import torch
import torch.nn as nn
from torch.autograd import Variable

dtype = torch.FloatTensor

2. 创建数据和字典

seq_data = [['man', 'women'], ['black', 'white'], ['king', 'queen'], ['girl', 'boy'], ['up', 'down'], ['high', 'low']]
// S: 单词的开始标志
// E: 单词的结束标志
// P: 单词长度少于时间步长时用P进行填充
char_arr = [c for c in 'SEPabcdefghijklmnopqrstuvwxyz']
num_dict = {
   n:i for i, n in enumerate(char_arr)}

3. 设置网络参数

n_step = 5
n_hidden = 128
n_class = len(num_dict)
batch_size = len(seq_data)

Seq2Seq的网络设计好之后的输入序列和输出序列长度是不可变的。因此我们设置时间步长为5,当一个单词的字符长度不够5时,比如“man”,我们就用"P"将长度补齐,

4. 创建batch

def make_batch(seq_data):
    input_batch, output_batch, target_batch = [], [], [
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值