🚀 DrBERT:面向生物醫學和臨床領域的強大法語預訓練模型
近年來,預訓練語言模型(PLMs)在自然語言處理(NLP)任務中取得了優異的成績。最初的模型是在通用領域數據上進行訓練的,而如今,為了更有效地處理特定領域的問題,專門的預訓練模型應運而生。本文提出了一項關於法語醫學領域預訓練語言模型的原創研究。我們首次比較了在網絡公共數據和醫療機構私有數據上訓練的預訓練語言模型的性能,並在一組生物醫學任務上評估了不同的學習策略。最後,我們發佈了首個法語生物醫學領域的專業預訓練語言模型 DrBERT,以及這些模型所使用的最大規模的免費許可醫學數據語料庫。
✨ 主要特性
- 領域針對性:DrBERT 是專門為法語生物醫學和臨床領域設計的預訓練模型,能更有效地處理該領域的特定任務。
- 多數據源訓練:使用來自網絡公共數據和醫療機構私有數據進行訓練,提升模型的泛化能力和專業性。
- 模型多樣:提供了不同數據量訓練的模型,如
DrBERT - 7 - GB - cased - Large
、DrBERT - 7 - GB - cased
等,滿足不同需求。
📦 安裝指南
安裝依賴
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
下載 NACHOS 數據集文本文件
從 Zenodo 下載完整的 NACHOS 數據集,並將其放置在 from_scratch
或 continued_pretraining
目錄中。
💻 使用示例
基礎用法
加載模型和分詞器:
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>")
高級用法
從頭開始預訓練 DrBERT 分詞器和模型
基於 NACHOS 從頭構建自己的分詞器
注意:此步驟僅在從頭開始預訓練時需要。如果要進行繼續預訓練,只需從 HuggingFace Hub 下載對應模型和分詞器(例如 [RoBERTa - base](https://huggingface.co/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
以使用給定的分詞器生成分詞後的數據集。
模型訓練
首先,在 run_training.sh
腳本中更改所需的 GPU 數量 --ntasks = 128
以匹配您的計算能力。例如,使用 32 個節點(每個節點 4 個 GPU,即 --ntasks - per - node = 4
和 --gres = gpu:4
)的 128 個 V100 32GB GPU 進行 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 節中從 HuggingFace 的 Git 下載的模型路徑。
然後,進入 ./continued_pretraining/
目錄。
運行 sbatch ./run_training.sh
將訓練任務提交到 SLURM 隊列。
下游任務微調
只需在 HuggingFace 團隊提供的 示例 中將模型名稱更改為 Dr - BERT/DrBERT - 7GB
即可。
📚 詳細文檔
DrBERT 模型
模型名稱 |
語料庫 |
層數 |
注意力頭數 |
嵌入維度 |
序列長度 |
模型鏈接 |
DrBERT - 7 - GB - cased - Large |
NACHOS 7 GB |
24 |
16 |
1024 |
512 |
[HuggingFace](https://huggingface.co/Dr - BERT/DrBERT - 7GB - Large) |
DrBERT - 7 - GB - cased |
NACHOS 7 GB |
12 |
12 |
768 |
512 |
[HuggingFace](https://huggingface.co/Dr - BERT/DrBERT - 7GB) |
DrBERT - 4 - GB - cased |
NACHOS 4 GB |
12 |
12 |
768 |
512 |
[HuggingFace](https://huggingface.co/Dr - BERT/DrBERT - 4GB) |
DrBERT - 4 - GB - cased - CP - CamemBERT |
NACHOS 4 GB |
12 |
12 |
768 |
512 |
[HuggingFace](https://huggingface.co/Dr - BERT/DrBERT - 4GB - CP - CamemBERT) |
DrBERT - 4 - GB - cased - CP - PubMedBERT |
NACHOS 4 GB |
12 |
12 |
768 |
512 |
[HuggingFace](https://huggingface.co/Dr - BERT/DrBERT - 4GB - CP - PubMedBERT) |
📄 許可證
本項目採用 Apache - 2.0 許可證。
📚 引用
@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}
}