BiLSTM模型实现

# 本段代码构建类BiLSTM, 完成初始化和网络结构的搭建
# 总共3层: 词嵌入层, 双向LSTM层, 全连接线性层

# 本段代码构建类BiLSTM, 完成初始化和网络结构的搭建
# 总共3层: 词嵌入层, 双向LSTM层, 全连接线性层
import torch
import torch.nn as nn# 本函数实现将中文文本映射为数字化张量
def sentence_map(sentence_list, char_to_id, max_length):"""将句子中的每一个字符映射到码表中:param sentence_list: 待映射的句子,类型为字符串或列表:param char_to_id: 码表,类型为字典,格式为格式为{"字1": 1, "字2": 2},例如:码表与id对照:char_to_id = {"双": 0, "肺": 1, "见": 2, "多": 3, "发": 4, "斑": 5, "片": 6,"状": 7, "稍": 8, "高": 9, "密": 10, "度": 11, "影": 12, "。": 13}:param max_length::return: 每一个字对应的编码,类型为tensor"""# 字符串按照逆序进行排序,不是必须操作sentence_list.sort(key=lambda c:len(c), reverse = True)# 定义句子映射列表sentence_map_list = []for sentence in sentence_list:# 生成句子中每个字对应的id列表sentence_id_list =[char_to_id[c] for c in sentence]# 计算所要填充0的长度padding = [0] * (max_length-len(sentence))# 组合sentence_map_list.append(sentence_id_list)# 返回句子映射集合,转为标量return torch.tensor(sentence_map_list, dtype= torch.long)class BiLSTM(nn.Module):"""BiLSTM模型定义"""def __init__(self, vocab_size, tag_to_id, input_feature_size, hidden_size,batch_size, sentence_length, num_layers=1, batch_first=True):"""description: 模型初始化:param vocab_size:          所有句子包含字符大小:param tag_to_id:           标签与 id 对照:param input_feature_size:  字嵌入维度( 即LSTM输入层维度 input_size ):param hidden_size:         隐藏层向量维度:param batch_size:          批训练大小:param sentence_length      句子长度:param num_layers:          堆叠 LSTM 层数:param batch_first:         是否将batch_size放置到矩阵的第一维度"""# 类继承初始化函数super(BiLSTM, self).__init__()# 设置标签与id对照self.tag_to_id = tag_to_id# 设置标签大小, 对应BiLSTM最终输出分数矩阵宽度self.tag_size = len(tag_to_id)# 设定LSTM输入特征大小, 对应词嵌入的维度大小self.embedding_size = input_feature_size# 设置隐藏层维度, 若为双向时想要得到同样大小的向量, 需要除以2self.hidden_size = hidden_size // 2# 设置批次大小, 对应每个批次的样本条数, 可以理解为输入张量的第一个维度self.batch_size = batch_size# 设定句子长度self.sentence_length = sentence_length# 设定是否将batch_size放置到矩阵的第一维度, 取值True, 或Falseself.batch_first = batch_first# 设置网络的LSTM层数self.num_layers = num_layers"""构建词嵌入层: 字向量, 维度为总单词数量与词嵌入维度参数: 总体字库的单词数量, 每个字被嵌入的维度"""self.embedding = nn.Embedding(vocab_size, self.embedding_size)self.bilstm = nn.LSTM(input_size=input_feature_size,hidden_size=self.hidden_size,num_layers=num_layers,bidirectional=True,batch_first=batch_first)# 构建全连接线性层: 将BiLSTM的输出层进行线性变换self.linear = nn.Linear(hidden_size, self.tag_size)print("=" * 100)
# 参数1:码表与id对照
char_to_id = {"双": 0, "肺": 1, "见": 2, "多": 3, "发": 4, "斑": 5, "片": 6,"状": 7, "稍": 8, "高": 9, "密": 10, "度": 11, "影": 12, "。": 13}# 参数2:标签码表对照
tag_to_id = {"O": 0, "B-dis": 1, "I-dis": 2, "B-sym": 3, "I-sym": 4}
# 参数3:字向量维度
EMBEDDING_DIM = 200
# 参数4:隐层维度
HIDDEN_DIM = 100
# 参数5:批次大小
BATCH_SIZE = 8
# 参数6:句子长度
SENTENCE_LENGTH = 20
# 参数7:堆叠 LSTM 层数
NUM_LAYERS = 1# 初始化模型
"""
model = BiLSTM(vocab_size=len(char_to_id),tag_to_id=tag_to_id,input_feature_size=EMBEDDING_DIM,hidden_size=HIDDEN_DIM,batch_size= BATCH_SIZE,sentence_length= SENTENCE_LENGTH,num_layers=NUM_LAYERS)print(model)
"""

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

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

