このリポジトリは、私たちの方法を詳細に説明した論文「教師なし学習のための高速かつ正確なディープ双方向言語表現」のためのものです。
T-TA (トランスフォーマベースのテキストオートエンコーダ) は、教師なし学習タスク用の新しい深い双方向言語モデルです。 T-TA は、コンテキストのみを使用して文内のすべてのトークンを一度に予測する、単純な学習目標である言語自動エンコーディングを学習します。 「マスクされた言語モデル」とは異なり、T-TA には入力を単に出力にコピーすることを避けるために自己マスク機構があります。 BERT (事前トレーニングされたモデル全体を微調整するためのもの) とは異なり、T-TA は、トレーニングされた言語モデルの隠れ層から生成された各入力トークンの固定表現であるコンテキスト エンベディングを取得するのに特に有益です。
T-TA モデル アーキテクチャは、ほとんどが標準の Transformer アーキテクチャである BERT モデル アーキテクチャに基づいています。私たちのコードは Google の BERT github に基づいており、カスタマイズされた語彙の構築、Wikipedia データセットの準備などのメソッドが含まれています。
Ubuntu 16.04 LTS
Python 3.6.10
TensorFlow 1.12.0
git clone https://github.com/joongbo/tta.git
cd tta
事前トレーニング済み T-TA モデル (262.2 MB tar.gz ファイル) をリリースします。
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 ..
すると、 model/
フォルダ内にtta -layer-3-enwiki-lower-sub-32k
フォルダが出現します。現時点では、モデルはmax_seq_length=128
で動作します。
T-TA の使用例としてコードrun_unsupervisedstsb.py
公開します。このコードを実行するには、いくつかの Python パッケージ ( numpy
、 scipy
、およびsklearn
が必要になる場合があります。
STS ベンチマーク データセットを取得するには、
cd data
wget http://ixa2.si.ehu.es/stswiki/images/4/48/Stsbenchmark.tar.gz
tar -xvzf Stsbenchmark.tar.gz
cd ..
するとdata/
フォルダ内にstsbenchmark
フォルダが出現します。
走る:
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
出力:
スプリット | r |
---|---|
STSb-dev | 71.88 |
STSb テスト | 62.27 |
前処理済みのlibrispeech テキストのみのデータ (1.66 GB tar.gz ファイル) を公開します。このコーパスでは、各行が 1 つの文であるため、トレーニング インスタンスには段落単位ではなく文単位を使用します。元のデータは 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 ..
するとdata/
フォルダにcorpus-eval.librispeech-lower.sub-32k.txt
とcorpus-train.librispeech-lower.sub-32k.txt
が出現します。
前処理されたプレーン テキスト データを取得した後、tfrecord を作成します (トレイン データの tfrecord の作成には時間がかかります)。
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
次のようにモデルをトレーニングします (ランダム初期化)。
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
初期化をより適切に行うために、行--init_checkpoint "models/ tta -layer-3-enwiki-lower-sub-32k/model.ckpt"
を追加できます (事前トレーニングされた重みをダウンロードした後)。
すべてのコードとモデルは、Apache 2.0 ライセンスに基づいてリリースされています。詳細については、 LICENSE
ファイルを参照してください。
ここでは、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}
}
T-TA の使用に関するヘルプや問題が必要な場合は、GitHub の問題を送信してください。
T-TAに関する個人的な連絡は、Joongbo Shin ( [email protected]
) までご連絡ください。