Home

Awesome

实现说明

主要实现文章前半部分的工作,PyTorch实现,基于huggingface的工作,PyTorch才是世界上最屌的框架,逃。

实现参考

img1

代码说明

(1)主要修改:modeling.py

output representation: BertForSequenceClassification

input representation: BertEmbeddings

input和output都实现了多种策略,可以结合具体的任务,找到最佳的组合。

(2)非主要实现:examples下的关于classification的文件

(3)服务部署:基于Flask,可以在本地开启一个服务。具体实现在tacred_run_infer.py中。

(4)代码仅供参考,不提供数据集,不提供预训练模型,不提供训练后的模型(希望理解吧)。

(5)相关工作可以参考我的博客-神经关系抽取,可能比这个代码更有价值一些吧。

实现结果:

 数据集TACRED上的结果:

模型序号输入类型输出类型指标类型PRF1备注
0entity markersum(entity start)micro0.680.630.65base-model,lr=3e-5,epoch=3
macro0.600.540.55
1entity markersum(entity start)micro0.700.620.65large-model,lr=3e-5,epoch=1
macro0.630.520.55
-1NoneNonemicro0.690.660.67手误之后,再也找不到了,尴尬
macro0.580.500.53

数据集SemEval2010 Task 8上的结果:

模型序号输入类型输出类型指标类型PRF1备注
0entity markermaxpool(entity emb)+relumicro0.860.860.86bert-large
macro0.820.830.82

混合精度加速结果

在具体任务上,延续之前的setting,将train和dev合并共同作为新的train集,test集不变。在fp32 和fp16的两种setting下,比较相同batch_size下,一个epoch的用时或者每个迭代的用时。

比较方面fp32fp16备注
训练阶段1.04it/s4.41it/s12.76it/s(独占显卡)
推断阶段4.14it/s8.63it/s
测试集指标0.65/0.550.64/0.53格式:micro/macro
模型大小421M212M