Este repositório é para o artigo "Representações de linguagem bidirecional profundas rápidas e precisas para aprendizagem não supervisionada", que descreve nosso método em detalhes.
T-TA , ou Transformer -based Text Autoencoder , é um novo modelo de linguagem bidirecional profundo para tarefas de aprendizagem não supervisionadas. O T-TA aprende o objetivo de aprendizagem simples, codificação automática de linguagem , que consiste em prever todos os tokens em uma frase de uma só vez, usando apenas seu contexto. Ao contrário do "modelo de linguagem mascarada", o T-TA possui mecanismo de automascaramento para evitar a mera cópia da entrada para a saída. Ao contrário do BERT (que serve para ajustar todo o modelo pré-treinado), o T-TA é especialmente benéfico para obter embeddings contextuais, que são representações fixas de cada token de entrada gerado a partir das camadas ocultas do modelo de linguagem treinado.
A arquitetura do modelo T-TA é baseada na arquitetura do modelo BERT, que é principalmente uma arquitetura padrão do Transformer. Nosso código é baseado no github BERT do Google, que inclui métodos para construir vocabulário personalizado, preparar o conjunto de dados da Wikipedia, etc.
Ubuntu 16.04 LTS
Python 3.6.10
TensorFlow 1.12.0
git clone https://github.com/joongbo/tta.git
cd tta
Lançamos o modelo T-TA pré-treinado (arquivo tar.gz de 262,2 MB).
cd models
wget http://milabfile.snu.ac.kr:16000/tta/ tta -layer-3-enwiki-lower-sub-32k.tar.gz
tar -xvzf tta -layer-3-enwiki-lower-sub-32k.tar.gz
cd ..
Então, a pasta tta -layer-3-enwiki-lower-sub-32k
aparecerá na pasta model/
. Por enquanto, o modelo funciona em max_seq_length=128
.
Lançamos o código run_unsupervisedstsb.py
como exemplo de uso do T-TA. Para executar este código, você pode precisar de vários pacotes python: numpy
, scipy
e sklearn
.
Para obter o conjunto de dados STS Benchmark,
cd data
wget http://ixa2.si.ehu.es/stswiki/images/4/48/Stsbenchmark.tar.gz
tar -xvzf Stsbenchmark.tar.gz
cd ..
Então, a pasta stsbenchmark
aparecerá em data/
folder.
Correr:
python run_unsupervisedstsb.py
--config_file models/ tta -layer-3-enwiki-lower-sub-32k/config.layer-3.vocab-lower.sub-32k.json
--model_checkpoint models/ tta -layer-3-enwiki-lower-sub-32k/model.ckpt
--vocab_file models/ tta -layer-3-enwiki-lower-sub-32k/vocab-lower.sub-32k.txt
Saída:
Dividir | R |
---|---|
STSb-dev | 71,88 |
Teste STSb | 62,27 |
Liberamos os dados somente texto do librispeech pré-processados (arquivo tar.gz de 1,66 GB). Neste corpus, cada linha é uma única frase, portanto usamos a unidade de frase (em vez da unidade de parágrafo) para uma instância de treinamento. Os dados originais podem ser encontrados no LibriSpeech-LM.
cd data
wget http://milabfile.snu.ac.kr:16000/tta/corpus.librispeech-lower.sub-32k.tar.gz
tar -xvzf corpus.librispeech-lower.sub-32k.tar.gz
cd ..
Então, corpus-eval.librispeech-lower.sub-32k.txt
e corpus-train.librispeech-lower.sub-32k.txt
aparecerão na pasta data/
.
Depois de obter os dados de texto simples pré-processados, criamos tfrecords (leva algum tempo para criar tfrecords de dados de trem):
rm tfrecords/ tta -librispeech-lower-sub-32k # delete dummy (symbolic link)
python create_tfrecords.py
--input_file data/corpus-eval.librispeech-lower.sub-32k.txt
--vocab_file configs/vocab-lower.sub-32k.txt
--output_file tfrecords/ tta -librispeech-lower-sub-32k/eval.tfrecord
--num_output_split 1
python create_tfrecords.py
--input_file data/corpus-train.librispeech-lower.sub-32k.txt
--vocab_file configs/vocab-lower.sub-32k.txt
--output_file tfrecords/ tta -librispeech-lower-sub-32k/train.tfrecord
Treinamos o modelo (inicialização aleatória) da seguinte forma:
python run_training.py
--config_file configs/config.layer-3.vocab-lower.sub-32k.json
--input_file " tfrecords/ tta -librispeech-lower-sub-32k/train-* "
--eval_input_file " tfrecords/ tta -librispeech-lower-sub-32k/eval-* "
--output_dir " models/ tta -layer-3-librispeech-lower-sub-32k "
--num_train_steps 2000000
--num_warmup_steps 50000
--learning_rate 0.0001
Para uma melhor inicialização, podemos adicionar uma linha --init_checkpoint "models/ tta -layer-3-enwiki-lower-sub-32k/model.ckpt"
(após baixar os pesos pré-treinados).
Todos os códigos e modelos são lançados sob a licença Apache 2.0. Consulte o arquivo LICENSE
para obter mais informações.
Por enquanto, cite o artigo do Arxiv:
@article{shin2020fast,
title={Fast and Accurate Deep Bidirectional Language Representations for Unsupervised Learning},
author={Shin, Joongbo and Lee, Yoonhyung and Yoon, Seunghyun and Jung, Kyomin},
journal={arXiv preprint arXiv:2004.08097},
year={2020}
}
Para obter ajuda ou problemas ao usar o T-TA, envie um problema do GitHub.
Para comunicação pessoal relacionada ao T-TA, entre em contato com Joongbo Shin ( [email protected]
).