O aumento de dados não supervisionado ou UDA é um método de aprendizado semi-supervisionado que atinge os resultados de ponta em uma ampla variedade de tarefas de linguagem e visão.
Com apenas 20 exemplos rotulados, a UDA supera o estado da arte anterior no IMDB treinado em 25.000 exemplos rotulados.
| Modelo | Número de exemplos rotulados | Taxa de erro |
|---|---|---|
| IVA misto (Anterior. Sota) | 25.000 | 4.32 |
| Bert | 25.000 | 4.51 |
| Uda | 20 | 4.20 |
Reduz mais de 30% da taxa de erro dos métodos de última geração no CIFAR-10 com 4.000 exemplos rotulados e SVHN com 1.000 exemplos rotulados:
| Modelo | Cifar-10 | Svhn |
|---|---|---|
| TIC (Anterior. Sota) | 7,66 ± .17 | 3,53 ± 0,07 |
| Uda | 4,31 ± 0,08 | 2,28 ± 0,10 |
Isso leva a melhorias significativas no ImageNet com 10% de dados rotulados.
| Modelo | Precisão Top-1 | Top-5 precisão |
|---|---|---|
| Resnet-50 | 55.09 | 77.26 |
| Uda | 68.78 | 88,80 |
O UDA é um método de aprendizado semi-supervisionado , que reduz a necessidade de exemplos rotulados e utiliza melhor os não marcados.
Estamos lançando o seguinte:
Todo o código deste repositório trabalha fora da caixa com a GPU e o Google Cloud TPU.
O código é testado no Python 2.7 e no Tensorflow 1.13. Depois de instalar o TensorFlow, execute o seguinte comando para instalar dependências:
pip install --user absl-pyGeramos 100 exemplos aumentados para cada exemplo original. Para baixar todos os dados aumentados, vá para o diretório de imagem e execute
AUG_COPY=100
bash scripts/download_cifar10.sh ${AUG_COPY}Observe que você precisa de espaço em disco de 120g para todos os dados aumentados. Para economizar espaço, você pode definir Aug_copy para um número menor, como 30.
Como alternativa, você pode gerar os exemplos aumentados executando
AUG_COPY=100
bash scripts/preprocess.sh --aug_copy= ${AUG_COPY}Comando GPU:
# UDA accuracy:
# 4000: 95.68 +- 0.08
# 2000: 95.27 +- 0.14
# 1000: 95.25 +- 0.10
# 500: 95.20 +- 0.09
# 250: 94.57 +- 0.96
bash scripts/run_cifar10_gpu.sh --aug_copy= ${AUG_COPY} # UDA accuracy:
# 4000: 97.72 +- 0.10
# 2000: 97.80 +- 0.06
# 1000: 97.77 +- 0.07
# 500: 97.73 +- 0.09
# 250: 97.28 +- 0.40
bash scripts/run_svhn_gpu.sh --aug_copy= ${AUG_COPY} Os textos de revisão de filmes no IMDB são mais longos do que muitas tarefas de classificação, portanto, o uso de um comprimento de sequência mais longo leva a melhores desempenhos. Os comprimentos da sequência são limitados pela memória TPU/GPU ao usar o BERT (consulte os problemas fora da memória do BERT). Como tal, fornecemos scripts para executar com comprimentos de sequência mais curtos e tamanhos menores de lote.
Se você deseja executar o UDA com a base Bert em uma GPU com memória de 11 GB, vá para o diretório de texto e execute os seguintes comandos:
# Set a larger max_seq_length if your GPU has a memory larger than 11GB
MAX_SEQ_LENGTH=128
# Download data and pretrained BERT checkpoints
bash scripts/download.sh
# Preprocessing
bash scripts/prepro.sh --max_seq_length= ${MAX_SEQ_LENGTH}
# Baseline accuracy: around 68%
bash scripts/run_base.sh --max_seq_length= ${MAX_SEQ_LENGTH}
# UDA accuracy: around 90%
# Set a larger train_batch_size to achieve better performance if your GPU has a larger memory.
bash scripts/run_base_uda.sh --train_batch_size=8 --max_seq_length= ${MAX_SEQ_LENGTH}
O melhor desempenho no artigo é alcançado usando um max_seq_length de 512 e inicializando com Bert grande fino em dados não supervisionados no domínio. Se você tiver acesso ao Google Cloud TPU V3-32 POD, tente:
MAX_SEQ_LENGTH=512
# Download data and pretrained BERT checkpoints
bash scripts/download.sh
# Preprocessing
bash scripts/prepro.sh --max_seq_length= ${MAX_SEQ_LENGTH}
# UDA accuracy: 95.3% - 95.9%
bash train_large_ft_uda_tpu.shPrimeiro de tudo, instale as seguintes dependências:
pip install --user nltk
python -c " import nltk; nltk.download('punkt') "
pip install --user tensor2tensor==1.13.4O comando a seguir traduz o arquivo de exemplo fornecido. Ele divide automaticamente os parágrafos em frases, traduz frases em inglês para o francês e depois as traduz de volta para o inglês. Finalmente, ele compõe as frases parafraseadas em parágrafos. Vá para o diretório back_translate e corra:
bash download.sh
bash run.shExiste uma variável sampling_temp no arquivo bash. É usado para controlar a diversidade e a qualidade das paráfrases. O aumento da amostragem_Temp levará a maior diversidade, mas pior qualidade. Surpreendentemente, a diversidade é mais importante que a qualidade para muitas tarefas que tentamos.
Sugerimos tentar definir sampling_temp como 0,7, 0,8 e 0,9. Se sua tarefa for muito robusta ao ruído, sampling_temp = 0,9 ou 0,8 deve levar a um desempenho aprimorado. Se sua tarefa não for robusta ao ruído, a configuração da temperatura de amostragem para 0,7 ou 0,6 deve ser melhor.
Se você deseja fazer a tradução de volta para um arquivo grande, pode alterar as réplicas e os argumentos trabalhadores_id em run.sh. Por exemplo, quando as réplicas = 3, dividimos os dados em três partes, e cada execução.
A UDA trabalha fora da caixa e não requer ajuste extenso hiperparâmetro, mas para realmente empurrar o desempenho, aqui estão sugestões sobre hiperparamters:
Uma grande parte do código é retirada de Bert e Randaugment. Obrigado!
Cite este artigo se você usar o UDA.
@article{xie2019unsupervised,
title={Unsupervised Data Augmentation for Consistency Training},
author={Xie, Qizhe and Dai, Zihang and Hovy, Eduard and Luong, Minh-Thang and Le, Quoc V},
journal={arXiv preprint arXiv:1904.12848},
year={2019}
}
Cite também este artigo se você usar o UDA para imagens.
@article{cubuk2019randaugment,
title={RandAugment: Practical data augmentation with no separate search},
author={Cubuk, Ekin D and Zoph, Barret and Shlens, Jonathon and Le, Quoc V},
journal={arXiv preprint arXiv:1909.13719},
year={2019}
}
Este não é um produto do Google oficialmente suportado.