Sunrise

`长路漫漫,唯剑作伴`


  • 首页

  • 关于

  • 标签

  • 分类

  • 归档

使用Transformer Encoder进行NER任务

发表于 2023-12-28 | 分类于 自然语言处理

使用Transformer Encoder进行NER任务

我们都知道命名实体识别任务最常用的网络结构是BiLSTM + CRF的结构,在transformer被提出之后,transformer也被用于命名实体识别任务,但是一般是使用Transformer的Encoder模块作为特征提取器,后面还是使用softmax、线性层或CRF层,也就是说Transformer的Decoder模块是不使用的(例如预训练模型BERT也是仅堆叠transformer encoder)。

那么为什么在命名实体识别任务中不使用Decoder模型呢?
其实答案是比较容易理解的,我们都知道Decoder是利用Encoder得到的memory和当前的输出,自回归的不断给出下一个概率最高的输出,所以Decoder是一个主要用于生成的模型,也是目前最火热的大模型如GPT最主要的核心结构,即主要用于生成大段的文本,而命名实体识别任务本质上是一个序列标注任务,其并不需要根据输入文本去生成其他文本,它只需要判断给定文本每个字是否属于实体以及实体的类型,所以并不需要Decoder模块,同样的序列的分类任务也不需要Decoder模块。
当然不需要不等于不能用,你也可以把序列标注、序列分类任务转变成生成任务,但是这样会使得你的模型结构变得更加复杂,效率会下降,效果也并不一定能得到提升。

在Transformer一步步实现一文中我们已经理解了transformer的实现过程,在这一篇中我们要将transformer的encoder部分应用于命名实体识别任务。

阅读全文 »

doc文件转docx文件

发表于 2023-10-20 | 分类于 python编程

doc文件转docx文件

Windows系统

众所周知,python的word文件解析包python-docx是无法直接解析doc文件的,但是在windows系统下有一个包pypiwin32,利用这个包可以将doc文件转换为docx文件,但是使用起来有两个局限:

  1. Linux系统中没有这个包;
  2. 这个包必须通过显示的文件保存操作来进行转换(没有办法仅通过文件二进制流操作)。

这两个包的安装:

1
2
pip install python-docx
pip install pypiwin32

所以可以使用这个包结合flask将转换程序作为一个服务部署在windows服务器上,后续可以方便的使用。

阅读全文 »

Transformer一步步实现

发表于 2023-08-20 | 分类于 自然语言处理

前言

前面写了两篇关于transformer的原理的文章,分别是

Transformer原理 | Sunrise (forchenxi.github.io)

Transformer block | Sunrise (forchenxi.github.io)

这篇主要是将哈佛大学2018年写的一篇关于transformer的详细注解包括pytorch版本的实现过程《The Annotated Transformer》翻译为中文。

原文地址:The Annotated Transformer (harvard.edu)

知乎翻译文章地址:搞懂Transformer结构,看这篇PyTorch实现就够了 - 知乎 (zhihu.com)

阅读全文 »

Transformer block

发表于 2023-07-22 | 分类于 自然语言处理

Transformer block

这个模型结构分为左右两个部分,因为原文中是用 Transtormer 来做翻译任务的,大家可能知道通常我们做翻译任务的时候,都使用 Encoder-Decoder 的架构来做。这里面的左侧对应着 Encoder ,右侧就是 Decoder。Encoder 本质目的就是对 input 生成一种中间表示,Decoder 目的就是对这种中间表示做解码,生成目标语言的 output。大家会发现两边的结构基本上是一致的,为了着重的研究 Transformer 结构,我们分别介绍Encoder和Decoder部分。

阅读全文 »

Transformer原理

发表于 2023-07-06 | 分类于 自然语言处理

Transformer原理

From Attention to self-Attention

关于Attention基本原理我们在seq2seq中已经介绍过,简单说attention就是帮助我们找到两个序列之间的相关度,比如输出序列的每个输出分别应该关注输入序列的哪一部分, 也就是找到权重值 wi。

self-attention与attention的不同点在于,self-attention是帮助我们找到子序列与全局序列之间的关系,即self-attention使用的场景是同一序列内部,而attention是两个序列。

不过self-attention的计算方法与attention类似,同样可以使用上述公式(只不过这里的yi是同一序列中的某个token)。

wij的计算方式如下:

为了更好地理解这个公式,下面我给以y2的计算为例,给出计算过程(图中把exp漏掉了)和图例。

阅读全文 »

使用BiLSTM-CRF进行命名实体识别

