模型:
Dr-BERT/DrBERT-7GB
近年来,预训练语言模型(PLMs)在各种自然语言处理(NLP)任务上取得了最佳性能。虽然最初的模型是在通用领域数据上训练的,但专用领域的模型已经出现,以更有效地处理特定领域的任务。在本文中,我们首次提出了对法语医学领域中PLMs的研究。我们对比了在公开网络数据和医疗机构的私有数据上训练的PLMs的性能。我们还评估了一组生物医学任务的不同学习策略。最后,我们发布了首个专门针对法语生物医学领域的PLMs,称为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 |
您可以按照以下方式使用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 )。最后,通过单击“在Transformers中使用”按钮并获取Git链接git clone https://huggingface.co/roberta-base来下载整个模型/分词器存储库。
通过使用./build_tokenizer.sh在./corpus.txt文件的数据上从头构建分词器。
首先,将shell脚本中的tokenizer_path字段替换为与之前使用HuggingFace Git下载或构建的分词器目录的路径相匹配。
通过使用给定的分词器运行./preprocessing_dataset.sh生成分词后的数据集。
首先,根据您的计算能力更改所需的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问题。
更新SLURM参数后,您必须更改--model_type="camembert"标志中的模型架构名称,并根据要训练的架构的规格更新--config_overrides=。在我们的案例中,RoBERTa的序列长度为514,词汇表包含32005个(32K令牌的分词器和5个模型架构的令牌),句子开头和结尾的标识符分别为5和6。更改
然后,转到./from_scratch/目录。
运行sbatch ./run_training.sh将训练作业发送到SLURM队列。
更新SLURM参数后,您必须将要从中开始的模型/分词器的路径--model_name_or_path=/--tokenizer_name=更改为在第3.3节中从HuggingFace的Git下载的模型的路径。
然后,进入./continued_pretraining/目录。
运行sbatch ./run_training.sh将训练作业发送到SLURM队列。
您只需要将模型名称更改为Dr-BERT/DrBERT-7GB,并根据HuggingFace团队给出的示例 here 进行调整。
@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} }