
Создайте дистиллированные модели из каждой модели языка в масках на концентраторе Huggingface с одной командой Bash.
Функции:
Во -первых, клонируйте проект и установите зависимости.
# 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. Это очень качественный параллельный корпус из европейского парламента, созданный профессиональными переводчиками и переводчиками. Это также довольно мало для языкового корпуса в настоящее время, всего 114 МБ, но для нашего руководства по дистилляции это нормально.
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 , и ученик будет использовать ту же архитектуру, что и учитель по умолчанию, только количество голов меньше: 6 вместо 12. Поскольку мы тренируемся в определенном домене (Europarl), этого должно быть достаточно. Конечно, вы можете смешивать и сочетать разных и больших учителей с меньшими учениками, но производительность будет сильно различаться.
Во -вторых, библиотека Huggingface загружает модель учителя и токенизатор. В -третьих, набор данных загружается с диска и инициализируется с помощью токенизатора, обратите внимание, что сама токенизация происходит позже по умолчанию. Наконец, петля дистилляции начинается.
Наконец, вы можете использовать модель с библиотекой HuggingFace! Все файлы от студента (модель Pytorch и токенизатор) сохраняются в папке, которую мы определили ранее: 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, где мы объединяем дистилляцию знаний языковых моделей с ограничениями справедливости. Ограничения, которые мы протестировали в статье, представляют собой замену гендерных месторождений, но код поддерживает любую замену с одной точками. Они могут быть добавлены в процесс дистилляции, определив, какие токены вы хотите выравнивать. Например, he и she есть токеновые идентификаторы 2016 и 2002 года, поэтому мы можем определить пару замены с обоими токенами. Вероятности по сравнению с обоим токенами выравниваются.
Вы можете добавить токены, изменяя universal-distillation/distillation.py BaseTransformer
constraints = [[ 2016 , 2002 ]] # she # he
model = BaseTransformer ( args . teacher , constraints = constraints , ** vars ( args ))