发表于 2023-04-29 | 分类于 自然语言处理

使用BiLSTM-CRF进行命名实体识别

BiLSTM-CRF网络结构

关于LSTM的原理以及其对比RNN的优势前面已经有多篇文章介绍了,这里就不再赘述。


使用BiLSTM-CRF进行命名实体识别任务时的步骤流程(粗略地):

  1. 先将句子转化为字词向量序列,字词向量可以在事先训练好或随机初始化,在模型训练时还可以再训练;
  2. 经BiLSTM特征提取,输出是每个单词对应的预测标签;
  3. 经过CRF层约束,输出最优标签序列。

使用BiLSTM-CRF进行命名实体识别任务时的步骤流程(细致地):

阅读全文 »

业务爬取经验总结

发表于 2023-03-11 | 分类于 爬虫

业务爬取经验总结

注意代理有没有挂上,如果没有挂上也不会有什么提示,会直接使用本机IP,风险极高。

在平时业务开发时,遇到的网站一般分为两种类型,搜索式和列表式,当然列表式居多

列表式爬取方法

拿到一个待开发的网站,一般开发完成之后,先爬取一遍全部历史数据,再上线增量爬取。

历史数据爬取过程中需要注意的点

首先是要测试,要多看爬取日志,不要直接就推送入库;
查看日志可以看第一页、第二页、中间随机抽取几页和最后一页,日志是否和网站上的数据对应的上,避免一些程序bug压根没有成功翻页,然后也要看字段解析的是否正确,如果有比较明显的大规模错误那就要优化程序。

如果该业务的数据源是比较多的情况,就要考虑不同的源是不是会造成重复,比如当前的数据源数据质量本身很差(结构化错误比例较高或缺少关键字段信息等),那最好先看下这个源的数据是否已经被其他源覆盖(在开发之前也可以进行评估),如果已被其他源覆盖就可以不爬取历史数据或者直接不开发,避免这个源的数据覆盖其他更优质的源的数据。

其他还有一些针对数据质量不太好的源的爬取方法,比如增加过滤逻辑,缺失某些字段的数据丢弃;或者根据页码或者发布日期只爬取部分质量较好的数据。

阅读全文 »

PyTorch正则化和批标准化

发表于 2023-03-04 | 分类于 pytorch

PyTorch正则化和批标准化

Regularization-正则化:减小方差的策略

误差可分为解为:偏差,方差与噪声之和,即误差=偏差+方差+噪声之和;

偏差:度量了学习算法的期望预测与真实结果的偏离程度,即刻画了学习算法本身的拟合能力;
方差:度量了同样大小的训练集的变动所导致的学习性能的变化,即刻画了数据扰动所造成的影响;
噪声:表达了在当前任务上任何学习算法所能达到的期望泛化误差的下界。

简而言之,偏差是指在所有训练数据上训练得到的模型性能和在真实数据上表现的差异,方差是指模型在训练集和验证集(测试集)上的差异,方差重点在于不同数据集;噪声则是指给定的数据集(其可能存在噪声),那么当前数据集的数据质量已经决定了学习性能的上限,学习的目标就是尽可能的接近这个上限。

阅读全文 »

Pytorch中的优化器Optimizer

发表于 2023-02-25 | 分类于 pytorch

Pytorch中的优化器Optimizer

什么是优化器

pytorch的优化器:管理并更新模型中可学习参数的值,使得模型输出更接近真实标签

导数:函数在指定坐标轴上的变化率
方向导数:指定方向上的变化率(二元及以上函数,偏导数)
梯度:一个向量,方向是使得方向导数取得最大值的方向

Pytorch的Optimizer

参数

  • defaults:优化器超参数
  • state:参数的缓存,如momentum的缓存
  • param_groups:管理的参数组
  • _step_count:记录更新次数,学习率调整中使用
阅读全文 »

Pytorch中权值初始化和损失函数

发表于 2023-02-18 | 分类于 pytorch

Pytorch中权值初始化和损失函数

权值初始化

梯度消失与爆炸

针对上面这个两个隐藏层的神经网络,我们求w2的梯度

可以发现,w2的梯度与H1(上一层网络的输出)有很大的关系,当h1趋近于0时,w2的梯度也趋近于0,当h1趋近于无穷大时,w2的梯度也趋近于无穷大。

阅读全文 »
123…12
chenxi

chenxi

120 日志
12 分类
224 标签
Links
  • Docle
  • Swift
© 2025 chenxi
由 Hexo 强力驱动
|
主题 — NexT.Pisces v5.1.4