learner-crapy / Chinese_English_Coreference_Resolution

Chinese and english coreference resolution based on SpanBERT and BERT

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

项目介绍

具体项目代码和项目文件介绍以及部署请查看master分支,注意本项目基于 https://github.com/taishan1994/pytorch_bert_coreference_resolution 进行部署,做了以下几点工作:

1、更新了数据集,基于OntoNote5.0数据集重构了数据集,训练数据量可以达到1.7GB左右,实际训练中为了减少时间成本,只选择了文本长度小于300的样本进行重构,所以数据量减了很多;

2、加入了机器学习方法SVM、决策树、k-means,深度学习模型VGG16、Inception、LeNet5、LSTM、TextCNN进行分类;

3、重建了原项目中的数据处理方法,分别从BERT的最后一层和每一层抽取数据合并输入到上述模型中,根据处理方法不同,上述的几个深度学习模型也有有一维卷积和二维卷积的区别,细节请查看代码和原理图;

4、加入了BERT输出向量可视化的代码;

5、加入了训练过程的日志记录,包括train_acc、train_loss、dev_loss、dev_acc、recall、precision、recall等

预训练模型

1、中文模型

  在中文中我们将使用到下图所示的模型

中文选用预训练模型

  使用transformers下载上述模型,使用BertTokenizer以及BertModel加载,而不是RobertaTokenizer/RobertaModel,您可以在这里找到这些信息。

tokenizer = BertTokenizer.from_pretrained("MODEL_NAME")
model = BertModel.from_pretrained("MODEL_NAME")

2、英文模型

  英文模型使用从huggingface下载的预训练模型,你可以通过下面的python代码获取,huggingface地址 please download it in windows to obtain pytorch_model.bin file

# Import generic wrappers
from transformers import AutoModel, AutoTokenizer
# Define the model repo
model_name = "SpanBERT/spanbert-base-cased"
# Download pytorch model
model = AutoModel.from_pretrained(model_name)
tokenizer = AutoTokenizer.from_pretrained(model_name)
# Transform input tokens
inputs = tokenizer("Hello world!", return_tensors="pt")
# Model apply
outputs = model(**inputs)

对BERT的输出进行处理

从BERT的最后一层获取向量

从BERT的每一层获取向量

一维训练日志

从最后一层获取输入到一维卷积的网络中中文

从最后一层获取输入到一维卷积的网络中英文

二维训练日志

从每一层获取输入到一维卷积的网络中中文

从每一层获取输入到一维卷积的网络中英文

一维混淆矩阵

从每一层获取输入到一维卷积的网络中混淆矩阵中文

二维混淆矩阵

从每一层获取输入到一维卷积的网络中混淆矩阵英文

一层和两层全连接网络日志

从最后一层获取输入到全连接网络中文

从最后一层获取输入到全连接网络英文

一层和两层全连接网络混淆矩阵

从最后一层获取输入到全连接网络混淆矩阵

About

Chinese and english coreference resolution based on SpanBERT and BERT