Sunrise

`长路漫漫,唯剑作伴`


  • 首页

  • 关于

  • 标签

  • 分类

  • 归档

基于boundary smoothing的中文NER

发表于 2024-12-19 | 分类于 自然语言处理

基于boundary smoothing的中文NER

论文解读

论文《Boundary Smoothing for Named Entity Recognition》

GitHub:GitHub - syuoni/eznlp: Easy Natural Language Processing

解读略

环境安装

packaging包要根据requirements要求安装指定版本:packaging==20.4 ,否则运行程序会报错,这个包最好在所有包安装完成之后再更新至这个版本,因为这个包版本比较老,可能会影响其他包的安装(安装不上)。如果这个包版本是20.4的情况下去安装其他包,可能会报类似下面的错误。
TypeError: canonicalize_version() got an unexpected keyword argument 'strip_trailing_zero'

numpy==1.18.5死活安装不上,ModuleNotFoundError: No module named 'distutils.msvccompiler';安装1.19.5代替
pandas=1.0.5死活安装不上,错误同上;安装1.2.0代替

安装flair=0.8还是安装不上,需要C++环境,安装build Tools工具选择安装C++相关的组件之后就可以成功安装了

阅读全文 »

中文命名实体识别——flat lattice transformer

发表于 2024-11-29 | 分类于 自然语言处理

flat lattice transformer

论文解读

论文《FLAT: Chinese NER Using Flat-Lattice Transformer》

LeeSureman/Flat-Lattice-Transformer: code for ACL 2020 paper: FLAT: Chinese NER Using Flat-Lattice Transformer (github.com)

解读略

环境安装

Windows环境

python和pytorch版本可以根据自己的环境情况,其他包按照官网的说明安装
numpy包,安装1.16.4版本需要C++环境,安装不上
安装超过1.24的版本会因为fitlog库中使用了np.str而报错,虽然1.20之后就废弃了np.str之后,但是安装<1.24的版本还是能跑的
我这里安装了1.23.5

pytorch,项目要求安装版本为1.2.0,但是因为我的cuda版本是12.0,安装不上1.2.0的版本,一开始安装的是2.0.1的版本,但是因为版本太新,在torch.optim.lr_scheduler中其LambdaLR(以及其他类型的调度器)均继承的是LRScheduler类,
而在fastNLP中,其要求为:

阅读全文 »

反爬(十)

发表于 2024-06-01 | 分类于 爬虫

反爬十

之前搞的有反爬的网站基本都是采用debug,然后扣代码的方式,扣出来核心的代码,自己通过node运行或者使用python运行,但是有些情况下难以扣出来核心的代码,或者说这样做的效率非常低,所以还有另一种方式就是拿出全部js,然后直接运行我们需要的方法,如果报错再去定位问题,具体解决。下面列举两个网站的例子。

信用邯郸

网址:https://credit.hd.gov.cn/xyxxgs/

请求列表页时,需要以上参数,其中nonceStr、queryContent、sign都是通过js代码通过一定的逻辑生成的。

阅读全文 »

Simple Lexicon代码剖析

发表于 2024-04-27 | 分类于 自然语言处理

Simple Lexicon代码剖析

Simple Lexicon的原理比较简单,至少不涉及模型架构方面的改写,只是将所有词的embedding融合到字符的embedding中(详情请看原论文,上一篇),其项目源码其实是用了Lattice LSTM的源代码,然后在此基础上改成了python3.6的版本,并且加上词向量融合部分的代码。

项目地址:GitHub - v-mipeng/LexiconAugmentedNER: Reject complicated operations for incorporating lexicon for Chinese NER.

下面直接进行代码分析,在剖析代码的过程中联系论文来深入理解

data_initialization

首先在构建语料库这里,依然还是有

build_alphabet、build_gaz_file,这两个方法与Lattice LSTM是一致的;

有变化的是build_gaz_alphabet,新增了一个count参数(用于统计词频)

在Lattice LSTM中build_gaz_alphabet方法是建立gaz_alphabet,即找到了所有可能的词语(具体逻辑就是利用trie属性保存的词典,然后调用gaz.enumerateMatchList,这里面调用的又是trie.enumerateMatch方法)

在Simple Lexicon中这个方法内部也是先找到所有可能的词语(但是也会返回单个的字),其次是计算词频;

阅读全文 »

Simplify the Usage of Lexicon in Chinese NER论文

发表于 2024-04-13 | 分类于 自然语言处理

Simplify the Usage of Lexicon in Chinese NER

Abstract

有很多工作尝试利用词汇信息提升中文NER的性能,例如LatticeLSTM, 但是它有一个复杂的网络结构,速度也比较慢;

在这项工作中,我们提出了一个将词汇信息融入字符表示的简单而有效的方法,这个方法没有设计复杂的序列模型结构,对于任何神经NER模型,它只需要对字符表示层进行细微的调整就可以引入词典信息.

实验表明与之前最优的各种方法相比,我们的方法速度更快且效果更好,而且也比较方便配合预训练模型如BERT一起使用.

GitHub项目:GitHub - v-mipeng/LexiconAugmentedNER: Reject complicated operations for incorporating lexicon for Chinese NER.

阅读全文 »

LatticeLSTM原理解读与模型实现

发表于 2024-03-24 | 分类于 自然语言处理

LatticeLSTM原理解读与模型实现

深入剖析文章:一文详解中文实体识别模型 Lattice LSTM - 知乎 (zhihu.com)

最容易想到同时也是最简单的词信息利用方法就是直接拼接词表征与字向量或者直接拼接词表征与LSTM的输出。16年的论文《A Convolution BiLSTM Neural Network Model for Chinese Event Extraction》就采用了这样的方法构建了中文事件抽取模型。

Lattcie LSTM的实现方式是怎么样的呢?

Lattice LSTM 模型结构如上图右侧所示。在正式开始介绍 Lattice LSTM 前,我们先来看看上图左半部分。

阅读全文 »

使用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部分。

阅读全文 »
12…12
chenxi

chenxi

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