chore: import upstream snapshot with attribution
This commit is contained in:
@@ -0,0 +1,39 @@
|
||||
# Adaptive Input Representations for Neural Language Modeling (Baevski and Auli, 2018)
|
||||
|
||||
## Pre-trained models
|
||||
|
||||
Description | Parameters | Dataset | Model and Test set(s)
|
||||
---|---:|---|---
|
||||
Adaptive Inputs <br> ([Baevski and Auli, 2018](https://arxiv.org/abs/1809.10853)) | 1026M | [Google Billion Words](https://github.com/ciprian-chelba/1-billion-word-language-modeling-benchmark) | [download (.tar.bz2)](https://dl.fbaipublicfiles.com/fairseq/models/lm/adaptive_lm_gbw_huge.tar.bz2)
|
||||
Adaptive Inputs <br> ([Baevski and Auli, 2018](https://arxiv.org/abs/1809.10853)) | 247M | [WikiText-103](https://blog.einstein.ai/the-wikitext-long-term-dependency-language-modeling-dataset/) | [download (.tar.bz2)](https://dl.fbaipublicfiles.com/fairseq/models/lm/adaptive_lm_wiki103.v2.tar.bz2)
|
||||
|
||||
## Training an LM with adaptive inputs
|
||||
|
||||
First, see the general [language modeling README](README.md) for instructions on
|
||||
preprocessing the WikiText-103 data.
|
||||
|
||||
Then use the following training command to train a model with adaptive inputs
|
||||
using the `transformer_lm_wiki103` model architecture:
|
||||
```bash
|
||||
fairseq-train --task language_modeling \
|
||||
data-bin/wikitext-103 \
|
||||
--save-dir checkpoints/transformer_wikitext-103 \
|
||||
--arch transformer_lm_wiki103 \
|
||||
--max-update 286000 --lr 1.0 --t-mult 2 --lr-period-updates 270000 --lr-scheduler cosine --lr-shrink 0.75 \
|
||||
--warmup-updates 16000 --warmup-init-lr 1e-07 --stop-min-lr 1e-09 --optimizer nag --min-lr 0.0001 --clip-norm 0.1 \
|
||||
--criterion adaptive_loss --max-tokens 3072 --update-freq 3 --tokens-per-sample 3072 --seed 1 \
|
||||
--sample-break-mode none --skip-invalid-size-inputs-valid-test --ddp-backend=no_c10d
|
||||
```
|
||||
|
||||
## Citation
|
||||
|
||||
```bibtex
|
||||
@inproceedings{
|
||||
baevski2018adaptive,
|
||||
title={Adaptive Input Representations for Neural Language Modeling},
|
||||
author={Alexei Baevski and Michael Auli},
|
||||
booktitle={International Conference on Learning Representations},
|
||||
year={2019},
|
||||
url={https://openreview.net/forum?id=ByxZX20qFQ},
|
||||
}
|
||||
```
|
||||
@@ -0,0 +1,40 @@
|
||||
# Language Modeling with Gated Convolutional Networks (Dauphin et al., 2017)
|
||||
|
||||
## Example usage
|
||||
|
||||
First download and preprocess the data following the main [language modeling README](README.md).
|
||||
|
||||
Then to train a convolutional LM using the `fconv_lm_dauphin_wikitext103`
|
||||
architecture:
|
||||
```bash
|
||||
fairseq-train --task language_modeling \
|
||||
data-bin/wikitext-103 \
|
||||
--save-dir checkpoints/fconv_wikitext-103 \
|
||||
--arch fconv_lm_dauphin_wikitext103 \
|
||||
--adaptive-softmax-cutoff 10000,20000,200000 \
|
||||
--dropout 0.2 \
|
||||
--criterion adaptive_loss \
|
||||
--optimizer nag --clip-norm 0.1 --weight-decay 5e-06 \
|
||||
--lr 1.0 --lr-scheduler reduce_lr_on_plateau --lr-shrink 0.5 \
|
||||
--max-tokens 1024 --tokens-per-sample 1024 \
|
||||
--ddp-backend no_c10d \
|
||||
--max-epoch 35
|
||||
```
|
||||
|
||||
And evaluate with:
|
||||
```bash
|
||||
fairseq-eval-lm data-bin/wikitext-103 --path checkpoints/fconv_wiki103/checkpoint_best.pt
|
||||
```
|
||||
|
||||
## Citation
|
||||
|
||||
```bibtex
|
||||
@inproceedings{dauphin2017language,
|
||||
title={Language Modeling with Gated Convolutional Networks},
|
||||
author={Dauphin, Yann N and Fan, Angela and Auli, Michael and Grangier, David},
|
||||
booktitle={Proceedings of the 34th International Conference on Machine Learning-Volume 70},
|
||||
pages={933--941},
|
||||
year={2017},
|
||||
organization={JMLR}
|
||||
}
|
||||
```
|
||||
@@ -0,0 +1,123 @@
|
||||
# Neural Language Modeling
|
||||
|
||||
## Pre-trained models
|
||||
|
||||
Model | Description | Dataset | Download
|
||||
---|---|---|---
|
||||
`transformer_lm.gbw.adaptive_huge` | Adaptive Inputs <br> ([Baevski and Auli, 2018](https://arxiv.org/abs/1809.10853)) <br> 1026M params | [Google Billion Words](https://github.com/ciprian-chelba/1-billion-word-language-modeling-benchmark) | [download (.tar.bz2)](https://dl.fbaipublicfiles.com/fairseq/models/lm/adaptive_lm_gbw_huge.tar.bz2)
|
||||
`transformer_lm.wiki103.adaptive` | Adaptive Inputs <br> ([Baevski and Auli, 2018](https://arxiv.org/abs/1809.10853)) <br> 247M params | [WikiText-103](https://blog.einstein.ai/the-wikitext-long-term-dependency-language-modeling-dataset) | [download (.tar.bz2)](https://dl.fbaipublicfiles.com/fairseq/models/lm/adaptive_lm_wiki103.v2.tar.bz2)
|
||||
`transformer_lm.wmt19.en` | English LM <br> ([Ng et al., 2019](https://arxiv.org/abs/1907.06616)) | [WMT News Crawl](http://data.statmt.org/news-crawl/) | [download (.tar.gz)](https://dl.fbaipublicfiles.com/fairseq/models/lm/wmt19.en.tar.gz)
|
||||
`transformer_lm.wmt19.de` | German LM <br> ([Ng et al., 2019](https://arxiv.org/abs/1907.06616)) | [WMT News Crawl](http://data.statmt.org/news-crawl/) | [download (.tar.gz)](https://dl.fbaipublicfiles.com/fairseq/models/lm/wmt19.de.tar.gz)
|
||||
`transformer_lm.wmt19.ru` | Russian LM <br> ([Ng et al., 2019](https://arxiv.org/abs/1907.06616)) | [WMT News Crawl](http://data.statmt.org/news-crawl/) | [download (.tar.gz)](https://dl.fbaipublicfiles.com/fairseq/models/lm/wmt19.ru.tar.gz)
|
||||
|
||||
## Example usage
|
||||
|
||||
We require a few additional Python dependencies for preprocessing:
|
||||
```bash
|
||||
pip install fastBPE sacremoses
|
||||
```
|
||||
|
||||
To sample from a language model using PyTorch Hub:
|
||||
```python
|
||||
import torch
|
||||
|
||||
# List available models
|
||||
torch.hub.list('pytorch/fairseq') # [..., 'transformer_lm.wmt19.en', ...]
|
||||
|
||||
# Load an English LM trained on WMT'19 News Crawl data
|
||||
en_lm = torch.hub.load('pytorch/fairseq', 'transformer_lm.wmt19.en', tokenizer='moses', bpe='fastbpe')
|
||||
en_lm.eval() # disable dropout
|
||||
|
||||
# Move model to GPU
|
||||
en_lm.cuda()
|
||||
|
||||
# Sample from the language model
|
||||
en_lm.sample('Barack Obama', beam=1, sampling=True, sampling_topk=10, temperature=0.8)
|
||||
# "Barack Obama is coming to Sydney and New Zealand (...)"
|
||||
|
||||
# Compute perplexity for a sequence
|
||||
en_lm.score('Barack Obama is coming to Sydney and New Zealand')['positional_scores'].mean().neg().exp()
|
||||
# tensor(15.1474)
|
||||
|
||||
# The same interface can be used with custom models as well
|
||||
from fairseq.models.transformer_lm import TransformerLanguageModel
|
||||
custom_lm = TransformerLanguageModel.from_pretrained('/path/to/model/dir', 'checkpoint100.pt', tokenizer='moses', bpe='fastbpe')
|
||||
custom_lm.sample('Barack Obama', beam=5)
|
||||
# "Barack Obama (...)"
|
||||
```
|
||||
|
||||
## Training a transformer language model with the CLI tools
|
||||
|
||||
### 1) Preprocess the data
|
||||
|
||||
First download and prepare the [WikiText-103 dataset](https://www.salesforce.com/products/einstein/ai-research/the-wikitext-dependency-language-modeling-dataset/):
|
||||
```bash
|
||||
cd examples/language_model/
|
||||
bash prepare-wikitext-103.sh
|
||||
cd ../..
|
||||
```
|
||||
|
||||
Next preprocess/binarize the data:
|
||||
```bash
|
||||
TEXT=examples/language_model/wikitext-103
|
||||
fairseq-preprocess \
|
||||
--only-source \
|
||||
--trainpref $TEXT/wiki.train.tokens \
|
||||
--validpref $TEXT/wiki.valid.tokens \
|
||||
--testpref $TEXT/wiki.test.tokens \
|
||||
--destdir data-bin/wikitext-103 \
|
||||
--workers 20
|
||||
```
|
||||
|
||||
### 2) Train a language model
|
||||
|
||||
Next we'll train a basic transformer language model on wikitext-103. For more
|
||||
advanced usage, see the [adaptive inputs README](README.adaptive_inputs.md).
|
||||
|
||||
To train a basic LM (assumes 2 GPUs):
|
||||
```
|
||||
$ fairseq-train --task language_modeling \
|
||||
data-bin/wikitext-103 \
|
||||
--save-dir checkpoints/transformer_wikitext-103 \
|
||||
--arch transformer_lm --share-decoder-input-output-embed \
|
||||
--dropout 0.1 \
|
||||
--optimizer adam --adam-betas '(0.9, 0.98)' --weight-decay 0.01 --clip-norm 0.0 \
|
||||
--lr 0.0005 --lr-scheduler inverse_sqrt --warmup-updates 4000 --warmup-init-lr 1e-07 \
|
||||
--tokens-per-sample 512 --sample-break-mode none \
|
||||
--max-tokens 2048 --update-freq 16 \
|
||||
--fp16 \
|
||||
--max-update 50000
|
||||
```
|
||||
|
||||
If you run out of memory, try reducing `--max-tokens` (max number of tokens per
|
||||
batch) or `--tokens-per-sample` (max sequence length). You can also adjust
|
||||
`--update-freq` to accumulate gradients and simulate training on a different
|
||||
number of GPUs.
|
||||
|
||||
### 3) Evaluate
|
||||
|
||||
```bash
|
||||
fairseq-eval-lm data-bin/wikitext-103 \
|
||||
--path checkpoints/transformer_wiki103/checkpoint_best.pt \
|
||||
--batch-size 2 \
|
||||
--tokens-per-sample 512 \
|
||||
--context-window 400
|
||||
# | Evaluated 245569 tokens in 56.1s (4379.02 tokens/s)
|
||||
# | Loss: 3.4164, Perplexity: 30.46
|
||||
```
|
||||
|
||||
*Note:* The `--context-window` option controls how much context is provided to
|
||||
each token when computing perplexity. When the window size is 0, the dataset is
|
||||
chunked into segments of length 512 and perplexity is computed over each segment
|
||||
normally. However, this results in worse (higher) perplexity since tokens that
|
||||
appear earlier in each segment have less conditioning. When the maximum window
|
||||
size is used (511 in this case), then we compute perplexity for each token
|
||||
fully conditioned on 511 tokens of context. This slows down evaluation
|
||||
significantly, since we must run a separate forward pass for every token in the
|
||||
dataset, but results in better (lower) perplexity.
|
||||
|
||||
|
||||
## Convolutional language models
|
||||
|
||||
Please see the [convolutional LM README](README.conv.md) for instructions on
|
||||
training convolutional language models.
|
||||
@@ -0,0 +1,33 @@
|
||||
#!/bin/bash
|
||||
# Adapted from https://github.com/facebookresearch/MIXER/blob/master/prepareData.sh
|
||||
|
||||
URLS=(
|
||||
"https://s3.amazonaws.com/research.metamind.io/wikitext/wikitext-103-v1.zip"
|
||||
)
|
||||
FILES=(
|
||||
"wikitext-103-v1.zip"
|
||||
)
|
||||
|
||||
for ((i=0;i<${#URLS[@]};++i)); do
|
||||
file=${FILES[i]}
|
||||
if [ -f $file ]; then
|
||||
echo "$file already exists, skipping download"
|
||||
else
|
||||
url=${URLS[i]}
|
||||
wget "$url"
|
||||
if [ -f $file ]; then
|
||||
echo "$url successfully downloaded."
|
||||
else
|
||||
echo "$url not successfully downloaded."
|
||||
exit -1
|
||||
fi
|
||||
if [ ${file: -4} == ".tgz" ]; then
|
||||
tar zxvf $file
|
||||
elif [ ${file: -4} == ".tar" ]; then
|
||||
tar xvf $file
|
||||
elif [ ${file: -4} == ".zip" ]; then
|
||||
unzip $file
|
||||
fi
|
||||
fi
|
||||
done
|
||||
cd ..
|
||||
Reference in New Issue
Block a user