基于字符级循环神经网络的语言模型

基于字符级循环神经网络的语言模型

  本节我们介绍如何应用循环神经网络来构建一个语言模型。设小批量中样本数为 1,文本序列为 “h”、“e”、“l”、“l”、“e”。如何使用循环神经网络基于当前和过去的字符来预测下一个字符。在训练时,我们对每个时间步的输出层输出使用 softmax 运算,然后使用交叉熵损失函数来计算它与标签的误差。

  如下图所示,由于隐藏层中隐藏状态的循环计算,时间步 4 的输出 O4O_4O4 取决于文本序列 “h”、“e”、“l”、“l”。由于训练数据中该序列的下一个词为 “o”,时间步 4 的损失将取决于该时间步基于序列 “h”、“e”、“l”、“l” 生成下一个词的概率分布与该时间步的标签 “o”。

在这里插入图片描述

# 准备数据
idx2char = ['e', 'h', 'l', 'o']
x_data = [1, 0, 2, 2, 3]    # "hello"
y_data = [3, 1, 2, 3, 2]    # "onlol"
# one-hot 编码
one_hot_dir = [[1, 0, 0, 0],
               [0, 1, 0, 0],
               [0, 0, 1, 0],
               [0, 0, 0, 1]]
x_one_hot = [one_hot_dir[x] for x in x_data]
batch_size = 1
input_size = 4
hidden_size = 4
inputs = torch.Tensor(x_one_hot).view(-1, batch_size, input_size)
labels = torch.LongTensor(y_data).view(-1, 1)

在这里插入图片描述
对每个时间步的输出层输出使用 softmax 运算,然后使用交叉熵损失函数来计算它与标签的误差。

# 损失函数和优化器
criterion = torch.nn.CrossEntropyLoss()
# 定义优化器时要传入网络参数和学习率
optimizer = torch.optim.Adam(net.parameters(), lr=0.1)

在这里插入图片描述
注意:图中第 2 个 P(y=e)P(y=e)P(y=e) 应该修改为 P(y=h)P(y=h)P(y

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值