cap流程图_源码阅读笔记 BiLSTM+CRF做NER任务(二)
源码地址:https://github.com/ZhixiuYe/NER-pytorch
本篇正式进入源码的阅读,按照流程顺序,一一解剖。
一、流程图
二、详细步骤
1、数据预处理
1)将数据集从文件中加载出来,如果句子中出现了数字,会将其置零(可选),删除
无用句。
2)转换标注模式,将iob1(数据集原有标注模式)转换为iob2,如果选用的是IOBES则将iob2转换成iobes,选用的是IOB,则将iob2返回。iob1和iob2都是表示里面只有I、O、B,不同的是iob1中的B是为了隔断同类实体不同实体名的,而iob2中的B是为了作为实体名的开头的。iobes中包含I(实体名内部)、O(非实体)、B(实体的开头)、E(实体的结尾)、S(单字实体名)。
下例将说明iob1、iob2、iobes的形式:
3)创建word、char、tag、cap字典(根据训练集)。
word字典:统计单词词频,筛选出词频大于3的单词,按照词频逆序、单词顺序对单词由0开始编号并加入字典中。除此,加入''、''这两个单词,分别表示pad和未知词汇,赋予最大的两个编号。
char字典:统计字母频数,按照词频逆序、字母顺序对字母由0开始编号并加入字典中,除此,加入''并赋予最大的编号。
tag字典:统计标签频数,按照标签频数逆序、标签顺序对标签由0开始编号并加入字典中,除此,加入''和''并分别赋予-1和-2编号
cap字典:无法创建字典,映射关系为全小写:0,全大写:1,首字母大写:2,其他:3。
4)根据3创建的字典和映射关系,分别对训练集、验证集、测试集的word、char、cap、tag等特征做数值化。得出的数据集中每一句由{'str_words': str_words,'words': words,'chars': chars,'caps': caps,'tags': tags,}字典组成,句中每个单词对应一个这样的字典。
2、进入训练
从上面的数据预处理中,假如我们得到这么一个句子数据:
{'str_words': ['Amy','goes','to','Beijing','to','visit','Peking','University'],
'words': [0,1,2,3,2,4,5,6],
'chars': [[0, 1, 2], [3, 4, 5, 6], [7, 4], [8, 5, 9, 10, 9, 11, 3], [7, 4], [12, 9, 6, 9, 7], [13, 5, 14, 9, 11, 3], [15, 11, 9, 12, 5, 16, 6, 9, 7, 2]],
'caps': [2,0,0,2,0,0,2,2],
'tags': [0,1,1,2,1,1,3,3], }
注:该示例的words、chars、tags并未按照1所说的根据词频进行的编码,只是按照出现的先后顺序进行的编码。
1)char Embedding
① 对'chars'根据word长度进行排序,得到排序后的列表,与原列表对比生成索引映射关系。
② 对排序后的列表进行mask处理,即对word进行尾部填充0知道达到最长word长度。本例中,即是生成:[[15, 11, 9, 12, 5, 16, 6, 9, 7, 2],[8, 5, 9, 10, 9, 11, 3, 0, 0, 0],......],为8×10的矩阵。
③将生成的char新矩阵输入Embedding层,设置的size为25,在本例中将得到8×10×25的矩阵,并进行转置,成为10×8×25的矩阵。
④对得到的矩阵进行pack操作(去除pad),成为39×25的PackedSequence,batchsize为(10,7,6,5,4,3,2,2)。
⑤ 将PackedSequence输入到双向LSTM中,然后把输出的output的pack操作还原回去,再进行转置操作。
⑥ 提取出output中最后一个字母的out和第一个字母的out进行拼接,并且将排序的结果还原。
注:如果在进行pack操作时,选择batch_first=True,则不用进行转置操作;进行长度排序是pack操作必经的过程;双向lstm的结果的第三维长度为2*size,拼接时选择第一个字母的后size长度(t→1)和最后一个字母的前size长度(1→t)。
2)word Embedding
输入embedding层
3)cap Embedding
输入embedding层
4)拼接所有的Embedding并输入LSTM中
① 拼接char、word、cap Embedding
② 对最终的Embedding增加第二维(unsqueeze)
③ 输入到dropout层
④ 输入到双向LSTM层
⑤ 减去第二维
⑥ 输入到dropout层
⑦ 输入到一个线性层
5)无crf的话,使用交叉熵作为loss函数。
cap流程图_源码阅读笔记 BiLSTM+CRF做NER任务(二)相关推荐
- 源码阅读笔记 BiLSTM+CRF做NER任务 流程图
源码阅读笔记 BiLSTM+CRF做NER任务(二) 源码地址:https://github.com/ZhixiuYe/NER-pytorch 本篇正式进入源码的阅读,按照流程顺序,一一解剖. 一.流 ...
- CI框架源码阅读笔记4 引导文件CodeIgniter.php
到了这里,终于进入CI框架的核心了.既然是"引导"文件,那么就是对用户的请求.参数等做相应的导向,让用户请求和数据流按照正确的线路各就各位.例如,用户的请求url: http:// ...
- Transformers包tokenizer.encode()方法源码阅读笔记
Transformers包tokenizer.encode()方法源码阅读笔记_天才小呵呵的博客-CSDN博客_tokenizer.encode
- 【Flink】Flink 源码阅读笔记(15)- Flink SQL 整体执行框架
1.概述 转载:Flink 源码阅读笔记(15)- Flink SQL 整体执行框架 在数据处理领域,无论是实时数据处理还是离线数据处理,使用 SQL 简化开发将会是未来的整体发展趋势.尽管 SQL ...
- dgl源码阅读笔记(3)——DeepWalk
dgl源码阅读笔记(3)--DeepWalk 图神经网络开源库dgl阅读笔记 文章目录 dgl源码阅读笔记(3)--DeepWalk 图神经网络开源库dgl阅读笔记 @[TOC](文章目录) 前言 一 ...
- syzkaller 源码阅读笔记1(syz-extract syz-sysgen)
文章目录 1. syz-extract 1-0 总结 1-1. `main()` 1-2 `archList()` - `1-1 (3)` 获取架构 name list 1-3 `createArch ...
- 代码分析:NASM源码阅读笔记
NASM源码阅读笔记 NASM(Netwide Assembler)的使用文档和代码间的注释相当齐全,这给阅读源码 提供了很大的方便.按作者的说法,这是一个模块化的,可重用的x86汇编器, 而且能够被 ...
- Yii源码阅读笔记 - 日志组件
2015-03-09 一 By youngsterxyf 使用 Yii框架为开发者提供两个静态方法进行日志记录: Yii::log($message, $level, $category); Yii: ...
- AQS源码阅读笔记(一)
AQS源码阅读笔记 先看下这个类张非常重要的一个静态内部类Node.如下: static final class Node {//表示当前节点以共享模式等待锁static final Node SHA ...
最新文章
- Linux中iptraf命令详解(IP局域网监控工具)
- python实战系列之爬取CSDN博客之星2020年度排名情况(附源码)
- c++ 如何获取网络时间_云台山茶旅集团如何四年时间获取十万老人的万千目光...
- oracle 数据立方_大数据之数据仓库分层
- python定义16进制数组_python 文件转成16进制数组的实例
- Python判断变量的数据类型的两种方法
- 单片机课程设计数字心率计_如何选购合适的PH计
- 信息学奥赛一本通 1004:字符三角形 | OpenJudge NOI 1.1 08
- Web PostMessage
- 公共技术点之 Android 动画基础
- 437.路径总和III (力扣leetcode) 博主可答疑该问题
- 百度网盘linux微博登录,百度网盘,微博登录
- python爬取简历模板_python爬取简历模板
- source insight 3.5 配置文件GLOBAL.CF3--免费
- 安装VS2019、MFC,并创建MFC工程文件,查看工程信息
- 群辉nas虚拟linux,UNRAID教程:3分钟 用unraid自带的虚拟机 安装 黑群晖NAS DSM系统 很强大!...
- Zabbix监控学习系列(2):agent的安装与Server端添加客户端
- Qt5编译使用QFtp
- 计算机网络复习记录 (2)Chap 4
- Spring框架文档(二 )
热门文章
- CTF-window和linux下命令执行的知识
- Python对字符串进行左右中对齐
- 因为返回有true ajax提示进入错误,jquery ajax中error返回错误解决办法
- 计算机网络通信有哪些研究课题,科研进阶 | 西北大学 | 电子信息工程、通信与信息系统:通信与计算机网络...
- linux全自动安装光盘,CentOS7全自动安装光盘制做详解
- VMware ubuntu虚拟机怎么设置分辨率?(全屏显示、大屏显示)
- Intel Realsense D435报错:RuntimeError: Acquire failed!
- tensorflow tf.train.Saver.restore() (用于下次训练时恢复模型)
- Winmail邮件服务器
- linux——DHCP的配置问题