相关文章

Android使用HttpURLConnection实现文件上传(包括图片)

1.文件上传完整代码 下面是完整的文件上传代码,复制即可使用。注意要开启子线程运行 public class UploadFileTask {/*** 上传文件到服务器,并返回服务器相应结果* param requestURL 服务器的地址* param imageUri 文件的Uri* param context* return 服…

【虚幻引擎】UE4初学者系列教程开发进阶实战篇——生存游戏案例

一、课程体系 1 学前必读 2 Character类相关基础 -人物移动控制 -动画蓝图 3 常见游戏机制基础 -碰撞器、触发器 -物体使用接口 -视角切换 4其他相关设计 -背包系统 -锻造系统 -物体破碎效果 -简易种植系统 -互动物体动画 5课程结语 二、UI部分 思维导图部分 实操部分 …

只需4500字,带你学习Python中7种基础数据类型!

Python 语言以其简洁、高效和强大的功能,成为了无数开发者和编程爱好者的首选。无论是数据分析、人工智能、网络开发还是自动化脚本,Python 都能以其优雅的语法和丰富的库支持,让编程变得更加简单而有趣。 但正如建造一座大厦需要坚实的地基…

如何借助AI在20分钟内写一个springboot单表的增删改查

目录 1. AI工具介绍2. 写代码的正确顺序2.1 编写 Entity 类:2.2 编写 Mapper 接口:2.3 编写 Mapper XML 文件(如果使用 MyBatis):2.4 编写 Service 接口:2.5 编写 Service 实现类(ServiceImpl&a…

【pyhton学习】深度理解类和对象

🎬 鸽芷咕:个人主页 🔥 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 文章目录 一、一切皆对象1.1 对象的概念1.2 如何创建类对象1.3 类型检测 二、属性与方法2.1 如何查看属性与方法2.2 属性和方法…

postgresql日志的配置

postgresql日志的配置 一 常用日志参数设置 1 在哪里做日志 logging_collector = on/off这个参数启用日志收集器,是否将日志重定向至文件中。默认是off。设置需要重启库 log_directory当logging_collector被启用时,这个参数决定日志文件将被在哪个目录下创建。默认是log。设…

C语言 | Leetcode C语言题解之第220题存在重复元素III

题目&#xff1a; 题解&#xff1a; struct HashTable {int key;int val;UT_hash_handle hh; };int getID(int x, long long w) {return x < 0 ? (x 1ll) / w - 1 : x / w; }struct HashTable* query(struct HashTable* hashTable, int x) {struct HashTable* tmp;HASH_F…

leetcode每日一题-3101 交替子数组计数

暴力遍历&#xff1a;看起来像是回溯,实际上就是递归 class Solution { private:long long _res 0; public:long long countAlternatingSubarrays(vector<int>& nums) {backtrack(nums, 0);return _res;}void backtrack(vector<int>& nums, long long st…

查询某个县区数据,没有的数据用0补充。

加油&#xff0c;新时代打工人&#xff01; 思路&#xff1a; 先查出有数据的县区&#xff0c;用县区编码判断&#xff0c;不存在县区里的数据。然后&#xff0c;用union all进行两个SQL拼接起来。 SELECTt.regionCode,t.regionName,t.testNum,t.sampleNum,t.squareNum,t.crop…

普中51单片机:数码管显示原理与实现详解(四)

文章目录 引言数码管的结构数码管的工作原理静态数码管电路图开发板IO连接图代码演示 动态数码管实现步骤数码管驱动方式电路图开发板IO连接图真值表代码演示1代码演示2代码演示3 引言 数码管&#xff08;Seven-Segment Display&#xff09;是一种常见的显示设备&#xff0c;广…

Java NIO:深入探索非阻塞I/O操作

Java NIO&#xff1a;深入探索非阻塞I/O操作 一、引言 随着网络应用的快速发展&#xff0c;对于高性能I/O操作的需求日益增加。传统的Java I/O模型基于流&#xff08;Stream&#xff09;进行数据传输&#xff0c;采用阻塞式&#xff08;Blocking&#xff09;方式&#xff0c;…

Visual studio 2023下使用 installer projects 打包C#程序并创建 CustomAction 类

Visual studio 2023下使用 installer projects 打包C#程序并创建 CustomAction 类 1 安装Visual studio 20203,并安装插件1.1 下载并安装 Visual Studio1.2 步骤二:安装 installer projects 扩展插件2 创建安装项目2.1 创建Windows安装项目2.2 新建应用程序安装文件夹2.3 添加…

sqlserver 当前时间

sqlserver 当前时间 在 SQL Server 中&#xff0c;获取当前时间有多种方法&#xff0c;以下是一些常用的方法&#xff1a; 使用 GETDATE() 函数&#xff1a; SELECT GETDATE() AS CurrentDateTime 如果你需要更精确的时间&#xff08;包括毫秒&#xff09;&#xff0c;可以使…

数据库SQL Server常用操作:增删改查

文章目录 SQL Server主要特点 常见数据库操作假设tmall_scapler_item_pk是一个主键约束临时表表的连接 SQL Server SQL Server 是由微软&#xff08;Microsoft&#xff09;公司开发的一个关系数据库管理系统&#xff08;RDBMS&#xff09;。它允许企业或组织存储、检索、修改和…

力扣刷题练习 七【34. 在排序数组中查找元素的第一个和最后一个位置】

前言 数组类型题目练习。 练习题 七【34. 在排序数组中查找元素的第一个和最后一个位置】 一、题目阅读 给你一个按照非递减顺序排列的整数数组 nums&#xff0c;和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。 如果数组中不存在目标值 target&…

A Threat Actors 出售 18 万名 Shopify 用户信息

BreachForums 论坛成员最近发布了涉及 Shopify 的重大数据泄露事件。 据报道&#xff0c;属于近 180,000 名用户的敏感数据遭到泄露。 Shopify Inc. 是一家总部位于安大略省渥太华的加拿大公司。 开发和营销同名电子商务平台、Shopify POS 销售点系统以及专用于企业的营销工…

SQL脚本初始化数据

创建或选择某个数据库&#xff0c;运行窗口输入&#xff1a;source,再拖入文件&#xff0c;回车即可&#xff1b; 虽然也可以使用图形化工具初始化数据&#xff0c;但是他会有内存限制&#xff0c;也就是较大的sql文件不可以初始化&#xff0c;而运行窗口没有sql文件大小限制&…

本周23个Github有趣项目llama-agents等

23个Github有趣的项目、工具和库 1、Positron 下一代数据科学 IDE。 您使用 VS Code 进行数据科学&#xff08;Python 或 R&#xff09;&#xff0c;但希望它包含专用控制台、变量窗格、数据浏览器和其他用于特定数据工作的功能。您使用 Jupyterlab 进行数据科学&#xff08;…

python读取csv出错怎么解决

Python用pandas的read_csv函数读取csv文件。 首先&#xff0c;导入pandas包后&#xff0c;直接用read_csv函数读取报错OSError&#xff0c;如下&#xff1a; 解决方案是加上参数&#xff1a;enginepython。 运行之后没有报错&#xff0c;正在我欣喜之余&#xff0c;输出一下d…

数据结构第04节:数组

线性数据结构 - 数组 线性数据结构中的数组是一种基础且广泛使用的数据存储方式&#xff0c;它存储一系列相同类型的元素&#xff0c;这些元素在内存中连续存放。数组可以是静态的或动态的。 静态数组&#xff08;Static Arrays&#xff09; 静态数组在声明时需要指定大小&a…