pytorch中的词性标注_seq2seq_比较naive的示例

这篇具有很好参考价值的文章主要介绍了pytorch中的词性标注_seq2seq_比较naive的示例。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、各种用法_查漏补缺:
1.关于numpy中的argmax的用法:

numpy之argmax()函数 - 知乎 (zhihu.com)

具体看这篇文章够了

二、代码+注释:

参考:

Sequence Models and Long Short-Term Memory Networks — PyTorch Tutorials 2.0.1+cu117 documentation

01 序列模型和基于LSTM的循环神经网络 - 知乎 (zhihu.com)

#这么少的训练数据?
training_data = [
    ("The dog ate the apple".split(), ["DET", "NN", "V", "DET", "NN"]),
    ("Everybody read that book".split(), ["NN", "V", "DET", "NN"])
]
import torch
import torch.autograd as autograd # torch中自动计算梯度模块
import torch.nn as nn             # 神经网络模块
import torch.nn.functional as F   # 神经网络模块中的常用功能 
import torch.optim as optim       # 模型优化器模块

torch.manual_seed(1)  
#构建一个单词到 索引index1的 字典  word_to_ix 和 词性到所有的自带你tag_to_ix
word_to_ix = {} # 单词的索引字典
for sent, tags in training_data:
    for word in sent:
        if word not in word_to_ix:
            word_to_ix[word] = len(word_to_ix)
print(word_to_ix)
tag_to_ix = {"DET": 0, "NN": 1, "V": 2} # 手工设定词性标签数据字典
#设计这个RNN模型
class LSTMTagger(nn.Module):

    def __init__(self, embedding_dim, hidden_dim, vocab_size, tagset_size):#vocab_size:词的数量
        super(LSTMTagger, self).__init__() 
        self.hidden_dim = hidden_dim

        self.word_embeddings = nn.Embedding(vocab_size, embedding_dim) #词汇表-vocab*embedding_dim维度

        self.lstm = nn.LSTM(embedding_dim, hidden_dim) #从embedding_dim -> hidden_dim的lstm

        self.hidden2tag = nn.Linear(hidden_dim, tagset_size) #从hidden_dim维度 -> tagset_size维度的linear层
        self.hidden = self.init_hidden() #自动调用init_hidden()

    def init_hidden(self): #自动调用h_0的初始化内容
        return (autograd.Variable(torch.zeros(1, 1, self.hidden_dim)),
                autograd.Variable(torch.zeros(1, 1, self.hidden_dim)))

    def forward(self, sentence):                 #运行过程
        embeds = self.word_embeddings(sentence)  #sentence需要是一个 数字 组成的数组
        lstm_out, self.hidden = self.lstm(
            embeds.view(len(sentence), 1, -1), self.hidden) #将sentence数组转换为len*1*(自动)的3维空间 ->通过 lstm
        tag_space = self.hidden2tag(lstm_out.view(len(sentence), -1)) #在将lstm_out转换为2维
        tag_scores = F.log_softmax(tag_space) #通过softmax
        return tag_scores #返回分数
#将句子转换为 对应的 数值数组:
def prepare_sequence(seq, to_ix):
    idxs = [to_ix[w] for w in seq] #将句子seq中的词汇转成数字index后 组成一个一维数组idxs
    tensor = torch.LongTensor(idxs)
    return autograd.Variable(tensor)
#生成model对象, loss_Function,optimizer对象实体
EMBEDDING_DIM = 6
HIDDEN_DIM = 6
model = LSTMTagger(EMBEDDING_DIM, HIDDEN_DIM, len(word_to_ix), len(tag_to_ix)) #模型对象
loss_function = nn.NLLLoss()  #loss_function
optimizer = optim.SGD(model.parameters(), lr=0.1) #optimizer
#一个小小的测试:
inputs = prepare_sequence(training_data[0][0], word_to_ix) #得到数值 数组inputs
tag_scores = model(inputs) #通过一个model得到的 tag_scores
print(training_data[0][0])
print(inputs)
print(tag_scores)

#用最大的数值对应的索引号去标签数据: “The dog ate the apple”
#所以,这里预测的结果是 1 1 1 1 1 也就是名词 名词 名词 名词 名词 ,这个纯粹随机结果

pytorch中的词性标注_seq2seq_比较naive的示例,人工智能,pytorch,人工智能,python

#正式的开始train
for epoch in range(300):  # 我们要训练300次,可以根据任务量的大小酌情修改次数。
    for sentence, tags in training_data:
        # 清除网络先前的梯度值,梯度值是Pytorch的变量才有的数据,Pytorch张量没有
        model.zero_grad()
        # 重新初始化隐藏层数据,避免受之前运行代码的干扰
        model.hidden = model.init_hidden()
        # 准备网络可以接受的的输入数据和真实标签数据,这是一个监督式学习
        sentence_in = prepare_sequence(sentence, word_to_ix)
        targets = prepare_sequence(tags, tag_to_ix) #targets数组也是转化为 数值 数组
        # 运行我们的模型,直接将模型名作为方法名看待即可
        tag_scores = model(sentence_in)
        # 计算损失,反向传递梯度及更新模型参数
        loss = loss_function(tag_scores, targets)
        loss.backward()
        optimizer.step()

