模型:
Dr-BERT/DrBERT-4GB-CP-PubMedBERT
近年来,预训练语言模型(PLMs)在广泛的自然语言处理(NLP)任务上取得了最佳性能。虽然最初的模型是在一般领域数据上进行训练的,但专门针对特定领域的模型也出现了,以更有效地处理特定领域的任务。在本文中,我们首次对医学领域的法语PLMs的性能进行了原始研究。我们比较了在公共数据(来自网络)和医疗机构的私有数据上训练的PLMs的性能。我们还评估了一组生物医学任务的不同学习策略。最后,我们发布了第一个用于法语生物医学领域的专门PLMs,称为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 |
您可以按照 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>")
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
从 Zenodo 下载完整的NACHOS数据集,并将其放置在 from_scratch 或 continued_pretraining 目录中。
注意:这一步仅适用于从头预训练的情况,如果要进行持续预训练,只需下载与您想要继续训练的模型相对应的模型和分词器即可。在这种情况下,您只需转到HuggingFace Hub,选择一个模型(例如 RoBERTa-base )。最后,您需要通过单击 Use In Transformers 按钮并获取Git链接 git clone https://huggingface.co/roberta-base 来下载完整的模型/分词器存储库。
使用 ./build_tokenizer.sh 在 ./corpus.txt 文件的数据上从头构建分词器。
首先,将shell脚本的 tokenizer_path 字段替换为您之前使用HuggingFace Git下载或构建的分词器目录的路径。
运行 ./preprocessing_dataset.sh 通过使用自动生成的分词器生成分词后的数据集。
首先,根据您的计算能力更改 --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问题。
更新SLURM参数后,您需要在 --model_type="camembert" 标志中更改模型架构的名称,并根据您要训练的架构的规格更新 --config_overrides= 。在我们的案例中,RoBERTa 的序列长度为 514,词汇表大小为 32005 (标记分词器的32K标记和模型架构的5个标记),句子开头标记(BOS)和句子结尾标记(EOS)的标识分别为 5 和 6 。
然后,转到 ./from_scratch/ 目录。
运行 sbatch ./run_training.sh 将训练作业发送到SLURM队列中。
更新SLURM参数后,您需要将 --model_name_or_path= 或 --tokenizer_name= 的路径更改为从第3.3节下载的模型/分词器的路径。
然后,转到 ./continued_pretraining/ 目录。
运行 sbatch ./run_training.sh 将训练作业发送到SLURM队列中。
你只需要在HuggingFace团队提供的任何示例中将模型的名称更改为 Dr-BERT/DrBERT-7GB。
@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} }