英文

DrBERT: 用于生物医学和临床领域的强大的预训练模型(法语版)

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

1. DrBERT模型

DrBERT是一个使用CNRS(法国国家科学研究中心)的法语超级计算机,在一份名为NACHOS的开源法语医疗爬取文本数据语料库上进行训练的法语RoBERTa模型。我们使用了来自不同公共和私有数据源的不同数量的数据来训练这些模型。为了防止泄露个人信息并遵守欧洲的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-Large")
model = AutoModel.from_pretrained("Dr-BERT/DrBERT-7GB-Large")

执行遮掩填充任务:

from transformers import pipeline 

fill_mask  = pipeline("fill-mask", model="Dr-BERT/DrBERT-7GB-Large", tokenizer="Dr-BERT/DrBERT-7GB-Large")
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数据集文本文件

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

3.3 根据NACHOS构建自己的标记器

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

通过使用**./build_tokenizer.sh**在**./corpus.txt**文件的数据上从头开始构建标记器。

3.4 数据集的预处理和标记化

首先,将shell脚本的**tokenizer_path**字段替换为与之前使用HuggingFace Git下载的标记器目录的路径相匹配。

通过使用给定的标记器运行**./preprocessing_dataset.sh**以生成标记化的数据集。

3.5 模型训练

首先,在称为**run_training.sh**的shell脚本中修改所需的GPU数量**--ntasks=128**以匹配您的计算能力。在我们的案例中,我们使用了来自32个节点的128个V100 32 GB 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"**标志中的模型架构名称,并根据要训练的架构的规格更新**--config_overrides=**。在我们的案例中,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团队给出的任何示例中将模型名称更改为**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}
}