英文

DrBERT: 用于生物医学和临床领域的健壮预训练法语模型

近年来,预训练语言模型(PLMs)在各种自然语言处理(NLP)任务中取得了最佳性能。虽然最初的模型是在通用领域数据上训练的,但专门针对特定领域的模型已经出现,以更有效地处理特定领域的任务。在本文中,我们首次提出了在医学领域对法语PLMs的原始研究。我们比较了在公开数据和医疗机构的私有数据上训练的PLMs的性能。我们还评估了一组生物医学任务上的不同学习策略。最后,我们发布了第一个针对法语生物医学领域的专用PLMs,称为DrBERT,以及这些模型所训练的最大的医学数据语料库,该语料库可以免费使用。

1. DrBERT模型

DrBERT是基于开源的法语医学文本数据集NACHOS训练的法语RoBERTa模型。使用了来自不同公开和私有数据源的不同量的数据训练了多个模型,使用了法国国家科学研究中心(CNRS)的 Jean Zay 法国超级计算机。出于防止泄漏个人信息和遵循欧洲GDPR法规的目的,只有使用纯公开数据训练的模型的权重被公开发布:

Model name Corpus Number of layers Attention Heads Embedding Dimension Sequence Length Model URL
DrBERT-7-GB-cased-Large NACHOS 7 GB 24 16 1024 512 1235321
DrBERT-7-GB-cased NACHOS 7 GB 12 12 768 512 1236321
DrBERT-4-GB-cased NACHOS 4 GB 12 12 768 512 1237321
DrBERT-4-GB-cased-CP-CamemBERT NACHOS 4 GB 12 12 768 512 1238321
DrBERT-4-GB-cased-CP-PubMedBERT NACHOS 4 GB 12 12 768 512 1239321

2. 使用DrBERT

您可以按照以下方式使用DrBERT:

加载模型和分词器:

from transformers import AutoModel, AutoTokenizer

tokenizer = AutoTokenizer.from_pretrained("Dr-BERT/DrBERT-7GB")
model = AutoModel.from_pretrained("Dr-BERT/DrBERT-7GB")

执行掩码填充任务:

from transformers import pipeline 

fill_mask  = pipeline("fill-mask", model="Dr-BERT/DrBERT-7GB", tokenizer="Dr-BERT/DrBERT-7GB")
results = fill_mask("La patiente est atteinte d'une <mask>")

3. 使用HuggingFace Transformers库从头开始预训练DrBERT分词器和模型

3.1 安装依赖项

accelerate @ git+https://github.com/huggingface/accelerate@66edfe103a0de9607f9b9fdcf6a8e2132486d99b
datasets==2.6.1
sentencepiece==0.1.97
protobuf==3.20.1
evaluate==0.2.2
tensorboard==2.11.0
torch >= 1.3

3.2 下载NACHOS数据集文本文件

Zenodo 下载完整的NACHOS数据集,并将其放置在from_scratch或continued_pretraining目录中。

3.3 根据NACHOS从头构建自己的分词器

注意:此步骤仅适用于从头开始的预训练,如果您想要进行持续预训练,只需下载与所需模型和分词器相对应的模型即可。在这种情况下,您只需转到HuggingFace Hub,选择一个模型(例如 RoBERTa-base )。最后,您需要通过单击“使用Transformers”按钮并获取Git链接git clone https://huggingface.co/roberta-base下载整个模型/分词器存储库。

根据./corpus.txt文件上的数据,使用./build_tokenizer.sh构建分词器。

3.4 数据集的预处理和分词化

首先,将shell脚本中的tokenizer_path字段替换为您在使用HuggingFace Git之前下载或构建的分词器目录的路径。

运行./preprocessing_dataset.sh,使用给定的分词器生成分词化的数据集。

3.5 模型训练

首先,根据您的计算能力更改--ntasks=128,以匹配您需要的GPU数量,这在名为run_training.sh的shell脚本中。在我们的情况下,我们使用了由32个拥有4个GPU的节点的128个V100 32GB GPU(--ntasks-per-node=4和--gres=gpu:4)进行了20小时(--time=20:00:00)的训练。

如果您使用的是Jean Zay,您还需要将-A标志更改为与能够运行作业的@gpu配置文件中的一个匹配的配置文件。您还需要将所有数据集、分词器、脚本和输出移动到$SCRATCH磁盘空间上,以避免IO问题对其他用户造成影响。

3.5.1 从头开始进行预训练

一旦更新了SLURM参数,您必须将--model_type="camembert"标志中的模型架构名称更改为正在尝试训练的架构的规格。在我们的情况下,RoBERTa的序列长度为514,词汇量为32005(32K个分词器令牌和5个模型架构令牌),开始句子标记(BOS)和结束句子标记(EOS)的标识符分别为5和6。更改

然后,转到./from_scratch/目录。

运行sbatch ./run_training.sh将训练作业发送到SLURM队列中。

3.5.2 持续预训练

一旦更新了SLURM参数,您必须将想要从中开始的模型/分词器的路径--model_name_or_path=/--tokenizer_name=更改为从第3.3节中的HuggingFace Git下载的模型的路径。

然后,转到./continued_pretraining/目录。

运行sbatch ./run_training.sh将训练作业发送到SLURM队列中。

4. 在下游任务上进行微调

您只需按照HuggingFace团队 here 给出的任何示例中的指导,将模型名称更改为Dr-BERT/DrBERT-7GB。

引文BibTeX

@inproceedings{labrak2023drbert,
    title = {{DrBERT: A Robust Pre-trained Model in French for Biomedical and Clinical domains}},
    author = {Labrak, Yanis and Bazoge, Adrien and Dufour, Richard and Rouvier, Mickael and Morin, Emmanuel and Daille, Béatrice and Gourraud, Pierre-Antoine},
    booktitle = {Proceedings of the 61th Annual Meeting of the Association for Computational Linguistics (ACL'23), Long Paper},
    month = july,
    year = 2023,
    address = {Toronto, Canada},
    publisher = {Association for Computational Linguistics}
}