# 来检验下模型训练的结果
inputs = prepare_sequence(training_data[0][0], word_to_ix)
tag_scores = model(inputs)
print(tag_scores)
#利用numpy中的argmax找到每一行最大值的 索引值
import numpy as np
numpy_array = tag_scores.detach().numpy()
np.argmax(numpy_array,axis=1)

#用最大的数值对应的索引号去标签数据: “The dog ate the apple”
#所以,这里预测的结果是 0 1 2 0 1 也就是冠词 名词 动词 冠词 名词 ,这个完全正确

pytorch中的词性标注_seq2seq_比较naive的示例,人工智能,pytorch,人工智能,python文章来源地址https://www.toymoban.com/news/detail-706941.html

到了这里,关于pytorch中的词性标注_seq2seq_比较naive的示例的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 深度学习笔记之Seq2seq(二)基于Seq2seq注意力机制的动机

    上一节介绍了 Seq2seq text{Seq2seq} Seq2seq 网络常用的基本结构以及在 机器翻译 任务中,关于 目标函数 与 预测概率 的描述。本节依然以 机器翻译 任务为例,对 Seq2seq text{Seq2seq} Seq2seq 中的 注意力机制 ( Attention ) (text{Attention}) ( Attention ) 进行描述。 关于 机器翻译 任务的 Seq2

    2024年02月09日
    浏览(49)
  • Seq2Seq在安全领域的应用实践

    非常感谢您委托我撰写这篇专业的技术博客文章。作为一位世界级人工智能专家、程序员、软件架构师,我会遵循您提供的目标和约束条件,以专业的技术语言,结合深入的研究和准确的信息,为您呈现一篇内容丰富、结构清晰、实用价值高的技术博客文章。 下面我将开始正文的

    2024年04月28日
    浏览(35)
  • 构建seq2seq模型的常见问题

    1. seq2seq模型,输入是一个词向量,而不是词向量列表,对吧? 是的,对于seq2seq模型,输入和输出都需要被转换成词向量形式。 对于输入来说,通常会将一个句子转换成一个词向量序列。具体地,对于每个单词或者字符,都会将其对应成一个词向量,然后将所有词向量按照它

    2024年02月06日
    浏览(38)
  • 自然语言处理: 第四章Seq2Seq

    开始之前,首先提出一个问题,电脑是怎么识别人类的命令的,首先人们通过输入代码(编码) ,带入输入给计算机然后再经过处理(解码)得到最终的命令。所以可以看到这其实是一个编码 + 解码的过程。可以看到首先我们将初始的信息通过编码,得到涵盖全局的信息的特征然

    2024年02月12日
    浏览(53)
  • 从零实现深度学习框架——Seq2Seq模型尝试优化

    本着“ 凡我不能创造的,我就不能理解 ”的思想,本系列文章会基于纯Python以及NumPy从零创建自己的深度学习框架,该框架类似PyTorch能实现自动求导。 💡系列文章完整目录: 👉点此👈 要深入理解深度学习,从零开始创建的经验非常重要,从自己可以理解的角度出发,尽

    2024年02月12日
    浏览(39)
  • 【深度学习】Transformer、GPT、BERT、Seq2Seq什么区别?

    请看vcr:https://transformers.run/back/transformer/

    2024年02月08日
    浏览(43)
  • 机器学习&&深度学习——seq2seq实现机器翻译(数据集处理)

    👨‍🎓作者简介:一位即将上大四,正专攻机器学习的保研er 🌌上期文章:机器学习深度学习——从编码器-解码器架构到seq2seq(机器翻译) 📚订阅专栏:机器学习深度学习 希望文章对你们有所帮助 在理解了seq2seq以后,开始用它来实现一个机器翻译的模型。我们先要进行

    2024年02月13日
    浏览(48)
  • 基于transformer的Seq2Seq机器翻译模型训练、预测教程

    机器翻译(Machine Translation, MT)是一类将某种语言(源语言,source language)的句子 x x x 翻译成另一种语言(目标语言,target language)的句子 y y y 的任务。机器翻译的相关研究早在上世纪50年代美苏冷战时期就开始了,当时的机器翻译系统是基于规则的,利用两种语言的单词、

    2024年02月03日
    浏览(40)
  • 【深度学习-注意力机制attention 在seq2seq中应用】

    这是一个普通的seq2seq结构,用以实现机器对话,Encoder需要把一个输入的一个句子转化为一个最终的输出,上下文context vector,然后在Decoder中使用,但这里有些问题: 如果句子很长,这个向量很难包含sequence中最早输入的哪些词的信息,那么decoder的处理必然也缺失了这一部分

    2024年02月09日
    浏览(47)
  • 深度学习笔记之Seq2seq(三)注意力机制的执行过程

    上一节介绍了 Seq2seq text{Seq2seq} Seq2seq 中注意力机制 ( Attention ) (text{Attention}) ( Attention ) 的动机,并介绍了 权重系数、 Score text{Score} Score 函数 。本节将完整介绍 注意力机制 在 Seq2seq text{Seq2seq} Seq2seq 中的执行过程。 经典 Seq2seq text{Seq2seq} Seq2seq 模型中 Context text{Context} Co

    2024年02月08日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包