Este repositorio es para el artículo "Representaciones de lenguaje bidireccional profundas, rápidas y precisas para el aprendizaje no supervisado", que describe nuestro método en detalle.
T-TA , o Autoencoder de texto basado en transformador , es un nuevo modelo de lenguaje bidireccional profundo para tareas de aprendizaje no supervisadas. T-TA aprende el objetivo de aprendizaje sencillo, la codificación automática del lenguaje , que consiste en predecir todos los tokens de una oración a la vez utilizando solo su contexto. A diferencia del "modelo de lenguaje enmascarado", T-TA tiene un mecanismo de autoenmascaramiento para evitar simplemente copiar la entrada a la salida. A diferencia de BERT (que sirve para ajustar todo el modelo previamente entrenado), T-TA es especialmente beneficioso para obtener incrustaciones contextuales, que son representaciones fijas de cada token de entrada generado a partir de las capas ocultas del modelo de lenguaje entrenado.
La arquitectura del modelo T-TA se basa en la arquitectura del modelo BERT, que es principalmente una arquitectura Transformer estándar. Nuestro código se basa en BERT github de Google, que incluye métodos para crear vocabulario personalizado, preparar el conjunto de datos de Wikipedia, etc.
Ubuntu 16.04 LTS
Python 3.6.10
TensorFlow 1.12.0
git clone https://github.com/joongbo/tta.git
cd tta
Lanzamos el modelo T-TA previamente entrenado (archivo 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 ..
Luego, la carpeta tta -layer-3-enwiki-lower-sub-32k
aparecerá en la carpeta model/
. Por ahora, el modelo funciona con max_seq_length=128
.
Publicamos el código run_unsupervisedstsb.py
como ejemplo del uso de T-TA. Para ejecutar este código, es posible que necesite varios paquetes de Python: numpy
, scipy
y sklearn
.
Para obtener el conjunto de datos STS Benchmark,
cd data
wget http://ixa2.si.ehu.es/stswiki/images/4/48/Stsbenchmark.tar.gz
tar -xvzf Stsbenchmark.tar.gz
cd ..
Luego, la carpeta stsbenchmark
aparecerá en la carpeta data/
.
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
Producción:
Dividir | r |
---|---|
STSb-dev | 71,88 |
prueba STSb | 62,27 |
Publicamos los datos de solo texto preprocesados de librispeech (archivo tar.gz de 1,66 GB). En este corpus, cada línea es una sola oración, por lo que usamos la unidad de oración (en lugar de la unidad de párrafo) para una instancia de entrenamiento. Los datos originales se pueden encontrar en 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 ..
Luego, corpus-eval.librispeech-lower.sub-32k.txt
y corpus-train.librispeech-lower.sub-32k.txt
aparecerán en la carpeta data/
.
Después de obtener los datos de texto sin formato preprocesados, creamos tfrecords (lleva algo de tiempo crear tfrecords de datos del tren):
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
Entrenamos el modelo (inicialización aleatoria) de la siguiente manera:
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 una mejor inicialización, podemos agregar una línea --init_checkpoint "models/ tta -layer-3-enwiki-lower-sub-32k/model.ckpt"
(después de descargar los pesos previamente entrenados).
Todo el código y los modelos se publican bajo la licencia Apache 2.0. Consulte el archivo LICENSE
para obtener más información.
Por ahora, cite el artículo de 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 obtener ayuda o problemas con el uso de T-TA, envíe un problema de GitHub.
Para comunicación personal relacionada con T-TA, comuníquese con Joongbo Shin ( [email protected]
).