/GlobalPointer_pytorch

全局指针统一处理嵌套与非嵌套NER的Pytorch实现

Primary LanguagePython

GlobalPointer_pytorch

喜欢本项目的话,欢迎点击右上角的star,感谢每一个点赞的你。

项目介绍

本项目的模型参考苏剑林的文章GlobalPointer:用统一的方式处理嵌套和非嵌套NER,并用Pytorch实现。

GlobalPoniter多头识别嵌套实体示意图

GlobalPointer的设计思路与TPLinker-NER类似,但在实现方式上不同。具体体现在:

  1. 加性乘性Attention

TPLinker在Multi-Head上用的是加性Attention:

而GlobalPointer用的是乘性Attention:

  1. 位置编码

GlobalPointer在模型中还加入了一种旋转式位置编码RoPE。这是一种“通过绝对位置编码的方式实现相对位置编码”,在本模型中效果明显。

Usage

实验环境

本次实验进行时Python版本为3.6,其他主要的第三方库包括:

  • pytorch==1.8.1
  • wandb==0.10.26 #for logging the result
  • transformers==4.1.1
  • tqdm==4.54.1

下载预训练模型

请下载Bert的中文预训练模型bert-base-chinese存放至 pretrained_models/,并在config.py中配置正确的bert_path

Train

python train.py

Evaluation

python evaluate.py

实验结果

默认配置(超参数已在 config.py 文件中),数据集是 CLUENER

  • 验证集 Best F1:0.7966