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

news2024/12/25 22:22:46
一、各种用法_查漏补缺:
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 也就是名词 名词 名词 名词 名词 ,这个纯粹随机结果

#正式的开始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 也就是冠词 名词 动词 冠词 名词 ,这个完全正确

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1002258.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Ae 效果:CC Rainfall

模拟/CC Rainfall Simulation/CC Rainfall CC Rainfall(CC 下雨)可用来模拟带景深、光效和运动模糊的下雨效果。 ◆ ◆ ◆ 效果属性说明 Drops 雨滴 用于控制雨滴的数量。 默认值为 5000。值越大,雨线越密集。 Size 大小 用于控制雨滴的大小…

【LeetCode-简单题】977. 有序数组的平方

文章目录 题目方法一:双指针方法二: 题目 方法一:双指针 class Solution { // 方法一 :双指针public int[] sortedSquares(int[] nums) {int left 0;int right nums.length -1 ;int[] res new int[nums.length];//结果集新数组…

jwt自定义表签发、jwt 多方式登录(auth的user表)

补充 # 1 接口文档编写规范:-1 描述-2 请求地址-3 请求方式-4 请求参数-headers-请求体-请求参数-5 请求编码格式-6 返回格式-示例-返回数据字段含义-其他:-错误状态码-...-接口文档编写位置-写在文件中:word,md,跟前…

MySQL从入门到精通【实践篇】之使用Sharding-JDBC 分库分表详解

文章目录 0. 前言本文技术组件版本基本介绍 2. 使用和配置:步骤1 引入依赖步骤2 配置数据源和分片策略步骤3 核心代码MybatisPlusConfig 核心配置OrderServiceOrderServiceImplOrderInfoOrderMapperOrderControllerBaseMapper 3. 数据库分片配置在我的demo工程中大家…

【2023】基于docker 实现部署jar包项目(包括单个和多个一起部署)

建议学习本博客之前,需要对docke的基本命令有过学习; 目录 前言1、项目打包2、编写Dockerfile文件2.1、单个jar部署🍕Dockerfile文件常用命令 2.2.1、编写一个Dockerfile 文件格式制作镜像 2.1.2、执行docker命令2.2、多个jar一起部署到docke…

电脑提示“Windows Boot Manager boot failed”怎么办?

如果主引导记录(MBR)损坏,则会出现此错误消息“Windows Boot Manager boot failed”。因此,Windows 10引导管理器未能找到操作系统加载程序可能是由于MBR损坏。损坏MBR的原因可能是恶意软件感染或关闭电脑时使用方法不当。那么,Windows提示“…

【iOS】push与present Controller的区别

文章目录 前言一、push方法二、pop方法三、present方法四、dismiss方法五、dismiss多级的方法举例动画 前言 iOS推出与退出界面有两种方式——push与present,接下来笔者分别介绍这两种方式 一、push方法 SecondViewController *second [[SecondViewController all…

运行ORB-SLAM3,整体感觉还不错

安装文档,可以参考 https://blog.csdn.net/u014374826/article/details/132013820 运行测试 双目IMU 可以参考官方文档 Running ROS example: Download a rosbag (e.g. V1_02_medium.bag) from the EuRoC dataset (http://projects.asl.ethz.ch/datasets/doku.ph…

Docker笔记-概念安装简单使用

概念 docker通用词汇。 镜像:Build,创建一个镜像。 仓库:Ship,从仓库和主机上运输镜像。 容器:Run,运行的镜像就是一个容器。 安装 Windows上安装 Docker对win10有原生的支持,win10下的是…

zemax优化功能

1、三种优化方法 zemax的三种优化方法中,局部优化会找到局部的极小值点,全局优化会找到整体的最小值点。 锤形优化适用于先用全局优化找到大概值后,进一步完善光学系统 对于评价函数单调或者局部最小值就是全局最小值的情况,使…

1976~2020年青藏高原典型冰川及冰湖遥感监测数据集

冰川面积是反应气候变化最直接的指标之一。在全球变暖的大背景下,对于评估冰川融化造成的生态、全球气候变化和水资源价值评价等问题十分重要。本文针对受西风和印度洋夏季风影响下的青藏高原冰川及其末端冰湖的变化特征,制作了近44年来时相相对连续的冰…

使用LlamaIndex构建自己的PandasAI

推荐:使用 NSDT场景编辑器 快速搭建3D应用场景 Pandas AI 是一个 Python 库,它利用生成 AI 的强大功能来增强流行的数据分析库 Pandas。只需一个简单的提示,Pandas AI 就可以让你执行复杂的数据清理、分析和可视化,而这以前需要很…

为特征向量数据(1D数组)叠加噪声实现数据增强

为特征向量数据(1D数组)叠加噪声实现数据增强 日期作者版本备注2023.09.11Dog TaoV1.0完成文档的初始版本。 文章目录 为特征向量数据(1D数组)叠加噪声实现数据增强背景介绍叠加噪声的主要方法高斯噪声(Gaussian Nois…

移动机器人(浙大)(待补充)

目录 1.简介 1.1分类 1.2执行模式 2.运动学建模 2.1简述 2.2建模 2.2.1分量叠加 3.导航规划 ​编辑 4.路径规划 1.简介 1.1分类 按移动方式:轮式、履带式、足式、躯干式 1.2执行模式 未知的环境中构建局部地图/已知环境则有地图,根据环境和定位信息进…

AtCoder Beginner Contest 319(D-G)

D.Tasks - AtCoder Beginner Contest 319 (1)题意 给你一个M行得框框和N个单词,每个单词有一个宽度,每个单词之间应该用一个空格隔开,首位单词不需要,问至少需要多宽才能使得单词不会超过M行。 &#xff08…

Batch normalization和Layer normalization

深度学习的归一化方法 1 归一化的目的 当我们使用梯度下降法做优化时,随着网络深度的增加,输入数据的特征分布会不断发生变化,为了保证数据特征分布的稳定性,会加入Normalization。从而可以使用更大的学习率,从而加速…

快速搭建:对象存储平台MinIO

简介:MinIO 是一个高性能的对象存储服务器,兼容Amazon S3云存储服务。适用于大数据存储和用于构建私有云的场景。作为一个对象存储服务,它基于Apache License 开源协议,兼容Amazon S3云存储接口。适合存储非结构化数据&#xff0c…

【软件分析/静态分析】chapter8 课程11/12 指针分析—上下文敏感(Pointer Analysis - Context Sensitivity)

🔗 课程链接:李樾老师和谭天老师的: 南京大学《软件分析》课程11(Pointer Analysis - Context Sensitivity I)_哔哩哔哩_bilibili 南京大学《软件分析》课程12(Pointer Analysis - Context Sensitivity II&…

PCL入门(四):octree简单使用

目录 1. 八叉树(Octree)2. 简单使用 参考博客《三维点云数据的两种结构Kdtree和Octree》和《八叉树》 1. 八叉树(Octree) 只需要考虑三维情况下的八叉树的情况,如下 设置最大的递归深度;找出场景的最大尺寸,并据此创建第一个立方体若未到达…

linux安装jdk1.8

1.下载jdk安装包: https://www.oracle.com/cn/java/technologies/downloads/#java8-windows 2.创建java文件夹: mkdir /usr/local/java3.上传安装包并解压: tar -xzf jdk-xxx.tar.gz4.修改profile文件: vim /etc/profile在文…