Ce référentiel est destiné à l'article « Représentations linguistiques bidirectionnelles profondes rapides et précises pour l'apprentissage non supervisé », qui décrit notre méthode en détail.
T-TA , ou Transformer -based T ext Autoencoder , est un nouveau modèle de langage bidirectionnel profond pour les tâches d'apprentissage non supervisées. T-TA apprend l'objectif d'apprentissage simple, l'autoencodage du langage , qui consiste à prédire simultanément tous les jetons d'une phrase en utilisant uniquement leur contexte. Contrairement au « modèle de langage masqué », T-TA dispose d'un mécanisme d'auto-masquage afin d'éviter de simplement copier l'entrée vers la sortie. Contrairement à BERT (qui sert à affiner l'ensemble du modèle pré-entraîné), T-TA est particulièrement bénéfique pour obtenir des intégrations contextuelles, qui sont des représentations fixes de chaque jeton d'entrée généré à partir des couches cachées du modèle de langage formé.
L'architecture du modèle T-TA est basée sur l'architecture du modèle BERT, qui est principalement une architecture Transformer standard. Notre code est basé sur le github BERT de Google, qui comprend des méthodes pour créer un vocabulaire personnalisé, préparer l'ensemble de données Wikipédia, etc.
Ubuntu 16.04 LTS
Python 3.6.10
TensorFlow 1.12.0
git clone https://github.com/joongbo/tta.git
cd tta
Nous publions le modèle T-TA pré-entraîné (fichier tar.gz de 262,2 Mo).
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 ..
Ensuite, le dossier tta -layer-3-enwiki-lower-sub-32k
apparaîtra dans le dossier model/
. Pour l'instant, le modèle fonctionne sur max_seq_length=128
.
Nous publions le code run_unsupervisedstsb.py
comme exemple d'utilisation de T-TA. Pour exécuter ce code, vous aurez peut-être besoin de plusieurs packages Python : numpy
, scipy
et sklearn
.
Pour obtenir l'ensemble de données STS Benchmark,
cd data
wget http://ixa2.si.ehu.es/stswiki/images/4/48/Stsbenchmark.tar.gz
tar -xvzf Stsbenchmark.tar.gz
cd ..
Ensuite, le dossier stsbenchmark
apparaîtra dans le dossier data/
.
Courir:
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
Sortir:
Diviser | r |
---|---|
STSb-dev | 71,88 |
Test STSb | 62.27 |
Nous publions les données texte uniquement prétraitées de librispeech (fichier tar.gz de 1,66 Go). Dans ce corpus, chaque ligne est une phrase unique, nous utilisons donc l'unité de phrase (plutôt que l'unité de paragraphe) pour une instance de formation. Les données originales peuvent être trouvées dans 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 ..
Ensuite, corpus-eval.librispeech-lower.sub-32k.txt
et corpus-train.librispeech-lower.sub-32k.txt
apparaîtront dans le dossier data/
.
Après avoir obtenu les données en texte brut prétraitées, nous créons des tfrecords (la création de tfrecords de données de train prend un certain temps) :
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
Nous entraînons le modèle (initialisation aléatoire) comme suit :
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
Pour une meilleure initialisation, nous pouvons ajouter une ligne --init_checkpoint "models/ tta -layer-3-enwiki-lower-sub-32k/model.ckpt"
(après téléchargement des poids pré-entraînés).
Tous les codes et modèles sont publiés sous la licence Apache 2.0. Voir le fichier LICENSE
pour plus d'informations.
Pour l'instant, citez l'article d'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}
}
Pour obtenir de l'aide ou des problèmes lors de l'utilisation de T-TA, veuillez soumettre un problème GitHub.
Pour toute communication personnelle liée à T-TA, veuillez contacter Joongbo Shin ( [email protected]
).