- EMNLP 2018-Adversarial Transfer Learning for Chinese Named Entity Recognition with Self-Attention Mechanism
论文地址
https://www.aclweb.org/anthology/D18-1017/
代码地址
tensorflow
https://github.com/CPF-NLPR/AT4ChineseNER
pytorch
https://github.com/tyistyler/pytorch-AT4ChineseNER
实验相关环境
平台:Google colab
深度学习架构:python3.6+tensorflow 1.8
注意事项:
(1)使用的NER和CWS数据;
(2)sighan2006的NER数据即MSRA数据集
(3)跑代码过程中需要根据提示做一些修改,如python2和python3的print函数;numpy的random函数等。
(4)运行命令见代码链接,由于自己使用的数据集或多或少存在一些不同,建议先训练后测试。
附:(1)使用sentence_transformers包时,需要使用pytorch>=1.6,否则报错如下:
OSError: Unable to load weights from pytorch checkpoint file. If you tried to load a PyTorch model from a TF 2.0 checkpoint, please set from_tf=True.
使用pycharm无法导入当前文件夹中的package
解决办法:
右键单击当前文件夹上一级根目录,选择Mark Directory as -->Sources Root
2、ACL 2020-A Novel Cascade Binary Tagging Framework for Relational Triple Extraction
论文地址
https://www.aclweb.org/anthology/2020.acl-main.136/
代码地址
tensorflow-official
https://github.com/weizhepei/CasRel.
pytorch
https://github.com/longlongman/CasRel-pytorch-reimplement
tensorflow实验相关环境
平台:Google colab
requirements:
Python 3.7.10
CUDA Version: colab好像同时存在多个cuda版本,没搞懂使用
cat /usr/local/cuda/version.txt
得到的版本如下所示:CUDA Version 11.0.228
使用
nvcc -V
得到的版本如下所示:nvcc: NVIDIA (R) Cuda compiler driver Copyright (c) 2005-2020 NVIDIA Corporation Built on Wed_Jul_22_19:09:09_PDT_2020 Cuda compilation tools, release 11.0, V11.0.221 Build cuda_11.0_bu.TC445_37.28845127_0
使用
nvidia-smi
得到的版本如下所示:NVIDIA-SMI 465.19.01 Driver Version: 460.32.03 CUDA Version: 11.2
- keras==2.2.0
- tensorflow-gpu==1.13.1
- keras-bert==0.78.0
- keras-transformer==0.33.0
pytorch实验相关环境
- python==3.6.8
- pytorch==1.4.0
- torchvision==0.5.0
- tensorflow-gpu==1.13.1
- keras-bert==0.78.0
- keras==2.2.0
- keras_applications==1.0.7
- sentencepiece==0.1.95
3、ACL 2021-PRGC: Potential Relation and Global Correspondence Based Joint Relational Triple Extraction
论文地址
https://aclanthology.org/2021.acl-long.486/
代码地址
pytorch
https://github.com/hy-struggle/PRGC
数据集:NYT和WebNLG及其变体。
个人的理解
PRGC模型训练时
:
(1)利用平均池化操作和全连接神经网络找出可能存在的关系子集;
(2)利用全连接神经网络计算全局关联矩阵(实体与实体之间是否存在关系);
(3)然后利用交叉熵计算sub和obj层的loss;利用多标签分类使用的BCE损失函数,计算关系子集的loss和全局关联矩阵的loss;最后使用三者之和进行反向传播。
PRGC
模型测试时
:
(1)使用训练时的方法,得到关系子集和全局关联矩阵;
(2)此时真正的关系子集是未知的,利用sigmoid和阈值完成多标签分类,找到可能的关系子集(如果在给定阈值情况下无法仍没有找到一个满足条件的值,则选择value最大的关系作为当前句子中三元组的关系);并使用xi记录每个句子存在几种关系;
(3)重点,利用预测的关系子集,记录当前的sequence_output,注意此时一共有sum(x_i)个关系,而不是batch_size个关系,x_i是表示第i句话中有多少种关系。
(由于一句话可能存在多个三元组,因此一句话中可能存在多个关系,所以sequence_output可能会有多个,后续会与不同的关系向量进行拼接,然后预测。)
(4)然后使用sigmoid和阈值完成全局关联矩阵的分类。
(5)之后,利用tag_mapping_corres()方法,得到对应的三元组,计算P、R、F1.
(先找到subject和object的开头,利用global correspondence找到存在关系的sub和obj,然后再赋予二者对应的关系,这个关系在被保存在预测的关系子集中)
4、ACL 2018-Chinese NER Using Lattice LSTM
论文地址
https://aclanthology.org/P18-1144/
代码地址
pytorch0.3
https://github.com/jiesutd/LatticeLSTM
pytorch1.4
https://github.com/tyistyler/LatticeLSTM_torch_1.4
数据集:Weibo、Resume、Msra、Ontonotes4.0
5、ESwA 2018-Joint entity recognition and relation extraction as a multi-head selection problem
论文地址
https://arxiv.org/abs/1804.07847
代码地址
pytorch
https://github.com/mangonihao/MultiHeadJointEntityRelationExtraction_simple
tensorflow-official
https://github.com/bekou/multihead_joint_entity_relation_extraction
数据集:ACE04、ADE、DREC
个人理解
Multihead模型在训练阶段
会使用entity的标签,但是在测试
时不会使用,因此测试时效果会变差。
模型整体如下所示:
6、NAACL 2021-PURE-A Frustratingly Easy Approach for Entity and Relation Extraction
论文地址
https://aclanthology.org/2021.naacl-main.5/
代码地址
pytorch
https://github.com/princeton-nlp/PURE
数据集:ACE04、ACE05、SciERC
个人理解
PURE模型在实体识别层实用了Span识别,而不是给每个字符分配一个标签。
模型整体如下所示:
7、EMNLP 2021-TDEER: An Efficient Translating Decoding Schema for Joint Extraction of Entities and Relations
论文地址
https://aclanthology.org/2021.emnlp-main.635/
代码地址
tensorflow
https://github.com/4AI/TDEER
数据集:NYT、WebNLG
个人理解
TDEER模型包含三个大模块:Entity Tagging Model
、Relation Detector
、Translating Decoding Schema
。
(1)Entity Tagging Model
利用两个sigmoid识别出可能存在的subject和object;
(2)Relation Detector
利用多标签分类,识别出可能存在的Relation;
(3)Translating Decoding Schema
将(1)和(2)得到的subject和relation利用attention进行组合,得到可能的object_start位置;
最后将object_start与(1)得到的object进行比较,若对应位置的确是object的开头,则得到三元组,否则不是一个三元组。
模型整体如下所示:
代码运行注意事项:
1、安装langml-package
(1)进入langml文件夹,根据requirement.txt和dev-requirement.txt文件安装依赖包;
(2)使用python setup.py install安装langml
2、tensorflow版本
我使用的colab,其中python=3.7,tensorflow=1.15.0,keras=2.3.1,需要注意的是,还要安装tensorflow-gpu=1.15.0才可以调用GPU(我平常使用的是pytorch,至于为何还需要tensorflow-gpu版本我猜测是因为默认调用cpu,检测到gpu版本时才调用gpu)
3、可以加入tqdm来显示进度
4、需要注意的是,建议新建一个虚拟环境,使用conda install tensorflow==1.15.0 tensorflow-gpu==1.15.0
来安装tensorflow环境,我使用本地下载的方法,折腾了很久总是无法调用gpu!
5、测试的时候需要注意,使用keras=2.3.1会报错AttributeError: 'str' object has no attribute 'decode'
,原因可参考https://blog.csdn.net/jmh1996/article/details/111224700
我的解决办法是:pip install h5py==2.10.0
from tqdm import TqdmCallback
...
train_model.fit(
generator.forfit(random=True),
steps_per_epoch=len(generator),
epochs=args.epoch,
callbacks=[evaluator, TqdmCallback()],
verbose=args.verbose
)
...
8、EMNLP 2021-PFN-A Partition Filter Network for Joint Entity and Relation Extraction
论文地址
https://aclanthology.org/2021.emnlp-main.17/
代码地址
pytorch
https://github.com/Coopercoppers/PFN
数据集:NYT、WebNLG
个人理解
PFN模型包含三个大模块:Partition Filter Encoder
、NER unit
、RE unit
。
我感觉模型最精妙的地点在于使用了cumsum操作
来分割entity partition
,relation partition
andshared partition
。
模型整体如下所示:
9、ACL 2019-GraphRel: Modeling Text as Relational Graphs for Joint Entity and Relation Extraction
论文地址
https://aclanthology.org/P19-1136/
代码地址
pytorch-no-official
https://github.com/tsujuifu/pytorch_graph-rel
数据集:NYT、WebNLG
个人理解
使用了两次GCN
(1)一阶段的GCN使用了依存关系;
(2)二阶段的GCN使用了一阶段预测的实体间的关系。
模型整体如下所示: