Este repositório contém código-fonte para o nosso artigo de descobertas do EMNLP 2020: Domínio Adversarial Tuneamento fino como um regularizador eficaz.
Neste trabalho, propomos um novo tipo de regularizador para o processo de ajuste fino dos modelos de idiomas pré-treinados (LMS). Identificamos a perda de representações de domínio geral do LMS pré-terenciado durante o ajuste fino como uma forma de esquecimento catastrófico . O termo adversário atua como um regularizador que preserva a maior parte do conhecimento capturado pelo LM durante o pré -treinamento, impedindo o esquecimento catastrófico.
Para abordá-lo, estendemos o processo de ajuste fino padrão de LMS pré-treinamento com um objetivo contraditório. Esse termo de perda adicional está relacionado a um classificador adversário, que discrimina entre representações de texto no domínio e fora do domínio .
No domínio : conjunto de dados rotulado da tarefa ( principal ) em questão
Fora do domínio : dados não marcados de um domínio diferente ( auxiliar )
Minimizamos a perda específica da tarefa e, ao mesmo tempo, maximiza a perda do classificador de domínio usando uma camada de reversão de gradiente.
A função de perda que propomos é a seguinte:
L após = l main - λl domínio
Onde L Main é a perda específica da tarefa e o domínio L uma perda adversária que aplica invariância das representações de texto em diferentes domínios, enquanto o ajuste fino. λ é um hiperparâmetro ajustável.

Experimentos em 4 conjuntos de dados de cola (Cola, MRPC, SST-2 e RTE) com dois LMs pré-treinados diferentes (BERT e XLNET) demonstram melhor desempenho em relação ao ajuste fino padrão. Mostramos empiricamente que o termo adversário atua como um regularizador que preserva a maior parte do conhecimento capturado pelo LM durante o pré -treinamento, impedindo o esquecimento catastrófico.
Criar ambiente (opcional): Idealmente, você deve criar um ambiente para o projeto.
conda create -n after_env python=3.6
conda activate after_env
Instale o Pytorch 1.1.0 com a versão CUDA desejada, se desejar usar a GPU:
conda install pytorch==1.1.0 torchvision -c pytorch
Clone o projeto:
git clone https://github.com/GeorgeVern/AFTERV1.0.git
cd AFTERV1.0
Em seguida, instale o restante dos requisitos:
pip install -r requirements.txt
Para baixar os principais conjuntos de dados, usamos o script download_glue_data.py aqui. Você pode escolher os conjuntos de dados usados no artigo executando o seguinte comando:
python download_glue_data.py --data_dir './Datasets' --tasks 'CoLA,SST,RTE,MRPC
O caminho padrão para os conjuntos de dados é Afterv1.0/conjuntos de dados, mas qualquer outro caminho pode ser usado (deve concordar com o caminho DATA_DIR especificado no script sys_config )
Como dados auxiliares, usamos corpora de vários domínios. Fornecemos scripts para baixar e pré -processar os corpora usados em nossos experimentos, enquanto qualquer outro corpora também pode ser usado.
Para correr depois com Bert, você precisa do seguinte comando:
python after_fine-tune.py -i afterBert_finetune_cola_europarl --lambd 0.1
lambd refere -se ao Lambda, o peso da função de perda articular que usamos.
Em configs/ , você pode ver uma lista de arquivos YAML que usamos para as experiências e também pode alterar seus hiperparâmetros.
Se você usar este repositório em sua pesquisa, cite o artigo:
@inproceedings{vernikos-etal-2020-domain,
title = "{D}omain {A}dversarial {F}ine-{T}uning as an {E}ffective {R}egularizer",
author = "Vernikos, Giorgos and
Margatina, Katerina and
Chronopoulou, Alexandra and
Androutsopoulos, Ion",
booktitle = "Findings of the Association for Computational Linguistics: EMNLP 2020",
year = "2020",
url = "https://www.aclweb.org/anthology/2020.findings-emnlp.278",
doi = "10.18653/v1/2020.findings-emnlp.278",
pages = "3103--3112",
}