
Huggingface Hub의 모든 마스크 된 언어 모델 에서 하나의 배쉬 명령으로 증류 된 모델을 만듭니다.
특징:
먼저 프로젝트를 복제하고 종속성을 설치하십시오.
# clone project
git clone https://github.com/iPieter/universal-distillation
# install project
cd universal-distillation
pip install -e .
pip install -r requirements.txt이 튜토리얼에서는 명령 줄에서 증류 작업을 설정하는 방법을 보여줍니다. 두 가지가 필요합니다.
bert-base-uncased 모델을 사용합니다.우리는 Europarl Corpus의 영어 섹션을 사용할 것입니다. 이것은 전문 통역사와 번역가가 만든 유럽 문화의 매우 고품질 평행 코퍼스입니다. 오늘날 언어 코퍼스, 114MB에 불과하지만 증류 튜토리얼에는 괜찮습니다.
wget https://opus.nlpl.eu/download.php ? f = Europarl/v8/mono/en.txt.gz -O en.txt.gz
gunzip en.txt.gz 이제 데이터가 압축되어 있고 en.txt 파일에 저장됩니다.
이제 우리는 데이터를 가지고 있으며 교육을 시작할 수 있습니다. 교사 모델을 다운로드하면 자동으로 발생하므로 수동으로 수행 할 필요가 없습니다. 이것이 너무 오래 걸리기 때문에 훈련을 시도하고 싶다면, 예를 들어 타이밍 감각을 얻으려면 --limit_train_batches N 추가 할 수 있습니다. 이것은 훈련 중에 각 에포크를 N 배치로 제한합니다.
python universal_distillation/distillation.py
--batch_size 8
--gpus 1
--max_epochs 3
--save_dir my_distilled_model/
--teacher bert-base-uncased
--data en.txt 해당 명령을 실행하면 백그라운드에서 발생하는 몇 가지가 있습니다. 먼저이 도서관은 학생과 교사 모델을 만듭니다. 교사는 bert-base-uncased 있으며 학생은 기본적으로 교사와 동일한 아키텍처를 사용합니다. 머리 수는 더 작습니다. 물론, 당신은 소규모 학생들과 다르고 더 큰 교사를 혼합하고 일치시킬 수 있지만, 공연은 크게 다를 것입니다.
둘째, Huggingface Library는 교사 모델과 Tokenizer를 다운로드합니다. 셋째, 데이터 세트는 디스크에서로드되고 토큰 화제로 초기화되므로 토큰 화 자체는 기본적으로 나중에 발생합니다. 마지막으로 증류 루프가 시작됩니다.
마지막으로 Huggingface 라이브러리와 함께 모델을 사용할 수 있습니다! 학생 (Pytorch Model 및 Tokenizer)의 모든 파일은 앞에서 정의한 폴더에 저장됩니다 : my_distilled_model/ . 이 폴더에서 모델을 직접 가져와 마스킹 된 언어 모델링 작업을 3 줄만 테스트 할 수 있습니다.
from transformers import pipeline
p = pipeline ( "fill-mask" , model = "my_distilled_model/" )
p ( "This is a [MASK]." )이것은 해당 예 였지만, 이것은 종종 자신만의 도메인 적응 모델을 만들기에 충분합니다. 이 경우입니다
유사성을 사용하여 본질적인 평가를 실행할 수도 있습니다. 교사와 증류 모델을 지정해야하지만 평가 만 실행하면 두 인수 모두 대상 모델을 제공 할 수 있습니다.
python universal_distillation/evaluation.py
--gpus=0
--limit_test_batches=500
--teacher=pdelobelle/robbert-v2-dutch-base
--data=data/oscar_dutch/nl_dedup_part_2.txt
--checkpoint=DTAI-KULeuven/robbertje-39-gb-non-shuffled 이 코드베이스는 ECML-PKDD 2022 논문에도 사용되며, 여기서 언어 모델의 지식 증류를 공정성 제약 조건을 결합합니다. 우리가 논문에서 테스트 한 제약은 성별 대명사에 대한 straitforward 대체이지만, 코드는 단일 고정 대체를 지원합니다. 이들은 균등화하려는 토큰을 정의하여 증류 과정에 추가 할 수 있습니다. 예를 들어, he 와 she 2016 년과 2002 년 토큰 ID를 가지고 있으므로 두 토큰과 대체 쌍을 정의 할 수 있습니다. 두 토큰에 대한 확률은 평등 해집니다.
90 줄 주변의 universal-distillation/distillation.py 수정하여 토큰을 추가 할 수 있습니다. BaseTransformer 모델을 생성 할 때 제약 조건도 포함하는 것을 잊지 마십시오.
constraints = [[ 2016 , 2002 ]] # she # he
model = BaseTransformer ( args . teacher , constraints = constraints , ** vars ( args ))