A213-BERT与CNN结合实现糖尿病相关医学问题多分类模型.md

A213-BERT与CNN结合实现糖尿病相关医学问题多分类模型

【购买前必看】

1、关于我们

深度学习乐园是由python哥全职技术团队组建运营【团队成员为:复旦大学博士、华东理工爱丁堡博士、格拉斯哥博士、纽约大学硕士、浙江大学硕士】。

我们只做python业务,精通sklearn机器学习/torch深度学习/django/flask/vue全栈开发。

2、关于项目

我们从2018年开始,就专注于深度学习sci、ei、ccf、kaggle等,至今已有7年,共发表过10多篇顶刊顶会。

官网累积了数百个项目,已有3000多学员付费购买,圈子内有口皆碑:www.zzgcz.com (更多高级私密项目无法对外,联系微信定制:zzgcz_com

3、售后承诺

包远程安装调试,所有项目均在本地运行通过,大部分都有截图和录屏。

支持二次修改,所有项目都是我们自己写的,改起来也非常容易。

加急定制1-2天可完成,这就是实力证明,远程验收满意后再付全款!

所有客户终身售后。兼职的人家都有主业,谁愿意持续服务你?

使用HuggingFace开发的Transformers库,使用BERT模型实现中文文本分类(二分类或多分类)

首先直接利用transformer.models.bert.BertForSequenceClassification()实现文本分类

然后手动实现BertModel + FC 实现上边函数。其中可以方便的更改参数和结构

然后实验了论文中将bert最后四层进行concat再maxpooling的方法,

最后实现了bert + CNN实现文本分类

模型使用的是哈工大chinese-bert-wwm,可以完全兼容BERT

下载:

plain text git clone https://huggingface.co/hfl/chinese-bert-wwm

结果

除了第一个实验dropout_bert是0.1,其余是0.2. 剩下参数都一样。

训练3个epoch

模型 train/val acc val acc test acc 链接
会用内建BertForSequenceClassification 0.982 0.950 0.950 链接
自己实现Bert+fc 一层全连接层 0.982 0.948 0.954 链接
将Bert最后四层相concat然后maxpooling 0.977 0.946 0.951 链接
BERT+CNN 0.984 0.947 0.955 链接
  1. 官方的transformer.models.bert.BertForSequenceClassification()就是直接使用BertModel 再接一层全连接层实现的。第二个项目是为了方便自己修改网络结构,进行手动实现。效果差不多,可以自己修改接几层线形结构,但是实验了一层就够了。

  2. 根据参考2的论文,将BERT最后四层的CLS向量concat然后取max pooling可以让bert在分类问题上有更好的效果。在THUNews上测试可以提高0.4%相比bert。已经很大了相比其他方法而言。

  3. 我一直觉得bert后面接CNN和RNN等都不好,毕竟transformer就是改善这两类模型的,再接一层也好不到哪去。如果我理解不到位可以告诉我。我还实验了bert使用前四层的输出进行concat,效果acc也能达到0.80+,层数越深效果感觉真的不明显。bert+cnn/rnn等这个模型在参考3 中两年前就有人做过实验,写出来过,他实验的效果也是不如单纯的BERT。调了调cnn的大小,其实都差不多。

标签定义:

  • 0: Diagnosis(诊断)

  • 1: Treatment(治疗)

  • 2: Common Knowledge(常识)

  • 3: Healthy lifestyle(健康生活方式)

  • 4: Epidemiology(流行病学)

  • 5: Other(其他)

Image Token: Z2fBbvgqqoS5r2xnyamcoj4xnug

模型的实现包括以下几个部分:

  1. 数据处理与加载:如何加载文本数据并进行必要的预处理。

  2. 模型架构

  3. bert_lr:一个基于BERT的线性分类器模型。

  4. bert_cnn:一个基于BERT与卷积神经网络(CNN)结合的模型。

  5. 训练过程:如何设置训练循环、优化器和损失函数。

  6. 评估与预测:模型在验证集和测试集上的评估,以及如何进行推理。