Files
microsoft--unilm/adalm/README.md
T
2026-07-13 13:24:13 +08:00

173 lines
6.1 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# AdaLM
**Domain, language and task adaptation of pre-trained models.**
[Adapt-and-Distill: Developing Small, Fast and Effective Pretrained Language Models for Domains.](https://arxiv.org/abs/2106.13474)
Yunzhi Yao, Shaohan Huang, Wenhui Wang, Li Dong and Furu Wei, [ACL 2021](#)
This repository includes the code to finetune the adapted domain-specific model on downstrem tasks and the [code](https://github.com/microsoft/unilm/tree/master/adalm/incr_bpe) to generate incremental vocabulary for specific domain.
### Pre-trained Model
The adapted domain-specific model can be download:
- ***AdaLM-bio-base*** 12-layer, 768-hidden, 12-heads, 132M parameters || [One Drive](https://1drv.ms/u/s!AmcFNgkl1JIngxOqGWQk1u9G4mXf?e=Pa2RGC)
- ***AdaLM-bio-small*** 6-layer, 384-hidden, 12-heads, 34M parameters || [One Drive](https://1drv.ms/u/s!AmcFNgkl1JIngxQPKamwrRUelGUJ?e=qtmFHC)
- ***AdaLM-cs-base*** 12-layer, 768-hidden, 12-heads, 124M parameters || [One Drive](https://1drv.ms/u/s!AmcFNgkl1JIngxE_1VEP9gHU7mUe?e=XZemIz)
- ***AdaLM-cs-small*** 6-layer, 384-hidden, 12-heads, 30M parameters || [One Drive](https://1drv.ms/u/s!AmcFNgkl1JIngxJrUlHJbE4HY9Ev?e=PBaTNy)
### Fine-tuning Examples
#### Requirements
Install the requirements:
```bash
pip install -r requirements.txt
```
Add the project to your PYTHONPATH
```bash
export PYTHONPATH=$PYTHONPATH:`pwd`
```
#### Download Fine-tune Datasets
The biomedical downstream task can be download from [BLURB Leaderboard ](https://microsoft.github.io/BLURB/). The computer science tasks can be download from [allenai](https://github.com/allenai/dont-stop-pretraining)
#### Finetune Classification Task
```bash
# Set path to read training/dev dataset
export DATASET_PATH=/path/to/read/glue/task/data/ # Example: "/path/to/downloaded-glue-data-dir/mnli/"
# Set path to save the finetuned model and result score
export OUTPUT_PATH=/path/to/save/result_of_finetuning
export TASK_NAME=chemprot
# Set path to the model checkpoint you need to test
export CKPT_PATH=/path/to/your/model/checkpoint
# Set config file
export CONFIG_FILE=/path/to/config/file
# Set vocab file
export VOCAB_FILE=/path/to/vocab/file
# Set path to cache train & dev features (tokenized, only use for this tokenizer!)
export TRAIN_CACHE=${DATASET_PATH}/$TASK_NAME.bert.cache
export DEV_CACHE=${DATASET_PATH}/$TASK_NAME.bert.cache
# Setting the hyperparameters for the run.
export BSZ=32
export LR=1.5e-5
export EPOCH=30
export WD=0.1
export WM=0.1
CUDA_VISIBLE_DEVICES=0 python finetune/run_classifier.py \
--model_type bert --model_name_or_path $CKPT_PATH \
--config_name $CONFIG_FILE --tokenizer_name $VOCAB_FILE --do_lower_case\
--data_dir $DATASET_PATH --cached_train_file $TRAIN_CACHE --cached_dev_file $DEV_CACHE \
--do_train --do_eval --logging_steps 1000 --output_dir $OUTPUT_PATH --max_grad_norm 0 \
--max_seq_length 128 --per_gpu_train_batch_size $BSZ --learning_rate $LR \
--num_train_epochs $EPOCH --weight_decay $WD --warmup_ratio $WM \
--fp16 --fp16_opt_level O2 --seed 42 --overwrite_output_dir
```
#### Finetune NER Task
To finetune the PICO task, just need to change the run_ner to run_pico.
```bash
# Set path to read training/dev dataset
export DATASET_PATH=/path/to/ner/task/data/
# Set path to save the finetuned model and result score
export OUTPUT_PATH=/path/to/save/result_of_finetuning
export TASK_NAME=chemprot
# Set path to the model checkpoint you need to test
export CKPT_PATH=/path/to/your/model/checkpoint
# Set config file
export CONFIG_FILE=/path/to/config/file
# Set vocab file
export VOCAB_FILE=/path/to/vocab/file
# Set label file such as the BIO tag
export LABEL_FILE=/path/to/vocab/file
# Set path to cache train & dev features (tokenized, only use for this tokenizer!)
export CACHE_DIR=/path/to/cache
# Setting the hyperparameters for the run.
export BSZ=16
export LR=1.5e-5
export EPOCH=30
export WD=0.1
export WM=0.1
CUDA_VISIBLE_DEVICES=0 python finetune/run_ner.py \
--model_type bert --model_name_or_path $CKPT_PATH \
--config_name $CONFIG_FILE --tokenizer_name $VOCAB_FILE --do_lower_case\
--data_dir $DATASET_PATH--cache_dir $CACHE_DIR --labels $LABEL_FILE \
--do_train --do_eval --logging_steps 1000 --output_dir $OUTPUT_PATH --max_grad_norm 0 \
--max_seq_length 128 --per_gpu_train_batch_size $BSZ --learning_rate $LR \
--num_train_epochs $EPOCH --weight_decay $WD --warmup_ratio $WM \
--fp16 --fp16_opt_level O2 --seed 42 --overwrite_output_dir
```
#### Results
**Biomedical**
| | JNLPBA | PICO | ChemProt | Average |
| --------------- | --------- | --------- | --------- | --------- |
| BERT | 78.63 | 72.34 | 71.86 | 74.28 |
| BioBERT | 79.35 | 73.18 | 76.14 | 76.22 |
| PubmedBERT | **80.06** | 73.38 | 77.24 | 76.89 |
| AdaLM-bio-base | 79.46 | **75.47** | **78.41** | **77.74** |
| AdaLM-bio-small | 79.04 | 74.91 | 72.06 | 75.34 |
**Computer Science**
| | ACL-ARC | SCIERC | Average |
| -------------- | --------- | --------- | --------- |
| BERT | 64.92 | 81.14 | 73.03 |
| AdaLM-cs-base | **73.61** | **81.91** | **77.76** |
| AdaLM-cs-small | 68.74 | 78.88 | 73.81 |
<!--
## Citation
If you find LayoutLM useful in your research, please cite the following paper:
``` latex
@misc{xu2019layoutlm,
title={LayoutLM: Pre-training of Text and Layout for Document Image Understanding},
author={Yiheng Xu and Minghao Li and Lei Cui and Shaohan Huang and Furu Wei and Ming Zhou},
year={2019},
eprint={1912.13318},
archivePrefix={arXiv},
primaryClass={cs.CL}
}
```
-->
## License
This project is licensed under the license found in the LICENSE file in the root directory of this source tree.
Portions of the source code are based on the [transformers](https://github.com/huggingface/transformers) project.
[Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct)
### Contact Information
For help or issues using AdaLM, please submit a GitHub issue.
For other communications related to AdaLM, please contact Shaohan Huang (`shaohanh@microsoft.com`), Furu Wei (`fuwei@microsoft.com`).