英文

DrBERT:一种在生物医学和临床领域中鲁棒的预训练法语模型

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

1. DrBERT模型

DrBERT是一个基于法语RoBERTa训练的模型,训练数据集是一份名为NACHOS的法语医学文本数据集。使用法国国家科学研究中心(CNRS)的法国超级计算机,使用来自不同公开和私有来源的不同数量的数据来训练模型。为了防止泄露个人信息并遵守欧洲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来下载整个模型/分词器存储库。

通过使用./build_tokenizer.sh在./corpus.txt文件的数据上从头构建分词器。

3.4 数据集的预处理和分词

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

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

3.5 模型训练

首先,根据您的计算能力更改所需的GPU数量--ntasks=128,在名为run_training.sh的shell脚本中。在我们的情况下,我们使用了128个V100 32GB的GPU,来自4个GPU的32个节点(--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个模型架构的令牌),句子开头和结尾的标识符分别为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. 在下游任务上进行微调

您只需要将模型名称更改为Dr-BERT/DrBERT-7GB,并根据HuggingFace团队给出的示例 here 进行调整。

Citation 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}
}