英文

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

您可以按照 Hugging Face's Transformers library 的步骤使用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 Library从头开始预训练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 )。最后,您需要通过单击 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 模型训练

首先,根据您的计算能力更改 --ntasks=128 以匹配您所需的GPU数量,在名为 run_training.sh 的shell脚本中。在我们的情况下,我们使用了来自32个拥有4个GPU的节点的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节下载的模型/分词器的路径。

然后,转到 ./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}
}