Merge pull request #55 from n-waves/multifit

New scripts to train multifit that are easier to work with
This commit is contained in:
Piotr Czapla
2019-11-07 09:56:48 +01:00
committed by GitHub
87 changed files with 6561 additions and 22536 deletions
+1 -1
View File
@@ -18,4 +18,4 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
SOFTWARE.
-1
View File
@@ -1 +0,0 @@
# MLDoc
+71 -101
View File
@@ -1,108 +1,78 @@
# ulmfit-multilingual
Repository used for collaboration on application of ulmfit for multiple languages, it helps with pertraining and uses the
fastai v1 . (The version in n-waves/fastai:ulmfit_multilingual)
# How to train classifier
# MultiFiT: Efficient Multi-lingual Language Model Fine-tuning
Code to reproduce the paper "[MultiFiT: Efficient Multi-lingual Language Model Fine-tuning](https://arxiv.org/abs/1909.04761)".
Here is a blog post with an introducing to our paper: http://nlp.fast.ai/classification/2019/09/10/multifit.html
This repository contains a small framework on top of fastai v1.0; the code is compatible with v1.0.47 up to v1.0.59 (the current as of 2019.11.03).
The results between fastai versions may differ due to optimizations added to fastai. Our models were trained using 1.0.47.
The framework was rewritten to make it easier to use with the newest fastai.
We released 7 language models trained on corresponding Wikipedia dumps:
- de_multifit_paper_version
- es_multifit_paper_version
- fr_multifit_paper_version
- it_multifit_paper_version
- ja_multifit_paper_version
- ru_multifit_paper_version
- zh_multifit_paper_version
To fetch the model just use `multifit.from_pretrained` function.
Here are some example notebook showing how to train a classifier using a pretrained models.
- [./notebooks/CLS-JA.ipynb](./notebooks/CLS-JA.ipynb) - example of classifier trained on amazon CLS JA music.
- [./notebooks/MLDoc-JA-multifit_fp16.ipynb](./notebooks/MLDoc-JA-multifit_fp16.ipynb) - example of a faster multifit training using fp16 on MDLDoc.
## Results
### MLDoc
Document classification results on MLDoc dataset [Schwenk and Li, 2018](https://arxiv.org/abs/1805.09821)
| Model | de | es | fr | it | ja | ru | zh |
|----------------|-----------|-----------|-----------|-----------|-----------|-----------|------------|
|LASER | 92.70 | 88.75 | 90.80 | 85.93 | 85.15 | 84.65 | 88.98 |
| MultiBERT | 94.0 | 95.15 | 93.20 | 85.82 | 87.48 | 86.85 | 90.72 |
| MultiFiT | **95.90** | **96.07** | **94.77** | **90.25** | **90.03** | **87.65**| **92.52** |
### Amazon CLS
Sentiment classification results on CLS dataset [Prettenhofer and Stein, 2010](https://dl.acm.org/citation.cfm?doid=2036264.2036277)
| | DE | FR | JA |
|----------|-----------------------|-----------------------|----------------------|
| MultiBERT| 86.05 / 84.90 / 82.00 | 86.15 / 86.90 / 86.65 | 80.87 / 82.83 / 79.95|
| MultiFiT | 93.19 / 90.54 / 93.00 | 91.25 / 89.55 / 93.40 | 86.29 / 85.75 / 86.59|
## How to use it with fastai v1.0
You can use the pretrained models with fastai library as follows:
```
$ LANG=en
$ python -m ulmfit lm --dataset-path data/wiki/${LANG}-100 --tokenizer='f' --nl 3 --name 'orig' --max-vocab 60000 \
--lang ${LANG} --qrnn=False - train 10 --bs=50 --drop_mult=0 --label-smoothing-eps=0.0
from fastai.text import *
import multifit
exp = multifit.from_pretrained("name of the model")
fa_config = exp.pretrain_lm.tokenizer.get_fastai_config(add_open_file_processor=True)
data_lm = (TextList.from_folder(imdb_path, **fa_config)
.filter_by_folder(include=['train', 'test', 'unsup'])
.split_by_rand_pct(0.1)
.label_for_lm()
.databunch(bs=bs))
learn = exp.finetune_lm.get_learner(data_lm)
# learn is a preconfigured fastai learner with a pretrained model loaded
learn.fit_one_cycle(10)
learn.save_encoder("enc")
...
Model name: data/wiki/en-100/models/f60k/lstm_orig.m
...
$ python -m ulmfit cls --dataset-path data/imdb --base-lm-path data/wiki/${LANG}-100/models/f60k/lstm_orig.m \
--lang=${LANG} --name orig - train 20 --bs 18 --num-cls-epochs=4 --lr_sched=1cycle --label-smoothing-eps=0.1
```
You can re-evaluate classifiers by running
## Reproducing the results
This repository is a rewrite of the original training scripts so it lacks all the scripts used in the paper.
We are working on a port to fastai v2.0 and then we will be adding the scripts that show how to reproduce the results.
In case you need to use the scripts faster you can access the original scripts [here](https://github.com/n-waves/multifit/tree/ulmfit-multilingual-original-scripts).
## Citation
```
python -m ulmfit eval --glob="imdb/models/*/lstm_*.m"
```
The same command can be used to quickly trian multiple classifiers, by adding the `--name` parameter:
```
python -m ulmfit eval --glob="imdb/models/*/lstm_nl3.m" --name "nl3-my-test1" --num-cls-epochs 4 --label-smoothing-eps=0.1 --lr_sched=1cycle
```
To create a tar with model simply run
```
python -m ulmfit tar data/imdb/models/f60k/lstm_nl3.m
```
## data directory strucutre
Directory structure after changes to the way we process wiki dumps.
```
data
├── imdb
│   ├── aclImdb
│   ├── imdb_lm
│   └── tmp
├── wiki
│   ├── de-100
│   │   └── models
│   ├── de-100-unk
│   │   └── models
│   ├── de-2
│   │   └── models
│   ├── de-2-unk
│   │   └── models
│   ├── de-all
│   │   └── models
│   ├── wikitext-103
│   │   └── models
│   └── wikitext-2
│      └── models
├── wiki_dumps
├── wiki_extr
│   └── de
│   ├── AA
│   ├── AB
...
└── CC
└── xnli
├── XNLI-1.0
└── XNLI-MT-1.0
├── multinli
└── xnli
```
## how to contribute
We have a fork of fastai to propose changes to fastai.text, with a branch for this project:
https://github.com/n-waves/fastai/tree/ulmfit_multilingual
Let us know that you want to start collaboration on fastai forum thread: [Multilingual ULMFIT](https://forums.fast.ai/t/multilingual-ulmfit/28117)
and you will get access to both repositories.
- Follow the [developer installation of fastai](https://github.com/fastai/fastai#developer-install)
- Add n-waves/fastai as additional remote as described here: https://help.github.com/articles/adding-a-remote/
Here is what I did:
```bash
$ cd fastai
$ git remote add n-waves https://github.com/n-waves/fastai.git
$ git remote -v
n-waves https://github.com/n-waves/fastai.git (fetch)
n-waves https://github.com/n-waves/fastai.git (push)
origin https://github.com/fastai/fastai.git (fetch)
origin https://github.com/fastai/fastai.git (push)
$ git fetch n-waves
$ git checkout ulmfit_multilingual
Branch 'ulmfit_multilingual' set up to track remote branch 'ulmfit_multilingual' from 'n-waves'.
Switched to a new branch 'ulmfit_multilingual'
$ git push --set-upstream n-waves ulmfit_multilingual # to automatically push ulmfit_multilingual branch to the n-waves repo
```
## Running tests
To run the tests, the following data is necessary:
- wikitext-2 (prepared by `./prepare_wiki-en.sh`, along with wikitext-103)
- imdb (prepared by `./prepare_imdb.sh`)
then simply run tests, e.g. `pytest .`
@article{Eisenschlos2019MultiFit,
title={MultiFiT: Efficient Multi-lingual Language Model Fine-tuning},
author={Julian Eisenschlos, Sebastian Ruder, Piotr Czapla, Marcin Kardas, Sylvain Gugger, Jeremy Howard}
journal={Proceedings of EMNLP-IJCNLP 2019},
year={2019}
}
```
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+154
View File
@@ -0,0 +1,154 @@
import pathlib
from typing import Collection
from pandas import DataFrame
from sacremoses import MosesTokenizer
import fastai
from fastai.basic_data import DataBunch
from fastai.core import ListRules, PathOrStr, IntsOrStrs, is_listy
from fastai.data_block import ItemLists
from fastai.text import *
class MosesPreprocessingFunc():
def __init__(self, lang: str):
self.mt = MosesTokenizer(lang)
def __call__(self, t: str) -> str:
return self.mt.tokenize(t, return_str=True, escape=True)
try:
from fastai.text import SPProcessor
except ImportError:
def _join_texts(texts:Collection[str], mark_fields:bool=False, include_bos:bool=True, include_eos:bool=False):
if not isinstance(texts, np.ndarray): texts = np.array(texts)
if is1d(texts): texts = texts[:,None]
df = pd.DataFrame({i:texts[:,i] for i in range(texts.shape[1])})
bos_tok = f'{BOS} ' if include_bos else ''
text_col = f'{bos_tok}{FLD} {1} ' + df[0].astype(str) if mark_fields else f'{bos_tok}' + df[0].astype(str)
for i in range(1,len(df.columns)):
text_col += (f' {FLD} {i+1} ' if mark_fields else ' ') + df[i].astype(str)
if include_eos: text_col = text_col + f' {EOS}'
return text_col.values
def apply_rules(text, pre_rules=None, post_rules=None):
"Apply `pre_rules` and `post_rules` to `text`"
text = text.strip(' ')
for r in ifnone(pre_rules, defaults.text_pre_rules): text = r(text)
toks = text.split()
for r in ifnone(post_rules, defaults.text_post_rules): toks = r(toks)
return ' '.join(toks)
def get_default_size(texts, max_vocab_sz):
"Either max_vocab_sz or one quarter of the number of unique words in `texts`"
cnt = Counter()
for t in texts:
cnt.update(t.split())
if len(cnt)//4 > max_vocab_sz: return max_vocab_sz
res = len(cnt)//4
while res%8 != 0: res+=1
return res
full_char_coverage_langs = ["bg", "cs", "da", "de", "el", "en", "es", "et", "fi", "fr", "ga", "hr", "hu",
"it","lt","lv","mt","nl","pl","pt","ro","sk","sl","sv"] # all European langs
def train_sentencepiece(texts:Collection[str], path:PathOrStr, pre_rules: ListRules=None, post_rules:ListRules=None,
vocab_sz:int=None, max_vocab_sz:int=30000, model_type:str='unigram', max_sentence_len:int=20480, lang='en',
char_coverage=None, tmp_dir='tmp', enc='utf8'):
"Train a sentencepiece tokenizer on `texts` and save it in `path/tmp_dir`"
from sentencepiece import SentencePieceTrainer
cache_dir = Path(path)/tmp_dir
os.makedirs(cache_dir, exist_ok=True)
if vocab_sz is None: vocab_sz=get_default_size(texts, max_vocab_sz)
raw_text_path = cache_dir / 'all_text.out'
with open(raw_text_path, 'w', encoding=enc) as f: f.write("\n".join(texts))
spec_tokens = ['\u2581'+s for s in defaults.text_spec_tok]
SentencePieceTrainer.Train(" ".join([
f"--input={raw_text_path} --max_sentence_length={max_sentence_len}",
f"--character_coverage={ifnone(char_coverage, 0.99999 if lang in full_char_coverage_langs else 0.9998)}",
f"--unk_id={len(defaults.text_spec_tok)} --pad_id=-1 --bos_id=-1 --eos_id=-1",
f"--user_defined_symbols={','.join(spec_tokens)}",
f"--model_prefix={cache_dir/'spm'} --vocab_size={vocab_sz} --model_type={model_type}"]))
raw_text_path.unlink()
return cache_dir
class SPProcessor(PreProcessor):
"`PreProcessor` that tokenizes and numericalizes with `sentencepiece`"
def __init__(self, ds:ItemList=None, pre_rules: ListRules=None, post_rules:ListRules=None, vocab_sz:int=None,
max_vocab_sz:int=30000, model_type:str='unigram', max_sentence_len:int=20480, lang='en',
char_coverage=None, tmp_dir='tmp', mark_fields:bool=False, include_bos:bool=True,
include_eos:bool=False, sp_model=None, sp_vocab=None, n_cpus:int=None, enc='utf8'):
try: from sentencepiece import SentencePieceTrainer,SentencePieceProcessor
except ImportError:
raise Exception('sentencepiece module is missing: run `pip install sentencepiece`')
self.pre_rules,self.post_rules,self.enc = pre_rules,post_rules,enc
self.mark_fields,self.include_bos,self.include_eos = mark_fields,include_bos,include_eos
self.sp_model,self.sp_vocab,self.n_cpus = sp_model,sp_vocab,ifnone(n_cpus,defaults.cpus)
self.train_func = partial(train_sentencepiece, pre_rules=pre_rules, post_rules=post_rules, vocab_sz=vocab_sz,
max_vocab_sz=max_vocab_sz, model_type=model_type, max_sentence_len=max_sentence_len, lang=lang,
char_coverage=char_coverage, tmp_dir=tmp_dir, enc=enc)
def process_one(self, item, join=True):
if join: text = _join_texts([item], self.mark_fields, self.include_bos, self.include_eos)[0]
text = apply_rules(text, pre_rules=self.pre_rules, post_rules=self.post_rules)
return self._encode_batch([text])[0]
def process(self, ds):
ds.items = _join_texts(ds.items, self.mark_fields, self.include_bos, self.include_eos)
ds.items = [apply_rules(t, pre_rules=self.pre_rules, post_rules=self.post_rules)
for t in progress_bar(ds.items, leave=False)]
if self.sp_model is None or self.sp_vocab is None:
cache_dir = self.train_func(ds.items, ds.path)
self.sp_model,self.sp_vocab = cache_dir/'spm.model',cache_dir/'spm.vocab'
if not getattr(self, 'vocab', False):
with open(self.sp_vocab, 'r', encoding=self.enc) as f: self.vocab = Vocab([line.split('\t')[0] for line in f.readlines()])
if self.n_cpus <= 1: ds.items = self._encode_batch(ds.items)
else:
with ProcessPoolExecutor(self.n_cpus) as e:
ds.items = np.array(sum(e.map(self._encode_batch, partition_by_cores(ds.items, self.n_cpus)), []))
ds.vocab = self.vocab
def _encode_batch(self, texts):
from sentencepiece import SentencePieceProcessor
tok = SentencePieceProcessor()
tok.Load(str(self.sp_model))
return [np.array(tok.EncodeAsIds(t)) for t in texts]
@classmethod
def load(cls, path:PathOrStr, tmp_dir:PathOrStr='tmp', name:str='spm'):
cache_dir = Path(path)/tmp_dir
return cls(sp_model=cache_dir/f'{name}.model', sp_vocab=cache_dir/f'{name}.vocab')
class SPProcessor2(SPProcessor):
def process(self, ds):
super().process(ds)
ds.vocab.sp_model = self.sp_model
ds.vocab.sp_vocab = self.sp_vocab
# temporary loading function as from_df does not support processors
def make_data_bunch_from_df(cls, path: PathOrStr, train_df: DataFrame, valid_df: DataFrame,
tokenizer: Tokenizer = None, vocab: Vocab = None, classes: Collection[str] = None,
text_cols: IntsOrStrs = 1,
label_cols: IntsOrStrs = 0, label_delim: str = None, chunksize: int = 10000,
max_vocab: int = 60000,
min_freq: int = 2, mark_fields: bool = False, include_bos: bool = True,
include_eos: bool = False, processor=None, **kwargs) -> DataBunch:
"Create a `TextDataBunch` from DataFrames. `kwargs` are passed to the dataloader creation."
assert processor is None or tokenizer is None, "Processor and tokenizer are mutually exclusive."
if processor is None:
processor = fastai.text.data._get_processor(tokenizer=tokenizer, vocab=vocab, chunksize=chunksize, max_vocab=max_vocab,
min_freq=min_freq, mark_fields=mark_fields,
include_bos=include_bos, include_eos=include_eos)
if classes is None and is_listy(label_cols) and len(label_cols) > 1: classes = label_cols
src = ItemLists(path, TextList.from_df(train_df, path, cols=text_cols, processor=processor),
TextList.from_df(valid_df, path, cols=text_cols, processor=processor))
if cls == TextLMDataBunch:
src = src.label_for_lm()
else:
if label_delim is not None:
src = src.label_from_df(cols=label_cols, classes=classes, label_delim=label_delim)
else:
src = src.label_from_df(cols=label_cols, classes=classes)
return src.databunch(**kwargs)
+3
View File
@@ -0,0 +1,3 @@
from .datasets import Dataset, ULMFiTDataset
from .training import ULMFiT,from_pretrained
from .configurations import *
+19
View File
@@ -0,0 +1,19 @@
from pathlib import Path
import fire
import multifit.configurations
import multifit
class Experiment:
def new(self):
return {n: getattr(multifit.configurations,n) for n in multifit.configurations.__all__}
def load(self, model_path):
return multifit.ULMFiT().load_(Path(model_path))
def from_pretrained(self):
return multifit.from_pretrained
if __name__ == '__main__':
fire.Fire(Experiment())
+115
View File
@@ -0,0 +1,115 @@
import inspect
from .training import *
__all__ = [
'multifit_paper_version',
'multifit1552_fp32', 'multifit_fp32',
'multifit_fp32_nl3',
'multifit1552_fp16','multifit_fp16',
'multifit_fp16_nl3',
'multifit1552_fp16_nl3_large',
'multifit_lstm',
'multifit1152_lstm_nl3',
'multifit1152_lstm_nl3_fp16_large',
]
def multifit1552_fp32(bs=64):
self = ULMFiT()
self.replace_(
label_smoothing_eps=0.0,
true_wd=True,
wd=0.1,
seed=0,
fp16=False,
bs=bs,
use_adam_08=False,
early_stopping=None,
name=_use_caller_name()
)
self.arch.replace_(
tokenizer_type='fsp',
max_vocab=15000,
qrnn=True,
n_layers=4,
n_hid=1552
)
self.pretrain_lm.replace_(num_epochs=10, drop_mult=0.5, lr=(1e-2 * bs / 48))
self.finetune_lm.replace_(num_epochs=10, drop_mult=1.0, lr=(1e-3 * bs / 48))
self.classifier.replace_(num_epochs=8, drop_mult=0.5, bs=20, label_smoothing_eps=0.1)
return self
multifit_fp32 = multifit1552_fp32
def multifit_fp32_nl3():
return multifit1552_fp32().replace_(n_layers=3, name=_use_caller_name())
# FP16
def multifit1552_fp16():
return multifit1552_fp32(bs=128).replace_(fp16=True, name=_use_caller_name())
def multifit1552_fp16_nl3_large():
return multifit1552_fp32(bs=448).replace_(fp16=True, n_layers=3, num_epochs=20, name=_use_caller_name())
multifit_fp16 = multifit1552_fp16
def multifit_lstm():
return multifit1552_fp32(bs=128).replace_(qrnn=False, n_hid=1552, name=_use_caller_name())
def multifit1152_lstm_nl3(bs=128):
return multifit1552_fp32(bs).replace_(qrnn=False, n_hid=1152, n_layers=3, name=_use_caller_name())
def multifit1152_lstm_nl3_fp16_large():
return multifit1152_lstm_nl3(bs=448).replace_(fp16=True, num_epochs=20, name=_use_caller_name())
def multifit_fp16_nl3():
return multifit1552_fp16().replace_(n_layers=3, name=_use_caller_name())
def multifit_paper_version():
self = ULMFiT()
dps = {'output_p': 0.25, 'hidden_p': 0.1, 'input_p': 0.2, 'embed_p': 0.02, 'weight_p': 0.15}
self.replace_(
label_smoothing_eps=0.0,
label_smoothing_eps_norm_by_classes=True,
true_wd=True,
wd=0.01, ## important :)
seed=0,
fp16=False,
bs=64,
use_adam_08=False,
early_stopping=None,
clip=0.12,
dropout_values=dps,
name=_use_caller_name()
)
self.arch.replace_(
tokenizer_type='sp',
max_vocab=15000,
qrnn=True,
n_layers=4,
n_hid=1550 # vs 1552
)
self.pretrain_lm.replace_(num_epochs=10, drop_mult=0.0, lr=5e-3, use_adam_08=True, true_wd=False, wd=1e-7, bs=50,)
self.finetune_lm.replace_(num_epochs=20, drop_mult=0.3, lr=1e-3, true_wd=False, wd=1e-7, bs=20)
self.classifier.replace_(num_epochs=8, drop_mult=0.5, bs=18, label_smoothing_eps=0.1, early_stopping=None)
return self
def ulmfit_orig():
self = multifit_paper_version()
self.replace_(
seed=None,
name=_use_caller_name()
)
self.arch.replace_(
tokenizer_type='f',
max_vocab=60000,
qrnn=False,
n_layers=3,
n_hid=1150
)
return self
def _use_caller_name():
return inspect.stack()[1].function
+1
View File
@@ -0,0 +1 @@
from .dataset import Dataset, ULMFiTDataset, read_clas_csv, read_wiki_articles, ULMFiTTokenizer
@@ -7,6 +7,7 @@ Articles are tokenized using the Moses tokenizer. Articles with least than
import argparse
from pathlib import Path
import json
import csv
from shutil import copyfile
@@ -24,10 +25,10 @@ def get_texts(root):
if text.strip() == title:
# print('No content continuing...')
continue
yield (f"={title}=\n"+text)
yield text
def write_wikitext(file_path, text_iter, mt, num_tokens, mode='w', num_tokens_article_min=100):
def write_wikitext(file_path, text_iter, mt, num_tokens, mode='w'):
total_num_tokens = 0
print(f'Writing to {file_path}...')
i = 0
@@ -49,8 +50,8 @@ def write_wikitext(file_path, text_iter, mt, num_tokens, mode='w', num_tokens_ar
# calculate length based on tokens; add 1 for newline
num_tokens_article += len(tokens) + 1
if num_tokens_article < num_tokens_article_min:
# only use articles that have at least num_tokens_article_min tokens
if num_tokens_article < 100:
# only use articles that have at least 100 tokens
continue
for tokenized in tokenized_paragraphs:
@@ -65,6 +66,42 @@ def write_wikitext(file_path, text_iter, mt, num_tokens, mode='w', num_tokens_ar
file_path, i, total_num_tokens))
def wiki2csv(file_path, text_iter, num_tokens):
total_num_tokens = 0
print(f'Writing to {file_path}...')
i = 0
with open(file_path, 'w', encoding='utf-8') as csvfile:
f_out = csv.writer(csvfile, delimiter=',', quotechar='"', quoting=csv.QUOTE_MINIMAL)
for i, text in enumerate(text_iter):
num_tokens_article = 0 # count the number of tokens in an article
tokenized_paragraphs = []
paragraphs = text.split('\n')
for paragraph in paragraphs:
tokenized = paragraph.strip()
tokenized_paragraphs.append(tokenized)
tokens = tokenized.split(' ') # split on whitespace to keep newlines
# don't count empty lines
tokens = [token for token in tokens if token]
# calculate length based on tokens; add 1 for newline
num_tokens_article += len(tokens) + 1
if num_tokens_article < 100:
# only use articles that have at least 100 tokens
continue
f_out.writerow(['\n'.join(tokenized_paragraphs)])
total_num_tokens += num_tokens_article + 1
if num_tokens is not None and total_num_tokens > num_tokens:
break
if i % 10000 == 0 and i > 0:
print('Processed {:,} documents. Total # tokens: {:,}.'.format(i, total_num_tokens))
def main(args):
input_path = Path(args.input)
@@ -87,7 +124,7 @@ def main(args):
token_nums = [2000000, 200000, 200000]
for split, token_num in zip(splits, token_nums):
sml_file_path = sml_wiki / f'{args.lang}.wiki.{split}.tokens'
write_wikitext(sml_file_path, text_iter, mt, token_num, num_tokens_article_min=args.tokens_min)
write_wikitext(sml_file_path, text_iter, mt, token_num)
lrg_file_path = lrg_wiki / f'{args.lang}.wiki.{split}.tokens'
all_file_path = all_wiki / f'{args.lang}.wiki.{split}.tokens'
# copy the content of the small file to the large file
@@ -97,10 +134,24 @@ def main(args):
# add the new articles to the existing ones
lrg_wiki_train = lrg_wiki / f'{args.lang}.wiki.train.tokens'
write_wikitext(lrg_wiki_train, text_iter, mt, 98000000, mode='a', num_tokens_article_min=args.tokens_min)
write_wikitext(lrg_wiki_train, text_iter, mt, 98000000, mode='a')
all_wiki_train = all_wiki / f'{args.lang}.wiki.train.tokens'
copyfile(lrg_wiki_train, all_wiki_train)
write_wikitext(all_wiki_train, text_iter, mt, None, mode='a', num_tokens_article_min=args.tokens_min)
write_wikitext(all_wiki_train, text_iter, mt, None, mode='a')
# def main(args):
#
# input_path = Path(args.input)
# output = Path(args.output)
# assert input_path.exists(), f'Error: {input_path} does not exist.'
# output.mkdir(exist_ok=True)
#
# lrg_wiki = output / f'{args.lang}-100'
# lrg_wiki.mkdir(exist_ok=True)
#
# text_iter = get_texts(input_path)
#
# wiki2csv(lrg_wiki / "rawtexts.csv", text_iter, int(2e7))
if __name__ == '__main__':
@@ -115,8 +166,5 @@ if __name__ == '__main__':
parser.add_argument('-l', '--lang', required=True,
help='the iso code of the language of the Wikipedia '
'documents, e.g. en, fr, de, etc.')
parser.add_argument('-t', '--tokens_min', required=False, type=int, default=100,
help='the minimal number of tokens in an article')
args = parser.parse_args()
main(args)
+390
View File
@@ -0,0 +1,390 @@
import tempfile
from fastai.text import *
from fastai_contrib.text_data import MosesPreprocessingFunc, \
make_data_bunch_from_df, SPProcessor2
def read_wiki_articles(filename):
def istitle(line):
return len(re.findall(r'^ ?= [^=]* = ?$', line)) != 0
articles = []
with open(filename, encoding='utf8') as f:
lines = f.readlines()
current_article = []
for i, line in enumerate(lines):
current_article.append(line)
if i < len(lines) - 2 and lines[i + 1].strip() == "" and istitle(lines[i + 2]):
articles.append("".join(current_article))
current_article = []
articles.append("".join(current_article))
print(f"Wiki text was split to {len(articles)} articles")
df = pd.DataFrame({'0': np.zeros(len(articles)), 'texts': np.array(articles, dtype=np.object)})
if len(df.columns) == 1:
df.insert(0, 'label', 0)
return df
def read_clas_csv(fn):
df = pd.read_csv(fn, header=None).fillna("na")
if len(df.columns) == 1:
df.insert(0, 'label', 0)
return df
@dataclass
class Dataset:
dataset_path: Path
noise: float = 0.0
limit: int = None
ds_type: str = None
lang: str = None
uses_moses: bool = False
add_trn_to_lm: bool = True
use_tst_for_lm: bool = False
label_column: int = 0
read_data: Callable = read_clas_csv
trn_name: Path = 'train.csv'
val_name: Path = 'dev.csv'
tst_name: Path = 'test.csv'
unsup_name: Path = 'unsup.csv'
def __post_init__(self):
self.add_trn_to_lm = True
self._trn_df = None
self._tst_df = None
self._val_df = None
path = str(self.dataset_path)
if 'wiki' in path and len(list(self.dataset_path.glob('*.wiki.*.tokens'))) >= 2:
self._post_init_tokenized_wiki()
elif 'wiki' in path and len(list(self.dataset_path.glob('wiki.*.tokens'))) >= 2:
self._post_init_tokenized_wiki(wiki103=True)
elif 'reddit' in path:
self._post_init_default_csv(
lang='en',
uses_moses=False,
add_trn_to_lm=True,
use_lang_as_prefix=False)
elif 'xnli' in path:
raise NotImplementedError("Support for XNLI is not implemented yet")
elif 'imdb' in path:
self._post_init_default_csv(
lang='en',
uses_moses=False,
add_trn_to_lm=True,
use_lang_as_prefix=False)
elif 'mldoc' in path:
self._post_init_default_csv(
lang=self._language_from_dataset_path(),
uses_moses=False,
add_trn_to_lm=False,
use_lang_as_prefix=True)
elif 'cls' in path:
self._post_init_default_csv(
lang=self._language_from_dataset_path(),
uses_moses=False,
add_trn_to_lm=True,
use_lang_as_prefix=True)
elif 'hate' in path:
self._post_init_default_csv(
lang=self._language_from_dataset_path(),
uses_moses=False,
add_trn_to_lm=True,
use_lang_as_prefix=True)
else:
self.read_data = read_clas_csv
self.trn_path = self.dataset_path / self.trn_name
self.val_path = self.dataset_path / self.val_name
self.tst_path = self.dataset_path / self.tst_name
self.unsup_path = self.dataset_path / self.unsup_name
def _post_init_default_csv(self, lang, uses_moses, add_trn_to_lm, use_lang_as_prefix):
self.lang = lang
self.uses_moses = uses_moses
self.add_trn_to_lm = add_trn_to_lm
self.use_tst_for_lm = False
self.label_column = 0
self.read_data = read_clas_csv
prefix = f"{self.lang}." if use_lang_as_prefix else ""
self.trn_path = self.dataset_path / f'{prefix}train.csv'
self.val_path = self.dataset_path / f'{prefix}dev.csv'
self.tst_path = self.dataset_path / f'{prefix}test.csv'
self.unsup_path = self.dataset_path / f'{prefix}unsup.csv'
def _post_init_tokenized_wiki(self, wiki103=False):
self.uses_moses = True
self.use_tst_for_lm = False
self.add_trn_to_lm = True
self.lang = self._language_from_dataset_path()
self.read_data = read_wiki_articles
if wiki103:
prefix=""
else:
prefix=f"{self.lang}."
self.trn_path = self.dataset_path / f'{prefix}wiki.train.tokens'
self.val_path = self.dataset_path / f'{prefix}wiki.valid.tokens'
self.tst_path = self.dataset_path / f'{prefix}wiki.test.tokens'
self.unsup_path = self.dataset_path / f'{prefix}wiki.unsup.tokens'
def _language_from_dataset_path(self):
#TODO: Duplicate with training function
lang, *size = self.dataset_path.name.split('-')
if lang == "wikitext":
lang = "en"
return lang
def _load_n_cache_supervised_data(self):
if not self._trn_df is not None or not self._tst_df is not None or not self._val_df is not None:
trn_df = self.read_data(self.trn_path)
tst_df = self.read_data(self.tst_path)
val_df = self.read_data(self.val_path) if self.val_path.exists() else None
if val_df is None:
print("Validation set not found using 10% of trn")
val_len = max(int(len(trn_df) * 0.1), 2)
trn_len = len(trn_df) - val_len
trn_df, val_df = trn_df[:trn_len], trn_df[trn_len:]
self._trn_df, self._val_df, self._tst_df = trn_df, val_df, tst_df
return self._trn_df, self._val_df, self._tst_df
def load_supervised_data(self):
trn_df, val_df, tst_df = self._load_n_cache_supervised_data()
if self.noise > 0.0 is not None:
trn_df = self._add_noise(trn_df, self.noise)
val_df = self._add_noise(val_df, self.noise)
if self.limit is not None:
print("Limiting data set to:", self.limit)
trn_df = trn_df[:self.limit]
val_df = val_df[:self.limit]
return trn_df, val_df, tst_df
def load_unsupervised_data(self):
trn_df, val_df, tst_df = self._load_n_cache_supervised_data()
unsup_df = self.read_data(self.unsup_path) if self.unsup_path.exists() else None
lm_trn_df = pd.concat(
([trn_df] if self.add_trn_to_lm else []) +
([unsup_df] if unsup_df is not None else []) +
([tst_df] if self.use_tst_for_lm else []))
return lm_trn_df, val_df
def _add_noise(self, trn_df, noise):
count = len(trn_df)
labels = trn_df[0].unique()
assert np.issubdtype(labels.dtype, np.integer), "noise only works on numerical numbers"
modulo = labels.max() + 1
idx_to_distrub = np.random.permutation(count)[:int(count * noise)]
trn_df.loc[idx_to_distrub, [0]] = (np.random.randint(1, modulo - 1, size=len(idx_to_distrub)) +
trn_df.loc[idx_to_distrub][0]) % modulo
print(
f"Added noise to {len(idx_to_distrub)} examples, only {(count - len(idx_to_distrub)) / count} have correct labels")
return trn_df
@dataclass
class ULMFiTDataset(Dataset):
tokenizer: Tokenizer = None
cache_path: Path = None
def __post_init__(self):
super().__post_init__()
self._vocab = None
def load_lm_databunch(self, bs, bptt):
lm_suffix = str(bptt) if bptt != 70 else ""
lm_suffix += "" if self.use_tst_for_lm else "-notst"
data_lm = self.load_n_cache_databunch(f"lm{lm_suffix}",
bunch_class=TextLMDataBunch,
data_loader=self.load_unsupervised_data,
bptt=bptt,
bs=bs)
with (self.cache_path / "itos.pkl").open('wb') as f:
pickle.dump(data_lm.vocab.itos, f)
self._vocab = data_lm.vocab
print('Size of vocabulary:', len(data_lm.vocab.itos))
print('First 20 words in vocab:', data_lm.vocab.itos[:20])
data_lm.lang = self.lang
return data_lm
def _load_vocab(self):
if self._vocab is None:
self._vocab = self.load_lm_databunch(bs=20, bptt=70).vocab
return self._vocab
def load_clas_databunch(self, bs):
vocab = self._load_vocab()
cls_name = "cls"
if self.limit is not None:
cls_name = f'{cls_name}limit{self.limit}'
if self.noise > 0.0:
cls_name = f'{cls_name}noise{self.noise}'
args = dict(vocab=vocab, bunch_class=TextClasDataBunch, bs=bs)
data_cls = self.load_n_cache_databunch(cls_name, data_loader=lambda: self.load_supervised_data()[:2], **args)
# Hack to load test dataset with labels
data_tst = self.load_n_cache_databunch('tst', data_loader=lambda: self.load_supervised_data()[1:], **args)
data_cls.test_dl = data_tst.valid_dl # data_tst.valid_dl holds test data
data_cls.lang = self.lang
return data_cls
def load_n_cache_databunch(self, name, bunch_class, data_loader, bs, **args):
bunch_path = self.cache_path / name
databunch = None
if bunch_path.exists():
try:
databunch = load_data(self.cache_path, name, bs=bs)
except (AttributeError, ImportError):
print("Unable to load data bunch from cache - pickle issue, running processing again.")
if databunch is None:
print(f"Running tokenization: '{name}' ...")
train_df, valid_df = data_loader()
databunch = self.databunch_from_df(bunch_class, train_df, valid_df, **args)
databunch.save(name)
print(f"Data {name}, trn: {len(databunch.train_ds)}, val: {len(databunch.valid_ds)}")
return databunch
def databunch_from_df(self, bunch_class, train_df, valid_df, **args):
args.update(**self.tokenizer.get_fastai_config(dataset_uses_moses=self.uses_moses)) # TODO depends on the previous model
databunch = make_data_bunch_from_df(cls=bunch_class,
path=self.cache_path,
train_df=train_df,
valid_df=valid_df,
mark_fields=True,
text_cols=list(train_df.columns.values)[1:],
**args)
return databunch
@dataclass
class ULMFiTTokenizer:
arch: Any # should be ULMFiTArchitecture, we use Any to avoid circular dependencies between imports
pretrained_path: Path = None
def __post_init__(self):
self.temp_dir = None
if self.pretrained_path is None:
self.temp_dir = tempfile.TemporaryDirectory()
self.pretrained_path = Path(self.temp_dir.name)
def save(self, new_path: Path, vocab: Vocab = None, learn: Learner = None):
"""
In case of subwoard vocabularies reuse the base model vocabulary during tokenization.
For word tokenization we still generate new vocabulary for each dataset,
and we expect finetuning to handle the conversion
"""
def copy_sp(path):
print(f"Copy sp model from {path} to {new_path}")
shutil.copy(str(path / 'itos.pkl'), str(new_path))
shutil.copy(str(path / 'spm.model'), str(new_path))
shutil.copy(str(path / 'spm.vocab'), str(new_path))
# reuse base model sentencepiece vocabulary
new_path.mkdir(exist_ok=True, parents=True)
if self.pretrained_path is None or self.pretrained_path.resolve() == new_path.resolve():
return
#
# if (self.pretrained_path.parent / 'spm.vocab').exists():
# copy_sp(self.pretrained_path.parent)
if (self.pretrained_path / 'spm.vocab').exists():
copy_sp(self.pretrained_path)
if learn is not None:
vocab = learn.data.vocab
if vocab is not None:
with (new_path / "itos.pkl").open('wb') as f:
pickle.dump(vocab.itos, f)
def get_processor(self, dataset_uses_moses=False):
return {
'fsp': self._get_processor_sentence_piece,
'f': self._get_processor_pure_fastai,
'm': self._get_processor_pure_moses,
'mf': self._get_processor_moses_fastai,
'sp': self._get_processor_sentence_piece, # deprecated
'v': self._get_processor_pure_moses, # deprecated
'vf': self._get_processor_moses_fastai, # deprecated
}.get(self.arch.tokenizer_type)(dataset_uses_moses)
def get_vocab(self): return Vocab.load(self.pretrained_path / 'itos.pkl')
def get_fastai_config(self, dataset_uses_moses=False, add_open_file_processor=False):
processor = self.get_processor(dataset_uses_moses)
openfile = [OpenFileProcessor()] if add_open_file_processor else []
return {'processor': openfile + [processor]}
@property
def prefix(self):
return f"{self.arch.tokenizer}{self.arch.max_vocab // 1000}k"
def _get_processor_sentence_piece(self, ds_uses_moses):
moses_preproc = [MosesPreprocessingFunc(self.arch.lang)] if not ds_uses_moses else []
sp_model = self.pretrained_path / 'spm.model'
if not sp_model.is_file():
sp_model = None
sp_vocab = self.pretrained_path / 'spm.vocab'
if not sp_vocab.is_file():
sp_vocab = None
processor = SPProcessor2(
pre_rules=moses_preproc + defaults.text_pre_rules,
mark_fields=True,
vocab_sz=self.arch.max_vocab,
sp_model=sp_model,
sp_vocab=sp_vocab,
lang=self.arch.lang,
tmp_dir=self.pretrained_path.absolute() # absolute make sure that dataset path is not added as prefix
)
return processor
def _default_processor(self, fastai_tokenizer=None):
if fastai_tokenizer is None:
fastai_tokenizer = Tokenizer(SpacyTokenizer, self.arch.lang)
return [TokenizeProcessor(tokenizer=fastai_tokenizer), NumericalizeProcessor(max_vocab=self.arch.max_vocab)]
def _get_processor_pure_moses(self, ds_uses_moses):
#TODO make sure processor doesnot return openfile
moses_preproc = [MosesPreprocessingFunc(self.arch.lang)] if not ds_uses_moses else []
tokenizer = Tokenizer(tok_func=BaseTokenizer,
lang=self.arch.lang,
pre_rules=moses_preproc,
post_rules=[])
return self._default_processor(tokenizer)
def _get_processor_moses_fastai(self, ds_uses_moses):
moses_preproc = [MosesPreprocessingFunc(self.arch.lang)] if not ds_uses_moses else []
tokenizer = Tokenizer(tok_func=BaseTokenizer,
lang=self.arch.lang,
pre_rules=moses_preproc + defaults.text_pre_rules,
post_rules=defaults.text_post_rules)
return self._default_processor(tokenizer)
def _get_processor_pure_fastai(self, ds_uses_moses):
if not ds_uses_moses:
warn("Make sure your base model was not pretrained on moses tokenized Wikipedia (default for multifit).")
tokenizer = Tokenizer(tok_func=SpacyTokenizer, lang=self.arch.lang)
return self._default_processor(tokenizer)
def cleanup(self):
if self.temp_dir is not None:
self.temp_dir.cleanup()
self.temp_dir = None
def __del__(self):
self.cleanup()
@@ -10,7 +10,7 @@ from pathlib import Path
import fire
from fastai_contrib.utils import replace_number, UNK
from .utils import replace_number, UNK
def build_vocab(file_path, cutoff=3):
@@ -1,25 +1,17 @@
"""
Utility methods for data processing.
"""
import pathlib
import fire
from fastai.text import *
import shutil
import pathlib
import tarfile
from typing import Dict, Tuple, List
import fire
from sacremoses import MosesTokenizer
from fastai.text import *
EOS = 'xxeos' # fastai does not use eos, but we do
SEP = 'xxsep' # special separator token for NLI
def replace_std_toks(x:str) -> str:
"Replace standard token names with fastai supported tokens"
# We change tokens to f'xx{token_name}' as it is not split by Moses tokenizer,
# while f'<{token_name}>' is being split to: '<' f'{token_name}' '>'
return x.replace('<unk>', UNK).replace('<bos>', BOS).replace('<eos>', EOS)
PAD_TOKEN_ID = 1
IMDB, XNLI, TRN, VAL, TST, EN = 'imdb', 'xnli', 'train', 'val', 'test', 'en'
DATASETS = ['imdb', 'xnli']
@@ -34,97 +26,6 @@ CLASSES = ['neg', 'pos', 'unsup']
number_match_re = re.compile(r'^([0-9]+[,.]?)+$')
number_split_re = re.compile(r'([,.])')
class MosesPreprocessingFunc():
def __init__(self, lang: str):
self.mt = MosesTokenizer(lang)
def __call__(self, t: str) -> str:
return self.mt.tokenize(t, return_str=True, escape=True)
class SentencePieceTokenizer(Tokenizer):
"Put together rules and a tokenizer function to tokenize text with multiprocessing."
def __init__(self, spm_model, lang:str='en', pre_rules:ListRules=None,
post_rules:ListRules=None, special_cases:Collection[str]=None, n_cpus:int=None):
# moses is added to preprocessing functions
super().__init__(self.tok_fun_with_sp, lang, pre_rules, post_rules, special_cases, n_cpus)
self.spm_model = spm_model
def tok_fun_with_sp(self, lang):
try:
import sentencepiece as spm
except ImportError:
raise Exception('sentencepiece module is missing: run `pip install sentencepiece`')
tok = BaseTokenizer(lang)
tok.sp = spm.SentencePieceProcessor()
tok.sp.Load(str(self.spm_model))
return tok
def process_text(self, t:str, tok:BaseTokenizer) -> List[str]:
"Process one text `t` with tokenizer `tok`."
toks = super().process_text(t, tok)
toks = tok.sp.EncodeAsPieces(" ".join(toks))
return toks
full_char_coverage_langs = ["bg", "cs", "da", "de", "el", "en", "es", "et", "fi", "fr", "ga", "hr", "hu",
"it","lt","lv","mt","nl","pl","pt","ro","sk","sl","sv"] # all European langs
def get_sentencepiece(cache_dir:PathOrStr, load_text, pre_rules: ListRules=None, post_rules:ListRules=None,
vocab_size:int=30000, model_type:str='unigram', input_sentence_size:int=1E7, lang='en'):
try:
import sentencepiece as spm
except ImportError:
raise Exception('sentencepiece module is missing: run `pip install sentencepiece`')
cache_dir = pathlib.Path(cache_dir)
pre_rules = pre_rules if pre_rules is not None else defaults.text_pre_rules
post_rules = post_rules if post_rules is not None else defaults.text_post_rules
special_cases = defaults.text_spec_tok
if not os.path.isfile(cache_dir / 'spm.model') or not os.path.isfile(cache_dir / f'itos.pkl'):
# load the text from the train tokens file
text = load_text()
text = filter(lambda x: len(x.rstrip(" ")), text)
text = (reduce(lambda t, rule: rule(t), pre_rules, line) for line in text)
def cleanup_n_postprocess(t):
t = t.split()
for r in post_rules:
t = r(t)
return ' '.join(t)
text = map(cleanup_n_postprocess, text)
raw_text_path = cache_dir / 'all_text.txt'
with open(raw_text_path, 'w') as f: f.write("\n".join(text))
char_coverage = 1 if lang in full_char_coverage_langs else 0.99
sp_params = [
f"--input={raw_text_path}",
f"--character_coverage={char_coverage}",
f"--unk_id={len(defaults.text_spec_tok)}",
f"--pad_id=-1",
f"--bos_id=-1",
f"--eos_id=-1",
f"--max_sentence_length=20480",
f"--input_sentence_size={int(input_sentence_size)}",
f"--user_defined_symbols={','.join(special_cases)}",
f"--model_prefix={cache_dir/'spm'}",
f"--vocab_size={vocab_size} --model_type={model_type}"]
spm.SentencePieceTrainer.Train(" ".join(sp_params))
with open(cache_dir / 'spm.vocab', 'r') as f:
vocab = [line.split('\t')[0] for line in f.readlines()]
pickle.dump(vocab, open(cache_dir/ f'itos.pkl', 'wb'))
# todo add post rules
vocab = Vocab(pickle.load(open(cache_dir / f'itos.pkl', 'rb')))
# We cannot use lambdas or local methods here, since `tok_func` needs to be
# pickle-able in order to be called in subprocesses when multithread tokenizing
tokenizer = SentencePieceTokenizer(cache_dir/'spm.model',
lang=lang,
pre_rules=pre_rules,
post_rules=post_rules)
return {'tokenizer': tokenizer, 'vocab': vocab}
def clear_cache_directory(path:PathOrStr, cache_name:str='tmp'):
path = pathlib.Path(path)
shutil.rmtree(path / cache_name)
@@ -137,7 +38,6 @@ def get_texts(path):
labels.append(idx)
return np.array(texts), np.array(labels)
def ensure_paths_exists(*paths, message="One or more required files cannot be found."):
error = False
for path in paths:
@@ -147,12 +47,6 @@ def ensure_paths_exists(*paths, message="One or more required files cannot be fo
if error:
raise FileNotFoundError(message)
def get_data_folder() -> Path:
"""
return data folder to use for future processing
"""
return (pathlib.Path(__file__).parent.parent / "data")
def get_scripts_folder():
"""
return data folder to use for future processing
@@ -227,15 +121,7 @@ def read_xnli(dir_path, lang, split, spm_path=None) -> Tuple[List[List[str]], Li
file_path = f'XNLI-MT-1.0/xnli/{file_name}'
file_path = dir_path / file_path
if spm_path is not None:
tokenizer = SentencePieceTokenizer(spm_path,
use_moses=False,
lang=lang)
tok = tokenizer.tok_fun_with_sp(lang)
tokenize = lambda x: tokenizer.process_text(x, tok)
print("WARNING: Sentence Piece is not tested on XNLI yet")
else:
tokenize = lambda x: x.split(' ')
tokenize = lambda x: x.split(' ')
toks, lbls = [], []
print(f'Reading {file_path}...')
@@ -305,14 +191,12 @@ def read_file(file_path, outname=None):
with open(file_path, encoding='utf8') as f:
text = f.readlines()
df = pd.DataFrame(
{'text': text, 'labels': np.zeros(len(text))},
{'text': np.array(text), 'labels': np.zeros(len(text))},
columns=['labels', 'text'])
if outname is not None:
df.to_csv(file_path.parent / f'{outname}.csv', header=False, index=False)
return df
def read_whitespace_file(filepath):
"""Reads a file and prepares the tokens."""
tokens = []
@@ -328,7 +212,6 @@ class DataStump:
self.ids = ids
self.loss_func = F.cross_entropy
def validate(model, ids, bptt=2000):
"""
Return the validation loss and perplexity of a model
@@ -341,7 +224,7 @@ def validate(model, ids, bptt=2000):
model.eval()
model.reset()
total_loss, num_examples = 0., 0
for inputs, targets in tqdm(data):
for inputs, targets in data:
outputs, raws, outs = model(to_device(inputs, None))
p_vocab = F.softmax(outputs, 1)
for i, pv in enumerate(p_vocab):
@@ -351,7 +234,6 @@ def validate(model, ids, bptt=2000):
mean = total_loss / num_examples # divide by total number of tokens
return mean, np.exp(mean)
class TextReader():
""" Returns a language model iterator that iterates through batches that are of length N(bptt,5)
The first batch returned is always bptt+25; the max possible width. This is done because of they way that pytorch
+585
View File
@@ -0,0 +1,585 @@
from pathlib import Path
import torch
import dataclasses
from fastai.callbacks import CSVLogger, SaveModelCallback
from fastai.text import *
from multifit.datasets import ULMFiTDataset,ULMFiTTokenizer
CLS_BEST = 'cls_best'
LM_BEST = "lm_best"
ENC_BEST = "enc_best"
def detect_lang_from_dataset_path(dataset_path:Path):
lang, *size = dataset_path.name.split('-')
if lang == "wikitext":
lang = "en"
if len(lang) == 2:
return lang
return None
@dataclass
class Params:
def replace_(self, _verbose_diff=False, **changes):
for f in dataclasses.fields(self):
if f.name in changes:
v = changes[f.name]
if f.type == Path and v is not None:
v = Path(v)
orig = getattr(self, f.name)
if orig != v and _verbose_diff:
print(f"{self.__class__.__name__} Replacing {f.name} '{orig}' with '{v}")
setattr(self, f.name, v)
return self
@dataclass
class ULMFiTArchitecture(Params):
tokenizer_type: str = "f"
max_vocab: int = 60000
lang: str = None
emb_sz: int = awd_lstm_lm_config['emb_sz']
n_hid: int = awd_lstm_lm_config['n_hid']
n_layers: int = awd_lstm_lm_config['n_layers']
qrnn: bool = awd_lstm_lm_config['qrnn']
def model_name(self, name=""):
model_suffix = '' # if self.lmseed is None else f'_lmseed-{self.lmseed}'
model_prefix = 'qrnn' if self.qrnn else 'lstm'
model_name = f"{model_prefix}_{name}{model_suffix}.m"
return model_name
def dataset_cache_suffix(self):
tokenizer_prefix = f"{self.tokenizer_type}{self.max_vocab // 1000}k"
return f'models/{tokenizer_prefix}'
def dataset(self, dataset_path_or_object, tokenizer=None, **args):
if hasattr(dataset_path_or_object, 'load_lm_databunch'):
return dataset_path_or_object
if dataset_path_or_object is None:
return None
ds_path = Path(dataset_path_or_object)
cache_path = ds_path / self.dataset_cache_suffix()
if tokenizer is not None:
tokenizer.save(cache_path) # saving the tokenizer to the cache_path so that it can be reused later.
# TODO add proper caching prefixed with tokenizer hash.
tokenizer = self.new_tokenizer(cache_path)
return ULMFiTDataset(dataset_path=ds_path, cache_path=cache_path, tokenizer=tokenizer, **args)
def new_tokenizer(self, pretrained_path=None):
"gets untrained tokenizer in that stores its data in tmp, use .save once trained"
return ULMFiTTokenizer(arch=self, pretrained_path=pretrained_path)
def set_seed(seed, name):
if seed is not None:
print(f"Setting {name} seed to {seed}")
torch.manual_seed(seed)
torch.backends.cudnn.deterministic = True
torch.backends.cudnn.benchmark = False
np.random.seed(seed)
def to_json_serializable(d):
n = {}
for k, v in d.items():
if isinstance(v, dict):
n[k] = to_json_serializable(v)
elif isinstance(v, (float, int, str, list, tuple)):
n[k] = v
elif v is None:
n[k] = v
else:
n[k] = str(v)
return n
def rename_dict_keys(d, rename_func):
for k in list(d.keys()):
d[rename_func(k)] = d.pop(k)
def convert_old_models_keys_hook(state_dict, *_, **__):
rename_dict_keys(state_dict, lambda k:
k.replace('linear', 'layers.0.linear') if 'layers.0' not in k else k)
def convert_new_models_keys_hook(state_dict, *_, **__):
rename_dict_keys(state_dict, lambda k: k.replace('layers.0.linear', 'linear'))
def patch_learner(learn):
encoder = get_model(learn.model)[0]
if hasattr(encoder, 'module'): encoder = encoder.module
if hasattr(encoder.rnns[0], 'layers'):
encoder._register_load_state_dict_pre_hook(convert_old_models_keys_hook)
learn.model._register_load_state_dict_pre_hook(convert_old_models_keys_hook)
else:
encoder._register_load_state_dict_pre_hook(convert_new_models_keys_hook)
learn.model._register_load_state_dict_pre_hook(convert_new_models_keys_hook)
return learn
@dataclass
class ULMFiTTrainingCommand(Params):
seed: int = 0
name: str = None
arch: ULMFiTArchitecture = field(repr=False, default=None)
experiment_path: Path = None
dataset_path: Path = None
@property
def model_name(self):
return (self.name or self.arch.model_name()) + (
"" if self.seed is None or self.seed == 0 or "seed" in self.name else f"seed{self.seed}")
@property
def info_json(self):
return self.__class__.__name__.lower().replace("ulmfit", "") + ".json"
def _set_dataset_(self, dataset_or_path, tokenizer):
#TODO: refactor, this bit is unclear (set_dataset that does nothing when is None passed?)
dataset_or_path = dataset_or_path or self.dataset_path or getattr(self, 'base', self).dataset_path
dataset = self.arch.dataset(dataset_or_path, tokenizer=tokenizer)
self.dataset_path = dataset.dataset_path
return dataset
@property
def dataset(self):
return self.arch.dataset(self.dataset_path, self.tokenizer)
@property
def tokenizer(self):
if self.experiment_path is None:
return None
return ULMFiTTokenizer(arch=self.arch, pretrained_path=self.experiment_path)
def save_paramters(self):
params = dataclasses.asdict(self)
base_exp_path = params.pop('base', {}).pop('experiment_path', None)
params['base'] = base_exp_path
exp_path = params.get('experiment_path', None)
if exp_path:
fn = self.info_json
print("Saving dump to", exp_path / fn)
json_str = json.dumps(to_json_serializable(params), indent=2)
with (exp_path / fn).open("w") as f:
f.write(json_str)
return json_str
def load_(self, experiment_path, tantetive=True, update_arch=True, silent=False):
fn = experiment_path / self.info_json
if not fn.exists():
if not tantetive:
warn(f"Unable to load experiment_path {experiment_path}")
return False
print(f"Loading {fn}")
with fn.open('r') as f:
d = json.load(f)
base = d.pop('base', None)
arch = d.pop('arch')
if hasattr(self, 'base'):
self.base.load_(Path(base), tantetive=True, update_arch=False, silent=silent)
# compatiblity with older info.json formats where lang was not stored
self.name = experiment_path.name # V ./de-1/models/fsp15k/multifit_fp16 -> ./de-1
dataset_path = Path(d.get('dataset_path', experiment_path.parent.parent.parent))
d['dataset_path'] = dataset_path
d['experiment_path'] = experiment_path
arch['lang'] = arch.get('lang', None) or detect_lang_from_dataset_path(dataset_path)
arch['tokenizer_type'] = arch.pop('tokenizer', arch.get('tokenizer_type', None))
if update_arch:
self.arch.replace_(_verbose_diff=not silent, **arch)
self.replace_(_verbose_diff=not silent, **d)
return arch
@dataclass
class ULMFiTPretraining(ULMFiTTrainingCommand):
num_epochs: int = 10
bs: int = 20
bptt: int = 70
drop_mult: float = 1.0
dropout_values: dict = field(default_factory=dict)
label_smoothing_eps: float = 0.0
label_smoothing_eps_norm_by_classes: bool = True
use_adam_08: bool = False
true_wd: bool = True
wd: bool = 0.01
clip: float = None
fp16: bool = False
lr: float = 5e-3
def get_learner(self, data_lm, **additional_trn_args):
config = awd_lstm_lm_config.copy()
config.update(emb_sz=self.arch.emb_sz, n_hid=self.arch.n_hid, n_layers=self.arch.n_layers, qrnn=self.arch.qrnn,
**self.dropout_values)
trn_args = dict(drop_mult=self.drop_mult, true_wd=self.true_wd, wd=self.wd,
pretrained=False, clip=self.clip)
trn_args.update(**additional_trn_args)
print("Training args: ", trn_args, "config: ", config)
learn = language_model_learner(data_lm,
AWD_LSTM,
config=config,
model_dir=self.model_name,
**trn_args)
learn = patch_learner(learn)
# compared to standard Adam, we set beta_1 to 0.8
if self.use_adam_08:
learn.opt_func = partial(optim.Adam, betas=(0.8, 0.99))
learn.callback_fns += [partial(CSVLogger, filename=f"{learn.model_dir}/lm-history")]
if self.label_smoothing_eps > 0.0:
eps = self.label_smoothing_eps
if self.label_smoothing_eps_norm_by_classes:
eps = eps/ learn.data.c
print("Using Label smoothing with eps = ", eps)
learn.loss_func = FlattenedLoss(LabelSmoothingCrossEntropy, eps=eps)
set_seed(self.seed, "LM training seed")
if self.fp16:
learn.to_fp16()
return learn
def _fit_schedule(self, learn):
print("Training lm from random weights")
learn.unfreeze()
learn.fit_one_cycle(self.num_epochs, self.lr, (0.8, 0.7))
def train_(self, dataset_or_path, tokenizer=None, **train_config):
if self.arch.lang is None:
lang = detect_lang_from_dataset_path(Path(dataset_or_path))
if lang is None:
warn("Unable to detect language from dataset path assuming English, use replace_(lang='??') change it.")
lang = 'en'
self.arch.lang = lang
self.replace_(**train_config, _strict=True)
set_seed(self.seed, "LM weights seed")
if tokenizer is None:
if hasattr(self, 'base'):
tokenizer = self.base.tokenizer
else:
tokenizer = self.arch.new_tokenizer()
dataset = self._set_dataset_(dataset_or_path, tokenizer)
learn = self.get_learner(data_lm=dataset.load_lm_databunch(bs=self.bs, bptt=self.bptt))
experiment_path = learn.path / learn.model_dir
print("Experiment", experiment_path)
if self.num_epochs > 0:
self._fit_schedule(learn)
self.experiment_path = experiment_path
tokenizer.save(self.experiment_path, learn=learn)
learn.to_fp32()
learn.save_encoder(ENC_BEST)
learn.save(LM_BEST, with_opt=False)
learn.destroy()
self.save_paramters()
print("Language model saved to", self.experiment_path)
def validate(self):
raise NotImplementedError("The validation on the language model is not implemented.")
@property
def model_fnames(self):
if self.experiment_path:
model_path = self.experiment_path.absolute()
cache_path = (model_path if (model_path / "itos.pkl").exists() else model_path.parent)
return [model_path / LM_BEST, cache_path /'itos']
return None
@property
def encoder_fname(self):
if self.experiment_path:
return (self.experiment_path / ENC_BEST).absolute()
return None
@dataclass
class ULMFiTFinetuning(ULMFiTPretraining):
base: ULMFiTPretraining = field(repr=False, default=None)
def __post_init__(self):
self.lr = 1e-3
def get_learner(self, data_lm, **additional_trn_args):
pretrained_fnames = None if self.base is None else self.base.model_fnames
# data_lm.lang is added after dataloading
if pretrained_fnames is None and data_lm.lang != 'en':
warn(f"You are using fastai english langauge model for {data_lm.lang}, you might be better off with just random weights.")
learn = super().get_learner(data_lm, **additional_trn_args)
# we don't use pretrained_fnames param so that we can add load_state_dict_hook
if pretrained_fnames is not None:
print("Loading pretrained weights: ", pretrained_fnames)
fnames = [learn.path / learn.model_dir / f'{fn}.{ext}' for fn, ext in zip(pretrained_fnames, ['pth', 'pkl'])]
learn.load_pretrained(*fnames)
learn.freeze()
return learn
def _fit_schedule(self, learn):
if self.base is not None and self.base.model_fnames:
print("Fitting using 2 cycle fit schedule")
learn.freeze_to(-1)
learn.fit_one_cycle(1, self.lr * 10, moms=(0.8, 0.7))
learn.unfreeze()
learn.fit_one_cycle(self.num_epochs, self.lr, moms=(0.8, 0.7))
else:
super()._fit_schedule(learn)
@dataclass
class ULMFiTClassifier(ULMFiTTrainingCommand):
bs: int = 20
num_epochs: int = 10
drop_mult: float = 0.5
dropout_values: dict = field(default_factory=dict)
wd: float = 0.01
clip: float = None
label_smoothing_eps: float = 0.0
label_smoothing_eps_norm_by_classes: bool = False
weighted_cross_entropy: tuple = None
early_stopping: str = 'accuracy'
fit_schedule: str = '1cycle'
base: ULMFiTFinetuning = field(repr=False, default=None)
random_init: bool = False
seed: int = 0
bptt: int = 70
fp16: bool = False
arch: ULMFiTArchitecture = None
def get_learner(self, data_clas, eval_only=False, **additional_trn_args):
assert self.weighted_cross_entropy is None or self.label_smoothing_eps == 0, "Label smoohting not implemented with weighted_cross_entropy"
if self.weighted_cross_entropy is not None:
loss_func = CrossEntropyFlat(weight=torch.tensor(self.weighted_cross_entropy, dtype=torch.float32).cuda())
elif self.label_smoothing_eps > 0.0:
eps = self.label_smoothing_eps
if self.label_smoothing_eps_norm_by_classes:
eps = eps / data_clas.c
print("Using Label smoothing with eps = ", eps)
loss_func = FlattenedLoss(LabelSmoothingCrossEntropy, eps=eps)
else:
loss_func = None
set_seed(self.seed, "Classifier weights seed")
config = awd_lstm_clas_config.copy()
config.update(emb_sz=self.arch.emb_sz, n_hid=self.arch.n_hid, n_layers=self.arch.n_layers, qrnn=self.arch.qrnn,
**self.dropout_values)
trn_args = dict(drop_mult=self.drop_mult, wd=self.wd, pretrained=False, bptt=self.bptt,
loss_func=loss_func, clip=self.clip)
if hasattr(Learner, 'silent'):
trn_args.update(silent=eval_only)
trn_args.update(**additional_trn_args)
print("Training args: ", trn_args, "config: ", config)
learn = text_classifier_learner(data_clas,
AWD_LSTM,
config=config,
model_dir=self.model_name,
**trn_args)
learn = patch_learner(learn)
if self.base.encoder_fname and not self.random_init:
print("Loading pretrained model", self.base.encoder_fname)
learn.load_encoder(self.base.encoder_fname)
learn.freeze()
else:
warn("No pretrained encoder")
set_seed(self.seed, "Classifier training seed")
if not eval_only:
learn.callback_fns += [partial(CSVLogger, filename=f"{learn.model_dir}/cls-history")]
if self.early_stopping:
learn.callback_fns += [partial(SaveModelCallback, every='improvement',
name='cls_best_tmp',
monitor=self.early_stopping)]
if self.fp16:
learn.to_fp16()
return learn
def train_(self, dataset_or_path=None, **train_config):
self.replace_(**train_config, _strict=True)
base_tokenizer = self.base.tokenizer
dataset = self._set_dataset_(dataset_or_path, base_tokenizer)
data_clas = dataset.load_clas_databunch(bs=self.bs)
learn = self.get_learner(data_clas=data_clas)
print(f"Training: {learn.path / learn.model_dir}")
learn.unfreeze()
self._fit_schedule(learn)
self.experiment_path = learn.path / learn.model_dir
base_tokenizer.save(self.experiment_path, learn=learn)
learn.to_fp32()
learn.save(CLS_BEST, with_opt=False)
print("Classifier model saved to", self.experiment_path)
self.save_paramters()
learn.destroy()
return
def _validate(self, learn, ds_type):
ds_name = ds_type.name.lower()
print(f"Model: {self.name}, ds_name: {ds_name}")
results_dict = dict(zip(
[f'{ds_name} loss'] + [f"{ds_name} {getattr(m, '__name__', m.__class__.__name__)}" for m in learn.metrics],
map(float, learn.validate(learn.data.dl(ds_type)))))
results_dict['name'] = self.name
return results_dict
def validate(self, *splits, data_cls=None, save_name=CLS_BEST, use_cache=True, save_preds=False):
"""Validates
splits - Dataset Types to validate on default DatasetType.Test, DatasetType.Valid, DatasetType.Train
"""
if len(splits) == 0:
splits = [DatasetType.Test, DatasetType.Valid, DatasetType.Train]
cache_file = (self.experiment_path / f'results{"" if save_name == CLS_BEST else "-" + save_name}.json')
if use_cache and cache_file.exists():
with cache_file.open("r") as fp:
return json.load(fp)
if data_cls is None:
data_cls = self.dataset.load_clas_databunch(bs=self.bs)
learn = self.get_learner(data_cls, eval_only=True)
# avg = 'binary' if learn.data.c == 2 else 'macro'
# FBeta(beta=1.0, average=avg), Precision(average=avg), Recall(average=avg),
learn.metrics = [accuracy]
print(f"Loading model {save_name}")
learn.load(save_name)
if save_preds:
probs, targets = learn.get_preds(ordered=True, ds_type=DatasetType.Test, activ=partial(F.softmax, dim=-1))
np.save(str(self.experiment_path / f"preds-on-test.npy"), probs.cpu().numpy())
results_dict = {}
for split in splits:
results_dict.update(self._validate(learn, split))
print(results_dict)
with cache_file.open("w") as fp:
json.dump(results_dict, fp)
return results_dict
def _fit_schedule(self, learn):
getattr(self, '_fit_schedule_' + self.fit_schedule)(learn)
def _fit_schedule_1cycle(self, learn):
learn.unfreeze()
learn.fit_one_cycle(self.num_epochs, slice(1e-2 / (2.6 ** 4), 2e-2), moms=(0.8, 0.7))
def _fit_schedule_layered(self, learn):
learn.freeze_to(-1)
learn.fit_one_cycle(1, 2e-2, moms=(0.8, 0.7))
if self.num_epochs > 1:
learn.freeze_to(-2)
learn.fit_one_cycle(1, slice(1e-2 / (2.6 ** 4), 1e-2), moms=(0.8, 0.7))
learn.freeze_to(-3)
learn.fit_one_cycle(1, slice(5e-3 / (2.6 ** 4), 5e-3), moms=(0.8, 0.7))
learn.unfreeze()
if self.num_epochs > 5:
learn.fit_one_cycle(self.num_epochs - 4, slice(1e-3 / (2.6 ** 4), 1e-3), moms=(0.8, 0.7))
def _fit_schedule_2cycle(self, learn):
learn.freeze_to(-1)
learn.fit_one_cycle(1, 2e-2, moms=(0.8, 0.7))
learn.unfreeze()
if self.num_epochs > 1:
learn.fit_one_cycle(self.num_epochs - 1, slice(1e-2 / (2.6 ** 4), 1e-2), moms=(0.8, 0.7))
def _fit_schedule_reverse_2cycle(self, learn):
learn.unfreeze()
for g in learn.layer_groups[-1:]:
for l in g:
if not learn.train_bn or not isinstance(l, bn_types): requires_grad(l, False)
learn.create_opt(defaults.lr)
learn.fit_one_cycle(self.num_epochs, slice(1e-2 / (2.6 ** 4), 2e-2), moms=(0.8, 0.7))
learn.unfreeze()
learn.fit_one_cycle(self.num_epochs, slice(1e-3 / (2.6 ** 4), 2e-3), moms=(0.8, 0.7))
def _fit_schedule_false_wd(self, learn):
learn.true_wd = False
learn.fit_one_cycle(1, 5e-2, moms=(0.8, 0.7), wd=1e-7)
if self.num_epochs > 1:
learn.freeze_to(-2)
learn.fit_one_cycle(1, slice(5e-2 / (2.6 ** 4), 5e-2), moms=(0.8, 0.7), wd=1e-7)
learn.freeze_to(-3)
learn.fit_one_cycle(1, slice(5e-4 / (2.6 ** 4), 5e-4), moms=(0.8, 0.7), wd=1e-7)
learn.unfreeze()
if self.num_epochs > 5:
learn.fit_one_cycle(self.num_epochs - 4, slice(1e-2 / (2.6 ** 4), 1e-2), moms=(0.8, 0.7), wd=1e-7)
def path_if_model_exists(path, weights_name):
"""Return path to model if it exists"""
model_path = path / (weights_name + ".pth")
return path if model_path.exists() else None
@dataclass
class ULMFiT:
arch: ULMFiTArchitecture = None
pretrain_lm: ULMFiTPretraining = None
finetune_lm: ULMFiTFinetuning = None
classifier: ULMFiTClassifier = None
def __post_init__(self):
self.arch = ULMFiTArchitecture()
self.pretrain_lm = ULMFiTPretraining(arch=self.arch)
self.finetune_lm = ULMFiTFinetuning(arch=self.arch, base=self.pretrain_lm)
self.classifier = ULMFiTClassifier(arch=self.arch, base=self.finetune_lm)
def load_(self, experiment_path:Path, silent=False):
success = (self.classifier.load_(experiment_path, silent=silent) or
self.finetune_lm.load_(experiment_path, silent=silent) or
self.pretrain_lm.load_(experiment_path, silent=silent) or
self.load_legacy_(experiment_path, silent=silent))
if not success:
warn(f'Unable to load experiment {experiment_path}')
return self
def load_legacy_(self, experiment_path, silent=True):
if not (experiment_path / "info.json").exists():
return False
with (experiment_path / "info.json").open('r') as f:
d = json.load(f)
dataset_path = d.pop('dataset_path', "")
d['n_hid'] = d['nh']
d['n_layers'] = d['nl']
d['lang'] = detect_lang_from_dataset_path(Path(dataset_path))
if "wiki" in str(dataset_path):
self.arch.replace_(**d)
self.pretrain_lm.replace_(**d)
self.pretrain_lm.experiment_path = path_if_model_exists(experiment_path, LM_BEST)
self.pretrain_lm.dataset_path = dataset_path if dataset_path in str(experiment_path) else None
else:
self.replace_(**d)
self.finetune_lm.experiment_path = path_if_model_exists(experiment_path, ENC_BEST)
self.finetune_lm.dataset_path = dataset_path if dataset_path in str(experiment_path) else None
self.classifier.experiment_path = path_if_model_exists(experiment_path, CLS_BEST)
self.classifier.dataset_path = dataset_path if dataset_path in str(experiment_path) else None
return True
def replace_(self, **kwargs):
self.arch.replace_(**kwargs)
self.pretrain_lm.replace_(**kwargs)
self.finetune_lm.replace_(**kwargs)
self.classifier.replace_(**kwargs)
return self
def pprint(self):
print(f"""ULMFiT(
{self.arch},
{self.pretrain_lm},
{self.finetune_lm},
{self.classifier},
)""")
def from_pretrained_(self, name, repo="n-waves/multifit-models"):
name = name.rstrip(".tgz") # incase someone put's tgz name the name
url = f"https://github.com/{repo}/releases/download/{name}/{name}.tgz"
path = untar_data(url.rstrip(".tgz"), data=False) # untar_data adds .tgz
return self.load_(path)
def from_pretrained(name):
#TODO: Detect name and load configuration
from . import configurations
return configurations.multifit_paper_version().from_pretrained_(name)
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -7,5 +7,5 @@ echo "Saving data in $DATA_DIR"
wget -c "http://files.fast.ai/data/aclImdb.tgz" -P "${DATA_DIR}"
echo "Imdb is raw text no preparation is done"
python -m fastai_contrib.utils prepare_imdb "${DATA_DIR}/aclImdb.tgz"
python -m multifit.datasets.utils prepare_imdb "${DATA_DIR}/aclImdb.tgz"
-2
View File
@@ -1,2 +0,0 @@
# https://storage.googleapis.com/reddit_comments_polish/comments.csv.gz
+4 -11
View File
@@ -13,13 +13,6 @@ else
fi
echo "Chosen language: ""$LANG"
if [ "$2" == "" ] ; then
read -p "Enter the minimal tokens per articles [100]: " tokens_min
TOKENS_MIN=${tokens_min:-100}
else
TOKENS_MIN="$2"
fi
DUMP_DIR="${ROOT}/wiki_dumps"
EXTR_DIR="${ROOT}/wiki_extr"
WIKI_DIR="${ROOT}/wiki"
@@ -53,8 +46,8 @@ else
echo "${EXTR_PATH} already exists. Skipping extraction."
fi
python -m ulmfit.create_wikitext -i "${EXTR_PATH}" -l "${LANG}" -o "${WIKI_DIR}" -t "${TOKENS_MIN}"
python -m multifit.create_wikitext -i "${EXTR_PATH}" -l "${LANG}" -o "${WIKI_DIR}"
python -m ulmfit.postprocess_wikitext "${WIKI_DIR}/${LANG}-2" $LANG
python -m ulmfit.postprocess_wikitext "${WIKI_DIR}/${LANG}-100" $LANG
#python -m ulmfit.postprocess_wikitext "${WIKI_DIR}/${LANG}-all" $LANG
python -m multifit.postprocess_wikitext "${WIKI_DIR}/${LANG}-2" $LANG
python -m multifit.postprocess_wikitext "${WIKI_DIR}/${LANG}-100" $LANG
#python -m multifit.postprocess_wikitext "${WIKI_DIR}/${LANG}-all" $LANG
+3 -3
View File
@@ -1,5 +1,5 @@
fire>=0.1.3
cupy>=5.0.0
scikit-learn>=0.20
sacremoses>=0.0.5
sentencepiece
sacremoses==0.0.35
sentencepiece==0.1.83
fastai >= 1.0.43
-6
View File
@@ -1,6 +0,0 @@
# Zero shot from CLS
### zeroshoot
-105
View File
@@ -1,105 +0,0 @@
## Supervised classification results on MLDoc
| Model | en | de | es | fr | it | ja | ru | zh |
|----------------|-----------|-----------|-----------|-----------|-----------|-----------|-----------|------------|
|LASER 0 shot | 80.75 | 87.03 | 82.60 | 82.83 | 73.25 | 60.95 | 68.83 | 72.90 |
|LASER | 90.73 | 92.70 | 88.75 | 90.80 | 85.93 | 85.15 | 84.65 | 88.98 |
|MultiCCA | 92.2 | 93.70 | 94.45 | 92.05 | 85.55 | 85.35 | 85.65 | 87.30 |
|Bert Multi | 93.23 | 94.0 | 95.15 | 93.20 | 85.82 | 87.48 | 86.85 | 90.72 |
|ULMFiT L30k-100 | | 91.35 | 83.32 | 88.77 | 77.99 | 71.12 | 72.20 | |
|ULMFiT L30k | | 95.4 | 95.15 | 93.67 | 88.42 | 89.20 | **87.27** | 90.20 |
|ULMFiT sp-fixed | | **95.6** | 94.80 | 94.20 | 88.52 | 88.72 | 86.85 | 90.47 |
|ULMFIT Q15k 1cyc| 94.62 | **95.65** | 95.15 | **94.42** | 89.92 | 89.60 | | 90.78/89.82 |
|ULMFIT Q15k 1c l| **94.99** | | 95.64 | 94.34 | **90.32** | 89.67 | 87.67^ | **92.22** |
|ULMFIT Q15k 1cfl| **95.55** | **96.10** | 95.97 | 94.77 | **90.07** | 89.87 | 87.17 | **92.40** |
|ULMFIT L30k 1cyc| | **95.85** | **96.32** | **94.82** | 89.87 | **90.45** | **87.94** | 92.02/91.64 |
- L30k - LSTM sp30k trained using gradual unfreezing
- L30k-100 - --||-- **on 100 samples**
- ULMFiT sp-fixed - --||-- with fixed tokenization
- Q15k 1cyc - QRNN sp15k trained using 1cycle learning rate schedule
- L30k 1cyc - LSTM sp30k trained using 1cycle learning rate schedule
- We checked LSTM on sp15k on DE and got 95.53% accuracy which is comparable to QRNN sp15k
- ^ - 16 epochs qrnn_nl4sl-bs500
## Zeroshot
| Model | de | es | fr | it | ru | zh |
|----------------------|------------|------------|-----------|-----------|-----------|-----------|
| LASER-en | 87.65 | 75.48 | 84.00 | 71.18 | 66.58 | 76.65 |
| ULMFiT L on LASER-en | **92.95** | **80.50** | 88.78 | 76.20 | **70.05** | 80.45 |
| ULMFiT Q on LASER-en | 91.34 | 78.92 | **89.45** | 76.00 | 68.19 | **82.45** |
- L - 1k LSTM sp30k
- Q - 1k QRNN sp15k
#### LSTM results
| Model | de | es | fr | it | ru | zh |
|----------------------|------------|------------|-----------|-----------|-----------|-----------|
| LASER-de | | 81.40 | 81.50 | 74.53 | 64.58 | 73.20 |
| LASER-fr | 88.75 | 80.12 | | 72.58 | 67.35 | 79.40 |
| LASER-en | 87.65 | 75.48 | 84.00 | 71.18 | 66.58 | 76.65 |
| | | | | | | |
| ULMFiT on LASER-de | | **85.50** | 87.37 | **78.75** | 66.95 | 72.32 |
| ULMFiT on LASER-fr | 92.22 | 81.00 | | 76.88 | 68.33 | **84.65** |
| ULMFiT on LASER-en | **92.95** | 80.50 | **88.78** | 76.20 | **70.05** | 80.45 |
| | | | | | | |
| % impr over LASER-de | | 22% | 32% | 17% | 7% | *-3%* |
| % impr over LASER-fr | 31% | 4% | | 16% | 3% | 25% |
| % impr over LASER-en | 43% | 20% | 30% | 17% | 10% | 16% |
| ULMFiT 100 for comp. | 91.35 | 83.32 | 88.77 | 77.99 | 71.12 | |
| | | | | | | |
| Bert Multilingual-EN | 74.50 | 61.85 | 69.77 | 57.73 | 51.10 | 64.08 |
#### From Laser trained on French data
| Model Name | de | es | fr | it | ru | zh |
|---------------------------|-------|-------|----|-------|-------|-------|
| LASER fr 10k | 91.65 | 81.05 | | 75.08 | 70.73 | 76.33 |
| LASER fr 1k | 88.75 | 80.12 | | 72.58 | 67.35 | 79.4 |
| ULMFiT 10k on LASER-fr10k | 94.48 | 84.10 | | 77.93 | 72.87 | 84.53 |
| ULMFiT 10k on LASER-fr1k | 92.30 | 82.10 | | 75.52 | 69.52 | 85.55 |
| ULMFiT 1k on LASER-fr1k | 92.22 | 81.00 | | 76.88 | 68.33 | 84.65 |
| | | | | | | |
| Impr 10k over 10k | 34% | 16% | | 11% | 7% | 35% |
| Impr 10k over 1k | 32% | 10% | | 11% | 7% | 30% |
| Impr 1k over 1k | 31% | 4% | | 16% | 3% | 25% |
#### From Laser trained on German data
| Model Name | de | es | fr | it | ru | zh |
|---------------------------|----|-------|-------|-------|-------|-------|
| LASER de 10k | | 83.5 | 82.85 | 76.6 | 68.8 | 73.12 |
| LASER de 1k | | 81.4 | 81.5 | 74.53 | 64.58 | 73.2 |
| ULMFiT 10k on LASER-de10k | | 86.92 | 87.17 | 79.35 | 70.15 | 78.15 |
| ULMFiT 10k on LASER-de1k | | 84.65 | 87.48 | 78.70 | 67.65 | 77.50 |
| ULMFiT 1k on LASER-de1k | | 85.5 | 87.37 | 78.75 | 66.95 | 72.32 |
| | | | | | | |
| Impr 10k over 10k | | 21% | 25% | 12% | 4% | 19% |
| Impr 10k over 1k | | 17% | 32% | 16% | 9% | 16% |
| Impr 1k over 1k | | 22% | 32% | 17% | 7% | -3% |
#### From Laser trained on English data
| Model Name | de | es | fr | it | ru | zh |
|---------------------------|-------|-------|-------|-------|-------|-------|
| LASER en 10k | 87.43 | 77.38 | 78.7 | 72.53 | 67.7 | 75.18 |
| LASER en 1k | 87.65 | 75.48 | 84 | 71.18 | 66.58 | 76.65 |
| ULMFiT 10k on LASER-en10k | 92.05 | 80.05 | 86.95 | 76.65 | 70.57 | 80.85 |
| ULMFiT 10k on LASER-en1k | 91.80 | 80.10 | 88.67 | 77.32 | 70.25 | 82.73 |
| ULMFiT 1k on LASER-en1k | 92.95 | 80.50 | 88.78 | 76.20 | 70.05 | 80.45 |
| | | | | | | |
| Impr 10k over 10k | 37% | 12% | 39% | 15% | 9% | 23% |
| Impr 10k over 1k | 34% | 19% | 29% | 21% | 11% | 26% |
| Impr 1k over 1k | 43% | 20% | 30% | 17% | 10% | 16% |
| ULMFiT qrnn on 1k LSRen1k | 91.32 | 78.92 | 89.45 | 75.99 | | 82.45 |
| ULMFiT qrnn on 10k LSRen1k| 91.90 | 78.79 | 88.47 | 76.05 | | |
## Noise resistance
| Model | en | de | es | fr | it | ja | ru | zh |
|---------------------------------|------------|-----------|-----------|-----------|-----------|-----------|-----------|------------|
|LASER 0 shot | 80.75 (en) | 87.03 (fr)| 82.60 (it)| 82.83 (de)| 73.25 (de)| 60.95 (en)| 68.83 (it)| 72.90 (de) |
|ULMFiT | | **95.4** | **95.15** | **93.67** | **88.42** | **89.20** | **87.27** | |
| % of noise | 20% | 13% | 18% | 18% | 27% | 40% | 32% | 28% |
|ULMFiT trained on 1k noisy exmp. | | 94.49 | 93.12 | 90.49 | 83.72 | 74.72 | 75.67 | |
File diff suppressed because it is too large Load Diff
-24
View File
@@ -1,24 +0,0 @@
## QRNN sp15k timing
```
time python -m ulmfit lm --dataset-path data/wiki/${LANG}-100 --tokenizer='sp' --nl 4 --name 'nl4-2' --max-vocab 15000 --lang ${LANG} --qrnn=True - train 1 --bs=50 --drop_mult=0 --label-smoothing-eps=0.1
Max vocab: 15000
Cache dir: data/wiki/ru-100/models/sp15k
Model dir: data/wiki/ru-100/models/sp15k/qrnn_nl4-2.m
Wiki text was split to 193047 articles
Wiki text was split to 460 articles
Data lm, trn: 193047, val: 460
Size of vocabulary: 15000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁,', '▁.', '▁в', 'а', 'и', 'е', '▁и', 'й', '▁на', 'х']
Training args: {'clip': 0.12, 'alpha': 2, 'beta': 1, 'drop_mult': 0} dps: {'output_p': 0.25, 'hidden_p': 0.1, 'input_p': 0.2, 'embed_p': 0.02, 'weight_p': 0.15}
Training lm from random weights
epoch train_loss valid_loss accuracy
1 3.943105 3.860063 0.477620
Total time: 1:05:03
data/wiki/ru-100/models/sp15k
Saving info data/wiki/ru-100/models/sp15k/qrnn_nl4-2.m/info.json
real 65m30,341s
user 48m49,047s
sys 16m40,688s
```
-448
View File
@@ -1,448 +0,0 @@
Training lm from: [PosixPath('/home/pczapla/workspace/ulmfit-multilingual/data/wiki/de-100/models/sp15k/qrnn_nl4.m/lm_best'), PosixPath('/home/pczapla/workspace/ulmfit-multilingual/data/wiki/de-100/models/sp15k/qrnn_nl4.m/../itos')]
epoch train_loss valid_loss accuracy
1 3.467852 2.558666 0.525457
Total time: 02:25
epoch train_loss valid_loss accuracy
1 2.722157 2.387366 0.548566
2 2.477095 2.170018 0.580988
3 2.182971 1.981363 0.609205
4 2.078041 1.836848 0.629900
5 1.975613 1.744062 0.642769
6 1.866875 1.656678 0.655799
7 1.831995 1.595655 0.665479
8 1.768020 1.540487 0.673880
9 1.751569 1.488140 0.682557
10 1.647143 1.441723 0.690275
11 1.712795 1.399652 0.697534
12 1.529405 1.350384 0.706170
13 1.549134 1.313349 0.713210
14 1.585015 1.278395 0.719908
15 1.475010 1.248854 0.725591
16 1.532636 1.221373 0.731053
17 1.445181 1.203350 0.734503
18 1.396236 1.191440 0.737102
19 1.316587 1.186497 0.738052
20 1.374460 1.185027 0.738290
Total time: 1:11:26
/home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-1/models/sp15k
Saving info /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-1/models/sp15k/qrnn_nl4.m/info.json
Saving models at /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-1/models/sp15k/qrnn_nl4.m
Loss and accuracy using (cls_best): [1.3879647, tensor(0.2595)]
Processing data/wiki/en-100/models/sp15k/qrnn_nl4.m
------
$ python -m ulmfit eval --glob="wiki/*-100/models/sp15k/qrnn_nl4.m" --name nl4 --dataset-template='../mldoc/${lang}-1' --num-lm-epochs=20 --num-cls-epochs=8 --bs=18 --lr_sched=1cycle
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁the', '▁,', 's', '▁.', '▁of', '▁and', '▁in', '▁to', '▁a', 'ed']
Training args: {'clip': 0.12, 'alpha': 2, 'beta': 1, 'drop_mult': 0.3} dps: {'output_p': 0.25, 'hidden_p': 0.1, 'input_p': 0.2, 'embed_p': 0.02, 'weight_p': 0.15}
Loading pretrained model
Unknown tokens 0, first 100: []
Training lm from: [PosixPath('/home/pczapla/workspace/ulmfit-multilingual/data/wiki/en-100/models/sp15k/qrnn_nl4.m/lm_best'), PosixPath('/home/pczapla/workspace/ulmfit-multilingual/data/wiki/en-100/models/sp15k/qrnn_nl4.m/../itos')]
epoch train_loss valid_loss accuracy
1 4.567319 3.820788 0.346054
Total time: 02:26
epoch train_loss valid_loss accuracy
1 3.889761 3.601505 0.374049
2 3.570620 3.357854 0.406134
3 3.389516 3.153452 0.432199
4 3.217872 2.985234 0.452187
5 3.063675 2.851744 0.468071
6 3.023959 2.754062 0.480278
7 2.907327 2.647027 0.493494
8 2.786187 2.562560 0.505051
9 2.737610 2.500068 0.513554
10 2.696695 2.430095 0.523029
11 2.658439 2.380829 0.530339
12 2.598193 2.318927 0.539454
13 2.558214 2.275014 0.546136
14 2.520342 2.230543 0.553176
15 2.475964 2.190341 0.559245
16 2.370359 2.161100 0.564223
17 2.430078 2.136685 0.568197
18 2.383946 2.125458 0.569950
19 2.389433 2.117541 0.571265
20 2.297921 2.116168 0.571367
Total time: 1:11:10
/home/pczapla/workspace/ulmfit-multilingual/data/mldoc/en-1/models/sp15k
Saving info /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/en-1/models/sp15k/qrnn_nl4.m/info.json
Single training schedule
epoch train_loss valid_loss accuracy
1 0.705876 0.241169 0.918000
2 0.450546 0.239528 0.926000
3 0.335179 0.221836 0.931000
4 0.202048 0.208652 0.951000
5 0.144956 0.223669 0.954000
6 0.073117 0.277062 0.953000
7 0.045186 0.258046 0.962000
8 0.022987 0.265977 0.961000
Total time: 02:33
Saving models at /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/en-1/models/sp15k/qrnn_nl4.m
Loss and accuracy using (cls_best): [0.29402012, tensor(0.9460)]
Processing data/wiki/es-100/models/sp15k/qrnn_nl4.m
../mldoc/es-1
Max vocab: 15000
Cache dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/es-1/models/sp15k
Model dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/es-1/models/sp15k/qrnn_nl4.m
Evaluating previously trained model
Loading validation /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/es-1/es.dev.csv
Data lm, trn: 13013, val: 1445
Data cls, trn: 1000, val: 1000
Data tst, trn: 1000, val: 4000
Size of vocabulary: 15000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁de', '▁,', '▁la', '▁.', 's', '▁en', '▁el', '▁y', '▁a', '▁que']
Loss and accuracy using (cls_last): [0.19222946, tensor(0.9515)]
Processing data/wiki/fr-100/models/sp15k/qrnn_nl4.m
../mldoc/fr-1
Max vocab: 15000
Cache dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/fr-1/models/sp15k
Model dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/fr-1/models/sp15k/qrnn_nl4.m
Training
Loading validation /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/fr-1/fr.dev.csv
Running tokenization lm...
Data lm, trn: 13500, val: 1500
Running tokenization cls...
Data cls, trn: 1000, val: 1000
Running tokenization tst...
Data tst, trn: 1000, val: 4000
Size of vocabulary: 15000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁de', '▁,', 's', '▁.', "'", '▁la', '▁le', '▁et', '▁l', '▁à']
Training args: {'clip': 0.12, 'alpha': 2, 'beta': 1, 'drop_mult': 0.3} dps: {'output_p': 0.25, 'hidden_p': 0.1, 'input_p': 0.2, 'embed_p': 0.02, 'weight_p': 0.15}
Loading pretrained model
Unknown tokens 0, first 100: []
Training lm from: [PosixPath('/home/pczapla/workspace/ulmfit-multilingual/data/wiki/fr-100/models/sp15k/qrnn_nl4.m/lm_best'), PosixPath('/home/pczapla/workspace/ulmfit-multilingual/data/wiki/fr-100/models/sp15k/qrnn_nl4.m/../itos')]
epoch train_loss valid_loss accuracy
1 3.375679 2.676224 0.454405
Total time: 02:19
epoch train_loss valid_loss accuracy
1 2.901917 2.540690 0.475910
2 2.593614 2.370477 0.504601
3 2.423170 2.205713 0.530328
4 2.287688 2.083261 0.549087
5 2.161118 1.984955 0.564804
6 2.221017 1.912810 0.575434
7 2.111272 1.837854 0.588076
8 2.032289 1.775163 0.598341
9 1.984161 1.720519 0.607980
10 1.904775 1.668184 0.617407
11 1.829098 1.621347 0.626292
12 1.855409 1.577870 0.634512
13 1.843696 1.536835 0.642584
14 1.767968 1.496428 0.650317
15 1.741591 1.463305 0.656908
16 1.682118 1.438706 0.662601
17 1.666425 1.418383 0.666283
18 1.623713 1.406877 0.668710
19 1.645482 1.401546 0.669716
20 1.579352 1.399608 0.670167
Total time: 1:06:50
/home/pczapla/workspace/ulmfit-multilingual/data/mldoc/fr-1/models/sp15k
Saving info /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/fr-1/models/sp15k/qrnn_nl4.m/info.json
Single training schedule
epoch train_loss valid_loss accuracy
1 0.614734 0.262120 0.906000
2 0.377443 0.327852 0.917000
3 0.296728 0.392655 0.903000
4 0.179866 0.423420 0.928000
5 0.114529 0.398973 0.935000
6 0.082004 0.325470 0.944000
7 0.047604 0.359636 0.945000
8 0.032579 0.354014 0.944000
Total time: 02:22
Saving models at /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/fr-1/models/sp15k/qrnn_nl4.m
Loss and accuracy using (cls_best): [0.33020702, tensor(0.9450)]
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁、', '▁。', '▁の', '▁に', '▁を', '▁年', 'の', '▁は', '▁・', '▁)']
Training args: {'clip': 0.12, 'alpha': 2, 'beta': 1, 'drop_mult': 0.3} dps: {'output_p': 0.25, 'hidden_p': 0.1, 'input_p': 0.2, 'embed_p': 0.02, 'weight_p': 0.15}
Loading pretrained model
Unknown tokens 0, first 100: []
Training lm from: [PosixPath('/home/pczapla/workspace/ulmfit-multilingual/data/wiki/ja-100/models/sp15k/qrnn_nl4.m/lm_best'), PosixPath('/home/pczapla/workspace/ulmfit-multilingual/data/wiki/ja-100/models/sp15k/qrnn_nl4.m/../itos')]
epoch train_loss valid_loss accuracy
1 3.524609 2.582580 0.512131
Total time: 02:34
epoch train_loss valid_loss accuracy
1 2.656181 2.315530 0.550262
2 2.265949 2.019140 0.598469
3 1.985897 1.769565 0.638234
4 1.831071 1.617888 0.660760
5 1.735492 1.509642 0.677379
6 1.637924 1.427618 0.690664
7 1.564483 1.363384 0.700825
8 1.508054 1.318165 0.708210
9 1.471599 1.267787 0.716080
10 1.398376 1.232899 0.722340
11 1.311976 1.199602 0.728811
12 1.401354 1.162299 0.735328
13 1.385588 1.132408 0.740850
14 1.256193 1.106556 0.745935
15 1.289892 1.083529 0.750840
16 1.220951 1.063360 0.754845
17 1.259715 1.050884 0.757371
18 1.165468 1.042870 0.759241
19 1.242660 1.038160 0.760036
20 1.194239 1.037506 0.760167
Total time: 1:13:55
/home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ja-1/models/sp15k
Saving info /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ja-1/models/sp15k/qrnn_nl4.m/info.json
Single training schedule
epoch train_loss valid_loss accuracy
1 0.760780 0.391838 0.872000
2 0.592674 0.427392 0.870000
3 0.446265 0.593488 0.838000
4 0.318780 0.605533 0.858000
5 0.226914 0.665538 0.872000
6 0.135525 0.742310 0.891000
7 0.063984 0.778616 0.892000
8 0.039366 0.827663 0.884000
Total time: 02:49
Saving models at /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ja-1/models/sp15k/qrnn_nl4.m
Loss and accuracy using (cls_best): [0.70555997, tensor(0.8960)]
Processing data/wiki/zh-100/models/sp15k/qrnn_nl4.m
../mldoc/zh-1
Max vocab: 15000
Cache dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/zh-1/models/sp15k
Model dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/zh-1/models/sp15k/qrnn_nl4.m
Evaluating previously trained model
Loading validation /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/zh-1/zh.dev.csv
Data lm, trn: 13500, val: 1500
Data cls, trn: 1000, val: 1000
Data tst, trn: 1000, val: 4000
Size of vocabulary: 15000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁,', '▁的', '▁。', '▁年', '▁、', '▁在', '▁一', '▁是', '▁中', '▁有']
Loss and accuracy using (cls_last): [0.30052844, tensor(0.8982)]
OrderedDict([('data/mldoc/de-1/models/sp15k/qrnn_nl4.m', 0.2592499852180481),
('data/mldoc/en-1/models/sp15k/qrnn_nl4.m', 0.9462500214576721),
('data/mldoc/es-1/models/sp15k/qrnn_nl4.m', 0.9514999985694885),
('data/mldoc/fr-1/models/sp15k/qrnn_nl4.m', 0.9442499876022339),
('data/mldoc/ja-1/models/sp15k/qrnn_nl4.m', 0.8960000276565552),
('data/mldoc/zh-1/models/sp15k/qrnn_nl4.m', 0.8982499837875366)])
!! WARNING !!
warnings.warn(ABI_INCOMPATIBILITY_WARNING.format(compiler))
Single training schedule
epoch train_loss valid_loss accuracy
1 0.610785 0.239165 0.923000
2 0.392899 0.281254 0.937000
3 0.268695 0.444383 0.909000
4 0.162150 0.427744 0.931000
5 0.109248 0.422351 0.948000
6 0.061984 0.411351 0.947000
7 0.033645 0.413174 0.951000
8 0.018704 0.404264 0.947000
Total time: 02:16
Saving models at /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-1/models/sp15k/qrnn_nl4.m
Loss and accuracy using (cls_best): [0.29712877, tensor(0.9565)]
Processing data/wiki/en-100/models/sp15k/qrnn_nl4.m
../mldoc/en-1
Max vocab: 15000
Cache dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/en-1/models/sp15k
Model dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/en-1/models/sp15k/qrnn_nl4.m
Evaluating previously trained model
Loading validation /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/en-1/en.dev.csv
Data lm, trn: 13500, val: 1500
Data cls, trn: 1000, val: 1000
Data tst, trn: 1000, val: 4000
Size of vocabulary: 15000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁the', '▁,', 's', '▁.', '▁of', '▁and', '▁in', '▁to', '▁a', 'ed']
Loss and accuracy using (cls_last): [0.29526812, tensor(0.9463)]
Processing data/wiki/es-100/models/sp15k/qrnn_nl4.m
../mldoc/es-1
Max vocab: 15000
Cache dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/es-1/models/sp15k
Model dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/es-1/models/sp15k/qrnn_nl4.m
Evaluating previously trained model
Loading validation /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/es-1/es.dev.csv
Data lm, trn: 13013, val: 1445
Data cls, trn: 1000, val: 1000
Data tst, trn: 1000, val: 4000
Size of vocabulary: 15000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁de', '▁,', '▁la', '▁.', 's', '▁en', '▁el', '▁y', '▁a', '▁que']
Loss and accuracy using (cls_last): [0.19222946, tensor(0.9515)]
Processing data/wiki/fr-100/models/sp15k/qrnn_nl4.m
../mldoc/fr-1
Max vocab: 15000
Cache dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/fr-1/models/sp15k
Model dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/fr-1/models/sp15k/qrnn_nl4.m
Evaluating previously trained model
Loading validation /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/fr-1/fr.dev.csv
Data lm, trn: 13500, val: 1500
Data cls, trn: 1000, val: 1000
Data tst, trn: 1000, val: 4000
Size of vocabulary: 15000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁de', '▁,', 's', '▁.', "'", '▁la', '▁le', '▁et', '▁l', '▁à']
Loss and accuracy using (cls_last): [0.33129737, tensor(0.9442)]
Processing data/wiki/it-100/models/sp15k/qrnn_nl4.m
../mldoc/it-1
Max vocab: 15000
Cache dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/it-1/models/sp15k
Model dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/it-1/models/sp15k/qrnn_nl4.m
Training
Loading validation /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/it-1/it.dev.csv
Running tokenization lm...
Data lm, trn: 13500, val: 1500
Running tokenization cls...
Data cls, trn: 1000, val: 1000
Running tokenization tst...
Data tst, trn: 1000, val: 4000
Size of vocabulary: 15000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁,', '▁.', '▁di', '▁e', "▁&'", "'", '▁il', '▁la', '▁in', 'e']
Training args: {'clip': 0.12, 'alpha': 2, 'beta': 1, 'drop_mult': 0.3} dps: {'output_p': 0.25, 'hidden_p': 0.1, 'input_p': 0.2, 'embed_p': 0.02, 'weight_p': 0.15}
Loading pretrained model
Unknown tokens 0, first 100: []
Training lm from: [PosixPath('/home/pczapla/workspace/ulmfit-multilingual/data/wiki/it-100/models/sp15k/qrnn_nl4.m/lm_best'), PosixPath('/home/pczapla/workspace/ulmfit-multilingual/data/wiki/it-100/models/sp15k/qrnn_nl4.m/../itos')]
epoch train_loss valid_loss accuracy
1 3.929510 2.916437 0.434550
Total time: 01:20
epoch train_loss valid_loss accuracy
1 3.231523 2.723415 0.461407
2 2.823881 2.498599 0.496812
3 2.586648 2.283846 0.530524
4 2.417038 2.125690 0.553137
5 2.278636 1.995558 0.572757
6 2.199877 1.887804 0.589102
7 2.090629 1.799082 0.603201
8 2.046975 1.725273 0.615247
9 1.935966 1.654829 0.626968
10 1.921190 1.590797 0.638228
11 1.894758 1.528087 0.649369
12 1.792718 1.477532 0.658754
13 1.679359 1.428426 0.668648
14 1.723383 1.377170 0.678987
15 1.597491 1.339658 0.686348
16 1.620966 1.307664 0.692993
17 1.568962 1.284500 0.697923
18 1.533934 1.271438 0.700628
19 1.496832 1.264714 0.701968
20 1.486198 1.262870 0.702333
Total time: 39:33
/home/pczapla/workspace/ulmfit-multilingual/data/mldoc/it-1/models/sp15k
Saving info /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/it-1/models/sp15k/qrnn_nl4.m/info.json
Single training schedule
epoch train_loss valid_loss accuracy
1 0.784124 0.414312 0.847000
2 0.550873 0.413405 0.861000
3 0.445371 0.363693 0.877000
4 0.271702 0.426771 0.899000
5 0.165902 0.556069 0.881000
6 0.091403 0.628809 0.897000
7 0.065516 0.693292 0.893000
8 0.033616 0.675199 0.897000
Total time: 01:24
Saving models at /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/it-1/models/sp15k/qrnn_nl4.m
Loss and accuracy using (cls_best): [0.7380945, tensor(0.8992)]
Processing data/wiki/ja-100/models/sp15k/qrnn_nl4.m
../mldoc/ja-1
Max vocab: 15000
Cache dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ja-1/models/sp15k
Model dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ja-1/models/sp15k/qrnn_nl4.m
Evaluating previously trained model
Loading validation /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ja-1/ja.dev.csv
Data lm, trn: 13500, val: 1500
Data cls, trn: 1000, val: 1000
Data tst, trn: 1000, val: 4000
Size of vocabulary: 15000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁、', '▁。', '▁の', '▁に', '▁を', '▁年', 'の', '▁は', '▁・', '▁)']
Loss and accuracy using (cls_last): [0.7049702, tensor(0.8953)]
Processing data/wiki/zh-100/models/sp15k/qrnn_nl4.m
../mldoc/zh-1
Max vocab: 15000
Cache dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/zh-1/models/sp15k
Model dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/zh-1/models/sp15k/qrnn_nl4.m
Evaluating previously trained model
Loading validation /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/zh-1/zh.dev.csv
Data lm, trn: 13500, val: 1500
Data cls, trn: 1000, val: 1000
Data tst, trn: 1000, val: 4000
Size of vocabulary: 15000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁,', '▁的', '▁。', '▁年', '▁、', '▁在', '▁一', '▁是', '▁中', '▁有']
Loss and accuracy using (cls_last): [0.30052844, tensor(0.8982)]
OrderedDict([('data/mldoc/de-1/models/sp15k/qrnn_nl4.m', 0.9564999938011169),
('data/mldoc/en-1/models/sp15k/qrnn_nl4.m', 0.9462500214576721),
('data/mldoc/es-1/models/sp15k/qrnn_nl4.m', 0.9514999985694885),
('data/mldoc/fr-1/models/sp15k/qrnn_nl4.m', 0.9442499876022339),
('data/mldoc/it-1/models/sp15k/qrnn_nl4.m', 0.8992499709129333),
('data/mldoc/ja-1/models/sp15k/qrnn_nl4.m', 0.8952500224113464),
('data/mldoc/zh-1/models/sp15k/qrnn_nl4.m', 0.8982499837875366)])
## DE
----------------------------------------
Training issues
1/2nd -- That was without fine tuning !!! 0 shot:)
```
python -m ulmfit load_cls data/mldoc/de-1/models/sp15k/qrnn_nl4.m --lang=de - train 0 --num-cls-epochs 8 --bs=18 --lr-sched=1cycle ✘ 1
Max vocab: 15000
Cache dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-1/models/sp15k
Model dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-1/models/sp15k/qrnn_None.m
Loading validation /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-1/de.dev.csv
Data lm, trn: 13500, val: 1500
Data cls, trn: 1000, val: 1000
Data tst, trn: 1000, val: 4000
Size of vocabulary: 15000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁.', '▁,', '▁der', '▁die', 'en', '▁und', 's', '▁in', 'er', "▁&'"]
/home/pczapla/anaconda3/envs/fastaiv1/lib/python3.7/site-packages/torch/utils/cpp_extension.py:152: UserWarning:
!! WARNING !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Your compiler (c++) may be ABI-incompatible with PyTorch!
Please use a compiler that is ABI-compatible with GCC 4.9 and above.
See https://gcc.gnu.org/onlinedocs/libstdc++/manual/abi.html.
See https://gist.github.com/goldsborough/d466f43e8ffc948ff92de7486c5216d6
for instructions on how to install GCC 4.9 or higher.
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! WARNING !!
warnings.warn(ABI_INCOMPATIBILITY_WARNING.format(compiler))
Single training schedule
epoch train_loss valid_loss accuracy
1 1.310368 1.177105 0.520000
2 1.096284 0.899281 0.739000
3 0.860910 0.668378 0.864000
4 0.676764 0.733304 0.868000
5 0.573360 0.590983 0.885000
6 0.438448 0.446631 0.918000
7 0.397323 0.531330 0.919000
8 0.339557 0.437841 0.922000
Total time: 02:25
Saving models at /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-1/models/sp15k/qrnn_None.m
Loss and accuracy using (cls_best): [0.3380329, tensor(0.9295)]
0.33803290128707886
0.9294999837875366
```
3rd aproach
```
Single training schedule
epoch train_loss valid_loss accuracy
1 0.610785 0.239165 0.923000
2 0.392899 0.281254 0.937000
3 0.268695 0.444383 0.909000
4 0.162150 0.427744 0.931000
5 0.109248 0.422351 0.948000
6 0.061984 0.411351 0.947000
7 0.033645 0.413174 0.951000
8 0.018704 0.404264 0.947000
Total time: 02:16
Saving models at /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-1/models/sp15k/qrnn_nl4.m
Loss and accuracy using (cls_best): [0.29712877, tensor(0.9565)]
```
File diff suppressed because it is too large Load Diff
-577
View File
@@ -1,577 +0,0 @@
# Overall
## DE BOOKS LSTM
```bash
(fastai) julian@dl-box-spot:~/ulmfit-multilingual$ python -m ulmfit cls --dataset-path data/cls/de-books --base-lm-path ../data/wiki/de-100/models/sp30k/lstm_nl4.m --tokenizer='sp' --lang=de --name 'nl4' - train 20 --bs 40 --lr-sched=1cycle --num-cls-epochs=8
Max vocab: 30000
Cache dir: /home/julian/ulmfit-multilingual/data/cls/de-books/models/sp30k
Model dir: /home/julian/ulmfit-multilingual/data/cls/de-books/models/sp30k/lstm_nl4.m
Validation set not found using 10% of trn
Running tokenization lm...
Data lm, trn: 30600, val: 3400
Running tokenization cls...
Data cls, trn: 1800, val: 200
Running tokenization tst...
Data tst, trn: 200, val: 2000
Size of vocabulary: 30000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁.', '▁,', '▁der', '▁die', '▁und', '▁in', 'en', "▁&'", 's', '-']
Training args: {'clip': 0.12, 'alpha': 2, 'beta': 1, 'drop_mult': 0.3} dps: {'output_p': 0.25, 'hidden_p': 0.1, 'input_p': 0.2, 'embed_p': 0.02, 'weight_p': 0.15}
Loading pretrained model
Unknown tokens 0, first 100: []
Training lm from: [PosixPath('/home/julian/data/wiki/de-100/models/sp30k/lstm_nl4.m/lm_best'), PosixPath('/home/julian/data/wiki/de-100/models/sp30k/lstm_nl4.m/../itos')]
epoch train_loss valid_loss accuracy
1 3.553707 3.077508 0.458865
Total time: 09:49
epoch train_loss valid_loss accuracy
1 3.233023 2.998775 0.469265
2 3.130155 2.900699 0.481559
3 3.038409 2.793384 0.494638
4 2.970666 2.693831 0.506061
5 2.899437 2.601532 0.515972
6 2.803581 2.516531 0.526783
7 2.732246 2.443080 0.536339
8 2.675900 2.375012 0.544895
9 2.636490 2.313508 0.553726
10 2.604711 2.253531 0.562466
11 2.550045 2.202728 0.570852
12 2.501192 2.145478 0.579989
13 2.484679 2.092014 0.588614
14 2.409206 2.044224 0.596671
15 2.344645 2.008057 0.603097
16 2.346225 1.976991 0.608867
17 2.313172 1.954794 0.612839
18 2.269678 1.937210 0.615802
19 2.277551 1.930322 0.617028
20 2.246812 1.928822 0.617285
Total time: 3:38:47
/home/julian/ulmfit-multilingual/data/cls/de-books/models/sp30k
Saving info /home/julian/ulmfit-multilingual/data/cls/de-books/models/sp30k/lstm_nl4.m/info.json
Single training schedule
epoch train_loss valid_loss accuracy
1 0.406082 0.238703 0.905000
2 0.313938 0.477311 0.865000 3 0.255491 0.228014 0.890000
4 0.155123 0.384204 0.900000
5 0.107264 0.374567 0.905000
6 0.070755 0.468389 0.900000
7 0.035681 0.243386 0.945000
8 0.022694 0.242060 0.920000
Total time: 05:49
Saving models at /home/julian/ulmfit-multilingual/data/cls/de-books/models/sp30k/lstm_nl4.m
Loss and accuracy using (cls_best): [0.43779454, tensor(0.9170)]
0.4377945363521576
0.9169999957084656
```
## FR BOOKS LSTM
```bash
python -m ulmfit cls --dataset-path data/cls/${LANG}-books --base-lm-path data/wiki-m/${LANG}-100/models/sp30k/lstm_nl4.m --lang=${LANG} --name 'nl4' - train 20 --bs 20 --num-cls-epochs=8 --lr-sched=single
Max vocab: 30000
Cache dir: /home/pczapla/workspace/ulmfit-multilingual/data/cls/fr-books/models/sp30k
Model dir: /home/pczapla/workspace/ulmfit-multilingual/data/cls/fr-books/models/sp30k/lstm_nl4.m
Validation set not found using 10% of trn
Running tokenization lm...
Data lm, trn: 33183, val: 3687
Running tokenization cls...
Data cls, trn: 1800, val: 200
Running tokenization tst...
Data tst, trn: 200, val: 2000
Size of vocabulary: 30000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁de', '▁,', '▁.', "'", 's', '▁la', '▁le', '▁et', '▁l', '▁à']
Training args: {'clip': 0.12, 'alpha': 2, 'beta': 1, 'drop_mult': 0.3} dps: {'output_p': 0.25, 'hidden_p': 0.1, 'input_p': 0.2, 'embed_p': 0.02, 'weight_p': 0.15}
Loading pretrained model
Unknown tokens 0, first 100: []
Training lm from: [PosixPath('/home/pczapla/workspace/ulmfit-multilingual/data/wiki-m/fr-100/models/sp30k/lstm_nl4.m/lm_best'), PosixPath('/home/pczapla/workspace/ulmfit-multilingual/data/wiki-m/fr-100/models/sp30k/lstm_nl4.m/../itos')]
epoch train_loss valid_loss accuracy
1 3.790325 3.409294 0.367234
Total time: 06:02
epoch train_loss valid_loss accuracy
1 3.526303 3.326439 0.378936
2 3.466923 3.226977 0.392378
3 3.342312 3.111874 0.406997
4 3.244619 2.992510 0.422330
5 3.156150 2.877498 0.437467
6 3.070326 2.762509 0.453874
7 2.956969 2.651613 0.471552
8 2.878008 2.535935 0.491058
9 2.790110 2.438724 0.508560
10 2.684145 2.323467 0.528415
11 2.633781 2.231418 0.547093
12 2.535126 2.143523 0.564889
13 2.464436 2.055402 0.582077
14 2.330094 1.989257 0.596582
15 2.372371 1.924338 0.610048
16 2.190224 1.866912 0.621738
17 2.176868 1.834098 0.629221
18 2.168293 1.809196 0.633879
19 2.151132 1.797144 0.636382
20 2.130476 1.793351 0.637044
Total time: 2:30:05
/home/pczapla/workspace/ulmfit-multilingual/data/cls/fr-books/models/sp30k
Saving info /home/pczapla/workspace/ulmfit-multilingual/data/cls/fr-books/models/sp30k/lstm_nl4.m/info.json
Single training schedule
epoch train_loss valid_loss accuracy
1 0.314315 0.530879 0.865000
2 0.336746 0.468635 0.865000
3 0.255810 0.324242 0.870000
4 0.149121 0.480570 0.885000
5 0.093909 0.613743 0.890000
6 0.091678 0.660452 0.885000
7 0.049993 0.649642 0.910000
8 0.034218 0.640008 0.910000
Total time: 04:19
Saving models at /home/pczapla/workspace/ulmfit-multilingual/data/cls/fr-books/models/sp30k/lstm_nl4.m
Loss and accuracy using (cls_best): [0.5418505, tensor(0.9100)]
0.5418505072593689
0.9100000262260437
```
## JA BOOKS LSTM
```bash
(fastai) julian@dl-box-spot:~/ulmfit-multilingual$ python -m ulmfit cls --dataset-path data/cls/ja-books --base-lm-path ../data/wiki/ja-100/models/sp30k/lstm_nl4.m --tokenizer='sp' --lang=ja --name 'nl4' - train 20 --bs 40 --lr-sched=1cycle --num-cls-epochs=8
Max vocab: 30000
Cache dir: /home/julian/ulmfit-multilingual/data/cls/ja-books/models/sp30k
Model dir: /home/julian/ulmfit-multilingual/data/cls/ja-books/models/sp30k/lstm_nl4.m
Validation set not found using 10% of trn
Running tokenization lm...
Data lm, trn: 30600, val: 3399
Running tokenization cls...
Data cls, trn: 1800, val: 200
Running tokenization tst...
Data tst, trn: 200, val: 1999
Size of vocabulary: 30000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁、', '▁の', '▁。', '▁に', '▁を', '▁は', '▁年', '▁が', '▁)', '▁(']
Training args: {'clip': 0.12, 'alpha': 2, 'beta': 1, 'drop_mult': 0.3} dps: {'output_p': 0.25, 'hidden_p': 0.1, 'input_p': 0.2, 'embed_p': 0.02, 'weight_p': 0.15}
Loading pretrained model
Unknown tokens 0, first 100: []
Training lm from: [PosixPath('/home/julian/data/wiki/ja-100/models/sp30k/lstm_nl4.m/lm_best'), PosixPath('/home/julian/data/wiki/ja-100/models/sp30k/lstm_nl4.m/../itos')]
epoch train_loss valid_loss accuracy
1 3.847485 3.422460 0.376126
Total time: 06:28
epoch train_loss valid_loss accuracy
1 3.588070 3.347799 0.386644
2 3.481361 3.262498 0.398140
3 3.393415 3.164333 0.410120
4 3.305471 3.069857 0.421340
5 3.246775 2.972239 0.433235
6 3.127283 2.886817 0.443638
7 3.085512 2.806101 0.454796
8 3.016604 2.738343 0.463713
9 2.947214 2.667280 0.473756
10 2.919253 2.602734 0.483177
12 2.799891 2.488073 0.501841
13 2.772961 2.432371 0.511213
14 2.706188 2.389203 0.518911
15 2.653137 2.346985 0.526103
16 2.624165 2.316532 0.531397
17 2.578764 2.293599 0.535356
18 2.568077 2.279164 0.537922
19 2.529823 2.271825 0.539241
20 2.558044 2.270341 0.539438
Total time: 2:35:18
/home/julian/ulmfit-multilingual/data/cls/ja-books/models/sp30k
Saving info /home/julian/ulmfit-multilingual/data/cls/ja-books/models/sp30k/lstm_nl4.m/info.json
Single training schedule
epoch train_loss valid_loss accuracy
1 0.492803 0.584423 0.770000
2 0.415298 0.697332 0.675000
3 0.321692 0.742086 0.705000
4 0.281904 1.092880 0.730000
5 0.168274 1.050856 0.820000
6 0.112483 0.895169 0.795000
7 0.065752 1.082333 0.795000
8 0.038848 1.138289 0.805000
Total time: 05:46
Saving models at /home/julian/ulmfit-multilingual/data/cls/ja-books/models/sp30k/lstm_nl4.m
Loss and accuracy using (cls_best): [0.7825211, tensor(0.8514)]
0.78252112865448
0.8514257073402405
```
## DE DVD LSTM
```bash
(fastai) julian@dl-box-spot:~/ulmfit-multilingual$ python -m ulmfit cls --dataset-path data/cls/de-dvd --base-lm-path ../data/wiki/de-100/models/sp30k/lstm_nl4.m --tokenizer='sp' --lang=de --name 'nl4' - train 20 --bs 40 --lr-sched=1cycle --num-cls-epochs=8
Max vocab: 30000
Cache dir: /home/julian/ulmfit-multilingual/data/cls/de-dvd/models/sp30k
Model dir: /home/julian/ulmfit-multilingual/data/cls/de-dvd/models/sp30k/lstm_nl4.m
Validation set not found using 10% of trn
Running tokenization lm...
Data lm, trn: 30600, val: 3400
Running tokenization cls...
Data cls, trn: 1800, val: 200
Running tokenization tst...
Data tst, trn: 200, val: 2000
Size of vocabulary: 30000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep',
'<unk>', '▁', '▁.', '▁,', '▁der', '▁die', '▁und', '▁in', 'en', "▁&'", 's', '-']
Training args: {'clip': 0.12, 'alpha': 2, 'beta': 1, 'drop_mult': 0.3} dps: {'output_p': 0.25, '
hidden_p': 0.1, 'input_p': 0.2, 'embed_p': 0.02, 'weight_p': 0.15}
Loading pretrained model
Unknown tokens 0, first 100: []
Training lm from: [PosixPath('/home/julian/data/wiki/de-100/models/sp30k/lstm_nl4.m/lm_best'), Po
sixPath('/home/julian/data/wiki/de-100/models/sp30k/lstm_nl4.m/../itos')]
epoch train_loss valid_loss accuracy
1 3.564329 3.126153 0.456060
Total time: 09:33
epoch train_loss valid_loss accuracy
1 3.270905 3.030011 0.467729
2 3.127578 2.923014 0.481434
3 3.027712 2.804503 0.495315
4 2.922042 2.698406 0.507350
5 2.833169 2.605587 0.518419
6 2.765501 2.521508 0.528258
7 2.684195 2.443519 0.538367
8 2.644001 2.373817 0.547404
9 2.586362 2.309439 0.556455
10 2.554237 2.253083 0.564804
11 2.500762 2.196377 0.573611
12 2.469062 2.144791 0.581450
13 2.423278 2.093090 0.590096
14 2.343388 2.043406 0.598047
15 2.321417 2.008692 0.604748
16 2.265463 1.972947 0.610544
17 2.248210 1.948689 0.615224
18 2.222042 1.934402 0.617739
19 2.184187 1.926367 0.619161
20 2.225068 1.925283 0.619336
Total time: 3:47:59
Single training schedule
epoch train_loss valid_loss accuracy
1 0.494345 0.347763 0.875000
2 0.424967 0.466457 0.810000
3 0.321692 0.440244 0.870000
4 0.212389 0.323907 0.895000
5 0.142327 0.532973 0.900000
6 0.080535 0.452185 0.885000
7 0.039367 0.456267 0.895000
8 0.021793 0.470200 0.890000
Total time: 06:18
Saving models at /home/julian/ulmfit-multilingual/data/cls/de-dvd/models/sp30k/lstm_nl4.m
Loss and accuracy using (cls_best): [0.56412625, tensor(0.8835)]
0.5641262531280518
0.8834999799728394
```
## FR DVD LSTM
```bash
(fastai) julian@dl-box-spot:~/ulmfit-multilingual$ python -m ulmfit cls --dataset-path data/cls/fr-dvd --base-lm-path ../data/wiki/fr-100/models/sp30k/lstm_nl4.m --tokenizer='sp' --lang=fr --name 'nl4' - train 20 --bs 40 --lr-sched=1cycle --num-cls-epochs=8
Max vocab: 30000
Cache dir: /home/julian/ulmfit-multilingual/data/cls/fr-dvd/models/sp30k
Model dir: /home/julian/ulmfit-multilingual/data/cls/fr-dvd/models/sp30k/lstm_nl4.m
Validation set not found using 10% of trn
Running tokenization lm...
Data lm, trn: 12021, val: 1335
Running tokenization cls...
Data cls, trn: 1800, val: 200
Running tokenization tst...
Data tst, trn: 200, val: 2000
Size of vocabulary: 30000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁de', '▁,', '▁.', "'", 's', '▁la', '▁le', '▁et', '▁l', '▁à']
Training args: {'clip': 0.12, 'alpha': 2, 'beta': 1, 'drop_mult': 0.3} dps: {'output_p': 0.25, 'hidden_p': 0.1, 'input_p': 0.2, 'embed_p': 0.02, 'weight_p': 0.15}
Loading pretrained model
Unknown tokens 0, first 100: []
Training lm from: [PosixPath('/home/julian/data/wiki/fr-100/models/sp30k/lstm_nl4.m/lm_best'), PosixPath('/home/julian/data/wiki/fr-100/models/sp30k/lstm_nl4.m/../itos')]
epoch train_loss valid_loss accuracy
1 3.825279 3.341784 0.382891
Total time: 01:36
epoch train_loss valid_loss accuracy
1 3.548075 3.280657 0.390619
2 3.489078 3.206246 0.400057
3 3.378426 3.099167 0.414316
4 3.278241 2.985728 0.428153
5 3.164112 2.868728 0.442793
6 3.081279 2.740803 0.459863
7 2.951635 2.615327 0.477424
8 2.860259 2.511515 0.493157
9 2.761055 2.386526 0.512397
10 2.628587 2.277270 0.531014
11 2.572315 2.181750 0.548689
12 2.452535 2.083487 0.566041
13 2.389231 1.998139 0.581409
14 2.313358 1.927491 0.594620
15 2.263673 1.873754 0.605384
16 2.196958 1.827021 0.614506
17 2.169217 1.797702 0.619863
18 2.126882 1.777056 0.623906
19 2.116131 1.767786 0.625270
20 2.090418 1.765665 0.625703
Total time: 37:20
/home/julian/ulmfit-multilingual/data/cls/fr-dvd/models/sp30k
Saving info /home/julian/ulmfit-multilingual/data/cls/fr-dvd/models/sp30k/lstm_nl4.m/info.json
Single training schedule
epoch train_loss valid_loss accuracy
1 0.586308 0.504827 0.750000
2 0.478227 0.411526 0.860000
3 0.417158 0.314054 0.890000
4 0.286224 0.263725 0.900000
5 0.163930 0.387664 0.880000
6 0.095715 0.282535 0.930000
7 0.051098 0.294014 0.930000
8 0.028741 0.301007 0.930000
Total time: 02:57
Saving models at /home/julian/ulmfit-multilingual/data/cls/fr-dvd/models/sp30k/lstm_nl4.m
Loss and accuracy using (cls_best): [0.5228756, tensor(0.8920)]
0.5228756070137024
0.8920000195503235
```
## JA DVD LSTM
```bash
(fastai) julian@dl-box-spot:~/ulmfit-multilingual$ python -m ulmfit cls --dataset-path data/cls/ja-dvd --base-lm-path ../data/wiki/ja-100/models/sp30k/lstm_nl4.m --tokenizer='sp' --lang=ja --name 'nl4' - train 20 --bs 40 --lr-sched=1cycle --num-cls-epochs=8
Max vocab: 30000
Cache dir: /home/julian/ulmfit-multilingual/data/cls/ja-dvd/models/sp30k
Model dir: /home/julian/ulmfit-multilingual/data/cls/ja-dvd/models/sp30k/lstm_nl4.m
Validation set not found using 10% of trn
Running tokenization lm...
Data lm, trn: 30600, val: 3400
Running tokenization cls...
Data cls, trn: 1800, val: 200
Running tokenization tst...
Data tst, trn: 200, val: 2000
Size of vocabulary: 30000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁、', '▁の', '▁。', '▁に', '▁を', '▁は', '▁年', '▁が', '▁)', '▁(']
Training args: {'clip': 0.12, 'alpha': 2, 'beta': 1, 'drop_mult': 0.3} dps: {'output_p': 0.25, 'hidden_p': 0.1, 'input_p': 0.2, 'embed_p': 0.02, 'weight_p': 0.15}
Loading pretrained model
Unknown tokens 0, first 100: []
Training lm from: [PosixPath('/home/julian/data/wiki/ja-100/models/sp30k/lstm_nl4.m/lm_best'), PosixPath('/home/julian/data/wiki/ja-100/models/sp30k/lstm_nl4.m/../itos')]
epoch train_loss valid_loss accuracy
1 3.904242 3.480109 0.375665
Total time: 04:37
epoch train_loss valid_loss accuracy
1 3.671750 3.403708 0.386209
2 3.565445 3.310030 0.398628
3 3.443218 3.204042 0.411568
4 3.374648 3.098158 0.424107
5 3.288731 3.005343 0.435621
6 3.187409 2.913090 0.446806
7 3.135114 2.829881 0.457120
8 3.073141 2.753949 0.467695
9 2.996589 2.682856 0.478041
10 2.909743 2.613899 0.487629
11 2.859827 2.550690 0.497565
12 2.818285 2.492902 0.507112
13 2.779268 2.435685 0.516448
14 2.718145 2.387462 0.525241
15 2.664007 2.346267 0.532140
16 2.641343 2.312850 0.537994
17 2.599257 2.288488 0.542193
18 2.579481 2.274002 0.544809
19 2.571687 2.267283 0.545827
20 2.560343 2.265548 0.546052
Total time: 1:47:55
/home/julian/ulmfit-multilingual/data/cls/ja-dvd/models/sp30k
Saving info /home/julian/ulmfit-multilingual/data/cls/ja-dvd/models/sp30k/lstm_nl4.m/info.json
Single training schedule
epoch train_loss valid_loss accuracy
1 0.525819 0.402837 0.830000
2 0.453459 0.425072 0.820000
3 0.401383 0.482119 0.770000
4 0.337860 0.502686 0.775000
5 0.234284 0.805287 0.805000
6 0.134409 0.729153 0.815000
7 0.072370 0.895428 0.805000
8 0.040945 0.832303 0.800000
Total time: 03:09
Saving models at /home/julian/ulmfit-multilingual/data/cls/ja-dvd/models/sp30k/lstm_nl4.m
Loss and accuracy using (cls_best): [0.72511286, tensor(0.8395)]
0.7251128554344177
0.8395000100135803
```
## DE MUSIC LSTM
```bash
(fastai) julian@dl-box-spot:~/ulmfit-multilingual$ python -m ulmfit cls --dataset-path data/cls/de-music --base-lm-path ../data/wiki/de-100/models/sp30k/lstm_nl4.m --tokenizer='sp' --lang=de --name 'nl4' - train 20 --bs 20 --lr-sched=1cycle --num-cls-epochs=8
Max vocab: 30000
Cache dir: /home/julian/ulmfit-multilingual/data/cls/de-music/models/sp30k
Model dir: /home/julian/ulmfit-multilingual/data/cls/de-music/models/sp30k/lstm_nl4.m
Validation set not found using 10% of trn
Running tokenization lm...
Data lm, trn: 30600, val: 3400
Running tokenization cls...
Data cls, trn: 1800, val: 200
Running tokenization tst...
Data tst, trn: 200, val: 2000
Size of vocabulary: 30000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁.', '▁,', '▁der', '▁die', '▁und', '▁in', 'en', "▁&'", 's', '-']
Training args: {'clip': 0.12, 'alpha': 2, 'beta': 1, 'drop_mult': 0.3} dps: {'output_p': 0.25, 'hidden_p': 0.1, 'input_p': 0.2, 'embed_p': 0.02, 'weight_p': 0.15}
Loading pretrained model
Unknown tokens 0, first 100: []
Training lm from: [PosixPath('/home/julian/data/wiki/de-100/models/sp30k/lstm_nl4.m/lm_best'), PosixPath('/home/julian/data/wiki/de-100/models/sp30k/lstm_nl4.m/../itos')]
epoch train_loss valid_loss accuracy
1 4.002521 3.526757 0.376006
Total time: 06:32
epoch train_loss valid_loss accuracy
1 3.738713 3.425875 0.389128
2 3.607711 3.316313 0.403729
3 3.441798 3.188569 0.418975
4 3.347294 3.070090 0.432434
5 3.261581 2.959181 0.447016
6 3.161360 2.850135 0.460998
7 3.092968 2.747133 0.475559
8 2.999860 2.661642 0.488256
9 2.946614 2.572933 0.502634
10 2.834917 2.477213 0.517815
11 2.768194 2.394673 0.532000
12 2.743433 2.325108 0.545050
13 2.596613 2.255300 0.557315
14 2.347057 1.965440 0.616312
15 2.289672 1.907880 0.626826
16 2.238047 1.870341 0.634285
17 2.169917 1.829818 0.641958
18 2.145997 1.811395 0.645616
19 2.111888 1.800622 0.647706
20 2.067247 1.797927 0.648219
Total time: 3:50:18
/home/julian/ulmfit-multilingual/data/cls/de-music/models/sp30k
Saving info /home/julian/ulmfit-multilingual/data/cls/de-music/models/sp30k/lstm_nl4.m/info.json
Single training schedule
epoch train_loss valid_loss accuracy
1 0.392259 0.319764 0.875000
2 0.373723 0.401961 0.850000
3 0.315902 0.415566 0.850000
4 0.185113 0.312382 0.890000
5 0.122869 0.399712 0.865000
6 0.084130 0.435429 0.910000
7 0.057294 0.394715 0.890000
8 0.028046 0.391238 0.900000
Total time: 06:34
Saving models at /home/julian/ulmfit-multilingual/data/cls/de-music/models/sp30k/lstm_nl4.m
Loss and accuracy using (cls_best): [0.4154407, tensor(0.9210)]
0.41544070839881897
0.9210000038146973
```
## JA MUSIC LSTM
```bash
(fastai) julian@dl-box-spot:~/ulmfit-multilingual$ python -m ulmfit cls --dataset-path data/cls/ja-music --base-lm-path ../data/wiki/ja-100/models/sp30k/lstm_nl4.m --tokenizer='sp' --lang=ja --name 'nl4' - train 20 --bs 20 --lr-sched=1cycle --num-cls-epochs=8
Data lm, trn: 30600, val: 3399
Running tokenization cls...
Data cls, trn: 1800, val: 200
Running tokenization tst...
Data tst, trn: 200, val: 1999
Size of vocabulary: 30000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁、', '▁の', '▁。', '▁に', '▁を', '▁は', '▁年', '▁が', '▁)', '▁(']
Training args: {'clip': 0.12, 'alpha': 2, 'beta': 1, 'drop_mult': 0.3} dps: {'output_p': 0.25, 'hidden_p': 0.1, 'input_p': 0.2, 'embed_p': 0.02, 'weight_p': 0.15}
Loading pretrained model
Unknown tokens 0, first 100: []
Training lm from: [PosixPath('/home/julian/data/wiki/ja-100/models/sp30k/lstm_nl4.m/lm_best'), PosixPath('/home/julian/data/wiki/ja-100/models/sp30k/lstm_nl4.m/../itos')]
epoch train_loss valid_loss accuracy
1 3.680415 3.162607 0.451358
Total time: 09:43
epoch train_loss valid_loss accuracy
1 3.258039 3.043514 0.467028
2 3.082901 2.909904 0.482319
3 3.009017 2.784519 0.496660
4 2.900604 2.671213 0.510406
5 2.776977 2.570581 0.522192
6 2.789654 2.488552 0.532739
7 2.710876 2.407913 0.543447
8 2.655036 2.342028 0.553344
9 2.571593 2.281001 0.562552
10 2.539299 2.207963 0.574177
11 2.466461 2.139726 0.585225
12 2.441152 2.081656 0.595266
13 2.434502 2.018719 0.606514
14 2.576859 2.190329 0.569373
15 2.543341 2.137856 0.579508
16 2.467283 2.092796 0.587677
17 2.417593 2.061508 0.593782
18 2.375962 2.038786 0.598027
19 2.391491 2.029075 0.599871
20 2.352595 2.026604 0.600235
Total time: 2:41:18
/home/julian/ulmfit-multilingual/data/cls/ja-music/models/sp30k
Saving info /home/julian/ulmfit-multilingual/data/cls/ja-music/models/sp30k/lstm_nl4.m/info.json
Single training schedule
epoch train_loss valid_loss accuracy
1 0.458052 0.371875 0.860000
2 0.473817 0.539201 0.730000
3 0.423880 0.390433 0.845000
4 0.310703 0.402607 0.855000
5 0.211760 0.607136 0.865000
6 0.108535 0.845904 0.860000
7 0.053125 0.897018 0.860000
8 0.024544 0.891663 0.855000
Total time: 04:29
Saving models at /home/julian/ulmfit-multilingual/data/cls/ja-music/models/sp30k/lstm_nl4.m
Loss and accuracy using (cls_best): [0.777393, tensor(0.8644)]
0.7773929834365845
0.8644322156906128
```
## FR MUSIC LSTM
```bash
(fastai) julian@dl-box-spot:~/ulmfit-multilingual$ python -m ulmfit cls --dataset-path data/cls/fr-music --base-lm-path ../data/wiki/fr-100/models/sp30k/lstm_nl4.m --tokenizer='sp' --lang=fr --name 'nl4' - train 20 --bs 40 --lr-sched=1cycle --num-cls-epochs=8
Running tokenization tst...
Data tst, trn: 200, val: 2000
Size of vocabulary: 30000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁de', '▁,', '▁.', "'", 's', '▁la', '▁le', '▁et', '▁l', '▁à']
Training args: {'clip': 0.12, 'alpha': 2, 'beta': 1, 'drop_mult': 0.3} dps: {'output_p': 0.25, 'hidden_p': 0.1, 'input_p': 0.2, 'embed_p': 0.02, 'weight_p': 0.15}
Loading pretrained model
Unknown tokens 0, first 100: []
Training lm from: [PosixPath('/home/julian/data/wiki/fr-100/models/sp30k/lstm_nl4.m/lm_best'), PosixPath('/home/julian/data/wiki/fr-100/models/sp30k/lstm_nl4.m/../itos')]
epoch train_loss valid_loss accuracy
1 3.686174 3.271906 0.394277
Total time: 02:47
epoch train_loss valid_loss accuracy
1 3.490278 3.197725 0.403639
2 3.356067 3.100815 0.415938
3 3.269037 2.970971 0.433533
4 3.102959 2.819620 0.453009
5 2.957009 2.647919 0.478246
6 2.793691 2.481614 0.504928
7 2.646251 2.316360 0.534853
8 2.532166 2.140370 0.566817
9 2.361445 1.982554 0.596333
10 2.258446 1.855159 0.621765
11 2.155252 1.772740 0.640348
12 2.071291 1.668775 0.660405
13 1.887608 1.579711 0.677771
14 1.873631 1.493046 0.694815
15 1.824689 1.438728 0.705296
16 1.766544 1.398732 0.714093
17 1.646138 1.372478 0.719408
18 1.684073 1.350950 0.723633
19 1.650602 1.344994 0.724889
20 1.602114 1.341957 0.725314
Total time: 1:04:53
/home/julian/ulmfit-multilingual/data/cls/fr-music/models/sp30k
Saving info /home/julian/ulmfit-multilingual/data/cls/fr-music/models/sp30k/lstm_nl4.m/info.json
Single training schedule
epoch train_loss valid_loss accuracy
1 0.415938 0.214479 0.930000
2 0.373839 0.334263 0.880000
3 0.317772 0.660272 0.795000
4 0.207807 0.440546 0.880000
5 0.146999 0.377026 0.890000
6 0.095834 0.288273 0.925000
7 0.048218 0.350355 0.895000
8 0.023682 0.325598 0.915000
Total time: 03:18
Saving models at /home/julian/ulmfit-multilingual/data/cls/fr-music/models/sp30k/lstm_nl4.m
Loss and accuracy using (cls_best): [0.32345334, tensor(0.9295)]
0.3234533369541168
0.9294999837875366
```
File diff suppressed because it is too large Load Diff
-118
View File
@@ -1,118 +0,0 @@
# Results on books dataset
| | de | fr |
|-------------------------|-------|-------|
| laser zero shot from en | 84.15 | 83.90 |
| with ULMFIT QRNN sp15k | 89.60 | 87.84 |
## Laser results
| | en | de | fr |
|------|--------|-------|------|
| en: | 84.55 | 84.15 | 83.90|
| de: | 82.60 | 85.20 | 83.05|
| fr: | 77.20 | 82.95 | 84.85|
## ULMFiT improvment
```
data/cls/de-books-laser-en1/models/sp15k/qrnn_nl4.m: 0.8960000276565552
data/cls/fr-books-laser-en1/models/sp15k/qrnn_nl4.m: 0.8784999847412109
```
### Execution log
```
python -m ulmfit eval --glob="cls/*-books/models/sp15k/qrnn_nl4.m" --name nl4 --dataset-template='${lang}-books-laser-en1' --num-lm-epochs=0 --num-cls-epochs=8 --bs=18 --lr_sched=1cycle --label-smoothing-eps=0.1
Processing data/cls/de-books/models/sp15k/qrnn_nl4.m
de-books-laser-en1
Max vocab: 15000
Cache dir: /home/pczapla/workspace/ulmfit-multilingual/data/cls/de-books-laser-en1/models/sp15k
Model dir: /home/pczapla/workspace/ulmfit-multilingual/data/cls/de-books-laser-en1/models/sp15k/qrnn_nl4.m
Training
Loading validation /home/pczapla/workspace/ulmfit-multilingual/data/cls/de-books-laser-en1/de.dev.csv
Running tokenization lm...
Data lm, trn: 152523, val: 16947
Running tokenization cls...
Data cls, trn: 1800, val: 200
Running tokenization tst...
Data tst, trn: 200, val: 2000
Size of vocabulary: 15000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁.', '▁,', '▁der', '▁die', 'en', '▁und', 's', '▁in', 'er', "▁&'"]
Training args: {'clip': 0.12, 'alpha': 2, 'beta': 1, 'drop_mult': 0.3} dps: {'output_p': 0.25, 'hidden_p': 0.1, 'input_p': 0.2, 'embed_p': 0.02, 'weight_p': 0.15}
/home/pczapla/anaconda3/envs/fastaiv1/lib/python3.7/site-packages/torch/utils/cpp_extension.py:152: UserWarning:
!! WARNING !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Your compiler (c++) may be ABI-incompatible with PyTorch!
Please use a compiler that is ABI-compatible with GCC 4.9 and above.
See https://gcc.gnu.org/onlinedocs/libstdc++/manual/abi.html.
See https://gist.github.com/goldsborough/d466f43e8ffc948ff92de7486c5216d6
for instructions on how to install GCC 4.9 or higher.
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! WARNING !!
warnings.warn(ABI_INCOMPATIBILITY_WARNING.format(compiler))
Loading pretrained model
Unknown tokens 0, first 100: []
/home/pczapla/workspace/ulmfit-multilingual/data/cls/de-books-laser-en1/models/sp15k
Saving info /home/pczapla/workspace/ulmfit-multilingual/data/cls/de-books-laser-en1/models/sp15k/qrnn_nl4.m/info.json
Single training schedule
epoch train_loss valid_loss accuracy
1 0.541837 0.487596 0.870000
2 0.498016 0.490300 0.885000
3 0.442417 0.479205 0.875000
4 0.395640 0.528897 0.855000
5 0.369408 0.521830 0.855000
6 0.361129 0.481892 0.880000
7 0.351095 0.481634 0.885000
8 0.343147 0.481654 0.880000
Total time: 02:35
Saving models at /home/pczapla/workspace/ulmfit-multilingual/data/cls/de-books-laser-en1/models/sp15k/qrnn_nl4.m
Loss and accuracy using (cls_best): [0.29498395, tensor(0.8960)]
Processing data/cls/en-books/models/sp15k/qrnn_nl4.m
en-books-laser-en1
Processing data/cls/fr-books/models/sp15k/qrnn_nl4.m
fr-books-laser-en1
Max vocab: 15000
Cache dir: /home/pczapla/workspace/ulmfit-multilingual/data/cls/fr-books-laser-en1/models/sp15k
Model dir: /home/pczapla/workspace/ulmfit-multilingual/data/cls/fr-books-laser-en1/models/sp15k/qrnn_nl4.m
Training
Loading validation /home/pczapla/workspace/ulmfit-multilingual/data/cls/fr-books-laser-en1/fr.dev.csv
Running tokenization lm...
Data lm, trn: 33183, val: 3687
Running tokenization cls...
Data cls, trn: 1800, val: 200
Running tokenization tst...
Data tst, trn: 200, val: 2000
Size of vocabulary: 15000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁de', '▁,', 's', '▁.', "'", '▁la', '▁le', '▁et', '▁l', '▁à']
Training args: {'clip': 0.12, 'alpha': 2, 'beta': 1, 'drop_mult': 0.3} dps: {'output_p': 0.25, 'hidden_p': 0.1, 'input_p': 0.2, 'embed_p': 0.02, 'weight_p': 0.15}
Loading pretrained model
Unknown tokens 0, first 100: []
/home/pczapla/workspace/ulmfit-multilingual/data/cls/fr-books-laser-en1/models/sp15k
Saving info /home/pczapla/workspace/ulmfit-multilingual/data/cls/fr-books-laser-en1/models/sp15k/qrnn_nl4.m/info.json
Single training schedule
epoch train_loss valid_loss accuracy
1 0.551931 0.532421 0.835000
2 0.509913 0.524893 0.880000
3 0.433385 0.502657 0.860000
4 0.397314 0.487201 0.880000
5 0.365447 0.467523 0.885000
6 0.356587 0.520736 0.855000
7 0.353801 0.487093 0.875000
8 0.343812 0.484453 0.880000
Total time: 01:45
Saving models at /home/pczapla/workspace/ulmfit-multilingual/data/cls/fr-books-laser-en1/models/sp15k/qrnn_nl4.m
Loss and accuracy using (cls_best): [0.32666296, tensor(0.8785)]
Processing data/cls/ja-books/models/sp15k/qrnn_nl4.m
ja-books-laser-en1
OrderedDict([('data/cls/de-books-laser-en1/models/sp15k/qrnn_nl4.m',
0.8960000276565552),
('data/cls/fr-books-laser-en1/models/sp15k/qrnn_nl4.m',
0.8784999847412109)])
data/cls/de-books-laser-en1/models/sp15k/qrnn_nl4.m: 0.8960000276565552
data/cls/fr-books-laser-en1/models/sp15k/qrnn_nl4.m: 0.8784999847412109
```
File diff suppressed because it is too large Load Diff
-697
View File
@@ -1,697 +0,0 @@
# DE
## SP15k LSTM nl4
```
$ python -m ulmfit lm --dataset-path data/wiki/de-100 --cuda-id=0 --tokenizer='sp' --nl 4 --name 'nl4' --max-vocab 15000 --lang de --qrnn=False - train 10 --bs=100 --drop_mult=0
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁.', '▁,', '▁der',
'▁die', 'en', '▁und', 's', '▁in', 'er', "▁&'"]
Training args: {'clip': 0.12, 'alpha': 2, 'beta': 1, 'drop_mult': 0} dps: {'output_p': 0.25, 'hidden_p': 0.1, 'input_p': 0.2, 'embed_p': 0.02, 'weight_p': 0.15}
Training lm from random weights
epoch train_loss valid_loss accuracy
1 2.519809 2.600072 0.529963
2 2.436580 2.538897 0.534651
3 2.402220 2.510569 0.537314
4 2.305741 2.439347 0.546574
5 2.265683 2.376482 0.553794
6 2.210663 2.305362 0.562672
7 2.134196 2.230041 0.572958
8 2.085375 2.150917 0.584621
9 2.037781 2.097170 0.593747
10 1.986773 2.081469 0.595799
Total time: 19:18:33
data/wiki/de-100/models/sp15k
Saving info data/wiki/de-100/models/sp15k/lstm_nl4.m/info.jso
```
### MLDoc
```bash
LANG=de
python -m ulmfit cls --dataset-path data/mldoc-m/${LANG}-1 --base-lm-path data/wiki-m/${LANG}-100/models/sp15k/lstm_nl4.m --lang=${LANG} --name 'nl4' - train 20 --bs 20 --num-cls-
epochs=8 --lr_sched=1cycle
Max vocab: 15000
Cache dir: /home/test/workspace/ulmfit-multilingual/data/mldoc-m/de-1/models/sp15k
Model dir: /home/test/workspace/ulmfit-multilingual/data/mldoc-m/de-1/models/sp15k/lstm_nl4.m
Loading validation /home/test/workspace/ulmfit-multilingual/data/mldoc-m/de-1/de.dev.csv
Running tokenization lm...
Data lm, trn: 13500, val: 1500
Running tokenization cls...
Data cls, trn: 1000, val: 1000
Running tokenization tst...
Data tst, trn: 1000, val: 4000
Size of vocabulary: 15000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁.', '▁,', '▁der', '▁die', 'en', '▁und', 's', '▁in', 'er', "▁&'"]
Training args: {'clip': 0.12, 'alpha': 2, 'beta': 1, 'drop_mult': 0.3} dps: {'output_p': 0.25, 'hidden_p': 0.1, 'input_p': 0.2, 'embed_p': 0.02, 'weight_p': 0.15}
Loading pretrained model
Unknown tokens 0, first 100: []
Training lm from: [PosixPath('/home/test/workspace/ulmfit-multilingual/data/wiki-m/de-100/models/sp15k/lstm_nl4.m/lm_best'), PosixPath('/home/test/workspace/ulmfit-multilingual/data/wiki-m/de-100/models/sp15k/lstm_nl4.m/../itos')]
epoch train_loss valid_loss accuracy
1 2.333600 2.005051 0.596875
Total time: 07:40
epoch train_loss valid_loss accuracy
1 2.120653 1.886799 0.615784
2 1.980713 1.763139 0.636041
3 1.805195 1.655620 0.654068
4 1.729641 1.564017 0.668772
5 1.681813 1.491185 0.680613
6 1.682965 1.422562 0.692458
7 1.580731 1.357177 0.703143
8 1.506753 1.297219 0.714487
9 1.515824 1.235473 0.725413
10 1.427750 1.178680 0.737216
11 1.371839 1.118909 0.749590
12 1.342978 1.068754 0.760473
13 1.286842 1.011940 0.772384
14 1.254822 0.960727 0.784244
15 1.195136 0.919377 0.793910
16 1.118260 0.881799 0.802814
17 1.071546 0.855769 0.809040
18 1.079081 0.839280 0.812895
19 1.052724 0.831323 0.814723
20 1.024207 0.829737 0.815070
Total time: 3:08:58
/home/test/workspace/ulmfit-multilingual/data/mldoc-m/de-1/models/sp15k
Saving info /home/test/workspace/ulmfit-multilingual/data/mldoc-m/de-1/models/sp15k/lstm_nl4.m/info.json
Single training schedule
epoch train_loss valid_loss accuracy
1 0.539181 0.239851 0.938000
2 0.326801 0.374512 0.917000
3 0.225103 0.330872 0.945000
4 0.121660 0.444890 0.938000
5 0.078411 0.422513 0.948000
6 0.061354 0.509489 0.949000
7 0.029890 0.438118 0.949000
8 0.014213 0.441808 0.949000
Total time: 09:00
Saving models at /home/test/workspace/ulmfit-multilingual/data/mldoc-m/de-1/models/sp15k/lstm_nl4.m
Loss and accuracy using (cls_best): [0.3710725, tensor(0.9553)]
0.3710725009441376
0.9552500247955322
```
## VF60k LSTM nl 3
### LM
```
python -m ulmfit lm --dataset-path data/wiki/de-100 --cuda-id=1 --tokenizer='vf' --nl 3 --name 'nl3' --max-vocab 60000 --lang de --qrnn=False - train 10 --bs=50 --drop_mult=0
Max vocab: 60000
Cache dir: data/wiki/de-100/models/vf60k
Model dir: data/wiki/de-100/models/vf60k/lstm_nl3.m
Running tokenization
Wiki text was split to 175965 articles
Wiki text was split to 110 articles
Size of vocabulary: 60003
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', ',', 'der', '.', 'und', 'die', 'in', "&'", 'von', 'den', '(', 'im', ')']
Training args: {'tie_weights': True, 'clip': 0.12, 'bptt': 70, 'pretrained_fnames': None, 'pretrained_model': None, 'drop_mult': 0} dps: [0.25 0.1 0.2 0.02 0.15]
Training lm from random weights
epoch train_loss valid_loss accuracy
1 3.214624 3.573368 0.397312
2 3.194401 3.549021 0.396143
3 3.116934 3.535322 0.398108
4 3.159205 3.498862 0.400490
5 3.104538 3.454015 0.405504
6 2.996653 3.410940 0.409791
7 2.987909 3.359425 0.413711
8 2.941863 3.311215 0.419416
9 2.914403 3.285807 0.423674
10 2.857530 3.278313 0.425131
data/wiki/de-100/models/vf60k
Saving info data/wiki/de-100/models/vf60k/lstm_nl3.m/info.json
```
### MLDocs
```
python -m ulmfit cls --dataset-path data/mldoc/de-1 --base-lm-path data/wiki/de-100/models/vf60k/lstm_nl3.m --lang=de --name 'nl3' - train 20 --bs 40
Max vocab: 60000
Cache dir: data/mldoc/de-1/models/vf60k
Model dir: data/mldoc/de-1/models/vf60k/lstm_nl3.m
Loading validation data/mldoc/de-1/de.dev.csv
Running tokenization...
Saving tokenized: cls.trn 13500, cls.val 1500
Running tokenization...
Saving tokenized: cls.trn 1000, cls.val 1000
Size of vocabulary: 39171
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '.', 'der', ',', 'die', ')', '(', 'in', 'und', 'auf', 'von', 'den', 'im']
Training args: {'tie_weights': True, 'clip': 0.12, 'bptt': 70, 'pretrained_fnames': [PosixPath('data/wiki/de-100/models/vf60k/lstm_nl3.m/lm_best'), PosixPath('data/wiki/de-100/models/vf60k/lstm_nl3.m/../itos')], 'pretrained_model': None, 'drop_mult': 0.3} dps: [0.25 0.1 0.2 0.02 0.15]
Unknown tokens 20582, first 100: ['"', 'vh', 'ös', 'brs', '&', 'geg', 'lpo', 'vormonat', 'fgc', 'waigel', 'tcs', 'mic', 'bund-future', 'ajs', 'brn', 'dih', 'analysten', 'mrd', 'rpk', 'notierten', 'dividende', 'feb', 'aktienmarkt', 'rev', 'rentenmarkt', 'basispunkte', 'müßten', 'gewinnmitnahmen', 'aktienbörse', 'rußland', 'volkswirte', 'fls', 'steuerreform', 'kontrakte', 'kps', 'mge', 'zählern', 'vortagesschluß', 'umsätzen', 'prozent.', 'snb', 'dow-jones-index', 'reingewinn', 'notierungen', "\\'", 'gesamtmarkt', 'industrieproduktion', 'akr', 'kjf', '49-69-7565', 'abl', 'hoh', 'finanzdienst', 'atx', 'feinunze', 'zinserhöhung', 'zugelegt', 'netanjahu', 'verbraucherpreise', 'pence', 'ticks', 'arafat', 'kursgewinne', 'ker', 'aktienindex', 'rlb', 'smi', 'vorbörslich', 'dst', 'mkl', 'kontrakten', 'calls', 'veraenderung', 'gwa', 'gesamtjahr', 'auftragseingang', 'überschuß', 'erwarte', 'verlautete', 'eju', 'tms', 'jahresvergleich', 'vorjahreszeitraum', 'werden.', 'betriebsergebnis', 'rin', 'bobl-future', 'puts', 'fri', '4.50', 'schluß', 'ewu', 'standardwerte', 'jahresüberschuß', 'rechne', '49-69-756525', '16.00', 'peh', 'hmh', 'dtb']
Training lm from: [PosixPath('data/wiki/de-100/models/vf60k/lstm_nl3.m/lm_best'), PosixPath('data/wiki/de-100/models/vf60k/lstm_nl3.m/../itos')]
epoch train_loss valid_loss accuracy
1 3.532079 3.059487 0.465283
epoch train_loss valid_loss accuracy
1 3.219148 2.945357 0.475736
2 3.014822 2.804256 0.494567
3 2.896143 2.652700 0.513166
4 2.756027 2.516747 0.528836
5 2.629735 2.383480 0.543956
6 2.515785 2.281831 0.556083
7 2.422463 2.178855 0.567950
8 2.351060 2.091266 0.579531
9 2.297676 2.017783 0.590206
10 2.205688 1.937085 0.601936
11 2.155664 1.871271 0.612579
12 2.065812 1.806647 0.623888
13 2.038635 1.748420 0.634389
14 1.957434 1.696571 0.643807
15 1.895242 1.653865 0.651743
16 1.910458 1.618776 0.658140
17 1.843909 1.598143 0.662129
18 1.837299 1.583182 0.664999
19 1.788718 1.573136 0.666785
20 1.780236 1.574308 0.666625
data/mldoc/de-1/models/vf60k
Saving info data/mldoc/de-1/models/vf60k/lstm_nl3.m/info.json
Starting classifier training
epoch train_loss valid_loss accuracy
1 0.526303 0.328480 0.892000
epoch train_loss valid_loss accuracy
1 0.346665 0.238605 0.920000
epoch train_loss valid_loss accuracy
1 0.266841 0.285444 0.921000
epoch train_loss valid_loss accuracy
1 0.175013 0.280545 0.921000
2 0.178333 0.286059 0.923000
Saving models at data/mldoc/de-1/models/vf60k/lstm_nl3.m
Loss and accuracy using (cls_best): [0.16954255, tensor(0.9475)]
OrderedDict([('data/mldoc/de-1/models/vf60k/lstm_nl3.m', 0.9474999904632568)])
```
MultiCCA: 93.7% , ulmfit: 94.74%
## VF60k QRNN nl 4
```
Bptt 70
Training lm from random weights
epoch train_loss valid_loss accuracy
1 4.131590 4.123428 0.460519
2 4.073408 4.077561 0.461808
3 4.038208 4.056053 0.464489
4 4.007055 4.012294 0.469722
5 3.992992 3.977304 0.473496
6 3.903659 3.934043 0.480102
7 3.897762 3.894066 0.484782
8 3.877661 3.854888 0.492338
9 3.831059 3.829723 0.497970
10 3.810376 3.823137 0.499966
Total time: 18:44:08
data/wiki/de-100/models/vf60k
Saving info data/wiki/de-100/models/vf60k/qrnn_nl4.m/info.json
```
```bash
python -m ulmfit cls --dataset-path data/mldoc/${LANG}-1 --base-lm-path data/wiki/de-100/models/vf60k/qrnn_nl4.m --lang=${LANG} --name nl4 - train 20 --bs 18 --num-cls-epochs=4 --lr_sched=1cycle --label-smoothing-eps=0.1
Max vocab: 60000
Cache dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-1/models/vf60k
Model dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-1/models/vf60k/qrnn_nl4.m
Loading validation /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-1/de.dev.csv
Data lm, trn: 13500, val: 1500
Data cls, trn: 1000, val: 1000
Data tst, trn: 1000, val: 4000
Size of vocabulary: 39171
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '.', 'der', ',', 'die', ')', '(', 'in', 'und', 'auf', 'von', 'den', 'im']
Training args: {'clip': 0.12, 'alpha': 2, 'beta': 1, 'drop_mult': 0.3} dps: {'output_p': 0.25, 'hidden_p': 0.1, 'input_p': 0.2, 'embed_p': 0.02, 'weight_p': 0.15}
/home/pczapla/anaconda3/envs/fastaiv1/lib/python3.7/site-packages/torch/utils/cpp_extension.py:152: UserWarning:
!! WARNING !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Your compiler (c++) may be ABI-incompatible with PyTorch!
Please use a compiler that is ABI-compatible with GCC 4.9 and above.
See https://gcc.gnu.org/onlinedocs/libstdc++/manual/abi.html.
See https://gist.github.com/goldsborough/d466f43e8ffc948ff92de7486c5216d6
for instructions on how to install GCC 4.9 or higher.
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! WARNING !!
warnings.warn(ABI_INCOMPATIBILITY_WARNING.format(compiler))
Loading pretrained model
Unknown tokens 20300, first 100: ['"', 'vh', 'ös', 'brs', '&', 'geg', 'lpo', 'vormonat', 'fgc', 'mesz', 'waigel', 'tcs', 'bund-future', 'ajs', 'brn', 'dih', 'analysten', 'mrd', 'rpk', 'emu', 'notierten', 'feb', 'aktienmarkt', 'dor', 'rentenmarkt', 'basispunkte', 'müßten', 'gewinnmitnahmen', 'aktienbörse', 'jelzin', 'rußland', 'volkswirte', 'fls', 'steuerreform', 'kontrakte', 'kps', 'mge', 'vortagesschluß', 'umsätzen', 'prozent.', 'dow-jones-index', 'reingewinn', 'notierungen', "\\'", 'gesamtmarkt', 'akr', 'kjf', '49-69-7565', 'abl', 'hoh', 'finanzdienst', 'atx', 'feinunze', 'zinserhöhung', 'zugelegt', 'verbraucherpreise', 'ticks', 'kursgewinne', 'ker', 'rlb', 'smi', 'vorbörslich', 'dst', 'mkl', 'ale', 'kontrakten', 'calls', 'veraenderung', 'gwa', 'gesamtjahr', 'auftragseingang', 'überschuß', 'verlautete', 'eju', 'tms', 'jahresvergleich', 'vorjahreszeitraum', 'werden.', 'betriebsergebnis', 'bobl-future', 'puts', 'fri', '4.50', 'schluß', 'ewu', 'spanne', 'standardwerte', 'jahresüberschuß', 'rechne', 'lire', '49-69-756525', '16.00', 'peh', 'hmh', 'dtb', 'tagesgeld', 'us-notenbank', 'corp', 'vorstandschef', 'greenspan']
Bptt 70
Training lm from: [PosixPath('/home/pczapla/workspace/ulmfit-multilingual/data/wiki/de-100/models/vf60k/qrnn_nl4.m/lm_best'), PosixPath('/home/pczapla/workspace/ulmfit-multilingual/data/wiki/de-100/models/vf60k/qrnn_nl4.m/../itos')]
epoch train_loss valid_loss accuracy
1 4.724948 4.178421 0.449862
Total time: 02:19
epoch train_loss valid_loss accuracy
1 4.312489 4.049916 0.466992
2 4.197414 3.919862 0.488602
3 4.000882 3.793147 0.510018
4 3.960565 3.691311 0.524944
5 3.841827 3.590782 0.539775
6 3.756638 3.515933 0.551585
7 3.738561 3.439131 0.563536
8 3.623295 3.371250 0.575563
9 3.585063 3.307532 0.586810
10 3.523384 3.256143 0.596964
11 3.484239 3.195987 0.610036
12 3.439287 3.140971 0.622494
13 3.385262 3.087693 0.634652
14 3.308803 3.050615 0.644066
15 3.242234 2.999897 0.656247
16 3.229038 2.966996 0.664862
17 3.203192 2.946324 0.670038
18 3.169675 2.930080 0.674204
19 3.140696 2.920569 0.676475
20 3.207376 2.919055 0.676769
Total time: 1:00:09
/home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-1/models/vf60k
Saving info /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-1/models/vf60k/qrnn_nl4.m/info.json
Single training schedule
epoch train_loss valid_loss accuracy
1 0.779320 0.638282 0.925000
2 0.653313 0.592119 0.940000
3 0.569095 0.577936 0.939000
4 0.519593 0.568577 0.947000
Total time: 00:50
Saving models at /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-1/models/vf60k/qrnn_nl4.m
Loss and accuracy using (cls_best): [0.19424936, tensor(0.9528)]
0.19424936175346375
0.952750027179718
```
## SP30k LSTM nl 4
### LM
```
python -m ulmfit lm --dataset-path data/wiki/de-100 --cuda-id=0 --tokenizer='sp' --nl 4 --name 'nl4' --max-vocab 30000 --lang sp --qrnn=False - train 10 --bs=50 --drop_mult=0
1,2.833101,3.174348,0.472863
2,2.788717,3.171983,0.471377
3,2.831292,3.187135,0.471068
4,2.723390,3.133801,0.475572
5,2.681617,3.064743,0.481984
6,2.662792,2.984701,0.489080
7,2.542035,2.892254,0.499275
8,2.422225,2.806846,0.508663
9,2.462655,2.736171,0.517994
10,2.396778,2.714520,0.521145
data/wiki/de-100/models/sp30k/lstm_nl4.m/lm-history.csv
```
### MLDocs
```
python -m ulmfit cls --dataset-path data/mldoc/de-1 --base-lm-path data/wiki/de-100/models/sp30k/lstm_nl4.m --lang=de --name 'nl4' - train 20 --bs 40 ✘ 1
Max vocab: 30000
Cache dir: data/mldoc/de-1/models/sp30k
Model dir: data/mldoc/de-1/models/sp30k/lstm_nl4.m
Loading validation data/mldoc/de-1/de.dev.csv
Tokenized data loaded, lm.trn 13500, lm.val 1500
Tokenized data loaded, cls.trn 1000, cls.val 1000
Size of vocabulary: 30000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁.', '▁,', '▁der', '▁die', '▁und', '▁in', 'en', "▁&'", 's', '-']
Training args: {'tie_weights': True, 'clip': 0.12, 'bptt': 70, 'pretrained_fnames': [PosixPath('data/wiki/de-100/models/sp30k/lstm_nl4.m/lm_best'), PosixPath('data/wiki/de-100/models/sp30k/lstm_nl4.m/../itos')], 'pretrained_model': None, 'drop_mult': 0.3} dps: [0.25 0.1 0.2 0.02 0.15]
Unknown tokens 0, first 100: []
Training lm from: [PosixPath('data/wiki/de-100/models/sp30k/lstm_nl4.m/lm_best'), PosixPath('data/wiki/de-100/models/sp30k/lstm_nl4.m/../itos')]
epoch train_loss valid_loss accuracy
1 3.042075 2.457199 0.547201
epoch train_loss valid_loss accuracy
1 2.581403 2.305440 0.565500
2 2.366814 2.139165 0.589417
3 2.187646 1.986698 0.612081
4 2.054434 1.857322 0.630642
5 1.948663 1.758499 0.644389
6 1.850596 1.673632 0.655852
7 1.813331 1.593225 0.668256
8 1.738136 1.523946 0.678633
9 1.683469 1.463405 0.688561
10 1.609236 1.410462 0.697171
11 1.599416 1.356008 0.706997
12 1.526982 1.308399 0.715433
13 1.487115 1.263120 0.723749
14 1.430917 1.224060 0.731837
15 1.410333 1.191501 0.738267
16 1.385961 1.166404 0.743477
17 1.349813 1.144801 0.747553
18 1.345938 1.132679 0.750188
19 1.311102 1.127321 0.751208
20 1.355743 1.126064 0.751384
Saving info data/mldoc/de-1/models/sp30k/lstm_nl4.m/info.json
Starting classifier training
epoch train_loss valid_loss accuracy
1 0.490199 0.246640 0.940000
epoch train_loss valid_loss accuracy
1 0.302251 0.243051 0.932000
epoch train_loss valid_loss accuracy
1 0.211028 0.249550 0.932000
epoch train_loss valid_loss accuracy
1 0.159555 0.230822 0.947000
2 0.144418 0.226450 0.943000
Saving models at data/mldoc/de-1/models/sp30k/lstm_nl4.m
Loss and accuracy using (cls_last): [0.16306259, tensor(0.9540)]
```
MultiCCA: 93.7% , ulmfit: 95.4%
```
Max vocab: 30000
Cache dir: data/mldoc/de-1/models/sp30k
Model dir: data/mldoc/de-1/models/sp30k/lstm_nl4-2nd.m
Loading validation data/mldoc/de-1/de.dev.csv
Tokenized data loaded, lm.trn 13500, lm.val 1500
Tokenized data loaded, cls.trn 1000, cls.val 1000
Size of vocabulary: 30000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁.', '▁,', '▁der', '▁die', '▁und', '▁in', 'en', "▁&'", 's', '-']
Training args: {'tie_weights': True, 'clip': 0.12, 'bptt': 70, 'pretrained_fnames': [PosixPath('data/mldoc/de-1/models/sp30k/lstm_nl4.m/lm_best'), PosixPath('data/mldoc/de-1/models/sp30k/lstm_nl4.m/../itos')], 'pretrained_model': None, 'drop_mult': 0.3} dps: [0.25 0.1 0.2 0.02 0.15]
Unknown tokens 0, first 100: []
data/mldoc/de-1/models/sp30k
Saving info data/mldoc/de-1/models/sp30k/lstm_nl4-2nd.m/info.json
Starting classifier training
epoch train_loss valid_loss accuracy
1 0.464957 0.258905 0.928000
epoch train_loss valid_loss accuracy
1 0.284900 0.243053 0.937000
epoch train_loss valid_loss accuracy
1 0.298546 0.204188 0.948000
epoch train_loss valid_loss accuracy
1 0.159097 0.199651 0.952000
2 0.112476 0.203827 0.953000
Saving models at data/mldoc/de-1/models/sp30k/lstm_nl4-2nd.m
Loss and accuracy using (cls_last): [0.1689675, tensor(0.9550)]
```
### examples limited to 100
#### 2x run
first run
```
python -m ulmfit cls --dataset-path data/mldoc/de-1 --base-lm-path data/mldoc/de-1/models/sp30k/lstm_nl4.m --lang=de --name 'nl4-100-2x' --cuda-id=1 - train 0 --bs 40 --limit=100 --drop-mult-cls=0.3
Max vocab: 30000
Cache dir: data/mldoc/de-1/models/sp30k
Model dir: data/mldoc/de-1/models/sp30k/lstm_nl4-100-2x.m
Loading validation data/mldoc/de-1/de.dev.csv
Tokenized data loaded, lm.trn 13500, lm.val 1500
Limiting data set to: 100
Running tokenization...
Saving tokenized: cls.trn 100, cls.val 100
Size of vocabulary: 30000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁.', '▁,', '▁der', '▁die', '▁und', '▁in', 'en', "▁&'", 's', '-']
Training args: {'tie_weights': True, 'clip': 0.12, 'bptt': 70, 'pretrained_fnames': [PosixPath('data/mldoc/de-1/models/sp30k/lstm_nl4.m/lm_best'), PosixPath('data/mldoc/de-1/models/sp30k/lstm_nl4.m/../itos')], 'pretrained_model': None, 'drop_mult': 0.3} dps: [0.25 0.1 0.2 0.02 0.15]
Unknown tokens 0, first 100: []
data/mldoc/de-1/models/sp30k
Saving info data/mldoc/de-1/models/sp30k/lstm_nl4-100-2x.m/info.json
Starting classifier training
epoch train_loss valid_loss accuracy
1 1.181207 1.315258 0.300000
epoch train_loss valid_loss accuracy
1 0.749909 1.204297 0.660000
epoch train_loss valid_loss accuracy
1 0.558658 1.083666 0.830000
epoch train_loss valid_loss accuracy
1 0.486175 1.020435 0.850000
2 0.485117 0.958238 0.880000
Saving models at data/mldoc/de-1/models/sp30k/lstm_nl4-100-2x.m
..? ..
```
2nd run
```
python -m ulmfit cls --dataset-path data/mldoc/de-1 --base-lm-path data/mldoc/de-1/models/sp30k/lstm_nl4.m --lang=de --name 'nl4-100-2x' --cuda-id=1 - train 0 --bs 40 --limit=100
Max vocab: 30000
Cache dir: data/mldoc/de-1/models/sp30k
Model dir: data/mldoc/de-1/models/sp30k/lstm_nl4-100-2x.m
Loading validation data/mldoc/de-1/de.dev.csv
Tokenized data loaded, lm.trn 13500, lm.val 1500
Limiting data set to: 100
Tokenized data loaded, cls.trn 100, cls.val 100
Size of vocabulary: 30000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁.', '▁,', '▁der', '▁die', '▁und', '▁in', 'en', "▁&'", 's', '-']
Loading last classifier
Starting classifier training
epoch train_loss valid_loss accuracy
1 0.441340 0.716396 0.840000
epoch train_loss valid_loss accuracy
1 0.312035 0.532610 0.910000
epoch train_loss valid_loss accuracy
1 0.267714 0.462694 0.920000
epoch train_loss valid_loss accuracy
1 0.242031 0.430018 0.930000
2 0.231161 0.398335 0.930000
Saving models at data/mldoc/de-1/models/sp30k/lstm_nl4-100-2x.m
Loss and accuracy using (cls_last): [0.33284584, tensor(0.9252)]
```
#### 8 epoches at the end
```
python -m ulmfit cls --dataset-path data/mldoc/de-1 --base-lm-path data/mldoc/de-1/models/sp30k/lstm_nl4.m --lang=de --name 'nl4-100-e8' --cuda-id=1 - train 0 --bs 40 --limit=100 --num-cls-epochs=8 --drop-mult-cls=0.3
Max vocab: 30000
Cache dir: data/mldoc/de-1/models/sp30k
Model dir: data/mldoc/de-1/models/sp30k/lstm_nl4-100-e8.m
Loading validation data/mldoc/de-1/de.dev.csv
Tokenized data loaded, lm.trn 13500, lm.val 1500
Limiting data set to: 100
Tokenized data loaded, cls.trn 100, cls.val 100
Size of vocabulary: 30000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁.', '▁,', '▁der', '▁die', '▁und', '▁in', 'en', "▁&'", 's', '-']
Training args: {'tie_weights': True, 'clip': 0.12, 'bptt': 70, 'pretrained_fnames': [PosixPath('data/mldoc/de-1/models/sp30k/lstm_nl4.m/lm_best'), PosixPath('data/mldoc/de-1/models/sp30k/lstm_nl4.m/../itos')], 'pretrained_model': None, 'drop_mult': 0.3} dps: [0.25 0.1 0.2 0.02 0.15]
Unknown tokens 0, first 100: []
data/mldoc/de-1/models/sp30k
Saving info data/mldoc/de-1/models/sp30k/lstm_nl4-100-e8.m/info.json
Starting classifier training
epoch train_loss valid_loss accuracy
1 1.208816 1.324359 0.280000
epoch train_loss valid_loss accuracy
1 0.716811 1.195012 0.440000
epoch train_loss valid_loss accuracy
1 0.535809 1.075753 0.590000
epoch train_loss valid_loss accuracy
1 0.499198 1.018431 0.760000
2 0.480971 0.948658 0.880000
3 0.468659 0.866477 0.860000
4 0.460322 0.770794 0.880000
5 0.461138 0.704613 0.900000
6 0.442423 0.623944 0.900000
7 0.422423 0.568031 0.920000
8 0.417041 0.527571 0.930000
Saving models at data/mldoc/de-1/models/sp30k/lstm_nl4-100-e8.m
Loss and accuracy using (cls_last): [0.47343642, tensor(0.9070)]
```
Dropout 0.6
```
python -m ulmfit cls --dataset-path data/mldoc/de-1 --base-lm-path data/mldoc/de-1/models/sp30k/lstm_nl4.m --lang=de --name 'nl4-100-e8dp6' --cuda-id=1 - train 0 --bs 40 --limit=100 --num-cls-epochs=8 --drop-mult-cls=0.6
Max vocab: 30000
Cache dir: data/mldoc/de-1/models/sp30k
Model dir: data/mldoc/de-1/models/sp30k/lstm_nl4-100-e8dp6.m
Loading validation data/mldoc/de-1/de.dev.csv
Tokenized data loaded, lm.trn 13500, lm.val 1500
Limiting data set to: 100
Tokenized data loaded, cls.trn 100, cls.val 100
Size of vocabulary: 30000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁.', '▁,', '▁der', '▁die', '▁und', '▁in', 'en', "▁&'", 's', '-']
Training args: {'tie_weights': True, 'clip': 0.12, 'bptt': 70, 'pretrained_fnames': [PosixPath('data/mldoc/de-1/models/sp30k/lstm_nl4.m/lm_best'), PosixPath('data/mldoc/de-1/models/sp30k/lstm_nl4.m/../itos')], 'pretrained_model': None, 'drop_mult': 0.3} dps: [0.25 0.1 0.2 0.02 0.15]
Unknown tokens 0, first 100: []
data/mldoc/de-1/models/sp30k
Saving info data/mldoc/de-1/models/sp30k/lstm_nl4-100-e8dp6.m/info.json
Starting classifier training
epoch train_loss valid_loss accuracy
1 1.151162 1.323036 0.280000
epoch train_loss valid_loss accuracy
1 0.745338 1.160084 0.610000
epoch train_loss valid_loss accuracy
1 0.535118 1.041519 0.770000
epoch train_loss valid_loss accuracy
1 0.459913 0.995187 0.860000
2 0.451289 0.949036 0.830000
3 0.460395 0.885940 0.800000
4 0.454847 0.848194 0.770000
5 0.447404 0.788741 0.810000
6 0.428524 0.748181 0.760000
7 0.419571 0.696069 0.760000
8 0.408938 0.661937 0.770000
Saving models at data/mldoc/de-1/models/sp30k/lstm_nl4-100-e8dp6.m
Loss and accuracy using (cls_last): [0.53202456, tensor(0.8830)]
```
```
python -m ulmfit cls --dataset-path data/mldoc/de-1 --base-lm-path data/mldoc/de-1/models/sp30k/lstm_nl4.m --lang=de --name 'nl4-100-e8dp6x2' --cuda-id=1 - train 0 --bs 40 --limit=100 --num-cls-epochs=8 --drop-mult-cls=0.6
Max vocab: 30000
Cache dir: data/mldoc/de-1/models/sp30k
Model dir: data/mldoc/de-1/models/sp30k/lstm_nl4-100-e8dp6x2.m
Loading validation data/mldoc/de-1/de.dev.csv
Tokenized data loaded, lm.trn 13500, lm.val 1500
Limiting data set to: 100
Tokenized data loaded, cls.trn 100, cls.val 100
Size of vocabulary: 30000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁.', '▁,', '▁der', '▁die', '▁und', '▁in', 'en', "▁&'", 's', '-']
Training args: {'tie_weights': True, 'clip': 0.12, 'bptt': 70, 'pretrained_fnames': [PosixPath('data/mldoc/de-1/models/sp30k/lstm_nl4.m/lm_best'), PosixPath('data/mldoc/de-1/models/sp30k/lstm_nl4.m/../itos')], 'pretrained_model': None, 'drop_mult': 0.3} dps: [0.25 0.1 0.2 0.02 0.15]
Unknown tokens 0, first 100: []
data/mldoc/de-1/models/sp30k
Saving info data/mldoc/de-1/models/sp30k/lstm_nl4-100-e8dp6x2.m/info.json
Starting classifier training
epoch train_loss valid_loss accuracy
1 1.126586 1.338514 0.470000
epoch train_loss valid_loss accuracy
1 0.751379 1.181071 0.550000
epoch train_loss valid_loss accuracy
1 0.559534 1.083532 0.810000
epoch train_loss valid_loss accuracy
1 0.444137 1.034607 0.870000
2 0.438850 0.983929 0.830000
3 0.436560 0.906958 0.840000
4 0.447400 0.847952 0.840000
5 0.431961 0.783818 0.850000
6 0.422364 0.713126 0.850000
7 0.414145 0.662799 0.840000
8 0.407066 0.630168 0.840000
Saving models at data/mldoc/de-1/models/sp30k/lstm_nl4-100-e8dp6x2.m
Loss and accuracy using (cls_last): [0.46259913, tensor(0.9147)]
```
```
python -m ulmfit cls --dataset-path data/mldoc/de-1 --base-lm-path data/mldoc/de-1/models/sp30k/lstm_nl4.m --lang=de --name 'nl4-100-e8dp2' --cuda-id=1 - train 0 --bs 40 --limit=100 --num-cls-epochs=8 --drop-mult-cls=0.2
Max vocab: 30000
Cache dir: data/mldoc/de-1/models/sp30k
Model dir: data/mldoc/de-1/models/sp30k/lstm_nl4-100-e8dp2.m
Loading validation data/mldoc/de-1/de.dev.csv
Tokenized data loaded, lm.trn 13500, lm.val 1500
Limiting data set to: 100
Tokenized data loaded, cls.trn 100, cls.val 100
Size of vocabulary: 30000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁.', '▁,', '▁der', '▁die', '▁und', '▁in', 'en', "▁&'", 's', '-']
Training args: {'tie_weights': True, 'clip': 0.12, 'bptt': 70, 'pretrained_fnames': [PosixPath('data/mldoc/de-1/models/sp30k/lstm_nl4.m/lm_best'), PosixPath('data/mldoc/de-1/models/sp30k/lstm_nl4.m/../itos')], 'pretrained_model': None, 'drop_mult': 0.3} dps: [0.25 0.1 0.2 0.02 0.15]
Unknown tokens 0, first 100: []
data/mldoc/de-1/models/sp30k
Saving info data/mldoc/de-1/models/sp30k/lstm_nl4-100-e8dp2.m/info.json
Starting classifier training
epoch train_loss valid_loss accuracy
1 1.172059 1.311985 0.280000
epoch train_loss valid_loss accuracy
1 0.721259 1.180611 0.720000
epoch train_loss valid_loss accuracy
1 0.495393 1.051538 0.770000
epoch train_loss valid_loss accuracy
1 0.445929 0.984670 0.830000
2 0.430556 0.897431 0.870000
3 0.442683 0.800808 0.900000
4 0.427033 0.711604 0.880000
5 0.411931 0.624835 0.890000
6 0.397705 0.560819 0.900000
7 0.387848 0.506201 0.900000
8 0.380063 0.459507 0.900000
Saving models at data/mldoc/de-1/models/sp30k/lstm_nl4-100-e8dp2.m
Loss and accuracy using (cls_last): [0.41103342, tensor(0.9105)]
```
#### 2x e8
```
python -m ulmfit cls --dataset-path data/mldoc/de-1 --base-lm-path data/mldoc/de-1/models/sp30k/lstm_nl4.m --lang=de --name 'nl4-100-2nd-2x' --cuda-id=1 - train 0 --bs 40 --limit=100 --num-cls-epochs=8 --drop-mult-cls=0.2
Max vocab: 30000
Cache dir: data/mldoc/de-1/models/sp30k
Model dir: data/mldoc/de-1/models/sp30k/lstm_nl4-100-2nd-2x.m
Loading validation data/mldoc/de-1/de.dev.csv
Tokenized data loaded, lm.trn 13500, lm.val 1500
Limiting data set to: 100
Tokenized data loaded, cls.trn 100, cls.val 100
Size of vocabulary: 30000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁.', '▁,', '▁der', '▁die', '▁und', '▁in', 'en', "▁&'", 's', '-']
Training args: {'tie_weights': True, 'clip': 0.12, 'bptt': 70, 'pretrained_fnames': [PosixPath('data/mldoc/de-1/models/sp30k/lstm_nl4.m/lm_best'), PosixPath('data/mldoc/de-1/models/sp30k/lstm_nl4.m/../itos')], 'pretrained_model': None, 'drop_mult': 0.3} dps: [0.25 0.1 0.2 0.02 0.15]
Unknown tokens 0, first 100: []
data/mldoc/de-1/models/sp30k
Saving info data/mldoc/de-1/models/sp30k/lstm_nl4-100-2nd-2x.m/info.json
Starting classifier training
epoch train_loss valid_loss accuracy
1 1.122616 1.290291 0.300000
epoch train_loss valid_loss accuracy
1 0.746805 1.166377 0.730000
epoch train_loss valid_loss accuracy
1 0.535163 1.058924 0.900000
epoch train_loss valid_loss accuracy
1 0.437773 1.022764 0.850000
2 0.449220 0.949963 0.820000
3 0.443732 0.854293 0.860000
4 0.432721 0.746918 0.900000
5 0.423113 0.718745 0.840000
6 0.403492 0.671295 0.820000
7 0.399091 0.539798 0.900000
8 0.394950 0.508265 0.900000
Saving models at data/mldoc/de-1/models/sp30k/lstm_nl4-100-2nd-2x.m
Loading validation data/mldoc/de-1/de.dev.csv
Loss and accuracy using (cls_last): [0.44688165, tensor(0.9062)]
Loss and accuracy using (cls_best): [0.44688165, tensor(0.9062)]
```
```
python -m ulmfit cls --dataset-path data/mldoc/de-1 --base-lm-path data/mldoc/de-1/models/sp30k/lstm_nl4.m --lang=de --name 'nl4-100-2nd-2x' --cuda-id=1 - train 0 --bs 40 --limit=100 --num-cls-epochs=8 --drop-mult-cls=0.2
Max vocab: 30000
Cache dir: data/mldoc/de-1/models/sp30k
Model dir: data/mldoc/de-1/models/sp30k/lstm_nl4-100-2nd-2x.m
Loading validation data/mldoc/de-1/de.dev.csv
Tokenized data loaded, lm.trn 13500, lm.val 1500
Limiting data set to: 100
Tokenized data loaded, cls.trn 100, cls.val 100
Size of vocabulary: 30000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁.', '▁,', '▁der', '▁die', '▁und', '▁in', 'en', "▁&'", 's', '-']
Loading last classifier
Starting classifier training
epoch train_loss valid_loss accuracy
1 0.422151 0.797943 0.720000
epoch train_loss valid_loss accuracy
1 0.357166 0.736997 0.780000
epoch train_loss valid_loss accuracy
1 0.238496 1.497305 0.660000
epoch train_loss valid_loss accuracy
1 0.312356 1.522862 0.660000
2 0.267801 1.518249 0.660000
3 0.244077 1.110030 0.680000
4 0.264972 0.798898 0.770000
5 0.236816 0.398245 0.860000
6 0.251284 0.415783 0.860000
7 0.244988 0.417737 0.860000
8 0.240362 0.415114 0.860000
Saving models at data/mldoc/de-1/models/sp30k/lstm_nl4-100-2nd-2x.m
Loss and accuracy using (cls_last): [0.27954015, tensor(0.9125)]
Loss and accuracy using (cls_best): [0.27954015, tensor(0.9125)]
```
### Adding noise
#### 40%
```
python -m ulmfit cls --dataset-path data/mldoc/de-1 --base-lm-path data/mldoc/de-1/models/sp30k/lstm_nl4.m --lang=de --name 'nl4-noise0.4' --cuda-id=1 - train 0 --bs 40 --noise=0.4 --num-cls-epochs=8 --drop-mult-cls=0.2
Max vocab: 30000
Cache dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-1/models/sp30k
Model dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-1/models/sp30k/lstm_nl4-noise0.4.m
Loading validation /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-1/de.dev.csv
Tokenized data loaded, lm.trn 13500, lm.val 1500
Added noise to 400 examples, only 0.6 have correct labels
Running tokenization...
Saving tokenized: cls.trn 1000, cls.val 1000
Size of vocabulary: 30000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁.', '▁,', '▁der', '▁die', '▁und', '▁in', 'en', "▁&'", 's', '-']
Training args: {'tie_weights': True, 'clip': 0.12, 'bptt': 70, 'pretrained_fnames': [PosixPath('/home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-1/models/sp30k/lstm_nl4.m/lm_best'), PosixPath('/home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-1/models/sp30k/lstm_nl4.m/../itos')], 'pretrained_model': None, 'drop_mult': 0.3} dps: [0.25 0.1 0.2 0.02 0.15]
Unknown tokens 0, first 100: []
/home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-1/models/sp30k
Saving info /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-1/models/sp30k/lstm_nl4-noise0.4.m/info.json
Starting classifier training
epoch train_loss valid_loss accuracy
1 1.053928 0.938391 0.535000
epoch train_loss valid_loss accuracy
1 0.941778 0.599400 0.836000
epoch train_loss valid_loss accuracy
1 0.858363 0.675211 0.760000
epoch train_loss valid_loss accuracy
1 0.768678 0.645293 0.788000
2 0.758538 0.636551 0.780000
3 0.753799 0.673323 0.708000
4 0.731245 0.638630 0.736000
5 0.691206 0.659491 0.717000
6 0.691426 0.682510 0.696000
7 0.672320 0.668610 0.702000
8 0.653569 0.669633 0.694000
Saving models at /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-1/models/sp30k/lstm_nl4-noise0.4.m
Loss and accuracy using (cls_last): [0.62477165, tensor(0.7717)]
```
#### 15%
```
python -m ulmfit cls --dataset-path data/mldoc/de-1 --base-lm-path data/mldoc/de-1/models/sp30k/lstm_nl4.m --lang=de --name 'nl4-noise0.15' --cuda-id=1 - train 0 --bs 40 --noise=0.15 --num-cls-epochs=2 --drop-mult-cls=0.2
Max vocab: 30000
Cache dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-1/models/sp30k
Model dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-1/models/sp30k/lstm_nl4-noise0.15.m
Loading validation /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-1/de.dev.csv
Tokenized data loaded, lm.trn 13500, lm.val 1500
Added noise to 150 examples, only 0.85 have correct labels
Running tokenization...
Saving tokenized: cls.trn 1000, cls.val 1000
Size of vocabulary: 30000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁.', '▁,', '▁der', '▁die', '▁und', '▁in', 'en', "▁&'", 's', '-']
Training args: {'tie_weights': True, 'clip': 0.12, 'bptt': 70, 'pretrained_fnames': [PosixPath('/home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-1/models/sp30k/lstm_nl4.m/lm_best'), PosixPath('/home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-1/models/sp30k/lstm_nl4.m/../itos')], 'pretrained_model': None, 'drop_mult': 0.3} dps: [0.25 0.1 0.2 0.02 0.15]
Unknown tokens 0, first 100: []
/home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-1/models/sp30k
Saving info /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-1/models/sp30k/lstm_nl4-noise0.15.m/info.json
Starting classifier training
epoch train_loss valid_loss accuracy
1 0.836104 0.584330 0.897000
epoch train_loss valid_loss accuracy
1 0.692108 0.303470 0.930000
epoch train_loss valid_loss accuracy
1 0.653277 0.330520 0.924000
epoch train_loss valid_loss accuracy
1 0.541086 0.331944 0.922000
2 0.523274 0.335986 0.922000
Saving models at /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-1/models/sp30k/lstm_nl4-noise0.15.m
Loss and accuracy using (cls_last): [0.28749043, tensor(0.9355)]
```
-6
View File
@@ -1,6 +0,0 @@
# EN
## SP30k LSTM nl 4
### LM
### MLDoc
-269
View File
@@ -1,269 +0,0 @@
# ES
## SP30k LSTM nl 4
### LM
````
python -m ulmfit lm --dataset-path data/wiki/es-100 --cuda-id=0 --tokenizer='sp' --nl 4 --name 'nl4' --max-vocab 30000 --lang es --qrnn=False - train 10 --bs=50 --drop_mult=0
Running tokenization
Wiki text was split to 96224 articles
Wiki text was split to 105 articles
Size of vocabulary: 30000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁de', '▁,', '▁la', '▁.', '▁en', '▁el', '▁y', 's', '▁a', '▁que']
Training args: {'tie_weights': True, 'clip': 0.12, 'bptt': 70, 'pretrained_fnames': None, 'pretrained_model': None, 'drop_mult': 0} dps: [0.25 0.1 0.2 0.02 0.15]
Training lm from random weights
epoch train_loss valid_loss accuracy
1 3.269541 3.451855 0.387471
2 3.161740 3.423016 0.386158
3 3.187431 3.419638 0.388626
4 3.115763 3.357066 0.393877
5 2.996527 3.291787 0.402488
6 3.021759 3.202183 0.410873
7 2.998267 3.104373 0.422624
8 2.827225 3.006537 0.436010
9 2.784576 2.937735 0.446654
10 2.789913 2.918509 0.450055
data/wiki/es-100/models/sp30k
Saving info data/wiki/es-100/models/sp30k/lstm_nl4.m/info.json
````
### MLDoc
```
python -m ulmfit cls --dataset-path data/mldoc/es-1 --base-lm-path data/wiki/es-100/models/sp30k/lstm_nl4.m --lang=es --name 'nl4' --cuda-id=1 - train 20 --bs 40 --num-cls-epochs=2
Max vocab: 30000
Cache dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/es-1/models/sp30k
Model dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/es-1/models/sp30k/lstm_nl4.m
Loading validation /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/es-1/es.dev.csv
Running tokenization...
Saving tokenized: cls.trn 13013, cls.val 1445
Running tokenization...
Saving tokenized: cls.trn 1000, cls.val 1000
Size of vocabulary: 30000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁de', '▁,', '▁la', '▁.', '▁en', '▁el', '▁y', 's', '▁a', '▁que']
Training args: {'tie_weights': True, 'clip': 0.12, 'bptt': 70, 'pretrained_fnames': [PosixPath('/home/pczapla/workspace/ulmfit-multilingual/data/wiki/es-100/models/sp30k/lstm_nl4.m/lm_best'), PosixPath('/home/pczapla/workspace/ulmfit-multilingual/data/wiki/es-100/models/sp30k/lstm_nl4.m/../itos')], 'pretrained_model': None, 'drop_mult': 0.3} dps: [0.25 0.1 0.2 0.02 0.15]
Unknown tokens 0, first 100: []
Training lm from: [PosixPath('/home/pczapla/workspace/ulmfit-multilingual/data/wiki/es-100/models/sp30k/lstm_nl4.m/lm_best'), PosixPath('/home/pczapla/workspace/ulmfit-multilingual/data/wiki/es-100/models/sp30k/lstm_nl4.m/../itos')]
epoch train_loss valid_loss accuracy
1 2.805415 2.188974 0.537779
epoch train_loss valid_loss accuracy
1 2.429727 1.989691 0.569048
2 2.218828 1.794969 0.603721
3 2.015097 1.644815 0.629609
4 1.877210 1.537773 0.646898
5 1.775648 1.450283 0.660861
6 1.749334 1.377085 0.672146
7 1.601073 1.311101 0.684400
8 1.564420 1.251074 0.694900
9 1.532728 1.197607 0.704779
10 1.391921 1.145408 0.716044
11 1.379958 1.093550 0.726937
12 1.324111 1.048308 0.735890
13 1.344113 1.007926 0.745691
14 1.243085 0.969521 0.754591
15 1.230809 0.937330 0.762675
16 1.162501 0.913408 0.768044
17 1.170092 0.894892 0.773239
18 1.110860 0.884449 0.775603
19 1.115907 0.880448 0.776671
20 1.083033 0.878421 0.776931
/home/pczapla/workspace/ulmfit-multilingual/data/mldoc/es-1/models/sp30k
Saving info /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/es-1/models/sp30k/lstm_nl4.m/info.json
Starting classifier training
epoch train_loss valid_loss accuracy
1 0.621574 0.391042 0.856000
epoch train_loss valid_loss accuracy
1 0.411668 0.215625 0.935000
epoch train_loss valid_loss accuracy
1 0.340519 0.222422 0.935000
epoch train_loss valid_loss accuracy
1 0.281729 0.192193 0.949000
2 0.262074 0.202975 0.945000
Saving models at /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/es-1/models/sp30k/lstm_nl4.m
Loss and accuracy using (cls_best): [0.1749019, tensor(0.9515)]
```
## ES optimization
### Smaler vocab 15k
#### LM
```
python -m ulmfit lm --dataset-path data/wiki-m/es-100 --cuda-id=0 --tokenizer='sp' --nl 4 --name 'nl4' --max-vocab 15000 \ ✘ 1
--lang es --qrnn=False - train 10 --bs=50 --drop_mult=0
Max vocab: 15000
Cache dir: data/wiki-m/es-100/models/sp15k
Model dir: data/wiki-m/es-100/models/sp15k/lstm_nl4.m
Tokenized data loaded
Size of vocabulary: 15000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁de', '▁,', '▁la', '▁.', 's', '▁en', '▁el', '▁y', '▁a', '▁que']
Training args: {'clip': 0.12, 'alpha': 2, 'beta': 1, 'drop_mult': 0} dps: {'output_p': 0.25, 'hidden_p': 0.1, 'input_p': 0.2, 'embed_p': 0.02, 'weight_p': 0.15}
Training lm from random weights
epoch train_loss valid_loss accuracy
1 2.961702 3.187043 0.403149
Better model found at epoch 1 with val_loss value: 3.1870434284210205.
2 2.928991 3.170802 0.402026
Better model found at epoch 2 with val_loss value: 3.170802354812622.
3 2.931906 3.128328 0.407816
Better model found at epoch 3 with val_loss value: 3.128328323364258.
4 2.869332 3.072160 0.414345
Better model found at epoch 4 with val_loss value: 3.072160243988037.
5 2.803377 2.997071 0.424847
Better model found at epoch 5 with val_loss value: 2.997070550918579.
6 2.758087 2.927369 0.432256
Better model found at epoch 6 with val_loss value: 2.927368640899658.
7 2.657733 2.825029 0.446440
Better model found at epoch 7 with val_loss value: 2.8250293731689453.
8 2.563273 2.728652 0.459271
Better model found at epoch 8 with val_loss value: 2.7286524772644043.
9 2.475741 2.654844 0.470864
Better model found at epoch 9 with val_loss value: 2.654844045639038.
10 2.428898 2.634355 0.474821
Better model found at epoch 10 with val_loss value: 2.634355306625366.
Total time: 17:53:59
data/wiki-m/es-100/models/sp15k
Saving info data/wiki-m/es-100/models/sp15k/lstm_nl4.m/info.json
```
#### MLDoc
```
python -m ulmfit cls --dataset-path data/mldoc/es-1 --base-lm-path data/wiki-m/es-100/models/sp15k/lstm_nl4.m --lang=es --name 'nl4' --cuda-id=0 - train 20 --bs 20 --num-cls-epochs=8
Max vocab: 15000
Cache dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/es-1/models/sp15k
Model dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/es-1/models/sp15k/lstm_nl4.m
Loading validation /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/es-1/es.dev.csv
Running tokenization...
Saving tokenized: cls.trn 13013, cls.val 1445
Running tokenization...
Saving tokenized: cls.trn 1000, cls.val 1000
Size of vocabulary: 15000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁de', '▁,', '▁la', '▁.', 's', '▁en', '▁el', '▁y', '▁a', '▁que']
Training args: {'clip': 0.12, 'alpha': 2, 'beta': 1, 'drop_mult': 0.3} dps: {'output_p': 0.25, 'hidden_p': 0.1, 'input_p': 0.2, 'embed_p': 0.02, 'weight_p': 0.15}
Loading pretrained model
Unknown tokens 0, first 100: []
Training lm from: [PosixPath('/home/pczapla/workspace/ulmfit-multilingual/data/wiki-m/es-100/models/sp15k/lstm_nl4.m/lm_best'), PosixPath('/home/pczapla/workspace/ulmfit-multilingual/data/wiki-m/es-100/models/sp15k/lstm_nl4.m/../itos')]
epoch train_loss valid_loss accuracy
1 2.355042 1.850417 0.589128
Better model found at epoch 1 with val_loss value: 1.850416898727417.
Total time: 03:25
epoch train_loss valid_loss accuracy
1 2.087364 1.677666 0.619909
Better model found at epoch 1 with val_loss value: 1.6776657104492188.
2 1.880730 1.522996 0.648134
Better model found at epoch 2 with val_loss value: 1.5229955911636353.
3 1.767530 1.403644 0.668117
Better model found at epoch 3 with val_loss value: 1.4036436080932617.
4 1.659950 1.309353 0.684900
Better model found at epoch 4 with val_loss value: 1.3093526363372803.
5 1.546585 1.232220 0.699358
Better model found at epoch 5 with val_loss value: 1.2322196960449219.
6 1.592862 1.161846 0.713034
Better model found at epoch 6 with val_loss value: 1.1618456840515137.
7 1.444965 1.098108 0.726811
Better model found at epoch 7 with val_loss value: 1.0981075763702393.
8 1.340874 1.029193 0.741337
Better model found at epoch 8 with val_loss value: 1.0291931629180908.
9 1.351407 0.974317 0.753408
Better model found at epoch 9 with val_loss value: 0.9743167757987976.
10 1.231713 0.915328 0.767088
Better model found at epoch 10 with val_loss value: 0.9153280854225159.
11 1.151926 0.852391 0.782414
Better model found at epoch 11 with val_loss value: 0.852391242980957.
12 1.163565 0.794699 0.797228
Better model found at epoch 12 with val_loss value: 0.7946987152099609.
13 1.054929 0.743652 0.810518
Better model found at epoch 13 with val_loss value: 0.74365234375.
14 0.974651 0.695024 0.823344
Better model found at epoch 14 with val_loss value: 0.6950243711471558.
15 0.869718 0.651691 0.834510
Better model found at epoch 15 with val_loss value: 0.6516908407211304.
16 0.889763 0.615112 0.844947
Better model found at epoch 16 with val_loss value: 0.6151121258735657.
17 0.843503 0.590130 0.851694
Better model found at epoch 17 with val_loss value: 0.5901297926902771.
18 0.752870 0.575217 0.855496
Better model found at epoch 18 with val_loss value: 0.5752172470092773.
19 0.807087 0.567187 0.857605
Better model found at epoch 19 with val_loss value: 0.5671872496604919.
20 0.784531 0.566082 0.857827
Better model found at epoch 20 with val_loss value: 0.5660821199417114.
Total time: 1:26:48
/home/pczapla/workspace/ulmfit-multilingual/data/mldoc/es-1/models/sp15k
Saving info /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/es-1/models/sp15k/lstm_nl4.m/info.json
Starting classifier training
epoch train_loss valid_loss accuracy
1 0.616963 0.275447 0.923000
Better model found at epoch 1 with val_loss value: 0.27544698119163513.
Total time: 00:24
epoch train_loss valid_loss accuracy
1 0.425890 0.201535 0.932000
Better model found at epoch 1 with val_loss value: 0.2015346735715866.
Total time: 00:27
epoch train_loss valid_loss accuracy
1 0.265563 0.186434 0.951000
Better model found at epoch 1 with val_loss value: 0.18643426895141602.
Total time: 00:32
epoch train_loss valid_loss accuracy
1 0.162097 0.180026 0.955000
Better model found at epoch 1 with val_loss value: 0.1800260841846466.
2 0.161748 0.187014 0.957000
3 0.142789 0.166486 0.961000
Better model found at epoch 3 with val_loss value: 0.1664857715368271.
4 0.105920 0.173207 0.963000
5 0.078164 0.184849 0.962000
6 0.070540 0.189451 0.962000
7 0.051490 0.208019 0.959000
8 0.047614 0.193699 0.962000
Total time: 05:20
Saving models at /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/es-1/models/sp15k/lstm_nl4.m
Loss and accuracy using (cls_best): [0.1623594, tensor(0.9538)]
0.16235940158367157
0.9537500143051147
```
### Larger dropout - no luck
```
python -m ulmfit cls --dataset-path data/mldoc/es-1 --base-lm-path data/wiki-m/es-100/models/sp30k/lstm_nl4.m --lang=es --name 'nl4-drop' --cuda-id=0 - train 0 --bs 20 --num-cls-epochs=8 --drop-mul-lm=0.5 --drop-mul-cls=0.8
Max vocab: 30000
Cache dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/es-1/models/sp30k
Model dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/es-1/models/sp30k/lstm_nl4-drop.m
Loading validation /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/es-1/es.dev.csv
Running tokenization...
Saving tokenized: cls.trn 13013, cls.val 1445
Running tokenization...
Saving tokenized: cls.trn 1000, cls.val 1000
Size of vocabulary: 30000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁de', '▁,', '▁la', '▁.', '▁en', '▁el', '▁y', 's', '▁a', '▁que']
Starting classifier training
epoch train_loss valid_loss accuracy
1 1.310594 0.903076 0.724000
Better model found at epoch 1 with val_loss value: 0.9030755758285522.
Total time: 00:22
epoch train_loss valid_loss accuracy
1 1.209348 0.714140 0.756000
Better model found at epoch 1 with val_loss value: 0.714139997959137.
Total time: 00:23
epoch train_loss valid_loss accuracy
1 1.122636 0.627526 0.797000
Better model found at epoch 1 with val_loss value: 0.6275263428688049.
Total time: 00:29
epoch train_loss valid_loss accuracy
1 1.102433 0.593338 0.801000
Better model found at epoch 1 with val_loss value: 0.5933384895324707.
2 1.096480 0.543266 0.818000
Better model found at epoch 2 with val_loss value: 0.5432664155960083.
3 1.082919 0.501089 0.837000
Better model found at epoch 3 with val_loss value: 0.5010889172554016.
4 1.069694 0.518807 0.812000
5 1.040208 0.508399 0.825000
6 1.032841 0.512187 0.838000
7 1.031225 0.504557 0.825000
8 1.016486 0.502335 0.837000
Total time: 04:56
Saving models at /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/es-1/models/sp30k/lstm_nl4-drop.m
Loss and accuracy using (cls_best): [0.52473265, tensor(0.8160)]
0.5247326493263245
0.8159999847412109
```
-76
View File
@@ -1,76 +0,0 @@
python -m ulmfit eval --glob="mldoc/*-1/models/sp15k/qrnn_nl4.m" --name nl4-8e-single --num-cls-epochs=8 --bs=18 --single=True
Max vocab: 15000
Cache dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/es-1/models/sp15k
Model dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/es-1/models/sp15k/qrnn_nl4-8e-single.m
Training
Loading validation /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/es-1/es.dev.csv
Data lm, trn: 13013, val: 1445
Data cls, trn: 1000, val: 1000
Data tst, trn: 1000, val: 4000
Size of vocabulary: 15000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁de', '▁,', '▁la', '▁.', 's', '▁en', '▁el', '▁y', '▁a', '▁que']
Training args: {'clip': 0.12, 'alpha': 2, 'beta': 1, 'drop_mult': 0.3} dps: {'output_p': 0.25, 'hidden_p': 0.1, 'input_p': 0.2, 'embed_p': 0.02, 'weight_p': 0.15}
/home/pczapla/anaconda3/envs/fastaiv1/lib/python3.7/site-packages/torch/utils/cpp_extension.py:152: UserWarning:
!! WARNING !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Your compiler (c++) may be ABI-incompatible with PyTorch!
Please use a compiler that is ABI-compatible with GCC 4.9 and above.
See https://gcc.gnu.org/onlinedocs/libstdc++/manual/abi.html.
See https://gist.github.com/goldsborough/d466f43e8ffc948ff92de7486c5216d6
for instructions on how to install GCC 4.9 or higher.
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! WARNING !!
warnings.warn(ABI_INCOMPATIBILITY_WARNING.format(compiler))
Loading pretrained model
Unknown tokens 0, first 100: []
/home/pczapla/workspace/ulmfit-multilingual/data/mldoc/es-1/models/sp15k
Saving info /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/es-1/models/sp15k/qrnn_nl4-8e-single.m/info.json
Starting classifier training
Single training schedule
epoch train_loss valid_loss accuracy
1 0.676591 0.205210 0.947000
2 0.402020 0.461279 0.912000
3 0.287975 0.496294 0.921000
4 0.258515 0.243489 0.954000
5 0.219352 0.274136 0.949000
6 0.149339 0.352294 0.956000
7 0.092821 0.378696 0.962000
8 0.055485 0.367379 0.963000
9 0.042695 0.367151 0.964000
10 0.034858 0.386749 0.961000
11 0.021245 0.392899 0.963000
Total time: 02:38
Saving models at /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/es-1/models/sp15k/qrnn_nl4-8e-single.m
Traceback (most recent call last):
File "/home/pczapla/anaconda3/envs/fastaiv1/lib/python3.7/runpy.py", line 193, in _run_module_as_main
"__main__", mod_spec)
File "/home/pczapla/anaconda3/envs/fastaiv1/lib/python3.7/runpy.py", line 85, in _run_code
exec(code, run_globals)
File "/home/pczapla/workspace/ulmfit-multilingual/ulmfit/__main__.py", line 73, in <module>
fire.Fire(ULMFiT())
File "/home/pczapla/anaconda3/envs/fastaiv1/lib/python3.7/site-packages/fire/core.py", line 127, in Fire
component_trace = _Fire(component, args, context, name)
File "/home/pczapla/anaconda3/envs/fastaiv1/lib/python3.7/site-packages/fire/core.py", line 366, in _Fire
component, remaining_args)
File "/home/pczapla/anaconda3/envs/fastaiv1/lib/python3.7/site-packages/fire/core.py", line 542, in _CallCallable
result = fn(*varargs, **kwargs)
File "/home/pczapla/workspace/ulmfit-multilingual/ulmfit/__main__.py", line 55, in eval
results[key] = params.train_cls(num_lm_epochs=num_lm_epochs, **trn_params)[1]
File "/home/pczapla/workspace/ulmfit-multilingual/ulmfit/train_clas.py", line 76, in train_cls
return self.validate_cls('cls_best', bs=bs, data_tst=data_tst, learn=learn)
File "/home/pczapla/workspace/ulmfit-multilingual/ulmfit/train_clas.py", line 84, in validate_cls
learn.load(save_name)
File "/home/pczapla/workspace/_oss/fastai/fastai/fastai/basic_train.py", line 243, in load
if purge: self.purge(clear_opt=ifnone(with_opt, False))
File "/home/pczapla/workspace/_oss/fastai/fastai/fastai/basic_train.py", line 293, in purge
self.opt = OptimWrapper.load_with_state_and_layer_group(state['opt'], self.layer_groups)
File "/home/pczapla/workspace/_oss/fastai/fastai/fastai/callback.py", line 130, in load_with_state_and_layer_group
res.load_state_dict(state['opt_state'])
File "/home/pczapla/anaconda3/envs/fastaiv1/lib/python3.7/site-packages/torch/optim/optimizer.py", line 108, in load_state_dict
raise ValueError("loaded state dict contains a parameter group "
ValueError: loaded state dict contains a parameter group that doesn't match the size of optimizer's group
-180
View File
@@ -1,180 +0,0 @@
# FR
## SP15k QRNN nl 4
```
python -m ulmfit lm --dataset-path data/wiki/${LANG}-100 --tokenizer='sp' --nl 4 --name 'nl4' --max-vocab 15000 --lang ${LANG} --qrnn=True - train 10 --bs=50 --drop_mult=0
Max vocab: 15000
Cache dir: data/wiki/fr-100/models/sp15k
Model dir: data/wiki/fr-100/models/sp15k/qrnn_nl4.m
Wiki text was split to 174227 articles
Wiki text was split to 491 articles
Running tokenization lm...
Data lm, trn: 174227, val: 491
Size of vocabulary: 15000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁de', '▁,', 's', '▁.', "'", '▁la', '▁le',
'▁et', '▁l', '▁à']
Training args: {'clip': 0.12, 'alpha': 2, 'beta': 1, 'drop_mult': 0} dps: {'output_p': 0.25, 'hidden_p': 0.1, 'input_p': 0.2, 'embed_p': 0.02, 'weight_p': 0.15}
Training lm from random weights
epoch train_loss valid_loss accuracy
1 2.881558 2.790402 0.465847
2 2.824942 2.732005 0.471660
3 2.758845 2.672040 0.478273
4 2.715069 2.602380 0.489159
5 2.677029 2.553575 0.494752
6 2.602514 2.476142 0.507337
7 2.564386 2.388670 0.518902
8 2.470835 2.304033 0.532000
9 2.366890 2.243269 0.542781
10 2.390439 2.223538 0.546622
Total time: 9:09:26
data/wiki/fr-100/models/sp15k
Saving info data/wiki/fr-100/models/sp15k/qrnn_nl4.m/info.json
```
## SP30k LSTM nl 4
### LM
```
python -m ulmfit lm --dataset-path data/wiki/fr-100 --cuda-id=1 --tokenizer='sp' --nl 4 --name 'nl4' --max-vocab 30000 \ ✘ 130
--lang fr --qrnn=False - train 10 --bs=50 --drop_mult=0
Max vocab: 30000
Cache dir: data/wiki/fr-100/models/sp30k
Model dir: data/wiki/fr-100/models/sp30k/lstm_nl4.m
Running tokenization
Wiki text was split to 113288 articles
Wiki text was split to 88 articles
Size of vocabulary: 30000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁de', '▁,', '▁.', "'", 's', '▁la', '▁le', '▁et', '▁l', '▁à']
Training args: {'tie_weights': True, 'clip': 0.12, 'bptt': 70, 'pretrained_fnames': None, 'pretrained_model': None, 'drop_mult': 0} dps: [0.25 0.1 0.2 0.02 0.15]
Training lm from random weights
epoch train_loss valid_loss accuracy
1 3.120035 3.449028 0.383274
2 3.070353 3.431372 0.382520
3 3.092097 3.406521 0.384604
4 3.035016 3.356502 0.391155
5 2.936505 3.297572 0.396365
6 2.926953 3.192980 0.407546
7 2.841542 3.115280 0.417741
8 2.805254 3.008793 0.429512
9 2.681713 2.944207 0.439959
10 2.644920 2.923765 0.442415
data/wiki/fr-100/models/sp30k
Saving info data/wiki/fr-100/models/sp30k/lstm_nl4.m/info.json
```
### MLDocs
#### First run
MultiCCA 92.05, ulmfit 93.90
```
python -m ulmfit cls --dataset-path data/mldoc/fr-1 --base-lm-path data/wiki/fr-100/models/sp30k/lstm_nl4.m --lang=fr --name 'nl4' --cuda-id=1 - train 20 --bs 40
Max vocab: 30000
Cache dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/fr-1/models/sp30k
Model dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/fr-1/models/sp30k/lstm_nl4.m
Loading validation /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/fr-1/fr.dev.csv
Running tokenization...
Saving tokenized: cls.trn 13500, cls.val 1500
Running tokenization...
Saving tokenized: cls.trn 1000, cls.val 1000
Size of vocabulary: 30000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁de', '▁,', '▁.', "'", 's', '▁la', '▁le', '▁et', '▁l', '▁à']
Training args: {'tie_weights': True, 'clip': 0.12, 'bptt': 70, 'pretrained_fnames': [PosixPath('/home/pczapla/workspace/ulmfit-multilingual/data/wiki/fr-100/models/sp30k/lstm_nl4.m/lm_best'), PosixPath('/home/pczapla/workspace/ulmfit-multilingual/data/wiki/fr-100/models/sp30k/lstm_nl4.m/../itos')], 'pretrained_model': None, 'drop_mult': 0.3} dps: [0.25 0.1 0.2 0.02 0.15]
Unknown tokens 0, first 100: []
Training lm from: [PosixPath('/home/pczapla/workspace/ulmfit-multilingual/data/wiki/fr-100/models/sp30k/lstm_nl4.m/lm_best'), PosixPath('/home/pczapla/workspace/ulmfit-multilingual/data/wiki/fr-100/models/sp30k/lstm_nl4.m/../itos')]
epoch train_loss valid_loss accuracy
1 3.072937 2.621444 0.468314
epoch train_loss valid_loss accuracy
1 2.737065 2.485359 0.486546
2 2.625827 2.353188 0.507669
3 2.408049 2.224600 0.527609
4 2.332804 2.113603 0.544255
5 2.242967 2.016229 0.560002
6 2.162170 1.925214 0.574050
7 2.094163 1.843778 0.587944
8 2.011285 1.773228 0.599802
9 1.931492 1.708201 0.611245
10 1.883735 1.643842 0.623145
11 1.793858 1.583394 0.635366
12 1.759305 1.526640 0.646132
13 1.741412 1.474198 0.657485
14 1.675670 1.430597 0.666407
15 1.624235 1.390453 0.674829
16 1.588415 1.359892 0.681364
17 1.594124 1.336594 0.686985
18 1.567758 1.322139 0.689745
19 1.536472 1.315883 0.690974
20 1.530144 1.314872 0.691084
/home/pczapla/workspace/ulmfit-multilingual/data/mldoc/fr-1/models/sp30k
Saving info /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/fr-1/models/sp30k/lstm_nl4.m/info.json
Starting classifier training
epoch train_loss valid_loss accuracy
1 0.528480 0.428756 0.853000
epoch train_loss valid_loss accuracy
1 0.365323 0.224117 0.928000
epoch train_loss valid_loss accuracy
1 0.300881 0.199623 0.936000
epoch train_loss valid_loss accuracy
1 0.217855 0.198016 0.937000
2 0.206357 0.212208 0.938000
Saving models at /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/fr-1/models/sp30k/lstm_nl4.m
Loss and accuracy using (cls_best): [0.18914989, tensor(0.9390)]
```
#### Second run
MultiCCA 92.05, ulmfit 93.67
```
python -m ulmfit cls --dataset-path data/mldoc/fr-1 --base-lm-path data/wiki/fr-100/models/sp30k/lstm_nl4.m --lang=fr --name 'nl4-2nd' --cuda-id=1 - train 20 --bs 40 --num-cls-epochs=8
Max vocab: 30000
Cache dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/fr-1/models/sp30k
Model dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/fr-1/models/sp30k/lstm_nl4-2nd.m
Loading validation /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/fr-1/fr.dev.csv
Tokenized data loaded, lm.trn 13500, lm.val 1500
Tokenized data loaded, cls.trn 1000, cls.val 1000
Size of vocabulary: 30000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁de', '▁,', '▁.', "'", 's', '▁la', '▁le', '▁et', '▁l', '▁à']
Training args: {'tie_weights': True, 'clip': 0.12, 'bptt': 70, 'pretrained_fnames': [PosixPath('/home/pczapla/workspace/ulmfit-multilingual/data/wiki/fr-100/models/sp30k/lstm_nl4.m/lm_best'), PosixPath('/home/pczapla/workspace/ulmfit-multilingual/data/wiki/fr-100/models/sp30k/lstm_nl4.m/../itos')], 'pretrained_model': None, 'drop_mult': 0.3} dps: [0.25 0.1 0.2 0.02 0.15]
Unknown tokens 0, first 100: []
Training lm from: [PosixPath('/home/pczapla/workspace/ulmfit-multilingual/data/wiki/fr-100/models/sp30k/lstm_nl4.m/lm_best'), PosixPath('/home/pczapla/workspace/ulmfit-multilingual/data/wiki/fr-100/models/sp30k/lstm_nl4.m/../itos')]
epoch train_loss valid_loss accuracy
1 3.080331 2.625329 0.467306
epoch train_loss valid_loss accuracy
1 2.750554 2.485271 0.486776
2 2.578659 2.353940 0.507637
3 2.422981 2.224983 0.527749
4 2.342781 2.113364 0.545006
5 2.254575 2.007775 0.560709
6 2.124016 1.920536 0.575680
7 2.068470 1.847463 0.586699
8 2.013289 1.775580 0.599840
9 1.929649 1.705369 0.612201
10 1.916013 1.646228 0.623175
11 1.825515 1.586714 0.634298
12 1.795780 1.529771 0.645840
13 1.725532 1.476651 0.656197
14 1.673942 1.429790 0.666030
15 1.639384 1.392116 0.674128
16 1.605681 1.359316 0.681356
17 1.560283 1.337794 0.686116
18 1.543926 1.323153 0.689276
19 1.531950 1.318164 0.690415
20 1.494068 1.316459 0.690586
/home/pczapla/workspace/ulmfit-multilingual/data/mldoc/fr-1/models/sp30k
Saving info /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/fr-1/models/sp30k/lstm_nl4-2nd.m/info.json
Starting classifier training
epoch train_loss valid_loss accuracy
1 0.537720 0.395818 0.886000
epoch train_loss valid_loss accuracy
1 0.332603 0.232112 0.930000
epoch train_loss valid_loss accuracy
1 0.267323 0.230307 0.927000
epoch train_loss valid_loss accuracy
1 0.216402 0.226042 0.930000
2 0.231040 0.232696 0.936000
3 0.182048 0.217882 0.934000
4 0.170389 0.212531 0.937000
5 0.148332 0.214293 0.937000
6 0.124968 0.210322 0.936000
7 0.117591 0.234207 0.936000
8 0.109146 0.218597 0.938000
Saving models at /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/fr-1/models/sp30k/lstm_nl4-2nd.m
Loss and accuracy using (cls_best): [0.21502711, tensor(0.9367)]
```
-106
View File
@@ -1,106 +0,0 @@
# FR
## SP15k QRNN NL4
### LM
```
export CUDA_VISIBLE_DEVICES=0
LANG=it
python -m ulmfit lm --dataset-path data/wiki/${LANG}-100 --tokenizer='sp' --nl 4 --name 'nl4' --max-vocab 15000 --lang ${LANG} --qrnn=True - train 10 --bs=50 --drop_mult=0
epoch train_loss valid_loss accuracy
1 3.171145 3.516659 0.359233
2 3.045057 3.472802 0.359628
3 3.023009 3.401181 0.367101
4 2.985105 3.351916 0.372709
5 2.858441 3.280903 0.380848
6 2.862504 3.210976 0.390263
7 2.758775 3.122354 0.402106
8 2.683234 3.035321 0.413798
9 2.593757 2.964551 0.424886
10 2.535500 2.947672 0.427958
Total time: 11:30:03
data/wiki/it-100/models/sp15k
Saving info data/wiki/it-100/models/sp15k/qrnn_nl4.m/info.json
```
## xx
## SP30k LSTM nl 4
### LM
```
python -m ulmfit lm --dataset-path data/wiki/it-100 --lang=it --bidir=False --qrnn=False --max-vocab 30000 --nl 4 --tokenizer=sp --name 'nl4bs100' - train 10 --bs 100 --dropout-mult=0
Wiki text was split to 164583 articles
Wiki text was split to 98 articles
Size of vocabulary: 30000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁,', '▁.', '▁di', "▁&'", "'", '▁e', '▁il', '▁la', 'e', '▁in']
Training args: {'tie_weights': True, 'clip': 0.12, 'bptt': 70, 'pretrained_fnames': None, 'pretrained_model': None, 'drop_mult': 0.0} dps: [0.25 0.1 0.2 0.02 0.15]
Training lm from random weights
epoch train_loss valid_loss accuracy
1 3.306743 3.717148 0.353641
2 3.126413 3.606443 0.360839
3 3.062586 3.545493 0.365721
4 3.055600 3.474823 0.373451
5 2.927211 3.406635 0.380311
6 2.924096 3.321370 0.389487
7 2.779998 3.233350 0.399968
8 2.722100 3.147745 0.410365
9 2.615910 3.087420 0.419097
10 2.565747 3.075364 0.420906
data/wiki/it-100/models/sp30k
Saving info data/wiki/it-100/models/sp30k/lstm_nl4bs100.m/info.json
```
### MLDoc
MultiCCA: 85.55%, ULMFiT 88.42%
```
python -m ulmfit cls --dataset-path data/mldoc/it-1 --base-lm-path data/wiki/it-100/models/sp30k/lstm_nl4bs100.m --lang=it --name 'nl4bs100' --cuda-id=1 - train 20 --bs 40 --num-cls-epochs=2
Max vocab: 30000
Cache dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/it-1/models/sp30k
Model dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/it-1/models/sp30k/lstm_nl4bs100.m
Loading validation /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/it-1/it.dev.csv
Running tokenization...
Saving tokenized: cls.trn 13500, cls.val 1500
Running tokenization...
Saving tokenized: cls.trn 1000, cls.val 1000
Size of vocabulary: 30000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁,', '▁.', '▁di', "▁&'", "'", '▁e', '▁il', '▁la', 'e', '▁in']
Training args: {'tie_weights': True, 'clip': 0.12, 'bptt': 70, 'pretrained_fnames': [PosixPath('/home/pczapla/workspace/ulmfit-multilingual/data/wiki/it-100/models/sp30k/lstm_nl4bs100.m/lm_best'), PosixPath('/home/pczapla/workspace/ulmfit-multilingual/data/wiki/it-100/models/sp30k/lstm_nl4bs100.m/../itos')], 'pretrained_model': None, 'drop_mult': 0.3} dps: [0.25 0.1 0.2 0.02 0.15]
Unknown tokens 0, first 100: []
Training lm from: [PosixPath('/home/pczapla/workspace/ulmfit-multilingual/data/wiki/it-100/models/sp30k/lstm_nl4bs100.m/lm_best'), PosixPath('/home/pczapla/workspace/ulmfit-multilingual/data/wiki/it-100/models/sp30k/lstm_nl4bs100.m/../itos')]
epoch train_loss valid_loss accuracy
1 2.826957 2.518636 0.492175
epoch train_loss valid_loss accuracy
1 2.606302 2.397623 0.509596
2 2.470586 2.260363 0.531301
3 2.334087 2.113640 0.554089
4 2.176830 1.988222 0.572687
5 2.123101 1.869944 0.591537
6 2.011187 1.770606 0.606682
7 1.934953 1.676852 0.622504
8 1.889363 1.592609 0.637525
9 1.774590 1.517665 0.652233
10 1.725905 1.435543 0.666759
11 1.670903 1.365167 0.681168
12 1.610080 1.302561 0.694462
13 1.522876 1.242124 0.708201
14 1.478528 1.193259 0.718366
15 1.423993 1.150854 0.728324
16 1.389901 1.115550 0.735836
17 1.365959 1.094267 0.740730
18 1.347579 1.079465 0.744019
19 1.321906 1.074090 0.745281
20 1.332676 1.073143 0.745453
/home/pczapla/workspace/ulmfit-multilingual/data/mldoc/it-1/models/sp30k
Saving info /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/it-1/models/sp30k/lstm_nl4bs100.m/info.json
Starting classifier training
epoch train_loss valid_loss accuracy
1 0.632703 0.463210 0.831000
epoch train_loss valid_loss accuracy
1 0.527650 0.390041 0.858000
epoch train_loss valid_loss accuracy
1 0.436223 0.326409 0.871000
epoch train_loss valid_loss accuracy
1 0.361738 0.321380 0.875000
2 0.340658 0.315946 0.877000
Saving models at /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/it-1/models/sp30k/lstm_nl4bs100.m
Loss and accuracy using (cls_best): [0.32998973, tensor(0.8842)]
```
-456
View File
@@ -1,456 +0,0 @@
# JA
## SP30k LSTM nl 4
### LM
```
python -m ulmfit lm --dataset-path data/wiki/ja-100 --cuda-id=0 --tokenizer='sp' --nl 4 --name 'nl4' --max-vocab 30000 \
--lang ja --qrnn=False - train 10 --bs=50 --drop_mult=0
Max vocab: 30000
Cache dir: data/wiki/ja-100/models/sp30k
Model dir: data/wiki/ja-100/models/sp30k/lstm_nl4.m
Running tokenization
Wiki text was split to 98375 articles
Wiki text was split to 138 articles
Size of vocabulary: 30000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁、', '▁の', '▁。', '▁に', '▁を', '▁は', '▁年', '▁が', '▁)', '▁(']
Training args: {'tie_weights': True, 'clip': 0.12, 'bptt': 70, 'pretrained_fnames': None, 'pretrained_model': None, 'drop_mult': 0} dps: [0.25 0.1 0.2 0.02 0.15]
Training lm from random weights
epoch train_loss valid_loss accuracy
1 3.211025 3.328014 0.396197
2 3.119410 3.286294 0.395946
3 3.042064 3.247161 0.403915
4 3.023840 3.161323 0.413816
5 2.944752 3.102044 0.423163
6 2.907167 3.015610 0.434095
7 2.796073 2.927566 0.447088
8 2.715568 2.828766 0.461556
9 2.717255 2.747889 0.473289
10 2.619846 2.731164 0.477403
data/wiki/ja-100/models/sp30k
Saving info data/wiki/ja-100/models/sp30k/lstm_nl4.m/info.json
```
### MLDoc
#### CLS 1
MultiCCA 85.35%, ULMFiT 89.20%
```
python -m ulmfit cls --dataset-path data/mldoc/ja-1 --base-lm-path data/wiki/ja-100/models/sp30k/lstm_nl4.m --lang=ja --name 'nl4' --cuda-id=1 - train 20 --bs 40 --num-cls-epochs=8
Max vocab: 30000
Cache dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ja-1/models/sp30k
Model dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ja-1/models/sp30k/lstm_nl4.m
Loading validation /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ja-1/ja.dev.csv
Running tokenization...
Saving tokenized: cls.trn 13500, cls.val 1500
Running tokenization...
Saving tokenized: cls.trn 1000, cls.val 1000
Size of vocabulary: 30000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁、', '▁の', '▁。', '▁に', '▁を', '▁は', '▁年', '▁が', '▁)', '▁(']
Training args: {'tie_weights': True, 'clip': 0.12, 'bptt': 70, 'pretrained_fnames': [PosixPath('/home/pczapla/workspace/ulmfit-multilingual/data/wiki/ja-100/models/sp30k/lstm_nl4.m/lm_best'), PosixPath('/home/pczapla/workspace/ulmfit-multilingual/data/wiki/ja-100/models/sp30k/lstm_nl4.m/../itos')], 'pretrained_model': None, 'drop_mult': 0.3} dps: [0.25 0.1 0.2 0.02 0.15]
Unknown tokens 0, first 100: []
Training lm from: [PosixPath('/home/pczapla/workspace/ulmfit-multilingual/data/wiki/ja-100/models/sp30k/lstm_nl4.m/lm_best'), PosixPath('/home/pczapla/workspace/ulmfit-multilingual/data/wiki/ja-100/models/sp30k/lstm_nl4.m/../itos')]
epoch train_loss valid_loss accuracy
1 2.828645 2.386208 0.518716
epoch train_loss valid_loss accuracy
1 2.462274 2.191761 0.549783
2 2.229925 1.982564 0.586238
3 2.043816 1.805435 0.616238
4 1.885779 1.674736 0.637964
5 1.773445 1.575366 0.653925
6 1.713029 1.490263 0.667570
7 1.660558 1.419641 0.680072
8 1.579792 1.357093 0.690826
9 1.459628 1.298609 0.701452
10 1.433604 1.251296 0.710232
11 1.439143 1.202794 0.719104
12 1.399083 1.158469 0.728430
13 1.310390 1.120877 0.736382
14 1.322389 1.085479 0.744013
15 1.272924 1.056051 0.750401
16 1.235312 1.034233 0.755225
17 1.227864 1.016682 0.759288
18 1.209589 1.007038 0.761234
19 1.173158 1.001694 0.762281
20 1.189994 1.000854 0.762526
/home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ja-1/models/sp30k
Saving info /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ja-1/models/sp30k/lstm_nl4.m/info.json
Starting classifier training
epoch train_loss valid_loss accuracy
1 0.745803 0.554439 0.819000
epoch train_loss valid_loss accuracy
1 0.620647 0.392026 0.856000
epoch train_loss valid_loss accuracy
1 0.489173 0.369560 0.869000
epoch train_loss valid_loss accuracy
1 0.406491 0.365988 0.872000
2 0.392645 0.351823 0.876000
3 0.386403 0.331737 0.880000
4 0.361338 0.333245 0.882000
5 0.319456 0.347253 0.879000
6 0.295419 0.350348 0.885000
7 0.286144 0.348592 0.879000
8 0.278896 0.358145 0.877000
Saving models at /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ja-1/models/sp30k/lstm_nl4.m
Loss and accuracy using (cls_best): [0.29789856, tensor(0.8920)]
$ mv /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ja-1/models/sp30k/lstm_nl4.m /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ja-1/models/sp30k/lstm_nl4x8.m
$ python -m ulmfit eval --glob="mldoc/ja-1/models/sp30k/lstm_nl4x8.m" --name nl4 --cuda-id=0
Max vocab: 30000
Cache dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ja-1/models/sp30k
Model dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ja-1/models/sp30k/lstm_nl4.m
Training
Loading validation /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ja-1/ja.dev.csv
Tokenized data loaded, lm.trn 13500, lm.val 1500
Tokenized data loaded, cls.trn 1000, cls.val 1000
Size of vocabulary: 30000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁、', '▁の', '▁。', '▁に', '▁を', '▁は', '▁年', '▁が', '▁)', '▁(']
Training args: {'tie_weights': True, 'clip': 0.12, 'bptt': 70, 'pretrained_fnames': [PosixPath('/home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ja-1/models/sp30k/lstm_nl4x8.m/lm_best'), PosixPath('/home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ja-1/models/sp30k/lstm_nl4x8.m/../itos')], 'pretrained_model': None, 'alpha': 2, 'beta': 1, 'drop_mult': 0.3} dps: [0.25 0.1 0.2 0.02 0.15]
Unknown tokens 0, first 100: []
/home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ja-1/models/sp30k
Saving info /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ja-1/models/sp30k/lstm_nl4.m/info.json
Starting classifier training
epoch train_loss valid_loss accuracy
1 0.757615 0.562652 0.825000
epoch train_loss valid_loss accuracy
1 0.609298 0.382412 0.870000
epoch train_loss valid_loss accuracy
1 0.544682 0.379602 0.871000
epoch train_loss valid_loss accuracy
1 0.435453 0.360421 0.885000
2 0.426099 0.350480 0.885000
Saving models at /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ja-1/models/sp30k/lstm_nl4.m
Loss and accuracy using (cls_best): [0.32738593, tensor(0.8905)]
OrderedDict([('data/mldoc/ja-1/models/sp30k/lstm_nl4.m', 0.890500009059906)])
python -m ulmfit eval --glob="mldoc/ja-1/models/sp30k/lstm_nl4x8.m" --name nl4x2 --cuda-id=0
Max vocab: 30000
Cache dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ja-1/models/sp30k
Model dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ja-1/models/sp30k/lstm_nl4x2.m
Training
Loading validation /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ja-1/ja.dev.csv
Tokenized data loaded, lm.trn 13500, lm.val 1500
Tokenized data loaded, cls.trn 1000, cls.val 1000
Size of vocabulary: 30000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁、', '▁の', '▁。', '▁に', '▁を', '▁は', '▁年', '▁が', '▁)', '▁(']
Training args: {'tie_weights': True, 'clip': 0.12, 'bptt': 70, 'pretrained_fnames': [PosixPath('/home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ja-1/models/sp30k/lstm_nl4x8.m/lm_best'), PosixPath('/home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ja-1/models/sp30k/lstm_nl4x8.m/../itos')], 'pretrained_model': None, 'alpha': 2, 'beta': 1, 'drop_mult': 0.3} dps: [0.25 0.1 0.2 0.02 0.15]
Unknown tokens 0, first 100: []
/home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ja-1/models/sp30k
Saving info /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ja-1/models/sp30k/lstm_nl4x2.m/info.json
Starting classifier training
epoch train_loss valid_loss accuracy
1 0.778722 0.690746 0.805000
epoch train_loss valid_loss accuracy
1 0.574789 0.386483 0.862000
epoch train_loss valid_loss accuracy
1 0.518843 0.361983 0.869000
epoch train_loss valid_loss accuracy
1 0.435260 0.350808 0.869000
2 0.386701 0.352221 0.875000
Saving models at /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ja-1/models/sp30k/lstm_nl4x2.m
Loss and accuracy using (cls_best): [0.31783763, tensor(0.8892)]
OrderedDict([('data/mldoc/ja-1/models/sp30k/lstm_nl4x2.m', 0.8892499804496765)])
```
### JA on 100 elements
```
python -m ulmfit cls --dataset-path data/mldoc/ja-1 --base-lm-path data/wiki/ja-100/models/sp30k/lstm_nl4.m --lang=ja --name 'nl4-100' --cuda-id=1 - train 20 --bs 40 --num-cls-epochs=8 --limit=100
Max vocab: 30000
Cache dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ja-1/models/sp30k
Model dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ja-1/models/sp30k/lstm_nl4-100.m
Loading validation /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ja-1/ja.dev.csv
Tokenized data loaded, lm.trn 13500, lm.val 1500
Limiting data set to: 100
Running tokenization...
Saving tokenized: cls.trn 100, cls.val 100
Size of vocabulary: 30000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁、', '▁の', '▁。', '▁に', '▁を', '▁は', '▁年', '▁が', '▁)', '▁(']
Training args: {'tie_weights': True, 'clip': 0.12, 'bptt': 70, 'pretrained_fnames': [PosixPath('/home/pczapla/workspace/ulmfit-multilingual/data/wiki/ja-100/models/sp30k/lstm_nl4.m/lm_best'), PosixPath('/home/pczapla/workspace/ulmfit-multilingual/data/wiki/ja-100/models/sp30k/lstm_nl4.m/../itos')], 'pretrained_model': None, 'drop_mult': 0.3} dps: [0.25 0.1 0.2 0.02 0.15]
Unknown tokens 0, first 100: []
Training lm from: [PosixPath('/home/pczapla/workspace/ulmfit-multilingual/data/wiki/ja-100/models/sp30k/lstm_nl4.m/lm_best'), PosixPath('/home/pczapla/workspace/ulmfit-multilingual/data/wiki/ja-100/models/sp30k/lstm_nl4.m/../itos')]
epoch train_loss valid_loss accuracy
1 2.837937 2.387255 0.518590
epoch train_loss valid_loss accuracy
1 2.466900 2.193583 0.549492
2 2.232762 1.983981 0.586658
3 2.026505 1.810167 0.615649
4 1.918111 1.679784 0.636613
5 1.748909 1.577095 0.653108
6 1.708709 1.491436 0.667657
7 1.640415 1.420449 0.679619
8 1.577434 1.359511 0.690194
9 1.551961 1.302819 0.700306
10 1.475623 1.252393 0.710039
11 1.435565 1.208159 0.718740
12 1.354910 1.161781 0.727927
13 1.351157 1.123244 0.736009
14 1.299070 1.086383 0.743896
15 1.258739 1.055745 0.750383
16 1.210775 1.035209 0.754965
17 1.228421 1.018373 0.758963
18 1.179444 1.007714 0.761158
19 1.197443 1.003041 0.762068
20 1.163223 1.001939 0.762211
/home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ja-1/models/sp30k
Saving info /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ja-1/models/sp30k/lstm_nl4-100.m/info.json
Starting classifier training
epoch train_loss valid_loss accuracy
1 1.269222 1.360420 0.340000
epoch train_loss valid_loss accuracy
1 0.969350 1.314497 0.400000
epoch train_loss valid_loss accuracy
1 0.832396 1.263416 0.550000
epoch train_loss valid_loss accuracy
1 0.780991 1.225439 0.600000
2 0.765755 1.183010 0.600000
3 0.749420 1.139053 0.600000
4 0.731800 1.093319 0.610000
5 0.711152 1.054695 0.610000
6 0.694611 1.029465 0.580000
7 0.680276 1.004366 0.580000
8 0.668421 0.984848 0.590000
Saving models at /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ja-1/models/sp30k/lstm_nl4-100.m
Loss and accuracy using (cls_best): [0.81621724, tensor(0.7437)]
```
### Japanese fixed sentence piece
```
python -m ulmfit cls --dataset-path data/mldoc/ja-1 --base-lm-path data/mldoc/ja-1/models/bsp30k/lstm_nl4.m --lang=ja --name 'nl4' --cuda-id=0 - train 1 --bs 40 --num-cls-epochs=2
Max vocab: 30000
Cache dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ja-1/models/sp30k
Model dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ja-1/models/sp30k/lstm_nl4.m
Loading validation /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ja-1/ja.dev.csv
Tokenized data loaded, lm.trn 13500, lm.val 1500
Tokenized data loaded, cls.trn 1000, cls.val 1000
Size of vocabulary: 30000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁、', '▁の', '▁。', '▁に', '▁を', '▁は', '▁年', '▁が', '▁)', '▁(']
Training args: {'tie_weights': True, 'clip': 0.12, 'bptt': 70, 'pretrained_fnames': [PosixPath('/home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ja-1/models/bsp30k/lstm_nl4.m/lm_best'), PosixPath('/home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ja-1/models/bsp30k/lstm_nl4.m/../itos')], 'pretrained_model': None, 'alpha': 2, 'beta': 1, 'drop_mult': 0.3} dps: [0.25 0.1 0.2 0.02 0.15]
Unknown tokens 0, first 100: []
Training lm from: [PosixPath('/home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ja-1/models/bsp30k/lstm_nl4.m/lm_best'), PosixPath('/home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ja-1/models/bsp30k/lstm_nl4.m/../itos')]
epoch train_loss valid_loss accuracy
1 1.222162 0.986234 0.765830
epoch train_loss valid_loss accuracy
1 1.237291 0.983976 0.766659
/home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ja-1/models/sp30k
Saving info /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ja-1/models/sp30k/lstm_nl4.m/info.json
Starting classifier training
epoch train_loss valid_loss accuracy
1 0.759230 0.619306 0.826000
epoch train_loss valid_loss accuracy
1 0.599281 0.423162 0.841000
epoch train_loss valid_loss accuracy
1 0.485808 0.360609 0.869000
epoch train_loss valid_loss accuracy
1 0.415960 0.390202 0.872000
2 0.371651 0.365374 0.876000
Saving models at /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ja-1/models/sp30k/lstm_nl4.m
Loss and accuracy using (cls_best): [0.330675, tensor(0.8873)]
0.33067500591278076
0.8872500061988831
(fastaiv1) pczapla@galatea ~/w/ulmfit-multilingual ❯❯❯ python -m ulmfit eval --glob="mldoc/ja-1/models/sp30k/lstm_nl4.m" --name nl4-2nd --cuda-id=0
Max vocab: 30000
Cache dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ja-1/models/sp30k
Model dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ja-1/models/sp30k/lstm_nl4-2nd.m
Training
Loading validation /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ja-1/ja.dev.csv
Tokenized data loaded, lm.trn 13500, lm.val 1500
Tokenized data loaded, cls.trn 1000, cls.val 1000
Size of vocabulary: 30000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁、', '▁の', '▁。', '▁に', '▁を', '▁は', '▁年', '▁が', '▁)', '▁(']
Training args: {'tie_weights': True, 'clip': 0.12, 'bptt': 70, 'pretrained_fnames': [PosixPath('/home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ja-1/models/sp30k/lstm_nl4.m/lm_best'), PosixPath('/home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ja-1/models/sp30k/lstm_nl4.m/../itos')], 'pretrained_model': None, 'alpha': 2, 'beta': 1, 'drop_mult': 0.3} dps: [0.25 0.1 0.2 0.02 0.15]
Unknown tokens 0, first 100: []
/home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ja-1/models/sp30k
Saving info /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ja-1/models/sp30k/lstm_nl4-2nd.m/info.json
Starting classifier training
epoch train_loss valid_loss accuracy
1 0.844110 0.700549 0.743000
epoch train_loss valid_loss accuracy
1 0.610796 0.400912 0.853000
epoch train_loss valid_loss accuracy
1 0.449974 0.358793 0.870000
epoch train_loss valid_loss accuracy
1 0.407609 0.397678 0.868000
2 0.367383 0.373168 0.869000
Saving models at /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ja-1/models/sp30k/lstm_nl4-2nd.m
Loss and accuracy using (cls_best): [0.33044776, tensor(0.8863)]
OrderedDict([('data/mldoc/ja-1/models/sp30k/lstm_nl4-2nd.m',
0.8862500190734863)])
```
```
python -m ulmfit cls --dataset-path data/mldoc/ja-1 --base-lm-path data/mldoc/ja-1/models/bsp30k/lstm_nl4.m --lang=ja --name '2nd-nl4' --cuda-id=0 - train 1 --bs 40 --num-cls-epochs=2
Max vocab: 30000
Cache dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ja-1/models/sp30k
Model dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ja-1/models/sp30k/lstm_2nd-nl4.m
Loading validation /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ja-1/ja.dev.csv
Tokenized data loaded, lm.trn 13500, lm.val 1500
Tokenized data loaded, cls.trn 1000, cls.val 1000
Size of vocabulary: 30000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁、', '▁の', '▁。', '▁に', '▁を', '▁は', '▁年', '▁が', '▁)', '▁(']
Training args: {'tie_weights': True, 'clip': 0.12, 'bptt': 70, 'pretrained_fnames': [PosixPath('/home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ja-1/models/bsp30k/lstm_nl4.m/lm_best'), PosixPath('/home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ja-1/models/bsp30k/lstm_nl4.m/../itos')], 'pretrained_model': None, 'alpha': 2, 'beta': 1, 'drop_mult': 0.3} dps: [0.25 0.1 0.2 0.02 0.15]
Unknown tokens 0, first 100: []
Training lm from: [PosixPath('/home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ja-1/models/bsp30k/lstm_nl4.m/lm_best'), PosixPath('/home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ja-1/models/bsp30k/lstm_nl4.m/../itos')]
epoch train_loss valid_loss accuracy
1 1.208774 0.984775 0.766183
epoch train_loss valid_loss accuracy
1 1.198147 0.984786 0.766730
/home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ja-1/models/sp30k
Saving info /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ja-1/models/sp30k/lstm_2nd-nl4.m/info.json
Starting classifier training
epoch train_loss valid_loss accuracy
1 0.735084 0.613895 0.803000
epoch train_loss valid_loss accuracy
1 0.550159 0.406097 0.867000
epoch train_loss valid_loss accuracy
1 0.468788 0.404081 0.862000
epoch train_loss valid_loss accuracy
1 0.395969 0.380797 0.870000
2 0.349470 0.386497 0.866000
Saving models at /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ja-1/models/sp30k/lstm_2nd-nl4.m
Loss and accuracy using (cls_best): [0.32550755, tensor(0.8857)]
0.3255075514316559
0.8857499957084656
```
```bash
python -m ulmfit cls --dataset-path data/mldoc/ja-1 --base-lm-path data/mldoc/ja-1/models/bsp30k/lstm_nl4.m --lang=ja --name '3nd-nl4' --cuda-id=0 - train 0 --bs 40 --num-cls-epochs=2
Max vocab: 30000
Cache dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ja-1/models/sp30k
Model dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ja-1/models/sp30k/lstm_3nd-nl4.m
Loading validation /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ja-1/ja.dev.csv
Tokenized data loaded, lm.trn 13500, lm.val 1500
Tokenized data loaded, cls.trn 1000, cls.val 1000
Size of vocabulary: 30000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁、', '▁の', '▁。', '▁に', '▁を', '▁は', '▁年', '▁が', '▁)', '▁(']
Training args: {'tie_weights': True, 'clip': 0.12, 'bptt': 70, 'pretrained_fnames': [PosixPath('/home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ja-1/models/bsp30k/lstm_nl4.m/lm_best'), PosixPath('/home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ja-1/models/bsp30k/lstm_nl4.m/../itos')], 'pretrained_model': None, 'alpha': 2, 'beta': 1, 'drop_mult': 0.3} dps: [0.25 0.1 0.2 0.02 0.15]
Unknown tokens 0, first 100: []
/home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ja-1/models/sp30k
Saving info /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ja-1/models/sp30k/lstm_3nd-nl4.m/info.json
Starting classifier training
epoch train_loss valid_loss accuracy
1 0.777661 0.617013 0.786000
epoch train_loss valid_loss accuracy
1 0.603897 0.388985 0.867000
epoch train_loss valid_loss accuracy
1 0.510845 0.374942 0.874000
epoch train_loss valid_loss accuracy
1 0.468642 0.379503 0.872000
2 0.430415 0.365797 0.880000
Saving models at /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ja-1/models/sp30k/lstm_3nd-nl4.m
Loss and accuracy using (cls_best): [0.33084384, tensor(0.8882)]
0.33084383606910706
0.8882499933242798
python -m ulmfit cls --dataset-path data/mldoc/ja-1 --base-lm-path data/mldoc/ja-1/models/bsp30k/lstm_nl4.m --lang=ja --tokenizer=bsp --name '3nd-nl4' --cuda-id=0 - train 0 --bs 40 --num-cls-epochs=2
Max vocab: 30000
Cache dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ja-1/models/bsp30k
Model dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ja-1/models/bsp30k/lstm_3nd-nl4.m
Loading validation /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ja-1/ja.dev.csv
Tokenized data loaded, lm.trn 13500, lm.val 1500
Tokenized data loaded, cls.trn 1000, cls.val 1000
Size of vocabulary: 30000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁、', '▁の', '▁。', '▁に', '▁を', '▁は', '▁年', '▁が', '▁)', '▁(']
Training args: {'tie_weights': True, 'clip': 0.12, 'bptt': 70, 'pretrained_fnames': [PosixPath('/home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ja-1/models/bsp30k/lstm_nl4.m/lm_best'), PosixPath('/home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ja-1/models/bsp30k/lstm_nl4.m/../itos')], 'pretrained_model': None, 'alpha': 2, 'beta': 1, 'drop_mult': 0.3} dps: [0.25 0.1 0.2 0.02 0.15]
Unknown tokens 0, first 100: []
/home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ja-1/models/bsp30k
Saving info /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ja-1/models/bsp30k/lstm_3nd-nl4.m/info.json
Starting classifier training
epoch train_loss valid_loss accuracy
1 0.824216 0.604706 0.825000
epoch train_loss valid_loss accuracy
1 0.606317 0.409647 0.854000
epoch train_loss valid_loss accuracy
1 0.500782 0.381826 0.862000
epoch train_loss valid_loss accuracy
1 0.403516 0.366863 0.866000
2 0.394599 0.357580 0.874000
Saving models at /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ja-1/models/bsp30k/lstm_3nd-nl4.m
Loss and accuracy using (cls_best): [0.32903105, tensor(0.8848)]
0.3290310502052307
0.8847500085830688
python -m ulmfit cls --dataset-path data/mldoc/ja-1 --base-lm-path data/mldoc/ja-1/models/bsp30k/lstm_nl4.m --lang=ja --tokenizer=bsp --name '3nd-nl4' --cuda-id=0 - train 0 --bs 40 --num-cls-epochs=2
Max vocab: 30000
Cache dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ja-1/models/bsp30k
Model dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ja-1/models/bsp30k/lstm_3nd-nl4.m
Loading validation /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ja-1/ja.dev.csv
Tokenized data loaded, lm.trn 13500, lm.val 1500
Tokenized data loaded, cls.trn 1000, cls.val 1000
Size of vocabulary: 30000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁、', '▁の', '▁。', '▁に', '▁を', '▁は', '▁年', '▁が', '▁)', '▁(']
Loading last classifier
Starting classifier training
epoch train_loss valid_loss accuracy
1 0.460803 0.451998 0.855000
epoch train_loss valid_loss accuracy
1 0.460069 0.421900 0.867000
epoch train_loss valid_loss accuracy
1 0.361791 0.447982 0.859000
epoch train_loss valid_loss accuracy
1 0.301233 0.404477 0.868000
2 0.269350 0.406427 0.870000
Saving models at /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ja-1/models/bsp30k/lstm_3nd-nl4.m
Loss and accuracy using (cls_best): [0.34159982, tensor(0.8925)]
0.34159982204437256
0.8924999833106995
```
## SP60k
```
python -m ulmfit lm --dataset-path data/wiki/ja-100 --cuda-id=1 --tokenizer='sp' --nl 4 --name 'nl4' --max-vocab 60000 \
--lang ja --qrnn=False - train 10 --bs=50 --drop_mult=0
Running tokenization
Wiki text was split to 98375 articles
Wiki text was split to 138 articles
Size of vocabulary: 60000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁、', '▁の', '▁。', '▁に', '▁を', '▁は', '▁年', '▁が', '▁)', '▁(']
Training args: {'tie_weights': True, 'clip': 0.12, 'bptt': 70, 'pretrained_fnames': None, 'pretrained_model': None, 'alpha': 2, 'beta': 1, 'drop_mult': 0} dps: [0.25 0.1 0.2 0.02 0.15]
Training lm from random weights
epoch train_loss valid_loss accuracy
1 3.557822 3.682454 0.366108
2 3.377493 3.614226 0.369889
3 3.391634 3.562171 0.377114
4 3.328160 3.497388 0.385236
5 3.290285 3.424971 0.394655
6 3.159867 3.337317 0.407095
7 3.139091 3.250999 0.417750
8 3.103923 3.153146 0.433443
9 2.979789 3.092179 0.443405
10 2.984099 3.077171 0.446887
data/wiki/ja-100/models/sp60k
Saving info data/wiki/ja-100/models/sp60k/lstm_nl4.m/info.json
```
## MLDoc
````bash
python -m ulmfit cls --dataset-path data/mldoc/ja-1 --base-lm-path data/wiki/ja-100/models/sp60k/lstm_nl4.m --lang=ja --name 'nl4' --cuda-id=1 - train 20 --bs 40 --num-cls-epochs=2
Max vocab: 60000
Cache dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ja-1/models/sp60k
Model dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ja-1/models/sp60k/lstm_nl4.m
Loading validation /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ja-1/ja.dev.csv
Tokenized data loaded, lm.trn 13500, lm.val 1500
Running tokenization...
Saving tokenized: cls.trn 1000, cls.val 1000
Size of vocabulary: 60000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁、', '▁の', '▁。', '▁に', '▁を', '▁は', '▁年', '▁が', '▁)', '▁(']
Training args: {'tie_weights': True, 'clip': 0.12, 'bptt': 70, 'pretrained_fnames': [PosixPath('/home/pczapla/workspace/ulmfit-multilingual/data/wiki/ja-100/models/sp60k/lstm_nl4.m/lm_best'), PosixPath('/home/pczapla/workspace/ulmfit-multilingual/data/wiki/ja-100/models/sp60k/lstm_nl4.m/../itos')], 'pretrained_model': None, 'alpha': 2, 'beta': 1, 'drop_mult': 0.3} dps: [0.25 0.1 0.2 0.02 0.15]
Unknown tokens 0, first 100: []
Training lm from: [PosixPath('/home/pczapla/workspace/ulmfit-multilingual/data/wiki/ja-100/models/sp60k/lstm_nl4.m/lm_best'), PosixPath('/home/pczapla/workspace/ulmfit-multilingual/data/wiki/ja-100/models/sp60k/lstm_nl4.m/../itos')]
epoch train_loss valid_loss accuracy
1 3.019972 2.548868 0.503754
epoch train_loss valid_loss accuracy
1 2.643698 2.363415 0.532341
2 2.403588 2.149524 0.567359
3 2.218298 1.969651 0.597484
4 2.059648 1.829897 0.619758
5 1.941803 1.722339 0.636215
6 1.862969 1.630191 0.650293
7 1.796515 1.551929 0.663782
8 1.727768 1.481659 0.675489
9 1.667709 1.417764 0.687287
10 1.606343 1.357994 0.697264
11 1.553344 1.303901 0.707811
12 1.539182 1.251784 0.718038
Traceback (most recent call last):
````
File diff suppressed because it is too large Load Diff
-39
View File
@@ -1,39 +0,0 @@
# Multifit Best results after label smoothing
| | de-1 | en-1 | es-1 | fr-1 | it-1 | ja-1 | ru-1 | zh-1|
|-----|-------|-------|-------|-------|-------|-------|-------|------|
|best | 95.90 | 95.17 | 96.07 | 94.75 | 90.25 | 90.03 | 87.65 | 92.52|
|max | 95.90 | 95.55 | 96.07 | 94.75 | 90.38 | 90.03 | 87.65 | 92.52|
|avg | 95.77 | 95.27 | 95.92 | 94.75 | 90.24 | 89.89 | 87.28 | 92.31|
## Log
```
python -m ulmfit eval --glob="mldoc/ru-1/models/sp15k/qrnn_nl4.m" --lr_sched=1cycle --bs=18 --num-cls-epochs=8 --name "nl4_tls4" --label-smoothing-eps=0.1
name tst_accuracy tst_loss val_accuracy val_loss
0 data/mldoc/de-1/models/sp15k/qrnn_nl4_tls.m 0.95850 0.254842 0.946 0.320358
1 data/mldoc/de-1/models/sp15k/qrnn_nl4_tls2.m 0.95900 0.245983 0.947 0.303949
2 data/mldoc/de-1/models/sp15k/qrnn_nl4_tls3.m 0.95550 0.270527 0.938 0.323216
3 data/mldoc/en-1/models/sp15k/qrnn_nl4_tls.m 0.95550 0.246017 0.959 0.237861
4 data/mldoc/en-1/models/sp15k/qrnn_nl4_tls2.m 0.95075 0.258219 0.959 0.235698
5 data/mldoc/en-1/models/sp15k/qrnn_nl4_tls3.m 0.95175 0.249414 0.960 0.245007
6 data/mldoc/es-1/models/sp15k/qrnn_nl4_tls.m 0.95875 0.258491 0.961 0.255865
7 data/mldoc/es-1/models/sp15k/qrnn_nl4_tls2.m 0.95825 0.263527 0.959 0.274785
8 data/mldoc/es-1/models/sp15k/qrnn_nl4_tls3.m 0.96075 0.253370 0.965 0.254268
9 data/mldoc/fr-1/models/sp15k/qrnn_nl4_tls.m 0.94750 0.277039 0.942 0.295544
10 data/mldoc/fr-1/models/sp15k/qrnn_nl4_tls2.m 0.94750 0.284394 0.943 0.288495
11 data/mldoc/fr-1/models/sp15k/qrnn_nl4_tls3.m 0.94750 0.268739 0.938 0.274793
12 data/mldoc/it-1/models/sp15k/qrnn_nl4_tls.m 0.90100 0.424416 0.899 0.386466
13 data/mldoc/it-1/models/sp15k/qrnn_nl4_tls2.m 0.90375 0.410442 0.913 0.381761
14 data/mldoc/it-1/models/sp15k/qrnn_nl4_tls3.m 0.90250 0.416314 0.917 0.378864
15 data/mldoc/ja-1/models/sp15k/qrnn_nl4_tls.m 0.89850 0.456913 0.887 0.507895
16 data/mldoc/ja-1/models/sp15k/qrnn_nl4_tls2.m 0.90025 0.426836 0.897 0.469335
17 data/mldoc/ja-1/models/sp15k/qrnn_nl4_tls3.m 0.89800 0.449715 0.890 0.502422
18 data/mldoc/ru-1/models/sp15k/qrnn_nl4_tls.m 0.86550 0.571294 0.870 0.548535
19 data/mldoc/ru-1/models/sp15k/qrnn_nl4_tls2.m 0.87650 0.587116 0.877 0.585862
20 data/mldoc/ru-1/models/sp15k/qrnn_nl4_tls3.m 0.87625 0.550317 0.866 0.574534
21 data/mldoc/zh-1/models/sp15k/qrnn_nl4_tls.m 0.92525 0.347967 0.921 0.350878
22 data/mldoc/zh-1/models/sp15k/qrnn_nl4_tls2.m 0.92175 0.377572 0.917 0.380295
23 data/mldoc/zh-1/models/sp15k/qrnn_nl4_tls3.m 0.92225 0.350547 0.916 0.362135
```
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -1,370 +0,0 @@
```
python -m ulmfit eval_noise_resistance --lang=es --size=10 --prefix-name="val_" --model="sp30k/lstm_nl4.m"
Noise: 0
Processing data/mldoc/es-1/models/sp30k/lstm_nl4.m
es-10
Max vocab: 30000
Cache dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/es-10/models/sp30k
Model dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/es-10/models/sp30k/lstm_nl4_val_0.m
Evaluating previously trained model
Loading validation /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/es-10/es.dev.csv
Data lm, trn: 13013, val: 1445
Data cls, trn: 9458, val: 1000
Data tst, trn: 1000, val: 4000
Size of vocabulary: 30000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁de', '▁,', '▁la', '▁.', '▁en', '▁el', '▁y', 's', '▁a', '▁que']
Loss and accuracy using (cls_best): [0.32779965, tensor(0.9515)]
OrderedDict([('data/mldoc/es-10/models/sp30k/lstm_nl4_val_0.m',
0.9514999985694885)])
Noise: 5
Processing data/mldoc/es-1/models/sp30k/lstm_nl4.m
es-10
Max vocab: 30000
Cache dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/es-10/models/sp30k
Model dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/es-10/models/sp30k/lstm_nl4_val_5.m
Evaluating previously trained model
Loading validation /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/es-10/es.dev.csv
Data lm, trn: 13013, val: 1445
Data cls, trn: 9458, val: 1000
Data tst, trn: 1000, val: 4000
Size of vocabulary: 30000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁de', '▁,', '▁la', '▁.', '▁en', '▁el', '▁y', 's', '▁a', '▁que']
Loss and accuracy using (cls_best): [0.33051395, tensor(0.9488)]
OrderedDict([('data/mldoc/es-10/models/sp30k/lstm_nl4_val_5.m',
0.9487500190734863)])
Noise: 10
Processing data/mldoc/es-1/models/sp30k/lstm_nl4.m
es-10
Max vocab: 30000
Cache dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/es-10/models/sp30k
Model dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/es-10/models/sp30k/lstm_nl4_val_10.m
Evaluating previously trained model
Loading validation /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/es-10/es.dev.csv
Data lm, trn: 13013, val: 1445
Data cls, trn: 9458, val: 1000
Data tst, trn: 1000, val: 4000
Size of vocabulary: 30000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁de', '▁,', '▁la', '▁.', '▁en', '▁el', '▁y', 's', '▁a', '▁que']
Loss and accuracy using (cls_best): [0.22158922, tensor(0.9433)]
OrderedDict([('data/mldoc/es-10/models/sp30k/lstm_nl4_val_10.m',
0.9432500004768372)])
Noise: 15
Processing data/mldoc/es-1/models/sp30k/lstm_nl4.m
es-10
Max vocab: 30000
Cache dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/es-10/models/sp30k
Model dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/es-10/models/sp30k/lstm_nl4_val_15.m
Evaluating previously trained model
Loading validation /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/es-10/es.dev.csv
Data lm, trn: 13013, val: 1445
Data cls, trn: 9458, val: 1000
Data tst, trn: 1000, val: 4000
Size of vocabulary: 30000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁de', '▁,', '▁la', '▁.', '▁en', '▁el', '▁y', 's', '▁a', '▁que']
Loss and accuracy using (cls_best): [0.25426567, tensor(0.9358)]
OrderedDict([('data/mldoc/es-10/models/sp30k/lstm_nl4_val_15.m',
0.9357500076293945)])
Noise: 20
Processing data/mldoc/es-1/models/sp30k/lstm_nl4.m
es-10
Max vocab: 30000
Cache dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/es-10/models/sp30k
Model dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/es-10/models/sp30k/lstm_nl4_val_20.m
Evaluating previously trained model
Loading validation /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/es-10/es.dev.csv
Data lm, trn: 13013, val: 1445
Data cls, trn: 9458, val: 1000
Data tst, trn: 1000, val: 4000
Size of vocabulary: 30000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁de', '▁,', '▁la', '▁.', '▁en', '▁el', '▁y', 's', '▁a', '▁que']
Loss and accuracy using (cls_best): [0.32246214, tensor(0.9210)]
OrderedDict([('data/mldoc/es-10/models/sp30k/lstm_nl4_val_20.m',
0.9210000038146973)])
Noise: 25
Processing data/mldoc/es-1/models/sp30k/lstm_nl4.m
es-10
Max vocab: 30000
Cache dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/es-10/models/sp30k
Model dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/es-10/models/sp30k/lstm_nl4_val_25.m
Evaluating previously trained model
Loading validation /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/es-10/es.dev.csv
Data lm, trn: 13013, val: 1445
Data cls, trn: 9458, val: 1000
Data tst, trn: 1000, val: 4000
Size of vocabulary: 30000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁de', '▁,', '▁la', '▁.', '▁en', '▁el', '▁y', 's', '▁a', '▁que']
Loss and accuracy using (cls_best): [0.823559, tensor(0.9095)]
OrderedDict([('data/mldoc/es-10/models/sp30k/lstm_nl4_val_25.m',
0.909500002861023)])
Noise: 30
Processing data/mldoc/es-1/models/sp30k/lstm_nl4.m
es-10
Max vocab: 30000
Cache dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/es-10/models/sp30k
Model dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/es-10/models/sp30k/lstm_nl4_val_30.m
Evaluating previously trained model
Loading validation /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/es-10/es.dev.csv
Data lm, trn: 13013, val: 1445
Data cls, trn: 9458, val: 1000
Data tst, trn: 1000, val: 4000
Size of vocabulary: 30000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁de', '▁,', '▁la', '▁.', '▁en', '▁el', '▁y', 's', '▁a', '▁que']
Loss and accuracy using (cls_best): [0.5010365, tensor(0.8942)]
OrderedDict([('data/mldoc/es-10/models/sp30k/lstm_nl4_val_30.m',
0.8942499756813049)])
Noise: 35
Processing data/mldoc/es-1/models/sp30k/lstm_nl4.m
es-10
Max vocab: 30000
Cache dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/es-10/models/sp30k
Model dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/es-10/models/sp30k/lstm_nl4_val_35.m
Evaluating previously trained model
Loading validation /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/es-10/es.dev.csv
Data lm, trn: 13013, val: 1445
Data cls, trn: 9458, val: 1000
Data tst, trn: 1000, val: 4000
Size of vocabulary: 30000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁de', '▁,', '▁la', '▁.', '▁en', '▁el', '▁y', 's', '▁a', '▁que']
Loss and accuracy using (cls_best): [0.95638776, tensor(0.5853)]
OrderedDict([('data/mldoc/es-10/models/sp30k/lstm_nl4_val_35.m',
0.5852500200271606)])
Noise: 40
Processing data/mldoc/es-1/models/sp30k/lstm_nl4.m
es-10
Max vocab: 30000
Cache dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/es-10/models/sp30k
Model dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/es-10/models/sp30k/lstm_nl4_val_40.m
Evaluating previously trained model
Loading validation /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/es-10/es.dev.csv
Data lm, trn: 13013, val: 1445
Data cls, trn: 9458, val: 1000
Data tst, trn: 1000, val: 4000
Size of vocabulary: 30000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁de', '▁,', '▁la', '▁.', '▁en', '▁el', '▁y', 's', '▁a', '▁que']
Loss and accuracy using (cls_best): [1.1012905, tensor(0.5642)]
OrderedDict([('data/mldoc/es-10/models/sp30k/lstm_nl4_val_40.m',
0.5642499923706055)])
Noise: 45
Processing data/mldoc/es-1/models/sp30k/lstm_nl4.m
es-10
Max vocab: 30000
Cache dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/es-10/models/sp30k
Model dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/es-10/models/sp30k/lstm_nl4_val_45.m
Evaluating previously trained model
Loading validation /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/es-10/es.dev.csv
Data lm, trn: 13013, val: 1445
Data cls, trn: 9458, val: 1000
Data tst, trn: 1000, val: 4000
Size of vocabulary: 30000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁de', '▁,', '▁la', '▁.', '▁en', '▁el', '▁y', 's', '▁a', '▁que']
Loss and accuracy using (cls_best): [1.6009017, tensor(0.3072)]
OrderedDict([('data/mldoc/es-10/models/sp30k/lstm_nl4_val_45.m',
0.3072499930858612)])
Noise: 50
Processing data/mldoc/es-1/models/sp30k/lstm_nl4.m
es-10
Max vocab: 30000
Cache dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/es-10/models/sp30k
Model dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/es-10/models/sp30k/lstm_nl4_val_50.m
Evaluating previously trained model
Loading validation /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/es-10/es.dev.csv
Data lm, trn: 13013, val: 1445
Data cls, trn: 9458, val: 1000
Data tst, trn: 1000, val: 4000
Size of vocabulary: 30000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁de', '▁,', '▁la', '▁.', '▁en', '▁el', '▁y', 's', '▁a', '▁que']
Loss and accuracy using (cls_best): [1.5735056, tensor(0.3072)]
OrderedDict([('data/mldoc/es-10/models/sp30k/lstm_nl4_val_50.m',
0.3072499930858612)])
Noise: 55
Processing data/mldoc/es-1/models/sp30k/lstm_nl4.m
es-10
Max vocab: 30000
Cache dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/es-10/models/sp30k
Model dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/es-10/models/sp30k/lstm_nl4_val_55.m
Training
Loading validation /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/es-10/es.dev.csv
Added noise to 5201 examples, only 0.4500951575385917 have correct labels
Added noise to 550 examples, only 0.45 have correct labels
Data lm, trn: 13013, val: 1445
Data clsnoise0.55tv, trn: 9458, val: 1000
Data tst, trn: 1000, val: 4000
Size of vocabulary: 30000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁de', '▁,', '▁la', '▁.', '▁en', '▁el', '▁y', 's', '▁a', '▁que']
Single training schedule
epoch train_loss valid_loss accuracy
1 1.150436 1.391014 0.321000
2 1.190502 5.388964 0.313000
3 1.216090 1.697217 0.221000
4 1.221863 1.676644 0.221000
5 1.213776 1.734900 0.221000
6 1.195663 1.713853 0.221000
7 1.211159 1.710040 0.221000
8 1.197578 1.674693 0.221000
Total time: 29:10
Saving models at /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/es-10/models/sp30k/lstm_nl4_val_55.m
Loss and accuracy using (cls_best): [1.5282942, tensor(0.3072)]
OrderedDict([('data/mldoc/es-10/models/sp30k/lstm_nl4_val_55.m',
0.3072499930858612)])
Noise: 60
Processing data/mldoc/es-1/models/sp30k/lstm_nl4.m
es-10
Max vocab: 30000
Cache dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/es-10/models/sp30k
Model dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/es-10/models/sp30k/lstm_nl4_val_60.m
Training
Loading validation /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/es-10/es.dev.csv
Added noise to 5674 examples, only 0.4000845844787482 have correct labels
Added noise to 600 examples, only 0.4 have correct labels
Data lm, trn: 13013, val: 1445
Running tokenization clsnoise0.6tv...
Data clsnoise0.6tv, trn: 9458, val: 1000
Data tst, trn: 1000, val: 4000
Size of vocabulary: 30000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁de', '▁,', '▁la', '▁.', '▁en', '▁el', '▁y', 's', '▁a', '▁que']
Training args: {'clip': 0.12, 'alpha': 2, 'beta': 1, 'drop_mult': 0.3} dps: {'output_p': 0.25, 'hidden_p': 0.1, 'input_p': 0.2, 'embed_p': 0.02, 'weight_p': 0.15}
Loading pretrained model
Unknown tokens 0, first 100: []
/home/pczapla/workspace/ulmfit-multilingual/data/mldoc/es-10/models/sp30k
Saving info /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/es-10/models/sp30k/lstm_nl4_val_60.m/info.json
Single training schedule
epoch train_loss valid_loss accuracy
1 1.176071 1.396755 0.321000
2 1.211001 1.619019 0.289000
3 1.229442 1.733743 0.261000
4 1.190156 1.545205 0.312000
5 1.182274 1.369377 0.308000
6 1.169403 1.352204 0.304000
7 1.166997 1.332295 0.316000
8 1.165893 1.370641 0.313000
Total time: 30:23
Saving models at /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/es-10/models/sp30k/lstm_nl4_val_60.m
Loss and accuracy using (cls_best): [1.2368572, tensor(0.6102)]
OrderedDict([('data/mldoc/es-10/models/sp30k/lstm_nl4_val_60.m',
0.6102499961853027)])
Noise: 65
Processing data/mldoc/es-1/models/sp30k/lstm_nl4.m
es-10
Max vocab: 30000
Cache dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/es-10/models/sp30k
Model dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/es-10/models/sp30k/lstm_nl4_val_65.m
Training
Loading validation /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/es-10/es.dev.csv
Added noise to 6147 examples, only 0.35007401141890465 have correct labels
Added noise to 650 examples, only 0.35 have correct labels
Data lm, trn: 13013, val: 1445
Running tokenization clsnoise0.65tv...
Data clsnoise0.65tv, trn: 9458, val: 1000
Data tst, trn: 1000, val: 4000
Size of vocabulary: 30000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁de', '▁,', '▁la', '▁.', '▁en', '▁el', '▁y', 's', '▁a', '▁que']
Training args: {'clip': 0.12, 'alpha': 2, 'beta': 1, 'drop_mult': 0.3} dps: {'output_p': 0.25, 'hidden_p': 0.1, 'input_p': 0.2, 'embed_p': 0.02, 'weight_p': 0.15}
Loading pretrained model
Unknown tokens 0, first 100: []
/home/pczapla/workspace/ulmfit-multilingual/data/mldoc/es-10/models/sp30k
Saving info /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/es-10/models/sp30k/lstm_nl4_val_65.m/info.json
Single training schedule
epoch train_loss valid_loss accuracy
1 1.179257 1.460323 0.295000
2 1.220349 1.516707 0.222000
3 1.211396 1.870125 0.242000
4 1.187261 1.922184 0.308000
5 1.201833 1.429372 0.300000
6 1.187137 1.580070 0.264000
7 1.162549 1.845004 0.294000
8 1.162919 1.514930 0.313000
Total time: 29:23
Saving models at /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/es-10/models/sp30k/lstm_nl4_val_65.m
Loss and accuracy using (cls_best): [1.1729655, tensor(0.6385)]
OrderedDict([('data/mldoc/es-10/models/sp30k/lstm_nl4_val_65.m',
0.6384999752044678)])
Noise: 70
Processing data/mldoc/es-1/models/sp30k/lstm_nl4.m
es-10
Max vocab: 30000
Cache dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/es-10/models/sp30k
Model dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/es-10/models/sp30k/lstm_nl4_val_70.m
Training
Loading validation /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/es-10/es.dev.csv
Added noise to 6620 examples, only 0.30006343835906113 have correct labels
Added noise to 700 examples, only 0.3 have correct labels
Data lm, trn: 13013, val: 1445
Running tokenization clsnoise0.7tv...
Data clsnoise0.7tv, trn: 9458, val: 1000
Data tst, trn: 1000, val: 4000
Size of vocabulary: 30000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁de', '▁,', '▁la', '▁.', '▁en', '▁el', '▁y', 's', '▁a', '▁que']
Training args: {'clip': 0.12, 'alpha': 2, 'beta': 1, 'drop_mult': 0.3} dps: {'output_p': 0.25, 'hidden_p': 0.1, 'input_p': 0.2, 'embed_p': 0.02, 'weight_p': 0.15}
Loading pretrained model
Unknown tokens 0, first 100: []
/home/pczapla/workspace/ulmfit-multilingual/data/mldoc/es-10/models/sp30k
Saving info /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/es-10/models/sp30k/lstm_nl4_val_70.m/info.json
Single training schedule
epoch train_loss valid_loss accuracy
1 1.155135 1.479137 0.312000
2 1.190364 1.649113 0.288000
3 1.220965 3.919039 0.280000
4 1.222588 1.696949 0.258000
5 1.220919 1.669896 0.264000
6 1.217906 2.003806 0.257000
7 1.216235 1.654473 0.258000
8 1.217084 1.675933 0.258000
Total time: 29:04
Saving models at /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/es-10/models/sp30k/lstm_nl4_val_70.m
Loss and accuracy using (cls_best): [1.5526773, tensor(0.1828)]
OrderedDict([('data/mldoc/es-10/models/sp30k/lstm_nl4_val_70.m',
0.18275000154972076)])
Noise: 75
Processing data/mldoc/es-1/models/sp30k/lstm_nl4.m
es-10
Max vocab: 30000
Cache dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/es-10/models/sp30k
Model dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/es-10/models/sp30k/lstm_nl4_val_75.m
Training
Loading validation /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/es-10/es.dev.csv
Added noise to 7093 examples, only 0.2500528652992176 have correct labels
Added noise to 750 examples, only 0.25 have correct labels
Data lm, trn: 13013, val: 1445
Running tokenization clsnoise0.75tv...
Data clsnoise0.75tv, trn: 9458, val: 1000
Data tst, trn: 1000, val: 4000
Size of vocabulary: 30000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁de', '▁,', '▁la', '▁.', '▁en', '▁el', '▁y', 's', '▁a', '▁que']
Training args: {'clip': 0.12, 'alpha': 2, 'beta': 1, 'drop_mult': 0.3} dps: {'output_p': 0.25, 'hidden_p': 0.1, 'input_p': 0.2, 'embed_p': 0.02, 'weight_p': 0.15}
Loading pretrained model
Unknown tokens 0, first 100: []
/home/pczapla/workspace/ulmfit-multilingual/data/mldoc/es-10/models/sp30k
Saving info /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/es-10/models/sp30k/lstm_nl4_val_75.m/info.json
Single training schedule
epoch train_loss valid_loss accuracy
1 1.170507 1.421675 0.344000
2 1.221764 1.700004 0.246000
3 1.215101 2.358311 0.263000
4 1.243265 1.551931 0.257000
5 1.222902 1.756996 0.271000
6 1.215993 1.677014 0.266000
7 1.225945 4.560951 0.263000
8 1.219151 2.939914 0.245000
Total time: 29:52
Saving models at /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/es-10/models/sp30k/lstm_nl4_val_75.m
Loss and accuracy using (cls_best): [1.7072973, tensor(0.2465)]
OrderedDict([('data/mldoc/es-10/models/sp30k/lstm_nl4_val_75.m',
0.24650000035762787)])
noise accuracy
0 0.00 0.95150
1 0.05 0.94875
2 0.10 0.94325
3 0.15 0.93575
4 0.20 0.92100
5 0.25 0.90950
6 0.30 0.89425
7 0.35 0.58525
8 0.40 0.56425
9 0.45 0.30725
10 0.50 0.30725
11 0.55 0.30725
12 0.60 0.61025
13 0.65 0.63850
14 0.70 0.18275
15 0.75 0.24650
```
File diff suppressed because it is too large Load Diff
-627
View File
@@ -1,627 +0,0 @@
## Debugging random init
````
warnings.warn(ABI_INCOMPATIBILITY_WARNING.format(compiler))
Loading pretrained model
Unknown tokens 0, first 100: []
Bptt 70
/home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-10/models/sp15k
Saving info /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-10/models/sp15k/qrnn_nl4_rnd2_0.m/info.json
Single training schedule
epoch train_loss valid_loss accuracy
````
## first attempt at random init
```
python -m ulmfit eval_noise_resistance --lang=de --size=10 --prefix-name="_rnd_" --model="sp15k/qrnn_rnd-nl4.m" --label-smoothing-eps=0.1
Noise: 0
Processing data/mldoc/de-1/models/sp15k/qrnn_rnd-nl4.m
de-10
Max vocab: 15000
Cache dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-10/models/sp15k
Model dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-10/models/sp15k/qrnn_nl4__rnd_0.m
Training
Loading validation /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-10/de.dev.csv
Data lm, trn: 13500, val: 1500
Data cls, trn: 10000, val: 1000
Data tst, trn: 1000, val: 4000
Size of vocabulary: 15000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁.', '▁,', '▁der', '▁die', 'en', '▁und', 's', '▁in', 'er', "▁&'"]
Training args: {'clip': 0.12, 'alpha': 2, 'beta': 1, 'drop_mult': 0.3} dps: {'output_p': 0.25, 'hidden_p': 0.1, 'input_p': 0.2, 'embed_p': 0.02, 'weight_p': 0.15}
/home/pczapla/anaconda3/envs/fastaiv1/lib/python3.7/site-packages/torch/utils/cpp_extension.py:152: UserWarning:
!! WARNING !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Your compiler (c++) may be ABI-incompatible with PyTorch!
Please use a compiler that is ABI-compatible with GCC 4.9 and above.
See https://gcc.gnu.org/onlinedocs/libstdc++/manual/abi.html.
See https://gist.github.com/goldsborough/d466f43e8ffc948ff92de7486c5216d6
for instructions on how to install GCC 4.9 or higher.
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! WARNING !!
warnings.warn(ABI_INCOMPATIBILITY_WARNING.format(compiler))
Loading pretrained model
Unknown tokens 0, first 100: []
Bptt 70
/home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-10/models/sp15k
Saving info /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-10/models/sp15k/qrnn_nl4__rnd_0.m/info.json
Single training schedule
epoch train_loss valid_loss accuracy
1 0.787174 0.985413 0.701000
2 0.679534 0.697764 0.875000
3 0.630987 7.125103 0.873000
4 0.588259 0.653497 0.915000
5 0.568135 0.641379 0.942000
6 0.529713 0.557198 0.948000
7 0.500168 0.538946 0.958000
8 0.505462 0.550917 0.954000
Total time: 19:37
Saving models at /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-10/models/sp15k/qrnn_nl4__rnd_0.m
Loss and accuracy using (cls_best): [0.21539633, tensor(0.9613)]
OrderedDict([('data/mldoc/de-10/models/sp15k/qrnn_nl4__rnd_0.m',
0.9612500071525574)])
Noise: 5
Processing data/mldoc/de-1/models/sp15k/qrnn_rnd-nl4.m
de-10
Max vocab: 15000
Cache dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-10/models/sp15k
Model dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-10/models/sp15k/qrnn_nl4__rnd_5.m
Training
Loading validation /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-10/de.dev.csv
Added noise to 500 examples, only 0.95 have correct labels
Added noise to 50 examples, only 0.95 have correct labels
Data lm, trn: 13500, val: 1500
Data clsnoise0.05tv, trn: 10000, val: 1000
Data tst, trn: 1000, val: 4000
Size of vocabulary: 15000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁.', '▁,', '▁der', '▁die', 'en', '▁und', 's', '▁in', 'er', "▁&'"]
Training args: {'clip': 0.12, 'alpha': 2, 'beta': 1, 'drop_mult': 0.3} dps: {'output_p': 0.25, 'hidden_p': 0.1, 'input_p': 0.2, 'embed_p': 0.02, 'weight_p': 0.15}
Loading pretrained model
Unknown tokens 0, first 100: []
Bptt 70
/home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-10/models/sp15k
Saving info /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-10/models/sp15k/qrnn_nl4__rnd_5.m/info.json
Single training schedule
epoch train_loss valid_loss accuracy
1 0.917813 0.874308 0.790000
2 0.821460 1.239760 0.671000
3 0.747909 2.624352 0.667000
4 0.713649 0.735327 0.893000
5 0.689947 1.175884 0.844000
6 0.639073 1.066042 0.862000
7 0.617660 0.845634 0.875000
8 0.620402 0.670972 0.901000
Total time: 19:28
Saving models at /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-10/models/sp15k/qrnn_nl4__rnd_5.m
Loss and accuracy using (cls_best): [0.25263783, tensor(0.9560)]
OrderedDict([('data/mldoc/de-10/models/sp15k/qrnn_nl4__rnd_5.m',
0.9559999704360962)])
Noise: 10
Processing data/mldoc/de-1/models/sp15k/qrnn_rnd-nl4.m
de-10
Max vocab: 15000
Cache dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-10/models/sp15k
Model dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-10/models/sp15k/qrnn_nl4__rnd_10.m
Training
Loading validation /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-10/de.dev.csv
Added noise to 1000 examples, only 0.9 have correct labels
Added noise to 100 examples, only 0.9 have correct labels
Data lm, trn: 13500, val: 1500
Data clsnoise0.1tv, trn: 10000, val: 1000
Data tst, trn: 1000, val: 4000
Size of vocabulary: 15000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁.', '▁,', '▁der', '▁die', 'en', '▁und', 's', '▁in', 'er', "▁&'"]
Training args: {'clip': 0.12, 'alpha': 2, 'beta': 1, 'drop_mult': 0.3} dps: {'output_p': 0.25, 'hidden_p': 0.1, 'input_p': 0.2, 'embed_p': 0.02, 'weight_p': 0.15}
Loading pretrained model
Unknown tokens 0, first 100: []
Bptt 70
/home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-10/models/sp15k
Saving info /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-10/models/sp15k/qrnn_nl4__rnd_10.m/info.json
Single training schedule
epoch train_loss valid_loss accuracy
1 0.976570 1.054016 0.705000
2 0.885775 0.813666 0.835000
3 0.861244 0.968860 0.762000
4 0.790501 0.815453 0.839000
5 0.754292 0.805088 0.849000
6 0.742595 0.770547 0.864000
7 0.712961 0.771171 0.863000
8 0.695449 0.787870 0.858000
Total time: 19:48
Saving models at /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-10/models/sp15k/qrnn_nl4__rnd_10.m
Loss and accuracy using (cls_best): [0.2744636, tensor(0.9510)]
OrderedDict([('data/mldoc/de-10/models/sp15k/qrnn_nl4__rnd_10.m',
0.9509999752044678)])
Noise: 15
Processing data/mldoc/de-1/models/sp15k/qrnn_rnd-nl4.m
de-10
Max vocab: 15000
Cache dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-10/models/sp15k
Model dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-10/models/sp15k/qrnn_nl4__rnd_15.m
Training
Loading validation /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-10/de.dev.csv
Added noise to 1500 examples, only 0.85 have correct labels
Added noise to 150 examples, only 0.85 have correct labels
Data lm, trn: 13500, val: 1500
Data clsnoise0.15tv, trn: 10000, val: 1000
Data tst, trn: 1000, val: 4000
Size of vocabulary: 15000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁.', '▁,', '▁der', '▁die', 'en', '▁und', 's', '▁in', 'er', "▁&'"]
Training args: {'clip': 0.12, 'alpha': 2, 'beta': 1, 'drop_mult': 0.3} dps: {'output_p': 0.25, 'hidden_p': 0.1, 'input_p': 0.2, 'embed_p': 0.02, 'weight_p': 0.15}
Loading pretrained model
Unknown tokens 0, first 100: []
Bptt 70
/home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-10/models/sp15k
Saving info /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-10/models/sp15k/qrnn_nl4__rnd_15.m/info.json
Single training schedule
epoch train_loss valid_loss accuracy
1 1.081478 1.075213 0.674000
2 0.989475 0.939438 0.779000
3 0.963180 0.984908 0.723000
4 0.915556 1.209332 0.662000
5 0.884642 1.000015 0.786000
6 0.844702 0.884871 0.794000
7 0.793699 0.882503 0.802000
8 0.797470 0.871922 0.802000
Total time: 19:50
Saving models at /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-10/models/sp15k/qrnn_nl4__rnd_15.m
Loss and accuracy using (cls_best): [0.32492134, tensor(0.9445)]
OrderedDict([('data/mldoc/de-10/models/sp15k/qrnn_nl4__rnd_15.m',
0.9445000290870667)])
Noise: 20
Processing data/mldoc/de-1/models/sp15k/qrnn_rnd-nl4.m
de-10
Max vocab: 15000
Cache dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-10/models/sp15k
Model dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-10/models/sp15k/qrnn_nl4__rnd_20.m
Training
Loading validation /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-10/de.dev.csv
Added noise to 2000 examples, only 0.8 have correct labels
Added noise to 200 examples, only 0.8 have correct labels
Data lm, trn: 13500, val: 1500
Data clsnoise0.2tv, trn: 10000, val: 1000
Data tst, trn: 1000, val: 4000
Size of vocabulary: 15000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁.', '▁,', '▁der', '▁die', 'en', '▁und', 's', '▁in', 'er', "▁&'"]
Training args: {'clip': 0.12, 'alpha': 2, 'beta': 1, 'drop_mult': 0.3} dps: {'output_p': 0.25, 'hidden_p': 0.1, 'input_p': 0.2, 'embed_p': 0.02, 'weight_p': 0.15}
Loading pretrained model
Unknown tokens 0, first 100: []
Bptt 70
/home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-10/models/sp15k
Saving info /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-10/models/sp15k/qrnn_nl4__rnd_20.m/info.json
Single training schedule
epoch train_loss valid_loss accuracy
1 1.130177 1.651658 0.424000
2 1.049187 1.508039 0.286000
3 1.045260 1.976680 0.578000
4 0.971859 1.121615 0.735000
5 0.965327 2.376971 0.684000
6 0.901961 1.089674 0.744000
7 0.868971 1.082978 0.750000
8 0.845376 1.019824 0.740000
Total time: 19:51
Saving models at /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-10/models/sp15k/qrnn_nl4__rnd_20.m
Loss and accuracy using (cls_best): [0.46514454, tensor(0.9438)]
OrderedDict([('data/mldoc/de-10/models/sp15k/qrnn_nl4__rnd_20.m',
0.9437500238418579)])
Noise: 25
Processing data/mldoc/de-1/models/sp15k/qrnn_rnd-nl4.m
de-10
Max vocab: 15000
Cache dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-10/models/sp15k
Model dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-10/models/sp15k/qrnn_nl4__rnd_25.m
Training
Loading validation /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-10/de.dev.csv
Added noise to 2500 examples, only 0.75 have correct labels
Added noise to 250 examples, only 0.75 have correct labels
Data lm, trn: 13500, val: 1500
Data clsnoise0.25tv, trn: 10000, val: 1000
Data tst, trn: 1000, val: 4000
Size of vocabulary: 15000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁.', '▁,', '▁der', '▁die', 'en', '▁und', 's', '▁in', 'er', "▁&'"]
Training args: {'clip': 0.12, 'alpha': 2, 'beta': 1, 'drop_mult': 0.3} dps: {'output_p': 0.25, 'hidden_p': 0.1, 'input_p': 0.2, 'embed_p': 0.02, 'weight_p': 0.15}
Loading pretrained model
Unknown tokens 0, first 100: []
Bptt 70
/home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-10/models/sp15k
Saving info /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-10/models/sp15k/qrnn_nl4__rnd_25.m/info.json
Single training schedule
epoch train_loss valid_loss accuracy
1 1.204033 1.368233 0.500000
2 1.121006 1.219437 0.586000
3 1.057657 1.139297 0.659000
4 1.054685 1.043641 0.700000
5 1.023957 1.069890 0.706000
6 0.992645 1.073037 0.708000
7 0.948602 1.054931 0.699000
8 0.945395 1.078187 0.703000
Total time: 20:09
Saving models at /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-10/models/sp15k/qrnn_nl4__rnd_25.m
Loss and accuracy using (cls_best): [0.4676742, tensor(0.9137)]
OrderedDict([('data/mldoc/de-10/models/sp15k/qrnn_nl4__rnd_25.m',
0.9137499928474426)])
Noise: 30
Processing data/mldoc/de-1/models/sp15k/qrnn_rnd-nl4.m
de-10
Max vocab: 15000
Cache dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-10/models/sp15k
Model dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-10/models/sp15k/qrnn_nl4__rnd_30.m
Training
Loading validation /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-10/de.dev.csv
Added noise to 3000 examples, only 0.7 have correct labels
Added noise to 300 examples, only 0.7 have correct labels
Data lm, trn: 13500, val: 1500
Data clsnoise0.3tv, trn: 10000, val: 1000
Data tst, trn: 1000, val: 4000
Size of vocabulary: 15000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁.', '▁,', '▁der', '▁die', 'en', '▁und', 's', '▁in', 'er', "▁&'"]
Training args: {'clip': 0.12, 'alpha': 2, 'beta': 1, 'drop_mult': 0.3} dps: {'output_p': 0.25, 'hidden_p': 0.1, 'input_p': 0.2, 'embed_p': 0.02, 'weight_p': 0.15}
Loading pretrained model
Unknown tokens 0, first 100: []
Bptt 70
/home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-10/models/sp15k
Saving info /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-10/models/sp15k/qrnn_nl4__rnd_30.m/info.json
Single training schedule
epoch train_loss valid_loss accuracy
1 1.245468 1.243019 0.492000
2 1.192702 1.644169 0.435000
3 1.187665 4.143492 0.490000
4 1.113116 20.139246 0.540000
5 1.092624 1.189916 0.609000
6 1.052626 1.264737 0.617000
7 1.032403 1.317357 0.649000
8 1.003000 1.187038 0.653000
Total time: 20:02
Saving models at /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-10/models/sp15k/qrnn_nl4__rnd_30.m
Loss and accuracy using (cls_best): [0.5831716, tensor(0.9215)]
OrderedDict([('data/mldoc/de-10/models/sp15k/qrnn_nl4__rnd_30.m',
0.921500027179718)])
Noise: 35
Processing data/mldoc/de-1/models/sp15k/qrnn_rnd-nl4.m
de-10
Max vocab: 15000
Cache dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-10/models/sp15k
Model dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-10/models/sp15k/qrnn_nl4__rnd_35.m
Training
Loading validation /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-10/de.dev.csv
Added noise to 3500 examples, only 0.65 have correct labels
Added noise to 350 examples, only 0.65 have correct labels
Data lm, trn: 13500, val: 1500
Data clsnoise0.35tv, trn: 10000, val: 1000
Data tst, trn: 1000, val: 4000
Size of vocabulary: 15000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁.', '▁,', '▁der', '▁die', 'en', '▁und', 's', '▁in', 'er', "▁&'"]
Training args: {'clip': 0.12, 'alpha': 2, 'beta': 1, 'drop_mult': 0.3} dps: {'output_p': 0.25, 'hidden_p': 0.1, 'input_p': 0.2, 'embed_p': 0.02, 'weight_p': 0.15}
Loading pretrained model
Unknown tokens 0, first 100: []
Bptt 70
/home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-10/models/sp15k
Saving info /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-10/models/sp15k/qrnn_nl4__rnd_35.m/info.json
Single training schedule
epoch train_loss valid_loss accuracy
1 1.285933 1.719733 0.309000
2 1.258459 1.465174 0.422000
3 1.240111 1.205106 0.512000
4 1.195793 2.153573 0.571000
5 1.150691 3.427428 0.588000
6 1.115649 1.933489 0.601000
7 1.078265 1.214095 0.599000
8 1.045297 1.140148 0.604000
Total time: 19:55
Saving models at /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-10/models/sp15k/qrnn_nl4__rnd_35.m
Loss and accuracy using (cls_best): [0.5903087, tensor(0.9105)]
OrderedDict([('data/mldoc/de-10/models/sp15k/qrnn_nl4__rnd_35.m',
0.9104999899864197)])
Noise: 40
Processing data/mldoc/de-1/models/sp15k/qrnn_rnd-nl4.m
de-10
Max vocab: 15000
Cache dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-10/models/sp15k
Model dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-10/models/sp15k/qrnn_nl4__rnd_40.m
Training
Loading validation /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-10/de.dev.csv
Added noise to 4000 examples, only 0.6 have correct labels
Added noise to 400 examples, only 0.6 have correct labels
Data lm, trn: 13500, val: 1500
Data clsnoise0.4tv, trn: 10000, val: 1000
Data tst, trn: 1000, val: 4000
Size of vocabulary: 15000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁.', '▁,', '▁der', '▁die', 'en', '▁und', 's', '▁in', 'er', "▁&'"]
Training args: {'clip': 0.12, 'alpha': 2, 'beta': 1, 'drop_mult': 0.3} dps: {'output_p': 0.25, 'hidden_p': 0.1, 'input_p': 0.2, 'embed_p': 0.02, 'weight_p': 0.15}
Loading pretrained model
Unknown tokens 0, first 100: []
Bptt 70
/home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-10/models/sp15k
Saving info /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-10/models/sp15k/qrnn_nl4__rnd_40.m/info.json
Single training schedule
epoch train_loss valid_loss accuracy
1 1.313393 1.523955 0.316000
2 1.303059 1.964390 0.418000
3 1.291624 1.550615 0.458000
4 1.263588 2.995128 0.390000
5 1.206715 1.265662 0.524000
6 1.191890 1.221754 0.536000
7 1.162122 1.223106 0.527000
8 1.150922 1.240103 0.531000
Total time: 19:53
Saving models at /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-10/models/sp15k/qrnn_nl4__rnd_40.m
Loss and accuracy using (cls_best): [0.7210464, tensor(0.8583)]
OrderedDict([('data/mldoc/de-10/models/sp15k/qrnn_nl4__rnd_40.m',
0.8582500219345093)])
Noise: 45
Processing data/mldoc/de-1/models/sp15k/qrnn_rnd-nl4.m
de-10
Max vocab: 15000
Cache dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-10/models/sp15k
Model dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-10/models/sp15k/qrnn_nl4__rnd_45.m
Training
Loading validation /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-10/de.dev.csv
Added noise to 4500 examples, only 0.55 have correct labels
Added noise to 450 examples, only 0.55 have correct labels
Data lm, trn: 13500, val: 1500
Data clsnoise0.45tv, trn: 10000, val: 1000
Data tst, trn: 1000, val: 4000
Size of vocabulary: 15000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁.', '▁,', '▁der', '▁die', 'en', '▁und', 's', '▁in', 'er', "▁&'"]
Training args: {'clip': 0.12, 'alpha': 2, 'beta': 1, 'drop_mult': 0.3} dps: {'output_p': 0.25, 'hidden_p': 0.1, 'input_p': 0.2, 'embed_p': 0.02, 'weight_p': 0.15}
Loading pretrained model
Unknown tokens 0, first 100: []
Bptt 70
/home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-10/models/sp15k
Saving info /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-10/models/sp15k/qrnn_nl4__rnd_45.m/info.json
Single training schedule
epoch train_loss valid_loss accuracy
1 1.345056 1.343081 0.378000
2 1.281120 11.283777 0.232000
3 1.284114 14.679921 0.390000
4 1.267963 2.869378 0.485000
5 1.227434 1.466781 0.490000
6 1.209261 1.634938 0.495000
7 1.170042 1.372811 0.494000
8 1.162168 2.157310 0.492000
Total time: 20:05
Saving models at /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-10/models/sp15k/qrnn_nl4__rnd_45.m
Loss and accuracy using (cls_best): [1.0457553, tensor(0.8635)]
OrderedDict([('data/mldoc/de-10/models/sp15k/qrnn_nl4__rnd_45.m',
0.8634999990463257)])
Noise: 50
Processing data/mldoc/de-1/models/sp15k/qrnn_rnd-nl4.m
de-10
Max vocab: 15000
Cache dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-10/models/sp15k
Model dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-10/models/sp15k/qrnn_nl4__rnd_50.m
Training
Loading validation /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-10/de.dev.csv
Added noise to 5000 examples, only 0.5 have correct labels
Added noise to 500 examples, only 0.5 have correct labels
Data lm, trn: 13500, val: 1500
Data clsnoise0.5tv, trn: 10000, val: 1000
Data tst, trn: 1000, val: 4000
Size of vocabulary: 15000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁.', '▁,', '▁der', '▁die', 'en', '▁und', 's', '▁in', 'er', "▁&'"]
Training args: {'clip': 0.12, 'alpha': 2, 'beta': 1, 'drop_mult': 0.3} dps: {'output_p': 0.25, 'hidden_p': 0.1, 'input_p': 0.2, 'embed_p': 0.02, 'weight_p': 0.15}
Loading pretrained model
Unknown tokens 0, first 100: []
Bptt 70
/home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-10/models/sp15k
Saving info /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-10/models/sp15k/qrnn_nl4__rnd_50.m/info.json
Single training schedule
epoch train_loss valid_loss accuracy
1 1.362338 1.361343 0.339000
2 1.343794 1.358407 0.328000
3 1.326264 3.336083 0.325000
4 1.321352 4.200035 0.254000
5 1.289333 1.363007 0.408000
6 1.275341 1.449265 0.405000
7 1.245595 1.358157 0.423000
8 1.234815 1.346797 0.411000
Total time: 19:35
Saving models at /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-10/models/sp15k/qrnn_nl4__rnd_50.m
Loss and accuracy using (cls_best): [1.3260584, tensor(0.7103)]
OrderedDict([('data/mldoc/de-10/models/sp15k/qrnn_nl4__rnd_50.m',
0.7102500200271606)])
Noise: 55
Processing data/mldoc/de-1/models/sp15k/qrnn_rnd-nl4.m
de-10
Max vocab: 15000
Cache dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-10/models/sp15k
Model dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-10/models/sp15k/qrnn_nl4__rnd_55.m
Training
Loading validation /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-10/de.dev.csv
Added noise to 5500 examples, only 0.45 have correct labels
Added noise to 550 examples, only 0.45 have correct labels
Data lm, trn: 13500, val: 1500
Data clsnoise0.55tv, trn: 10000, val: 1000
Data tst, trn: 1000, val: 4000
Size of vocabulary: 15000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁.', '▁,', '▁der', '▁die', 'en', '▁und', 's', '▁in', 'er', "▁&'"]
Training args: {'clip': 0.12, 'alpha': 2, 'beta': 1, 'drop_mult': 0.3} dps: {'output_p': 0.25, 'hidden_p': 0.1, 'input_p': 0.2, 'embed_p': 0.02, 'weight_p': 0.15}
Loading pretrained model
Unknown tokens 0, first 100: []
Bptt 70
/home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-10/models/sp15k
Saving info /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-10/models/sp15k/qrnn_nl4__rnd_55.m/info.json
Single training schedule
epoch train_loss valid_loss accuracy
1 1.373838 1.385533 0.265000
2 1.355375 2.033619 0.316000
3 1.358652 2.010394 0.260000
4 1.337999 7.118755 0.351000
5 1.309082 3.053319 0.361000
6 1.286589 19.251106 0.359000
7 1.276432 1.328096 0.379000
8 1.266364 1.324883 0.378000
Total time: 19:34
Saving models at /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-10/models/sp15k/qrnn_nl4__rnd_55.m
Loss and accuracy using (cls_best): [1.3107486, tensor(0.6503)]
OrderedDict([('data/mldoc/de-10/models/sp15k/qrnn_nl4__rnd_55.m',
0.6502500176429749)])
Noise: 60
Processing data/mldoc/de-1/models/sp15k/qrnn_rnd-nl4.m
de-10
Max vocab: 15000
Cache dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-10/models/sp15k
Model dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-10/models/sp15k/qrnn_nl4__rnd_60.m
Training
Loading validation /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-10/de.dev.csv
Added noise to 6000 examples, only 0.4 have correct labels
Added noise to 600 examples, only 0.4 have correct labels
Data lm, trn: 13500, val: 1500
Data clsnoise0.6tv, trn: 10000, val: 1000
Data tst, trn: 1000, val: 4000
Size of vocabulary: 15000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁.', '▁,', '▁der', '▁die', 'en', '▁und', 's', '▁in', 'er', "▁&'"]
Training args: {'clip': 0.12, 'alpha': 2, 'beta': 1, 'drop_mult': 0.3} dps: {'output_p': 0.25, 'hidden_p': 0.1, 'input_p': 0.2, 'embed_p': 0.02, 'weight_p': 0.15}
Loading pretrained model
Unknown tokens 0, first 100: []
Bptt 70
/home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-10/models/sp15k
Saving info /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-10/models/sp15k/qrnn_nl4__rnd_60.m/info.json
Single training schedule
epoch train_loss valid_loss accuracy
1 1.378700 1.377784 0.309000
2 1.359247 9.472390 0.250000
3 1.343403 1.714557 0.321000
4 1.336044 1.331355 0.357000
5 1.322668 1.450317 0.332000
6 1.283835 2.692688 0.349000
7 1.261502 1.541230 0.335000
8 1.230086 1.839382 0.340000
Total time: 19:58
Saving models at /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-10/models/sp15k/qrnn_nl4__rnd_60.m
Loss and accuracy using (cls_best): [1.1523782, tensor(0.5580)]
OrderedDict([('data/mldoc/de-10/models/sp15k/qrnn_nl4__rnd_60.m',
0.5580000281333923)])
Noise: 65
Processing data/mldoc/de-1/models/sp15k/qrnn_rnd-nl4.m
de-10
Max vocab: 15000
Cache dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-10/models/sp15k
Model dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-10/models/sp15k/qrnn_nl4__rnd_65.m
Training
Loading validation /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-10/de.dev.csv
Added noise to 6500 examples, only 0.35 have correct labels
Added noise to 650 examples, only 0.35 have correct labels
Data lm, trn: 13500, val: 1500
Data clsnoise0.65tv, trn: 10000, val: 1000
Data tst, trn: 1000, val: 4000
Size of vocabulary: 15000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁.', '▁,', '▁der', '▁die', 'en', '▁und', 's', '▁in', 'er', "▁&'"]
Training args: {'clip': 0.12, 'alpha': 2, 'beta': 1, 'drop_mult': 0.3} dps: {'output_p': 0.25, 'hidden_p': 0.1, 'input_p': 0.2, 'embed_p': 0.02, 'weight_p': 0.15}
Loading pretrained model
Unknown tokens 0, first 100: []
Bptt 70
/home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-10/models/sp15k
Saving info /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-10/models/sp15k/qrnn_nl4__rnd_65.m/info.json
Single training schedule
epoch train_loss valid_loss accuracy
1 1.374414 1.361766 0.327000
2 1.367130 1.353700 0.341000
3 1.365781 1.421649 0.269000
4 1.358339 1.385666 0.280000
5 1.357855 3.068685 0.334000
6 1.343958 1.586822 0.316000
7 1.330202 2.436025 0.324000
8 1.322320 1.743209 0.330000
Total time: 19:52
Saving models at /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-10/models/sp15k/qrnn_nl4__rnd_65.m
Loss and accuracy using (cls_best): [1.7415464, tensor(0.4467)]
OrderedDict([('data/mldoc/de-10/models/sp15k/qrnn_nl4__rnd_65.m',
0.4467499852180481)])
Noise: 70
Processing data/mldoc/de-1/models/sp15k/qrnn_rnd-nl4.m
de-10
Max vocab: 15000
Cache dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-10/models/sp15k
Model dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-10/models/sp15k/qrnn_nl4__rnd_70.m
Training
Loading validation /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-10/de.dev.csv
Added noise to 7000 examples, only 0.3 have correct labels
Added noise to 700 examples, only 0.3 have correct labels
Data lm, trn: 13500, val: 1500
Data clsnoise0.7tv, trn: 10000, val: 1000
Data tst, trn: 1000, val: 4000
Size of vocabulary: 15000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁.', '▁,', '▁der', '▁die', 'en', '▁und', 's', '▁in', 'er', "▁&'"]
Training args: {'clip': 0.12, 'alpha': 2, 'beta': 1, 'drop_mult': 0.3} dps: {'output_p': 0.25, 'hidden_p': 0.1, 'input_p': 0.2, 'embed_p': 0.02, 'weight_p': 0.15}
Loading pretrained model
Unknown tokens 0, first 100: []
Bptt 70
/home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-10/models/sp15k
Saving info /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-10/models/sp15k/qrnn_nl4__rnd_70.m/info.json
Single training schedule
epoch train_loss valid_loss accuracy
1 1.386991 1.377855 0.302000
2 1.370086 1.741303 0.298000
3 1.371910 1.402328 0.316000
4 1.349717 1.378567 0.277000
5 1.360438 1.471136 0.298000
6 1.345680 1.395034 0.312000
7 1.327264 1.611867 0.312000
8 1.327243 1.657344 0.312000
Total time: 20:09
Saving models at /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-10/models/sp15k/qrnn_nl4__rnd_70.m
Loss and accuracy using (cls_best): [2.7352421, tensor(0.2693)]
OrderedDict([('data/mldoc/de-10/models/sp15k/qrnn_nl4__rnd_70.m',
0.2692500054836273)])
Noise: 75
Processing data/mldoc/de-1/models/sp15k/qrnn_rnd-nl4.m
de-10
Max vocab: 15000
Cache dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-10/models/sp15k
Model dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-10/models/sp15k/qrnn_nl4__rnd_75.m
Training
Loading validation /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-10/de.dev.csv
Added noise to 7500 examples, only 0.25 have correct labels
Added noise to 750 examples, only 0.25 have correct labels
Data lm, trn: 13500, val: 1500
Data clsnoise0.75tv, trn: 10000, val: 1000
Data tst, trn: 1000, val: 4000
Size of vocabulary: 15000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁.', '▁,', '▁der', '▁die', 'en', '▁und', 's', '▁in', 'er', "▁&'"]
Training args: {'clip': 0.12, 'alpha': 2, 'beta': 1, 'drop_mult': 0.3} dps: {'output_p': 0.25, 'hidden_p': 0.1, 'input_p': 0.2, 'embed_p': 0.02, 'weight_p': 0.15}
Loading pretrained model
Unknown tokens 0, first 100: []
Bptt 70
/home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-10/models/sp15k
Saving info /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-10/models/sp15k/qrnn_nl4__rnd_75.m/info.json
Single training schedule
epoch train_loss valid_loss accuracy
1 1.376097 1.392457 0.263000
2 1.372446 1.367712 0.320000
3 1.356304 1.354679 0.297000
4 1.342981 1.350475 0.335000
5 1.340915 1.337473 0.343000
6 1.320882 1.904698 0.357000
7 1.291946 1.368179 0.339000
8 1.283206 1.466608 0.353000
Total time: 19:50
Saving models at /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-10/models/sp15k/qrnn_nl4__rnd_75.m
Loss and accuracy using (cls_best): [1.4704828, tensor(0.1248)]
OrderedDict([('data/mldoc/de-10/models/sp15k/qrnn_nl4__rnd_75.m',
0.12475000321865082)])
noise accuracy
0 0.00 0.96125
1 0.05 0.95600
2 0.10 0.95100
3 0.15 0.94450
4 0.20 0.94375
5 0.25 0.91375
6 0.30 0.92150
7 0.35 0.91050
8 0.40 0.85825
9 0.45 0.86350
10 0.50 0.71025
11 0.55 0.65025
12 0.60 0.55800
13 0.65 0.44675
14 0.70 0.26925
15 0.75 0.12475
```
-717
View File
@@ -1,717 +0,0 @@
### MLDoc laser zero shoot 10k
Loss and accuracy using (cls_best): [0.58419716, tensor(0.8150)] [0.6386394, tensor(0.7850)]
name tst_accuracy tst_loss val_accuracy val_loss
0 data/mldoc/de-10-laser-en1/models/sp15k/qrnn_r... 0.90550 0.407956 0.917 0.378366
1 data/mldoc/es-10-laser-en1/models/sp15k/qrnn_r... 0.69725 1.371628 0.747 1.040883
2 data/mldoc/fr-10-laser-en1/models/sp15k/qrnn_r... 0.87350 0.533766 0.882 0.488216
3 data/mldoc/it-10-laser-en1/models/sp15k/qrnn_r... 0.72750 1.168527 0.804 1.180750
4 data/mldoc/ja-10-laser-en1/models/sp15k/qrnn_r... 0.67550 1.941633 0.780 0.991396
5 data/mldoc/ru-10-laser-en1/models/sp15k/qrnn_r... 0.63675 2.139875 0.822 0.765918
6 data/mldoc/zh-10-laser-en1/models/sp15k/qrnn_r... 0.81500 0.584197 0.785 0.638639
ds de-10-laser- es-10-laser- fr-10-laser- it-10-laser- ja-10-laser- ru-10-laser- zh-10-laser-
best 90.55 69.73 87.35 72.75 67.55 63.67 81.5
max 90.55 69.73 87.35 72.75 67.55 63.67 81.5
avg 90.55 69.73 87.35 72.75 67.55 63.67 81.5
```
Starting classifier from random weights
Single training schedule
epoch train_loss valid_loss accuracy
1 1.087360 1.237505 0.515000
2 0.810132 1.667991 0.545000
3 0.779427 1.003253 0.679000
4 0.662206 2.510274 0.800000
5 0.604669 2.394876 0.718000
6 0.501023 0.866812 0.810000
7 0.398415 0.639844 0.818000
8 0.448071 0.922495 0.822000
Total time: 11:52
Saving models at /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ru-10-laser-en1/models/sp15k/qrnn_rnd_nl4.m
```
```
python -m ulmfit eval --glob="mldoc/*-1/models/sp15k/qrnn_nl4.m" --dataset_template='${lang}-10-laser-en1' --name rnd_nl4 --num-cls-epochs=8 --label-smoothing-eps=0.1 --lr_sched=1cycle --bs=18 --random-init=True
python -m ulmfit eval --glob="mldoc/*-1/models/sp15k/qrnn_nl4.m" --dataset_template='${lang}-10-laser-en1' --name rnd_nl4 --num-cls-epochs=8 --label-smoothing-eps=0.1 --lr_sched=1cycle --bs=18 --random-init=True
Processing data/mldoc/de-1/models/sp15k/qrnn_nl4.m
de-10-laser-en1
Max vocab: 15000
Cache dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-10-laser-en1/models/sp15k
Model dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-10-laser-en1/models/sp15k/qrnn_rnd_nl4.m
Training
Loading validation /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-10-laser-en1/de.dev.csv
Data lm, trn: 13500, val: 1500
Data cls, trn: 10000, val: 1000
Data tst, trn: 1000, val: 4000
Size of vocabulary: 15000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁.', '▁,', '▁der', '▁die', 'en', '▁und', 's', '▁in', 'er', "▁&'"]
/home/pczapla/anaconda3/envs/fastaiv1/lib/python3.7/site-packages/torch/utils/cpp_extension.py:152: UserWarning:
!! WARNING !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Your compiler (c++) may be ABI-incompatible with PyTorch!
Please use a compiler that is ABI-compatible with GCC 4.9 and above.
See https://gcc.gnu.org/onlinedocs/libstdc++/manual/abi.html.
See https://gist.github.com/goldsborough/d466f43e8ffc948ff92de7486c5216d6
for instructions on how to install GCC 4.9 or higher.
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! WARNING !!
warnings.warn(ABI_INCOMPATIBILITY_WARNING.format(compiler))
Starting classifier from random weights
Single training schedule
epoch train_loss valid_loss accuracy
1 0.864752 0.760891 0.844000
2 0.734504 1.077554 0.676000
3 0.681645 0.703327 0.885000
4 0.670696 0.779010 0.898000
5 0.620256 0.664871 0.910000
6 0.591837 1.077103 0.915000
7 0.550238 0.607863 0.913000
8 0.543874 0.607274 0.918000
Total time: 19:55
Saving models at /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-10-laser-en1/models/sp15k/qrnn_rnd_nl4.m
Loss and accuracy using (cls_best): [0.35624045, tensor(0.9053)]
Processing data/mldoc/en-1/models/sp15k/qrnn_nl4.m
en-10-laser-en1
Processing data/mldoc/es-1/models/sp15k/qrnn_nl4.m
es-10-laser-en1
Max vocab: 15000
Cache dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/es-10-laser-en1/models/sp15k
Model dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/es-10-laser-en1/models/sp15k/qrnn_rnd_nl4.m
Training
Loading validation /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/es-10-laser-en1/es.dev.csv
Data lm, trn: 13013, val: 1445
Data cls, trn: 9458, val: 1000
Data tst, trn: 1000, val: 4000
Size of vocabulary: 15000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁de', '▁,', '▁la', '▁.', 's', '▁en', '▁el', '▁y', '▁a', '▁que']
Starting classifier from random weights
Single training schedule
epoch train_loss valid_loss accuracy
1 0.755512 1.360725 0.500000
2 0.760655 1.362604 0.399000
3 0.760876 20.748863 0.607000
4 0.730208 8.120344 0.369000
5 0.707735 1.149775 0.700000
6 0.679102 1.010318 0.746000
7 0.639611 3.087066 0.713000
8 0.608591 1.327793 0.750000
Total time: 11:38
Saving models at /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/es-10-laser-en1/models/sp15k/qrnn_rnd_nl4.m
Loss and accuracy using (cls_best): [1.3680531, tensor(0.6975)]
Processing data/mldoc/fr-1/models/sp15k/qrnn_nl4.m
fr-10-laser-en1
Max vocab: 15000
Cache dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/fr-10-laser-en1/models/sp15k
Model dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/fr-10-laser-en1/models/sp15k/qrnn_rnd_nl4.m
Training
Loading validation /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/fr-10-laser-en1/fr.dev.csv
Data lm, trn: 13500, val: 1500
Data cls, trn: 10000, val: 1000
Data tst, trn: 1000, val: 4000
Size of vocabulary: 15000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁de', '▁,', 's', '▁.', "'", '▁la', '▁le', '▁et', '▁l', '▁à']
Starting classifier from random weights
Single training schedule
epoch train_loss valid_loss accuracy
1 0.922996 1.406875 0.519000
2 0.833284 1.172545 0.640000
3 0.749922 0.697733 0.863000
4 0.724680 0.735842 0.837000
5 0.652541 0.679455 0.876000
6 0.641541 0.671731 0.868000
7 0.577571 0.734958 0.868000
8 0.579186 0.703696 0.883000
Total time: 19:15
Saving models at /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/fr-10-laser-en1/models/sp15k/qrnn_rnd_nl4.m
Loss and accuracy using (cls_best): [0.47713563, tensor(0.8740)]
Processing data/mldoc/it-1/models/sp15k/qrnn_nl4.m
it-10-laser-en1
Max vocab: 15000
Cache dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/it-10-laser-en1/models/sp15k
Model dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/it-10-laser-en1/models/sp15k/qrnn_rnd_nl4.m
Training
Loading validation /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/it-10-laser-en1/it.dev.csv
Data lm, trn: 13500, val: 1500
Data cls, trn: 10000, val: 1000
Data tst, trn: 1000, val: 4000
Size of vocabulary: 15000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁,', '▁.', '▁di', '▁e', "▁&'", "'", '▁il', '▁la', '▁in', 'e']
Starting classifier from random weights
Single training schedule
epoch train_loss valid_loss accuracy
1 0.991065 1.602189 0.381000
2 0.935880 0.888808 0.734000
3 0.860670 0.868564 0.781000
4 0.818734 0.945302 0.791000
5 0.751467 3.113552 0.808000
6 0.687606 0.921033 0.795000
7 0.677044 1.222023 0.807000
8 0.645511 1.418593 0.805000
Total time: 11:44
Saving models at /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/it-10-laser-en1/models/sp15k/qrnn_rnd_nl4.m
Loss and accuracy using (cls_best): [1.1276722, tensor(0.7272)]
Processing data/mldoc/ja-1/models/sp15k/qrnn_nl4.m
ja-10-laser-en1
Processing data/mldoc/zh-1/models/sp15k/qrnn_nl4.m
zh-10-laser-en1
Max vocab: 15000
Cache dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/zh-10-laser-en1/models/sp15k
Model dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/zh-10-laser-en1/models/sp15k/qrnn_rnd_nl4.m
Training
Loading validation /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/zh-10-laser-en1/zh.dev.csv
Data lm, trn: 13500, val: 1500
Data cls, trn: 10000, val: 1000
Data tst, trn: 1000, val: 4000
Size of vocabulary: 15000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁,', '▁的', '▁。', '▁年', '▁、', '▁在', '▁一', '▁是', '▁中', '▁有']
Starting classifier from random weights
Single training schedule
epoch train_loss valid_loss accuracy
1 0.920411 1.159853 0.629000
2 0.937020 1.371089 0.527000
3 0.892036 3.091183 0.615000
4 0.839919 0.939323 0.724000
5 0.797184 1.174206 0.735000
6 0.774195 0.914951 0.733000
7 0.744524 0.875888 0.762000
8 0.721782 0.825969 0.788000
Total time: 19:53
Saving models at /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/zh-10-laser-en1/models/sp15k/qrnn_rnd_nl4.m
Loss and accuracy using (cls_best): [0.54084456, tensor(0.8145)]
OrderedDict([('data/mldoc/de-10-laser-en1/models/sp15k/qrnn_rnd_nl4.m',
0.9052500128746033),
('data/mldoc/es-10-laser-en1/models/sp15k/qrnn_rnd_nl4.m',
0.6974999904632568),
('data/mldoc/fr-10-laser-en1/models/sp15k/qrnn_rnd_nl4.m',
0.8740000128746033),
('data/mldoc/it-10-laser-en1/models/sp15k/qrnn_rnd_nl4.m',
0.7272499799728394),
('data/mldoc/zh-10-laser-en1/models/sp15k/qrnn_rnd_nl4.m',
0.8144999742507935)])
data/mldoc/de-10-laser-en1/models/sp15k/qrnn_rnd_nl4.m: 0.9052500128746033
data/mldoc/es-10-laser-en1/models/sp15k/qrnn_rnd_nl4.m: 0.6974999904632568
data/mldoc/fr-10-laser-en1/models/sp15k/qrnn_rnd_nl4.m: 0.8740000128746033
data/mldoc/it-10-laser-en1/models/sp15k/qrnn_rnd_nl4.m: 0.7272499799728394
data/mldoc/zh-10-laser-en1/models/sp15k/qrnn_rnd_nl4.m: 0.8144999742507935
```
### MLDoc laser zero shoot 1k
data/mldoc/de-1-laser-en1/models/sp15k/qrnn_nl4-rnd.m: 0.777999997138977
data/mldoc/es-1-laser-en1/models/sp15k/qrnn_nl4-rnd.m: 0.7049999833106995
data/mldoc/fr-1-laser-en1/models/sp15k/qrnn_nl4-rnd.m: 0.7565000057220459
data/mldoc/it-1-laser-en1/models/sp15k/qrnn_nl4-rnd.m: 0.6852499842643738
data/mldoc/ru-1-laser-en1/models/sp15k/qrnn_nl4-rnd.m: 0.6137499809265137
data/mldoc/zh-1-laser-en1/models/sp15k/qrnn_nl4-rnd.m: 0.7919999957084656
```
python -m ulmfit eval --glob="mldoc/*-1/models/sp15k/qrnn_nl4.m" --dataset_template='${lang}-1-laser-en1' --name nl4-rnd --num-cls-epochs=8 --label-smoothing-eps=0.1 --lr_sched=1cycle --bs=18 --random-init=True
Processing data/mldoc/de-1/models/sp15k/qrnn_nl4.m
de-1-laser-en1
Max vocab: 15000
Cache dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-1-laser-en1/models/sp15k
Model dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-1-laser-en1/models/sp15k/qrnn_nl4-rnd.m
Training
Loading validation /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-1-laser-en1/de.dev.csv
Data lm, trn: 13500, val: 1500
Data cls, trn: 1000, val: 1000
Data tst, trn: 1000, val: 4000
Size of vocabulary: 15000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁.', '▁,', '▁der', '▁die', 'en', '▁und', 's', '▁in', 'er', "▁&'"]
/home/pczapla/anaconda3/envs/fastaiv1/lib/python3.7/site-packages/torch/utils/cpp_extension.py:152: UserWarning:
!! WARNING !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Your compiler (c++) may be ABI-incompatible with PyTorch!
Please use a compiler that is ABI-compatible with GCC 4.9 and above.
See https://gcc.gnu.org/onlinedocs/libstdc++/manual/abi.html.
See https://gist.github.com/goldsborough/d466f43e8ffc948ff92de7486c5216d6
for instructions on how to install GCC 4.9 or higher.
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! WARNING !!
warnings.warn(ABI_INCOMPATIBILITY_WARNING.format(compiler))
Starting classifier from random weights
Single training schedule
epoch train_loss valid_loss accuracy
1 1.409097 1.357696 0.412000
2 1.270668 1.920674 0.259000
3 1.121176 1.099281 0.539000
4 1.034688 2.448050 0.263000
5 0.893729 1.306312 0.560000
6 0.794611 0.945334 0.742000
7 0.711580 0.997155 0.703000
8 0.668383 0.877867 0.784000
Total time: 02:21
Saving models at /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-1-laser-en1/models/sp15k/qrnn_nl4-rnd.m
Loss and accuracy using (cls_best): [0.64768696, tensor(0.7780)]
Processing data/mldoc/en-1/models/sp15k/qrnn_nl4.m
en-1-laser-en1
Processing data/mldoc/es-1/models/sp15k/qrnn_nl4.m
es-1-laser-en1
Max vocab: 15000
Cache dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/es-1-laser-en1/models/sp15k
Model dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/es-1-laser-en1/models/sp15k/qrnn_nl4-rnd.m
Training
Loading validation /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/es-1-laser-en1/es.dev.csv
Data lm, trn: 13013, val: 1445
Data cls, trn: 1000, val: 1000
Data tst, trn: 1000, val: 4000
Size of vocabulary: 15000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁de', '▁,', '▁la', '▁.', 's', '▁en', '▁el', '▁y', '▁a', '▁que']
Starting classifier from random weights
Single training schedule
epoch train_loss valid_loss accuracy
1 1.390623 1.330758 0.365000
2 1.226550 1.615878 0.511000
3 1.097214 1.439728 0.532000
4 0.988972 1.093623 0.688000
5 0.872939 1.278118 0.623000
6 0.811549 0.894074 0.779000
7 0.703965 0.821635 0.818000
8 0.630001 0.782405 0.823000
Total time: 02:00
Saving models at /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/es-1-laser-en1/models/sp15k/qrnn_nl4-rnd.m
Loss and accuracy using (cls_best): [0.9085049, tensor(0.7050)]
Processing data/mldoc/fr-1/models/sp15k/qrnn_nl4.m
fr-1-laser-en1
Max vocab: 15000
Cache dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/fr-1-laser-en1/models/sp15k
Model dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/fr-1-laser-en1/models/sp15k/qrnn_nl4-rnd.m
Training
Loading validation /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/fr-1-laser-en1/fr.dev.csv
Data lm, trn: 13500, val: 1500
Data cls, trn: 1000, val: 1000
Data tst, trn: 1000, val: 4000
Size of vocabulary: 15000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁de', '▁,', 's', '▁.', "'", '▁la', '▁le', '▁et', '▁l', '▁à']
Starting classifier from random weights
Single training schedule
epoch train_loss valid_loss accuracy
1 1.331783 1.457629 0.270000
2 1.206117 1.568209 0.442000
3 1.085947 1.397149 0.477000
4 0.965919 1.025710 0.668000
5 0.854985 0.915386 0.732000
6 0.784643 0.922064 0.725000
7 0.691292 0.896307 0.761000
8 0.641204 0.867914 0.785000
Total time: 02:22
Saving models at /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/fr-1-laser-en1/models/sp15k/qrnn_nl4-rnd.m
Loss and accuracy using (cls_best): [0.66897815, tensor(0.7565)]
Processing data/mldoc/it-1/models/sp15k/qrnn_nl4.m
it-1-laser-en1
Max vocab: 15000
Cache dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/it-1-laser-en1/models/sp15k
Model dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/it-1-laser-en1/models/sp15k/qrnn_nl4-rnd.m
Training
Loading validation /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/it-1-laser-en1/it.dev.csv
Data lm, trn: 13500, val: 1500
Data cls, trn: 1000, val: 1000
Data tst, trn: 1000, val: 4000
Size of vocabulary: 15000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁,', '▁.', '▁di', '▁e', "▁&'", "'", '▁il', '▁la', '▁in', 'e']
Starting classifier from random weights
Single training schedule
epoch train_loss valid_loss accuracy
1 1.365793 1.365611 0.388000
2 1.262174 2.729846 0.271000
3 1.109978 1.754144 0.415000
4 0.961007 0.922328 0.731000
5 0.822061 0.961720 0.721000
6 0.724208 0.979705 0.707000
7 0.637849 0.910123 0.754000
8 0.588057 0.915819 0.744000
Total time: 01:25
Saving models at /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/it-1-laser-en1/models/sp15k/qrnn_nl4-rnd.m
Loss and accuracy using (cls_best): [0.9051443, tensor(0.6852)]
Processing data/mldoc/ja-1/models/sp15k/qrnn_nl4.m
ja-1-laser-en1
Processing data/mldoc/ru-1/models/sp15k/qrnn_nl4.m
ru-1-laser-en1
Max vocab: 15000
Cache dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ru-1-laser-en1/models/sp15k
Model dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ru-1-laser-en1/models/sp15k/qrnn_nl4-rnd.m
Training
Loading validation /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ru-1-laser-en1/ru.dev.csv
Data lm, trn: 9195, val: 1021
Data cls, trn: 1000, val: 1000
Data tst, trn: 1000, val: 4000
Size of vocabulary: 15000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁,', '▁.', '▁в', 'а', 'и', 'е', '▁и', 'й', '▁на', 'х']
Starting classifier from random weights
Single training schedule
epoch train_loss valid_loss accuracy
1 1.381033 1.389893 0.231000
2 1.327294 1.474365 0.396000
3 1.190571 2.075783 0.501000
4 1.070966 1.025509 0.611000
5 0.950332 0.956073 0.718000
6 0.812717 1.165698 0.706000
7 0.737636 0.924283 0.778000
8 0.697346 0.947041 0.779000
Total time: 03:16
Saving models at /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ru-1-laser-en1/models/sp15k/qrnn_nl4-rnd.m
Loss and accuracy using (cls_best): [1.2389272, tensor(0.6137)]
Processing data/mldoc/zh-1/models/sp15k/qrnn_nl4.m
zh-1-laser-en1
Max vocab: 15000
Cache dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/zh-1-laser-en1/models/sp15k
Model dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/zh-1-laser-en1/models/sp15k/qrnn_nl4-rnd.m
Training
Loading validation /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/zh-1-laser-en1/zh.dev.csv
Data lm, trn: 13500, val: 1500
Data cls, trn: 1000, val: 1000
Data tst, trn: 1000, val: 4000
Size of vocabulary: 15000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁,', '▁的', '▁。', '▁年', '▁、', '▁在', '▁一', '▁是', '▁中', '▁有']
Starting classifier from random weights
Single training schedule
epoch train_loss valid_loss accuracy
1 1.382525 1.435203 0.328000
2 1.171075 3.494349 0.342000
3 1.044511 1.895226 0.475000
4 0.954990 1.675222 0.473000
5 0.880456 0.954913 0.747000
6 0.808870 1.084140 0.669000
7 0.762522 0.920228 0.770000
8 0.710014 0.894134 0.769000
Total time: 02:22
Saving models at /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/zh-1-laser-en1/models/sp15k/qrnn_nl4-rnd.m
Loss and accuracy using (cls_best): [0.6264392, tensor(0.7920)]
OrderedDict([('data/mldoc/de-1-laser-en1/models/sp15k/qrnn_nl4-rnd.m',
0.777999997138977),
('data/mldoc/es-1-laser-en1/models/sp15k/qrnn_nl4-rnd.m',
0.7049999833106995),
('data/mldoc/fr-1-laser-en1/models/sp15k/qrnn_nl4-rnd.m',
0.7565000057220459),
('data/mldoc/it-1-laser-en1/models/sp15k/qrnn_nl4-rnd.m',
0.6852499842643738),
('data/mldoc/ru-1-laser-en1/models/sp15k/qrnn_nl4-rnd.m',
0.6137499809265137),
('data/mldoc/zh-1-laser-en1/models/sp15k/qrnn_nl4-rnd.m',
0.7919999957084656)])
data/mldoc/de-1-laser-en1/models/sp15k/qrnn_nl4-rnd.m: 0.777999997138977
data/mldoc/es-1-laser-en1/models/sp15k/qrnn_nl4-rnd.m: 0.7049999833106995
data/mldoc/fr-1-laser-en1/models/sp15k/qrnn_nl4-rnd.m: 0.7565000057220459
data/mldoc/it-1-laser-en1/models/sp15k/qrnn_nl4-rnd.m: 0.6852499842643738
data/mldoc/ru-1-laser-en1/models/sp15k/qrnn_nl4-rnd.m: 0.6137499809265137
data/mldoc/zh-1-laser-en1/models/sp15k/qrnn_nl4-rnd.m: 0.7919999957084656
```
### MLDoc Classification on 1k
data/mldoc/de-1/models/sp15k/qrnn_rnd-nl4.m: 0.9024999737739563
data/mldoc/en-1/models/sp15k/qrnn_rnd-nl4.m: 0.8149999976158142
data/mldoc/es-1/models/sp15k/qrnn_rnd-nl4.m: 0.8964999914169312
data/mldoc/fr-1/models/sp15k/qrnn_rnd-nl4.m: 0.8220000267028809
data/mldoc/it-1/models/sp15k/qrnn_rnd-nl4.m: 0.7889999747276306
data/mldoc/ja-1/models/sp15k/qrnn_rnd-nl4.m: 0.8302500247955322
data/mldoc/ru-1/models/sp15k/qrnn_rnd-nl4.m: 0.7319999933242798
data/mldoc/zh-1/models/sp15k/qrnn_rnd-nl4.m: 0.8452500104904175
```
python -m ulmfit eval --glob="wiki/*-100/models/sp15k/qrnn_rnd-nl4.m" --name rnd-nl4 --dataset-template='../mldoc/${lang}-1' --num-lm-epochs=0 --num-cls-epochs=8 --bs=18 --lr_sched=1cycle --label-smoothing-eps=0.1
Processing data/wiki/de-100/models/sp15k/qrnn_rnd-nl4.m
../mldoc/de-1
Max vocab: 15000
Cache dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-1/models/sp15k
Model dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-1/models/sp15k/qrnn_rnd-nl4.m
Training
Loading validation /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-1/de.dev.csv
Data lm, trn: 13500, val: 1500
Data cls, trn: 1000, val: 1000
Data tst, trn: 1000, val: 4000
Size of vocabulary: 15000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁.', '▁,', '▁der', '▁die', 'en', '▁und', 's', '▁in', 'er', "▁&'"]
Training args: {'clip': 0.12, 'alpha': 2, 'beta': 1, 'drop_mult': 0.3} dps: {'output_p': 0.25, 'hidden_p': 0.1, 'input_p': 0.2, 'embed_p': 0.02, 'weight_p': 0.15}
/home/pczapla/anaconda3/envs/fastaiv1/lib/python3.7/site-packages/torch/utils/cpp_extension.py:152: UserWarning:
!! WARNING !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Your compiler (c++) may be ABI-incompatible with PyTorch!
Please use a compiler that is ABI-compatible with GCC 4.9 and above.
See https://gcc.gnu.org/onlinedocs/libstdc++/manual/abi.html.
See https://gist.github.com/goldsborough/d466f43e8ffc948ff92de7486c5216d6
for instructions on how to install GCC 4.9 or higher.
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! WARNING !!
warnings.warn(ABI_INCOMPATIBILITY_WARNING.format(compiler))
Loading pretrained model
Unknown tokens 0, first 100: []
Bptt 70
/home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-1/models/sp15k
Saving info /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-1/models/sp15k/qrnn_rnd-nl4.m/info.json
Single training schedule
epoch train_loss valid_loss accuracy
1 1.411651 1.386593 0.265000
2 1.287022 1.488027 0.361000
3 1.084153 2.390431 0.370000
4 0.904227 0.936213 0.769000
5 0.740495 1.311880 0.538000
6 0.642756 0.754690 0.833000
7 0.582816 0.661088 0.892000
8 0.548893 0.683635 0.875000
Total time: 02:13
Saving models at /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-1/models/sp15k/qrnn_rnd-nl4.m
Loss and accuracy using (cls_best): [0.33525154, tensor(0.9025)]
Processing data/wiki/en-100/models/sp15k/qrnn_rnd-nl4.m
../mldoc/en-1
Max vocab: 15000
Cache dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/en-1/models/sp15k
Model dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/en-1/models/sp15k/qrnn_rnd-nl4.m
Training
Loading validation /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/en-1/en.dev.csv
Data lm, trn: 13500, val: 1500
Data cls, trn: 1000, val: 1000
Data tst, trn: 1000, val: 4000
Size of vocabulary: 15000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁the', '▁,', 's', '▁.', '▁of', '▁and', '▁in', '▁to', '▁a', 'ed']
Training args: {'clip': 0.12, 'alpha': 2, 'beta': 1, 'drop_mult': 0.3} dps: {'output_p': 0.25, 'hidden_p': 0.1, 'input_p': 0.2, 'embed_p': 0.02, 'weight_p': 0.15}
Loading pretrained model
Unknown tokens 0, first 100: []
Bptt 70
/home/pczapla/workspace/ulmfit-multilingual/data/mldoc/en-1/models/sp15k
Saving info /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/en-1/models/sp15k/qrnn_rnd-nl4.m/info.json
Single training schedule
epoch train_loss valid_loss accuracy
1 1.369466 1.356636 0.374000
2 1.263357 2.515120 0.320000
3 1.119744 1.250081 0.569000
4 0.949653 1.033515 0.666000
5 0.802069 0.875799 0.779000
6 0.676997 0.842525 0.807000
7 0.613777 0.794573 0.826000
8 0.571342 0.781615 0.837000
Total time: 02:26
Saving models at /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/en-1/models/sp15k/qrnn_rnd-nl4.m
Loss and accuracy using (cls_best): [0.5295334, tensor(0.8150)]
Processing data/wiki/es-100/models/sp15k/qrnn_rnd-nl4.m
../mldoc/es-1
Max vocab: 15000
Cache dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/es-1/models/sp15k
Model dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/es-1/models/sp15k/qrnn_rnd-nl4.m
Training
Loading validation /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/es-1/es.dev.csv
Data lm, trn: 13013, val: 1445
Data cls, trn: 1000, val: 1000
Data tst, trn: 1000, val: 4000
Size of vocabulary: 15000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁de', '▁,', '▁la', '▁.', 's', '▁en', '▁el', '▁y', '▁a', '▁que']
Training args: {'clip': 0.12, 'alpha': 2, 'beta': 1, 'drop_mult': 0.3} dps: {'output_p': 0.25, 'hidden_p': 0.1, 'input_p': 0.2, 'embed_p': 0.02, 'weight_p': 0.15}
Loading pretrained model
Unknown tokens 2621, first 100: ['▁sa', '▁i', 'ncia', '▁ka', '▁k', '▁tra', '▁fi', '▁volvi', '▁g', '▁man', '▁pasó', '▁tropas', 'pon', 'tuvieron', '▁x', '▁les', '▁empez', 'ieron', '▁bas', 'sco', '▁cam', '▁adapta', 'sion', '▁mol', 'pico', 'siones', '▁obstante', '▁!', '▁w', 'cular', 'puesta', '▁inten', '▁produj', 'clu', 'simismo', '▁pas', 'fla', '▁amerindio', 'aje', '▁deja', '▁fre', '▁jo', '▁2.', 'american', '▁cre', 'bajo', '▁medi', 'gla', '▁dirigi', 'hol', '▁aparición', 'aciones', 'vivi', 'eras', 'spe', '▁continu', '▁permaneci', '▁ber', 'usa', 'bió', '▁permitió', '▁municipios', '▁regres', 'rt', 'mbi', '▁pr', '▁ofreci', 'emi', 'misiones', '▁cap', '▁ram', 'icio', '▁wal', 'fru', '▁gen', '▁originalmente', '▁eva', '▁ferr', '▁descubri', '▁aparecen', '▁fon', 'capi', 'estre', 'pec', '▁vendi', 'iéndose', 'eja', 'liber', 'nsa', 'ológico', 'ío', 'blo', '▁tro', '▁aviones', 'cara', '▁activo', 'mostró', 'disciplina', '▁ara', 'estra']
Bptt 70
/home/pczapla/workspace/ulmfit-multilingual/data/mldoc/es-1/models/sp15k
Saving info /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/es-1/models/sp15k/qrnn_rnd-nl4.m/info.json
Single training schedule
epoch train_loss valid_loss accuracy
1 1.378275 1.354129 0.314000
2 1.209560 1.333649 0.507000
3 1.022200 0.820093 0.801000
4 0.854187 1.782254 0.389000
5 0.722861 1.031932 0.692000
6 0.640640 0.762994 0.853000
7 0.583225 0.677089 0.901000
8 0.556481 0.652575 0.904000
Total time: 01:59
Saving models at /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/es-1/models/sp15k/qrnn_rnd-nl4.m
Loss and accuracy using (cls_best): [0.35487488, tensor(0.8965)]
Processing data/wiki/fr-100/models/sp15k/qrnn_rnd-nl4.m
../mldoc/fr-1
Max vocab: 15000
Cache dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/fr-1/models/sp15k
Model dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/fr-1/models/sp15k/qrnn_rnd-nl4.m
Training
Loading validation /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/fr-1/fr.dev.csv
Data lm, trn: 13500, val: 1500
Data cls, trn: 1000, val: 1000
Data tst, trn: 1000, val: 4000
Size of vocabulary: 15000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁de', '▁,', 's', '▁.', "'", '▁la', '▁le', '▁et', '▁l', '▁à']
Training args: {'clip': 0.12, 'alpha': 2, 'beta': 1, 'drop_mult': 0.3} dps: {'output_p': 0.25, 'hidden_p': 0.1, 'input_p': 0.2, 'embed_p': 0.02, 'weight_p': 0.15}
Loading pretrained model
Unknown tokens 0, first 100: []
Bptt 70
/home/pczapla/workspace/ulmfit-multilingual/data/mldoc/fr-1/models/sp15k
Saving info /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/fr-1/models/sp15k/qrnn_rnd-nl4.m/info.json
Single training schedule
epoch train_loss valid_loss accuracy
1 1.360408 1.298057 0.444000
2 1.251207 2.454086 0.393000
3 1.098488 1.152682 0.544000
4 0.926239 1.256870 0.622000
5 0.806994 0.911339 0.732000
6 0.717139 0.945148 0.726000
7 0.635195 0.781772 0.825000
8 0.602214 0.763521 0.825000
Total time: 02:17
Saving models at /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/fr-1/models/sp15k/qrnn_rnd-nl4.m
Loss and accuracy using (cls_best): [0.52210134, tensor(0.8220)]
Processing data/wiki/it-100/models/sp15k/qrnn_rnd-nl4.m
../mldoc/it-1
Max vocab: 15000
Cache dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/it-1/models/sp15k
Model dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/it-1/models/sp15k/qrnn_rnd-nl4.m
Training
Loading validation /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/it-1/it.dev.csv
Data lm, trn: 13500, val: 1500
Data cls, trn: 1000, val: 1000
Data tst, trn: 1000, val: 4000
Size of vocabulary: 15000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁,', '▁.', '▁di', '▁e', "▁&'", "'", '▁il', '▁la', '▁in', 'e']
Training args: {'clip': 0.12, 'alpha': 2, 'beta': 1, 'drop_mult': 0.3} dps: {'output_p': 0.25, 'hidden_p': 0.1, 'input_p': 0.2, 'embed_p': 0.02, 'weight_p': 0.15}
Loading pretrained model
Unknown tokens 0, first 100: []
Bptt 70
/home/pczapla/workspace/ulmfit-multilingual/data/mldoc/it-1/models/sp15k
Saving info /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/it-1/models/sp15k/qrnn_rnd-nl4.m/info.json
Single training schedule
epoch train_loss valid_loss accuracy
1 1.357973 1.353393 0.293000
2 1.282061 1.535401 0.390000
3 1.144333 1.480346 0.533000
4 0.985930 1.360542 0.540000
5 0.862014 1.285450 0.661000
6 0.720891 1.140574 0.629000
7 0.625376 0.840085 0.791000
8 0.572435 0.828283 0.793000
Total time: 01:21
Saving models at /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/it-1/models/sp15k/qrnn_rnd-nl4.m
Loss and accuracy using (cls_best): [0.5931235, tensor(0.7890)]
Processing data/wiki/ja-100/models/sp15k/qrnn_rnd-nl4.m
../mldoc/ja-1
Max vocab: 15000
Cache dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ja-1/models/sp15k
Model dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ja-1/models/sp15k/qrnn_rnd-nl4.m
Training
Loading validation /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ja-1/ja.dev.csv
Data lm, trn: 13500, val: 1500
Data cls, trn: 1000, val: 1000
Data tst, trn: 1000, val: 4000
Size of vocabulary: 15000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁、', '▁。', '▁の', '▁に', '▁を', '▁年', 'の', '▁は', '▁・', '▁)']
Training args: {'clip': 0.12, 'alpha': 2, 'beta': 1, 'drop_mult': 0.3} dps: {'output_p': 0.25, 'hidden_p': 0.1, 'input_p': 0.2, 'embed_p': 0.02, 'weight_p': 0.15}
Loading pretrained model
Unknown tokens 0, first 100: []
Bptt 70
/home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ja-1/models/sp15k
Saving info /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ja-1/models/sp15k/qrnn_rnd-nl4.m/info.json
Single training schedule
epoch train_loss valid_loss accuracy
1 1.377756 1.402221 0.254000
2 1.243837 7.998792 0.254000
3 1.066383 2.645358 0.354000
4 0.903686 1.348676 0.541000
5 0.843216 0.945152 0.743000
6 0.759674 0.801283 0.810000
7 0.689767 0.786832 0.820000
8 0.674777 0.778615 0.818000
Total time: 02:48
Saving models at /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ja-1/models/sp15k/qrnn_rnd-nl4.m
Loss and accuracy using (cls_best): [0.5008588, tensor(0.8303)]
Processing data/wiki/ru-100/models/sp15k/qrnn_rnd-nl4.m
../mldoc/ru-1
Max vocab: 15000
Cache dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ru-1/models/sp15k
Model dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ru-1/models/sp15k/qrnn_rnd-nl4.m
Training
Loading validation /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ru-1/ru.dev.csv
Running tokenization lm...
Data lm, trn: 9195, val: 1021
Running tokenization cls...
Data cls, trn: 1000, val: 1000
Running tokenization tst...
Data tst, trn: 1000, val: 4000
Size of vocabulary: 15000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁,', '▁.', '▁в', 'а', 'и', 'е', '▁и', 'й', '▁на', 'х']
Training args: {'clip': 0.12, 'alpha': 2, 'beta': 1, 'drop_mult': 0.3} dps: {'output_p': 0.25, 'hidden_p': 0.1, 'input_p': 0.2, 'embed_p': 0.02, 'weight_p': 0.15}
Loading pretrained model
Unknown tokens 0, first 100: []
Bptt 70
/home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ru-1/models/sp15k
Saving info /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ru-1/models/sp15k/qrnn_rnd-nl4.m/info.json
Single training schedule
epoch train_loss valid_loss accuracy
1 1.394592 1.393761 0.265000
2 1.381886 1.476836 0.293000
3 1.258016 1.153065 0.555000
4 1.105392 1.323574 0.556000
5 0.948704 1.049486 0.703000
6 0.848964 1.480141 0.605000
7 0.757975 1.001765 0.723000
8 0.684587 0.982136 0.741000
Total time: 03:07
Saving models at /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ru-1/models/sp15k/qrnn_rnd-nl4.m
Loss and accuracy using (cls_best): [0.7138667, tensor(0.7320)]
Processing data/wiki/zh-100/models/sp15k/qrnn_rnd-nl4.m
../mldoc/zh-1
Max vocab: 15000
Cache dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/zh-1/models/sp15k
Model dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/zh-1/models/sp15k/qrnn_rnd-nl4.m
Training
Loading validation /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/zh-1/zh.dev.csv
Data lm, trn: 13500, val: 1500
Data cls, trn: 1000, val: 1000
Data tst, trn: 1000, val: 4000
Size of vocabulary: 15000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁,', '▁的', '▁。', '▁年', '▁、', '▁在', '▁一', '▁是', '▁中', '▁有']
Training args: {'clip': 0.12, 'alpha': 2, 'beta': 1, 'drop_mult': 0.3} dps: {'output_p': 0.25, 'hidden_p': 0.1, 'input_p': 0.2, 'embed_p': 0.02, 'weight_p': 0.15}
Loading pretrained model
Unknown tokens 0, first 100: []
Bptt 70
/home/pczapla/workspace/ulmfit-multilingual/data/mldoc/zh-1/models/sp15k
Saving info /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/zh-1/models/sp15k/qrnn_rnd-nl4.m/info.json
Single training schedule
epoch train_loss valid_loss accuracy
1 1.341714 1.208123 0.569000
2 1.059330 1.169385 0.662000
3 0.926222 0.771242 0.824000
4 0.843994 1.997928 0.524000
5 0.800537 0.874480 0.756000
6 0.710552 0.909481 0.758000
7 0.657595 0.719883 0.854000
8 0.617662 0.727267 0.852000
Total time: 02:20
Saving models at /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/zh-1/models/sp15k/qrnn_rnd-nl4.m
Loss and accuracy using (cls_best): [0.48266637, tensor(0.8453)]
OrderedDict([('data/mldoc/de-1/models/sp15k/qrnn_rnd-nl4.m',
0.9024999737739563),
('data/mldoc/en-1/models/sp15k/qrnn_rnd-nl4.m',
0.8149999976158142),
('data/mldoc/es-1/models/sp15k/qrnn_rnd-nl4.m',
0.8964999914169312),
('data/mldoc/fr-1/models/sp15k/qrnn_rnd-nl4.m',
0.8220000267028809),
('data/mldoc/it-1/models/sp15k/qrnn_rnd-nl4.m',
0.7889999747276306),
('data/mldoc/ja-1/models/sp15k/qrnn_rnd-nl4.m',
0.8302500247955322),
('data/mldoc/ru-1/models/sp15k/qrnn_rnd-nl4.m',
0.7319999933242798),
('data/mldoc/zh-1/models/sp15k/qrnn_rnd-nl4.m',
0.8452500104904175)])
data/mldoc/de-1/models/sp15k/qrnn_rnd-nl4.m: 0.9024999737739563
data/mldoc/en-1/models/sp15k/qrnn_rnd-nl4.m: 0.8149999976158142
data/mldoc/es-1/models/sp15k/qrnn_rnd-nl4.m: 0.8964999914169312
data/mldoc/fr-1/models/sp15k/qrnn_rnd-nl4.m: 0.8220000267028809
data/mldoc/it-1/models/sp15k/qrnn_rnd-nl4.m: 0.7889999747276306
data/mldoc/ja-1/models/sp15k/qrnn_rnd-nl4.m: 0.8302500247955322
data/mldoc/ru-1/models/sp15k/qrnn_rnd-nl4.m: 0.7319999933242798
data/mldoc/zh-1/models/sp15k/qrnn_rnd-nl4.m: 0.8452500104904175
```
-174
View File
@@ -1,174 +0,0 @@
## 100 ex. pseudo labeling bootstrapping
## Laser pseudo labeling bootstrapping
```
Processing data/mldoc/de-1-laser-en1/models/sp15k/qrnn_nl4.m
Max vocab: 15000
Cache dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-1-laser-en1/models/sp15k
Model dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-1-laser-en1/models/sp15k/qrnn_nl4.m
Generating pseduolabels data/mldoc/de-1-laser-en1-ps
Loading validation /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/de-1-laser-en1/de.dev.csv
Data lm, trn: 13500, val: 1500
Data cls, trn: 1000, val: 1000
Data tst, trn: 1000, val: 4000
Size of vocabulary: 15000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁.', '▁,', '▁der', '▁die', 'en', '▁und', 's', '▁in', 'er', "▁&'"]
/home/pczapla/anaconda3/envs/fastaiv1/lib/python3.7/site-packages/torch/utils/cpp_extension.py:152: UserWarning:
!! WARNING !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Your compiler (c++) may be ABI-incompatible with PyTorch!
Please use a compiler that is ABI-compatible with GCC 4.9 and above.
See https://gcc.gnu.org/onlinedocs/libstdc++/manual/abi.html.
See https://gist.github.com/goldsborough/d466f43e8ffc948ff92de7486c5216d6
for instructions on how to install GCC 4.9 or higher.
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! WARNING !!
warnings.warn(ABI_INCOMPATIBILITY_WARNING.format(compiler))
Generating train dataset of size 1000, the accuracy is 0.997
0 1 preds
0 3 Tokio (Reuter) - Der Dollar ist am Donnerstag ... 3
1 3 Kairo (Reuter) - Die ägyptische Zentralbank se... 3
2 2 Bonn (Reuter) - Wegen einer Bombendrohung ist ... 2
3 0 Berlin (Reuter) - Die Bahn AG will mit Hilfe p... 0
4 3 08.15 Uhr MEZ - Deutsche Aktien nach den Rekor... 3
Generating dev dataset of size 1000, the accuracy is 0.91
0 1 preds
0 1 New York (Reuter) - Das Vertrauen der US-Verbr... 1
1 2 Tokio (Reuter) - Russische Patrouillenboote ha... 2
2 2 Paris (Reuter) - Bei der Volksabstimmung in Al... 2
3 2 Belgrad (Reuter) - Die serbische Polizei hat n... 2
4 0 München (Reuter) - Der Stuttgarter Bosch-Konze... 0
Processing data/mldoc/es-1-laser-en1/models/sp15k/qrnn_nl4.m
Max vocab: 15000
Cache dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/es-1-laser-en1/models/sp15k
Model dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/es-1-laser-en1/models/sp15k/qrnn_nl4.m
Generating pseduolabels data/mldoc/es-1-laser-en1-ps
Loading validation /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/es-1-laser-en1/es.dev.csv
Data lm, trn: 13013, val: 1445
Data cls, trn: 1000, val: 1000
Data tst, trn: 1000, val: 4000
Size of vocabulary: 15000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁de', '▁,', '▁la', '▁.', 's', '▁en', '▁el', '▁y', '▁a', '▁que']
Generating train dataset of size 1000, the accuracy is 0.988
0 1 preds
0 3 LONDRES, 5 sep (Reuter) - El dólar se mantenía... 3
1 2 MADRID, 30 dic (Reuter) - La Generalitat de Va... 2
2 3 PARIS, 30 jun (Reuter) - La Bolsa de París neg... 3
3 0 MADRID, 23 dic (Reuter) - La agencia de valore... 0
4 0 MADRID, 4 Feb (Reuter) - El Banco Bilbao Vizca... 0
Generating dev dataset of size 1000, the accuracy is 0.879
0 1 preds
0 0 NUEVA YORK, 11 abr (Reuter) - MCI Communicatio... 0
1 3 FRANCFORT, 17 jun (Reuter) - La Bolsa de Franc... 3
2 2 BONN, 3 jun (Reuter) - Un destacado miembro de... 1
3 2 LONDRES, 3 sep (Reuter) - El secretario de Def... 2
4 3 MADRID, 3 oct (Reuter) - Las acciones de Pryca... 3
Processing data/mldoc/fr-1-laser-en1/models/sp15k/qrnn_nl4.m
Max vocab: 15000
Cache dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/fr-1-laser-en1/models/sp15k
Model dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/fr-1-laser-en1/models/sp15k/qrnn_nl4.m
Generating pseduolabels data/mldoc/fr-1-laser-en1-ps
Loading validation /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/fr-1-laser-en1/fr.dev.csv
Data lm, trn: 13500, val: 1500
Data cls, trn: 1000, val: 1000
Data tst, trn: 1000, val: 4000
Size of vocabulary: 15000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁de', '▁,', 's', '▁.', "'", '▁la', '▁le', '▁et', '▁l', '▁à']
Generating train dataset of size 1000, the accuracy is 0.993
0 1 preds
0 2 WASHINGTON, 13 septembre, Reuter - Les Etats-U... 2
1 1 PARIS, 10 juillet, Reuter - L'audit des financ... 1
2 2 MOSCOU, 29 mai, Reuter - Après l'accord interv... 2
3 2 PARIS, 1er octobre, Reuter - Le groupe communi... 2
4 0 LONDRES, 3 juin, Reuter - National Grid Group ... 0
Generating dev dataset of size 1000, the accuracy is 0.887
0 1 preds
0 1 PARIS, 30 décembre, Reuter - Zodiac . Chiffre ... 0
1 0 AJACCIO, 11 décembre, Reuter - Une charge de 7... 2
2 0 BRUXELLES, 26 décembre, Reuter - 1997 s'annonc... 0
3 0 PARIS, 26 septembre, Reuter - Alcatel Alsthom ... 0
4 1 NEW YORK, 25 octobre, Reuter - La hausse plus ... 1
Processing data/mldoc/it-1-laser-en1/models/sp15k/qrnn_nl4.m
Max vocab: 15000
Cache dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/it-1-laser-en1/models/sp15k
Model dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/it-1-laser-en1/models/sp15k/qrnn_nl4.m
Generating pseduolabels data/mldoc/it-1-laser-en1-ps
Loading validation /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/it-1-laser-en1/it.dev.csv
Data lm, trn: 13500, val: 1500
Data cls, trn: 1000, val: 1000
Data tst, trn: 1000, val: 4000
Size of vocabulary: 15000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁,', '▁.', '▁di', '▁e', "▁&'", "'", '▁il', '▁la', '▁in', 'e']
Generating train dataset of size 1000, the accuracy is 0.987
0 1 preds
0 3 MILANO, 6 nov (Reuter) - La lira recupera ai p... 3
1 1 MILANO, 20 giugno (Reuter) - Lo stacco dividen... 1
2 3 MILANO, 20 set (Reuter) - Olivetti entra nel t... 3
3 1 LONDRA, 2 aprile (Reuter) - L'aggregato moneta... 1
4 3 Oro Londra fix ore 10,30 - 4 nov - $378,65. (c... 3
Generating dev dataset of size 1000, the accuracy is 0.819
0 1 preds
0 0 L'istituto prevede un aumento dell'utile opera... 0
1 1 FRANCOFORTE, 18 dic (Reuter) - La Bundesbank a... 1
2 1 TOKIO, 28 agosto (Reuter) - Il ministro delle ... 1
3 1 ROMA, 23 luglio (Reuter) - Il presidente del C... 1
4 1 MONACO, 19 marzo (Reuter) - Il ministro delle ... 1
Processing data/mldoc/ru-1-laser-en1/models/sp15k/qrnn_nl4.m
Max vocab: 15000
Cache dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ru-1-laser-en1/models/sp15k
Model dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ru-1-laser-en1/models/sp15k/qrnn_nl4.m
Generating pseduolabels data/mldoc/ru-1-laser-en1-ps
Loading validation /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ru-1-laser-en1/ru.dev.csv
Data lm, trn: 9195, val: 1021
Data cls, trn: 1000, val: 1000
Data tst, trn: 1000, val: 4000
Size of vocabulary: 15000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁,', '▁.', '▁в', 'а', 'и', 'е', '▁и', 'й', '▁на', 'х']
Generating train dataset of size 1000, the accuracy is 0.996
0 1 preds
0 0 КИЕВ, 20 июн (Рейтер) - Нацбанк Украины планир... 0
1 3 МИНСК, 13 фев (Рейтер) - Курс белорусского руб... 3
2 0 САНКТ-ПЕТЕРБУРГ, 25 авг (Рейтер) - Астробанк (... 0
3 0 MOSCOW, Feb 7 (Reuter) - U.S. plane-maker Boei... 0
4 2 В данном обзоре казахстанской прессы приводитс... 2
Generating dev dataset of size 1000, the accuracy is 0.837
0 1 preds
0 0 ТБИЛИСИ, 25 мар (Рейтер) - Партнерский Фонд, с... 0
1 3 МОСКВА, 3 ноя (Рейтер) - Казахстанская Межбанк... 3
2 1 КИЕВ, 25 июл (Рейтер) - Нацбанк Украины рассмо... 1
3 0 МОСКВА, 2 дек (Рейтер) - АО Уралсвязьинформ пр... 0
4 2 В данном обзоре киргизской прессы приводится к... 2
Processing data/mldoc/zh-1-laser-en1/models/sp15k/qrnn_nl4.m
Max vocab: 15000
Cache dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/zh-1-laser-en1/models/sp15k
Model dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/zh-1-laser-en1/models/sp15k/qrnn_nl4.m
Generating pseduolabels data/mldoc/zh-1-laser-en1-ps
Loading validation /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/zh-1-laser-en1/zh.dev.csv
Data lm, trn: 13500, val: 1500
Data cls, trn: 1000, val: 1000
Data tst, trn: 1000, val: 4000
Size of vocabulary: 15000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁,', '▁的', '▁。', '▁年', '▁、', '▁在', '▁一', '▁是', '▁中', '▁有']
Generating train dataset of size 1000, the accuracy is 0.992
0 1 preds
0 1 〔路透社紐約10日電〕  芝加哥聯邦準備銀行總裁墨斯克週四表示,他預期1997年國內生產總值... 1
1 0 〔路透社台北14日電〕台灣合作金庫週四將2週、1個月及2個月內的附條件交易利率全開在5.20... 0
2 1 〔路透社倫敦6日電〕  在英國工黨政府賦予央行利率自主權後,英國央行在其新的首次貨幣政策委員... 1
3 3 〔路透社東京4日電〕  東京股市週一收盤下跌,但在短暫跌破關鍵支撐19,500點後縮減跌幅.... 3
4 2 美國總統克林頓接受明報訪問時表示,美國是貫徹始終地支持中英''聯合聲明''作為香港未來的基石... 2
Generating dev dataset of size 1000, the accuracy is 0.817
0 1 preds
0 0 〔路透社台北20日電〕  台灣塑膠類週一早盤上漲,經紀商表示,主要是因為近期原物料價格上漲及... 0
1 2 〔路透社華盛頓2日電〕比利時央行總裁弗沛雷茲週三表示,義大利里拉被低估,但美元可望攀升. ... 1
2 0 〔路透社吉隆坡29日電〕  吉隆坡股市周二收市微升.分析師指二線股有散戶吸納,助長市場升勢,... 3
3 2 〔路透社香港26日電〕  香港明報周四報導,面對台灣當局的"務實外交",和"台獨"傾向,中國... 2
4 0 [路透社上海6日電] 據上海証券報周五報導,有關專家就滬市四家上市公司法人股通過拍賣進... 0
Python 3.7.0 (default, Oct 9 2018, 10:31:47)
Type 'copyright', 'credits' or 'license' for more information
```
-86
View File
@@ -1,86 +0,0 @@
# QRNN DE
## SP30k nl
### LM
```
python -m ulmfit lm --dataset-path data/wiki/de-100 --bidir=False --qrnn=True --nl 4 --tokenizer='sp' --max-vocab 30000 --lang de --name 'nl4' --cuda-id=0 - train 10 --drop-mult=0 --bs=50
Size of vocabulary: 30000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁.', '▁,', '▁der', '▁die', '▁und', '▁in', "▁&'", 'en', 's', '-']
Training args: {'clip': 0.12, 'alpha': 2, 'beta': 1, 'drop_mult': 0} dps: {'output_p': 0.25, 'hidden_p': 0.1, 'input_p': 0.2, 'embed_p': 0.02, 'weight_p': 0.15}
Training lm from random weights
epoch train_loss valid_loss accuracy
1 2.790653 2.867094 0.511392
2 2.742032 2.843288 0.510885
3 2.696114 2.833874 0.512062
4 2.671780 2.786312 0.516448
5 2.611292 2.725993 0.522723
6 2.542737 2.655713 0.530968
7 2.572076 2.582141 0.539928
8 2.465960 2.509654 0.549987
9 2.405682 2.448580 0.558674
10 2.339395 2.428111 0.562502
```
### MLDocs
```
python -m ulmfit cls --dataset-path data/mldoc/de-1 --cuda-id=0 --base-lm-path data-filtered/data/wiki/de-100/models/sp30k/qrnn_nl4.m --lang=de --name 'nl4' - train 20 --bs 40 --cls-max-len 700
Max vocab: 30000
Cache dir: /home/marcin/github/n-waves/ulmfit-multilingual/data/mldoc/de-1/models/sp30k
Model dir: /home/marcin/github/n-waves/ulmfit-multilingual/data/mldoc/de-1/models/sp30k/qrnn_nl4.m
Loading validation /home/marcin/github/n-waves/ulmfit-multilingual/data/mldoc/de-1/de.dev.csv
Running tokenization...
Saving tokenized: cls.trn 13500, cls.val 1500
Running tokenization...
Saving tokenized: cls.trn 1000, cls.val 1000
Size of vocabulary: 30000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁.', '▁,', '▁der', '▁die', '▁und', '▁in', "▁&'", 'en', 's', '-']
Training args: {'clip': 0.12, 'alpha': 2, 'beta': 1, 'drop_mult': 0.3} dps: {'output_p': 0.25, 'hidden_p': 0.1, 'input_p': 0.2, 'embed_p': 0.02, 'weight_p': 0.15}
Loading pretrained model
Unknown tokens 0, first 100: []
Training lm from: [PosixPath('/home/marcin/github/n-waves/ulmfit-multilingual/data-filtered/data/wiki/de-100/models/sp30k/qrnn_nl4.m/lm_best'), PosixPath('/home/marcin/github/n-waves/ulmfit-multilingual/data-filtered/data/wiki/de-100/models/sp30k/qrnn_nl4.m/../itos')]
epoch train_loss valid_loss accuracy
1 3.450698 2.601732 0.527671
epoch train_loss valid_loss accuracy
1 2.888087 2.477170 0.542949
2 2.621279 2.300024 0.568743
3 2.313220 2.120824 0.592728
4 2.176746 1.973596 0.613343
5 2.114441 1.857317 0.628628
6 2.022593 1.765069 0.642017
7 1.936942 1.696150 0.651549
8 1.860200 1.622848 0.661923
9 1.795039 1.549579 0.673416
10 1.740739 1.500053 0.681305
11 1.695835 1.448141 0.689201
12 1.605702 1.402924 0.697096
13 1.582328 1.354327 0.706123
14 1.548034 1.316290 0.712870
15 1.496170 1.282155 0.719413
16 1.514243 1.255556 0.724801
17 1.482411 1.236461 0.728380
18 1.458308 1.223498 0.730708
19 1.422691 1.218288 0.731713
20 1.380592 1.217068 0.731893
/home/marcin/github/n-waves/ulmfit-multilingual/data/mldoc/de-1/models/sp30k
Saving info /home/marcin/github/n-waves/ulmfit-multilingual/data/mldoc/de-1/models/sp30k/qrnn_nl4.m/info.json
Starting classifier training
epoch train_loss valid_loss accuracy
1 0.529402 0.376163 0.900000
Better model found at epoch 1 with val_loss value: 0.3761630356311798.
epoch train_loss valid_loss accuracy
1 0.290838 0.252989 0.916000
Better model found at epoch 1 with val_loss value: 0.25298893451690674.
epoch train_loss valid_loss accuracy
1 0.184352 0.204892 0.941000
Better model found at epoch 1 with val_loss value: 0.20489171147346497.
epoch train_loss valid_loss accuracy
1 0.113328 0.204136 0.947000
Better model found at epoch 1 with val_loss value: 0.20413607358932495.
2 0.106220 0.200674 0.949000
Better model found at epoch 2 with val_loss value: 0.20067360997200012.
Saving models at /home/marcin/github/n-waves/ulmfit-multilingual/data/mldoc/de-1/models/sp30k/qrnn_nl4.m
Loss and accuracy using (cls_best): [0.15208693, tensor(0.9532)]
0.15208692848682404
0.953249990940094
```
-141
View File
@@ -1,141 +0,0 @@
# QRNN EN
## SP15k nl 4
```
python -m ulmfit lm --dataset-path data/wiki/${LANG}-100 --tokenizer='sp' --nl 4 --name 'nl4' --m
ax-vocab 15000 --lang ${LANG} --qrnn=True - train 10 --bs=50 --drop_mult=0
Max vocab: 15000
Cache dir: data/wiki/en-100/models/sp15k
Model dir: data/wiki/en-100/models/sp15k/qrnn_nl4.m
Wiki text was split to 28476 articles
Wiki text was split to 60 articles
Data lm, trn: 28476, val: 60
Size of vocabulary: 15000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁the', '▁,', 's', '▁.', '▁of', '▁and', '▁in', '▁to', '▁a', 'ed']
Training args: {'clip': 0.12, 'alpha': 2, 'beta': 1, 'drop_mult': 0} dps: {'output_p': 0.25, 'hidden_p': 0.1, 'input_p': 0.2, 'embed_p': 0.02, 'weight_p': 0.15}
Training lm from random weights
epoch train_loss valid_loss accuracy
1 3.080874 3.197244 0.431796
2 3.021043 3.147150 0.433593
3 2.933366 3.125982 0.435766
4 2.905764 3.103272 0.437356
5 2.867981 3.032923 0.445030
6 2.815294 2.958662 0.453979
7 2.733671 2.869483 0.466015
8 2.744779 2.785220 0.475833
9 2.717722 2.704370 0.487687
10 2.666089 2.675301 0.493602
Total time: 9:07:27
data/wiki/en-100/models/sp15k
Saving info data/wiki/en-100/models/sp15k/qrnn_nl4.m/info.json
```
## SP30k nl 4
### LM
```
python -m ulmfit lm --dataset-path data/wiki/wikitext-103 --bidir=False --qrnn=True --nl 4 --tokenizer='sp' --max-vocab 30000 --lang en --name 'nl4' --cuda-id=1 - train 10 --drop-mult=0 --bs=50
Size of vocabulary: 30000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁the', '▁,', '▁.', 's', '▁of', '▁and', '▁in', '▁to', '▁a', 'ed']
Training args: {'clip': 0.12, 'alpha': 2, 'beta': 1, 'drop_mult': 0.5} dps: {'output_p': 0.25, 'hidden_p': 0.1, 'input_p': 0.2, 'embed_p': 0.02, 'weight_p': 0.15}
Training lm from random weights
epoch train_loss valid_loss accuracy
1 3.184221 3.256314 0.438527
2 3.084555 3.241498 0.435628
3 3.099060 3.258447 0.435060
4 3.119621 3.220939 0.437597
5 3.073662 3.165012 0.445108
6 2.938047 3.086962 0.452921
7 2.920506 2.998151 0.462940
8 2.920506 2.899240 0.474378
9 2.862836 2.835098 0.485305
10 2.891070 2.810929 0.489867
```
### LM, BS=128, drop-mult=0.5
```
python -m ulmfit lm --dataset-path data/wiki/wikitext-103 --bidir=False --qrnn=True --nl 4 --tokenizer='sp' --max-vocab 30000 --lang en --name 'nl4-bs128' --cuda-id=1 - train 10 --drop-mult=0.5 --bs=128
Size of vocabulary: 30000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁the', '▁,', '▁.', 's', '▁of', '▁and', '▁in', '▁to', '▁a', 'ed']
Training args: {'clip': 0.12, 'alpha': 2, 'beta': 1, 'drop_mult': 0.5} dps: {'output_p': 0.25, 'hidden_p': 0.1, 'input_p': 0.2, 'embed_p': 0.02, 'weight_p': 0.15}
Training lm from random weights
epoch train_loss valid_loss accuracy
1 3.413345 3.280860 0.433011
2 3.219606 3.129479 0.444172
3 3.136091 3.094905 0.448493
4 3.145281 3.033001 0.452830
5 3.100366 2.980189 0.458984
6 3.062894 2.923044 0.464841
7 3.001627 2.834753 0.475316
8 2.979051 2.792044 0.480915
9 2.933140 2.733279 0.488346
10 2.964397 2.720861 0.490423
```
### MLDocs
```
python -m ulmfit cls --dataset-path data/mldoc/en-1 --cuda-id=0 --base-lm-path data-filtered/data/wiki/wikitext-103/models/sp30k/qrnn_nl4.m --lang=en --name 'nl4' - train 20 --bs 40 --cls-max-len 700
Max vocab: 30000
Cache dir: /home/marcin/github/n-waves/ulmfit-multilingual/data/mldoc/en-1/models/sp30k
Model dir: /home/marcin/github/n-waves/ulmfit-multilingual/data/mldoc/en-1/models/sp30k/qrnn_nl4.m
Loading validation /home/marcin/github/n-waves/ulmfit-multilingual/data/mldoc/en-1/en.dev.csv
Running tokenization...
Saving tokenized: cls.trn 13500, cls.val 1500
Running tokenization...
Saving tokenized: cls.trn 1000, cls.val 1000
Size of vocabulary: 30000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁the', '▁,', '▁.', 's', '▁of', '▁and', '▁in', '▁to', '▁a', 'ed']
Training args: {'clip': 0.12, 'alpha': 2, 'beta': 1, 'drop_mult': 0.3} dps: {'output_p': 0.25, 'hidden_p': 0.1, 'input_p': 0.2, 'embed_p': 0.02, 'weight_p': 0.15}
Loading pretrained model
Unknown tokens 0, first 100: []
Training lm from: [PosixPath('/home/marcin/github/n-waves/ulmfit-multilingual/data-filtered/data/wiki/wikitext-103/models/sp30k/qrnn_nl4.m/lm_best'), PosixPath('/home/marcin/github/n-waves/ulmfit-multilingual/data-filtered/data/wiki/wikitext-103/models/sp30k/qrnn_nl4.m/.
./itos')]
epoch train_loss valid_loss accuracy
1 4.459886 3.692770 0.364677
epoch train_loss valid_loss accuracy
1 3.962907 3.560222 0.379027
2 3.673292 3.378484 0.402066
3 3.460093 3.191662 0.424295
4 3.296515 3.030681 0.442995
5 3.161650 2.891829 0.459052
6 3.022674 2.776469 0.473280
7 2.974365 2.686321 0.484403
8 2.869587 2.593854 0.496297
9 2.785321 2.509093 0.506853
10 2.677728 2.440328 0.516178
11 2.641243 2.371950 0.525810
12 2.652385 2.320008 0.533105
13 2.547195 2.261057 0.542046
14 2.491570 2.216933 0.548810
15 2.454437 2.179364 0.555077
16 2.414449 2.147612 0.559972
17 2.358593 2.125351 0.563405
18 2.362696 2.111580 0.565614
19 2.341626 2.104268 0.566749
20 2.342680 2.102918 0.566966
/home/marcin/github/n-waves/ulmfit-multilingual/data/mldoc/en-1/models/sp30k
Saving info /home/marcin/github/n-waves/ulmfit-multilingual/data/mldoc/en-1/models/sp30k/qrnn_nl4.m/info.json
Starting classifier training
epoch train_loss valid_loss accuracy
1 0.622379 0.422002 0.882000
Better model found at epoch 1 with val_loss value: 0.42200201749801636.
epoch train_loss valid_loss accuracy
1 0.313018 0.275563 0.908000
Better model found at epoch 1 with val_loss value: 0.27556276321411133.
epoch train_loss valid_loss accuracy
1 0.241521 0.174606 0.933000
Better model found at epoch 1 with val_loss value: 0.1746061146259308.
epoch train_loss valid_loss accuracy
1 0.125556 0.170286 0.940000
Better model found at epoch 1 with val_loss value: 0.17028628289699554.
2 0.107322 0.181366 0.939000
Saving models at /home/marcin/github/n-waves/ulmfit-multilingual/data/mldoc/en-1/models/sp30k/qrnn_nl4.m
Loss and accuracy using (cls_best): [0.18917121, tensor(0.9388)]
0.1891712099313736
0.9387500286102295
```
-127
View File
@@ -1,127 +0,0 @@
# QRNN ES
## SP15k nl 4
``
export CUDA_VISIBLE_DEVICES=1
LANG=es
python -m ulmfit lm --dataset-path data/wiki/${LANG}-100 --tokenizer='sp' --nl 4 --name 'nl4' --max-vocab 15000 --lang ${LANG} --qrnn=True - train 10 --bs=50 --drop_mult=0
Wiki text was split to 161509 articles
Wiki text was split to 78 articles
Running tokenization lm...
Data lm, trn: 161509, val: 78
Size of vocabulary: 15000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁de', '▁,', '▁.', '▁la', 's', '▁el', '▁en', '▁y', '▁a', "▁&'"]
Training args: {'clip': 0.12, 'alpha': 2, 'beta': 1, 'drop_mult': 0} dps: {'output_p': 0.25, 'hidden_p': 0.1, 'input_p': 0.2, 'embed_p': 0.02, 'weight_p': 0.15}
/home/pczapla/anaconda3/envs/fastaiv1/lib/python3.7/site-packages/torch/utils/cpp_extension.py:152: UserWarning:
Training lm from random weights
epoch train_loss valid_loss accuracy
1 2.851575 3.398695 0.372940
2 2.801543 3.353015 0.372648
3 2.807216 3.290132 0.380787
4 2.696361 3.220115 0.388937
5 2.668488 3.132770 0.399528
6 2.565685 3.062742 0.408880
7 2.503054 2.985069 0.419262
8 2.448338 2.895266 0.431797
9 2.411213 2.829787 0.441973
10 2.403536 2.811063 0.445468
Total time: 11:52:32
data/wiki/es-100/models/sp15k
Saving info data/wiki/es-100/models/sp15k/qrnn_nl4.m/info.json
``
```bash
export CUDA_VISIBLE_DEVICES=1
LANG=es
python -m ulmfit cls --dataset-path data/mldoc/${LANG}-1 --base-lm-path data/wiki/${LANG}-100/models/sp15k/qrnn_nl4.m --lang=${LANG} --name 'nl4' - train 20 --bs 20 --num-cls-epochs=8
```
## SP30k nl 4
### LM
```
python -m ulmfit lm --dataset-path data/wiki/es-100 --bidir=False --qrnn=True --nl 4 --tokenizer='sp' --max-vocab 30000 --lang es --name 'nl4' --cuda-id=0 - train 10 --drop-mult=0 --bs=50
Wiki text was split to 161509 articles
Wiki text was split to 78 articles
Size of vocabulary: 30000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁de', '▁,', '▁.', '▁la', '▁el', '▁en', '▁y', 's', '▁a', "▁&'"]
Training args: {'clip': 0.12, 'drop_mult': 0} dps: {'output_p': 0.25, 'hidden_p': 0.1, 'input_p': 0.2, 'embed_p': 0.02, 'weight_p': 0.15}
Training lm from random weights
epoch train_loss valid_loss accuracy
1 3.067289 3.640350 0.357276
2 2.958243 3.619773 0.358111
3 3.033412 3.587700 0.359495
4 2.933573 3.525202 0.367685
5 2.904549 3.467990 0.372583
6 2.798806 3.409506 0.380045
7 2.733132 3.303108 0.391922
8 2.675272 3.224150 0.401143
9 2.635299 3.166430 0.410160
10 2.656724 3.145599 0.413176
```
### MLDocs
```
python -m ulmfit cls --dataset-path data/mldoc/es-1 --cuda-id=0 --base-lm-path data-filtered/data/wiki/es-100/models/sp30k/qrnn_nl4.m --lang=es --name 'nl4' - train 20 --bs 40 --cls-max-len 700
Max vocab: 30000
Cache dir: /home/marcin/github/n-waves/ulmfit-multilingual/data/mldoc/es-1/models/sp30k
Model dir: /home/marcin/github/n-waves/ulmfit-multilingual/data/mldoc/es-1/models/sp30k/qrnn_nl4.m
Loading validation /home/marcin/github/n-waves/ulmfit-multilingual/data/mldoc/es-1/es.dev.csv
Running tokenization...
Saving tokenized: cls.trn 13013, cls.val 1445
Running tokenization...
Saving tokenized: cls.trn 1000, cls.val 1000
Size of vocabulary: 30000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁de', '▁,', '▁.', '▁la', '▁el', '▁en', '▁y', 's', '▁a', "▁&'"]
Training args: {'clip': 0.12, 'alpha': 2, 'beta': 1, 'drop_mult': 0.3} dps: {'output_p': 0.25, 'hidden_p': 0.1, 'input_p': 0.2, 'embed_p': 0.02, 'weight_p': 0.15}
Loading pretrained model
Unknown tokens 0, first 100: []
Training lm from: [PosixPath('/home/marcin/github/n-waves/ulmfit-multilingual/data-filtered/data/wiki/es-100/models/sp30k/qrnn_nl4.m/lm_best'), PosixPath('/home/marcin/github/n-waves/ulmfit-multilingual/data-filtered/data/wiki/es-100/models/sp30k/qrnn_nl4.m/../itos')]
epoch train_loss valid_loss accuracy
1 3.352874 2.367255 0.514858
epoch train_loss valid_loss accuracy
1 2.796090 2.203233 0.536513
2 2.515840 1.970145 0.576640
3 2.198857 1.774013 0.610990
4 2.035614 1.633484 0.633450
5 1.944539 1.535505 0.649110
6 1.848854 1.451618 0.661764
7 1.788579 1.382675 0.673166
8 1.675414 1.320675 0.683617
9 1.614536 1.264944 0.694086
10 1.618723 1.215493 0.702936
11 1.504875 1.164356 0.712921
12 1.411316 1.126858 0.721374
13 1.421174 1.079897 0.731196
14 1.352116 1.044965 0.738148
15 1.318876 1.013755 0.745312
16 1.268569 0.986391 0.751383
17 1.273424 0.971129 0.754643
18 1.256196 0.960661 0.757439
19 1.233202 0.955790 0.758405
20 1.230536 0.955070 0.758496
/home/marcin/github/n-waves/ulmfit-multilingual/data/mldoc/es-1/models/sp30k
Saving info /home/marcin/github/n-waves/ulmfit-multilingual/data/mldoc/es-1/models/sp30k/qrnn_nl4.m/info.json
Starting classifier training
epoch train_loss valid_loss accuracy
1 0.739119 0.438338 0.867000
Better model found at epoch 1 with val_loss value: 0.438338041305542.
epoch train_loss valid_loss accuracy
1 0.425376 0.207067 0.950000
Better model found at epoch 1 with val_loss value: 0.20706671476364136.
epoch train_loss valid_loss accuracy
1 0.311269 0.172416 0.956000
Better model found at epoch 1 with val_loss value: 0.17241604626178741.
epoch train_loss valid_loss accuracy
1 0.226164 0.166543 0.958000
Better model found at epoch 1 with val_loss value: 0.1665433794260025.
2 0.199775 0.167683 0.956000
Saving models at /home/marcin/github/n-waves/ulmfit-multilingual/data/mldoc/es-1/models/sp30k/qrnn_nl4.m
Loss and accuracy using (cls_best): [0.18184493, tensor(0.9448)]
0.18184493482112885
0.9447500109672546
```
-30
View File
@@ -1,30 +0,0 @@
# IT
## SP30k QRNN nl 4
### LM
```
python -m ulmfit lm --dataset-path data/wiki/it-100/ --cuda-id=0 --tokenizer='sp' --nl 4 --name 'nl4' --max-vocab 30000 --lang it --qrnn=True - train 10 --bs=50 --drop_mult=0
Max vocab: 30000
Cache dir: data/wiki/it-100/models/sp30k
Model dir: data/wiki/it-100/models/sp30k/qrnn_nl4.m
Tokenized data loaded
Size of vocabulary: 30000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁,', '▁.', '▁di', "▁&'", "'", '▁e', '▁il', '▁la', 'e', '▁in']
Training args: {'clip': 0.12, 'alpha': 2, 'beta': 1, 'drop_mult': 0} dps: {'output_p': 0.25, 'hidden_p': 0.1, 'input_p': 0.2, 'embed_p': 0.02, 'weight_p': 0.15}
Training lm from random weights
epoch train_loss valid_loss accuracy
1 3.354224 3.749085 0.350236
2 3.274838 3.697026 0.351104
3 3.222462 3.680071 0.352152
4 3.217652 3.628976 0.357922
5 3.117965 3.563592 0.364370
6 3.075397 3.483997 0.372794
7 3.002098 3.394749 0.383217
8 2.936974 3.316284 0.393616
9 2.843549 3.258448 0.401605
10 2.818070 3.240303 0.404684
Total time: 10:49:44
data/wiki/it-100/models/sp30k
Saving info data/wiki/it-100/models/sp30k/qrnn_nl4.m/info.json
```
### MLDoc
-204
View File
@@ -1,204 +0,0 @@
# QRNN RU
## SP15k nl4
## LM
export CUDA_VISIBLE_DEVICES=3
LANG=ru
python -m ulmfit lm --dataset-path data/wiki/ru-100 --bidir=False --qrnn=True --nl 4 --tokenizer='sp' --max-vocab 15000 --lang ru --name 'nl4' - train 10 --drop-mult=0 --bs=50 --label-smoothing-eps=0.1
## SP15k nl8
### LM
```
5 2.869308 2.905951 0.466976
6 2.768955 2.782804 0.481852
7 2.654484 2.676304 0.495593
8 2.585963 2.591748 0.508447
9 2.512042 2.526819 0.518860
10 2.520543 2.509287 0.521890
Total time: 18:46:01
data/wiki/ru-100/models/sp15k
Saving info data/wiki/ru-100/models/sp15k/qrnn_nl8.m/info.json
```
### MLDoc
```
python -m ulmfit cls --dataset-path data/mldoc/${LANG}-1 --base-lm-path data/wiki/${LANG}-100/models/sp15k/qrnn_nl8.m --lang=${LANG} --name 'nl8' - train 20 --bs 20 --num-cls-epochs=8 --lr_sched=1cycle --label-smoothing-eps=0.1
Max vocab: 15000
Cache dir: /home/n-waves/workspace/ulmfit-multilingual/data/mldoc/ru-1/models/sp15k
Model dir: /home/n-waves/workspace/ulmfit-multilingual/data/mldoc/ru-1/models/sp15k/qrnn_nl8.m
Loading validation /home/n-waves/workspace/ulmfit-multilingual/data/mldoc/ru-1/ru.dev.csv
Running tokenization lm...
Data lm, trn: 9195, val: 1021
Running tokenization cls...
Data cls, trn: 1000, val: 1000
Running tokenization tst...
Data tst, trn: 1000, val: 4000
Size of vocabulary: 15000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁,', '▁.', '▁в', 'а', 'и', 'е', '▁и', 'й', '▁на', 'х']
Training args: {'clip': 0.12, 'alpha': 2, 'beta': 1, 'drop_mult': 0.3} dps: {'output_p': 0.25, 'hidden_p': 0.1, 'input_p': 0.2, 'embed_p': 0.02, 'weight_p': 0.15}
Loading pretrained model
Unknown tokens 0, first 100: []
Training lm from: [PosixPath('/home/n-waves/workspace/ulmfit-multilingual/data/wiki/ru-100/models/sp15k/qrnn_nl8.m/lm_best'), PosixPath('/home/n-waves/workspace/ulmfit-multilingual/data/wiki/ru-100/models/sp15k/qrnn_nl8.m/../itos')]
epoch train_loss valid_loss accuracy
1 2.923423 2.334532 0.529978
Total time: 02:46
epoch train_loss valid_loss accuracy
1 2.462077 2.150593 0.563281
2 2.230013 1.972095 0.596198
3 2.118523 1.812012 0.623204
4 1.916368 1.690016 0.644060
5 1.842718 1.585770 0.661704
6 1.748630 1.513972 0.674130
7 1.675032 1.447667 0.686207
8 1.628485 1.393949 0.695972
9 1.564814 1.330838 0.707272
10 1.553933 1.283114 0.715716
11 1.441891 1.234810 0.726201
12 1.496388 1.185676 0.735977
13 1.383019 1.141014 0.745528
14 1.256620 1.094201 0.755120
15 1.306187 1.052457 0.764280
16 1.297933 1.028387 0.769747
17 1.319773 1.004256 0.775285
18 1.178073 0.989788 0.778480
19 1.252248 0.982740 0.780057
20 1.177640 0.981201 0.780267
Total time: 1:24:58
/home/n-waves/workspace/ulmfit-multilingual/data/mldoc/ru-1/models/sp15k
Saving info /home/n-waves/workspace/ulmfit-multilingual/data/mldoc/ru-1/models/sp15k/qrnn_nl8.m/info.json
Single training schedule
epoch train_loss valid_loss accuracy
1 0.882775 0.510930 0.826000
2 0.683476 0.513669 0.847000
3 0.556661 0.590375 0.839000
4 0.454019 0.757216 0.828000
5 0.344460 0.549675 0.870000
6 0.246039 0.630242 0.861000
7 0.173423 0.649066 0.858000
8 0.098640 0.638015 0.867000
Total time: 05:11
Saving models at /home/n-waves/workspace/ulmfit-multilingual/data/mldoc/ru-1/models/sp15k/qrnn_nl8.m
Loss and accuracy using (cls_best): [0.64393336, tensor(0.8683)]
```
### MLDoc nl8 -2nd
```
python -m ulmfit cls --dataset-path data/mldoc/${LANG}-1 --base-lm-path data/wiki/${LANG}-100/models/sp15k/qrnn_${NAME}.m --lang=${LANG} --name ${NAME}-2 - train 20 --bs 18 --num-cls-epochs=4 --lr_sched=1cycle --label-smoothing-eps=0
.1
Max vocab: 15000
Cache dir: /home/n-waves/workspace/ulmfit-multilingual/data/mldoc/ru-1/models/sp15k
Model dir: /home/n-waves/workspace/ulmfit-multilingual/data/mldoc/ru-1/models/sp15k/qrnn_nl8-2.m
Loading validation /home/n-waves/workspace/ulmfit-multilingual/data/mldoc/ru-1/ru.dev.csv
Data lm, trn: 9195, val: 1021
Data cls, trn: 1000, val: 1000
Data tst, trn: 1000, val: 4000
Size of vocabulary: 15000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁,', '▁.', '▁в', 'а', 'и', 'е', '▁и', 'й', '▁на', 'х']
Training args: {'clip': 0.12, 'alpha': 2, 'beta': 1, 'drop_mult': 0.3} dps: {'output_p': 0.25, 'hidden_p': 0.1, 'input_p': 0.2, 'embed_p': 0.02, 'weight_p': 0.15}
Loading pretrained model
Unknown tokens 0, first 100: []
Training lm from: [PosixPath('/home/n-waves/workspace/ulmfit-multilingual/data/wiki/ru-100/models/sp15k/qrnn_nl8.m/lm_best'), PosixPath('/home/n-waves/workspace/ulmfit-multilingual/data/wiki/ru-100/models/sp15k/qrnn_nl8.m/../itos')]
epoch train_loss valid_loss accuracy
1 3.966292 3.450758 0.527065
Total time: 02:58
epoch train_loss valid_loss accuracy
1 3.495761 3.276329 0.560047
2 3.319947 3.102911 0.593742
3 3.137904 2.955317 0.620171
4 3.040286 2.839161 0.642270
5 2.869962 2.753622 0.658331
6 2.905739 2.680881 0.672860
7 2.836454 2.620925 0.685026
8 2.857271 2.569716 0.695722
9 2.702872 2.520050 0.705589
10 2.701559 2.473591 0.715346
11 2.740815 2.429558 0.725597
12 2.646513 2.389550 0.735010
13 2.587685 2.349614 0.744885
14 2.546527 2.311087 0.754463
15 2.568136 2.278581 0.762980
16 2.492115 2.252367 0.769275
17 2.338561 2.230529 0.775072
18 2.447506 2.218215 0.778437
19 2.364424 2.212115 0.780085
20 2.367132 2.210520 0.780424
Total time: 1:30:47
/home/n-waves/workspace/ulmfit-multilingual/data/mldoc/ru-1/models/sp15k
Saving info /home/n-waves/workspace/ulmfit-multilingual/data/mldoc/ru-1/models/sp15k/qrnn_nl8-2.m/info.json
Single training schedule
epoch train_loss valid_loss accuracy
1 0.969255 0.769736 0.843000
2 0.846340 0.813483 0.839000
3 0.718175 0.705339 0.867000
4 0.609513 0.726442 0.875000
Total time: 02:54
Saving models at /home/n-waves/workspace/ulmfit-multilingual/data/mldoc/ru-1/models/sp15k/qrnn_nl8-2.m
Loss and accuracy using (cls_best): [0.4056449, tensor(0.8698)]
0.40564489364624023
```
## cls
```
export CUDA_VISIBLE_DEVICES=0
LANG=ru
python -m ulmfit cls --dataset-path data/mldoc/${LANG}-1 --base-lm-path data/wiki/${LANG}-100/models/sp15k/qrnn_nl8.m --lang=${LANG} --name 'nl8' - train 20 --bs 20 --num-cls-epochs=8 --lr_sched=1cycle --label-smoothing-eps=0.1
```
## SP30k nl4
### LM
```
python -m ulmfit lm --dataset-path data/wiki/ru-100 --bidir=False --qrnn=True --nl 4 --tokenizer='sp' --max-vocab 30000 --lang ru --name 'nl4' --cuda-id=0 - train 10 --drop-mult=0 --bs=50
Wiki text was split to 193047 articles
Wiki text was split to 460 articles
Size of vocabulary: 30000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁,', '▁.', '▁в', 'а', '▁и', 'е', 'и', 'й', '▁на', '▁с']
Training args: {'clip': 0.12, 'drop_mult': 0} dps: {'output_p': 0.25, 'hidden_p': 0.1, 'input_p': 0.2, 'embed_p': 0.02, 'weight_p': 0.15}
Training lm from random weights
epoch train_loss valid_loss accuracy
1 3.273207 3.350111 0.429702
2 3.169897 3.274238 0.433682
3 3.162197 3.247077 0.435900
4 3.131630 3.168798 0.445252
5 3.042942 3.096774 0.453532
6 2.950550 3.002989 0.465113
7 2.833593 2.902871 0.478954
8 2.829737 2.805592 0.492138
9 2.746991 2.733609 0.503711
10 2.687201 2.708546 0.508050
```
-136
View File
@@ -1,136 +0,0 @@
#
```
export CUDA_VISIBLE_DEVICES=0
LANG=zh
python -m ulmfit lm --dataset-path data/wiki/${LANG}-100 --tokenizer='sp' --nl 4 --name 'nl4' --max-vocab 15000 --lang ${LANG} --qrnn=True - train 10 --bs=50 --drop_mult=0
Wiki text was split to 103929 articles
Wiki text was split to 113 articles
Running tokenization lm...
Data lm, trn: 103929, val: 113
Size of vocabulary: 15000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁,', '▁的', '▁。', '▁年', '▁、', '▁在', '▁一', '▁是', '▁中', '▁有']
Training args: {'clip': 0.12, 'alpha': 2, 'beta': 1, 'drop_mult': 0} dps: {'output_p': 0.25, 'hidden_p': 0.1, 'input_p': 0.2, 'embed_p': 0.02, 'weight_p': 0.15}
/home/pczapla/anaconda3/envs/fastaiv1/lib/python3.7/site-packages/torch/utils/cpp_extension.py:152: UserWarning:
!! WARNING !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Your compiler (c++) may be ABI-incompatible with PyTorch!
Please use a compiler that is ABI-compatible with GCC 4.9 and above.
See https://gcc.gnu.org/onlinedocs/libstdc++/manual/abi.html.
See https://gist.github.com/goldsborough/d466f43e8ffc948ff92de7486c5216d6
for instructions on how to install GCC 4.9 or higher.
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! WARNING !!
warnings.warn(ABI_INCOMPATIBILITY_WARNING.format(compiler))
Training lm from random weights
epoch train_loss valid_loss accuracy
1 2.489521 2.734049 0.482433
2 2.427567 2.662464 0.488089
3 2.415744 2.613971 0.494118
4 2.334062 2.560180 0.501209
5 2.343723 2.503271 0.507307
6 2.260171 2.444533 0.516768
7 2.198721 2.367407 0.526631
8 2.161857 2.308182 0.535856
9 2.142125 2.252678 0.544535
10 2.087831 2.234440 0.548529
Total time: 11:01:47
data/wiki/zh-100/models/sp15k
Saving info data/wiki/zh-100/models/sp15k/qrnn_nl4.m/info.json
```
## MLDoc
```bash
export CUDA_VISIBLE_DEVICES=0
LANG=zh
python -m ulmfit cls --dataset-path data/mldoc/${LANG}-1 --base-lm-path data/wiki/${LANG}-100/models/sp15k/qrnn_nl4.m --lang=${LANG} --name 'nl4' - train 20 --bs 20 --num-cls-epochs=8
Training lm from: [PosixPath('/home/pczapla/workspace/ulmfit-multilingual/data/wiki/zh-100/models/sp15k/qrnn_nl4.m/lm_best'), PosixPath('/home/pczapla/workspace/ulmfit-multilingual/data/wiki/zh-100/models/sp15k/qrnn_nl4.m/../itos')]
epoch train_loss valid_loss accuracy
1 2.723684 2.148748 0.571206
Total time: 02:13
epoch train_loss valid_loss accuracy
1 2.157829 1.937637 0.601026
2 1.898958 1.712967 0.637379
3 1.722818 1.547745 0.664276
4 1.570266 1.427551 0.682546
5 1.503477 1.344690 0.696379
6 1.434701 1.289549 0.704813
7 1.425267 1.217570 0.717714
8 1.373606 1.174655 0.725217
9 1.297397 1.116406 0.735997
10 1.211259 1.062999 0.745848
11 1.248108 1.024482 0.754134
12 1.198918 0.980273 0.762664
13 1.121848 0.937985 0.771961
14 1.111386 0.898821 0.780796
15 1.120596 0.866009 0.787908
16 1.056925 0.836998 0.794833
17 1.020636 0.816387 0.799694
18 1.002068 0.802623 0.802859
19 0.998480 0.796877 0.804212
20 0.959919 0.794685 0.804594
Total time: 1:02:57
/home/pczapla/workspace/ulmfit-multilingual/data/mldoc/zh-1/models/sp15k
Saving info /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/zh-1/models/sp15k/qrnn_nl4.m/info.json
Starting classifier training
epoch train_loss valid_loss accuracy
1 0.666322 0.433893 0.855000
Total time: 00:08
epoch train_loss valid_loss accuracy
1 0.448371 0.317440 0.889000
Total time: 00:09
epoch train_loss valid_loss accuracy
1 0.336693 0.309876 0.900000
Total time: 00:10
epoch train_loss valid_loss accuracy
1 0.266735 0.302003 0.903000
2 0.222821 0.294501 0.905000
3 0.207295 0.293751 0.908000
4 0.179668 0.296945 0.911000
5 0.153803 0.293158 0.911000
Traceback (most recent call last):
File "/home/pczapla/anaconda3/envs/fastaiv1/lib/python3.7/runpy.py", line 193, in _run_module_as_main
"__main__", mod_spec)
File "/home/pczapla/anaconda3/envs/fastaiv1/lib/python3.7/runpy.py", line 85, in _run_code
exec(code, run_globals)
File "/home/pczapla/workspace/ulmfit-multilingual/ulmfit/__main__.py", line 73, in <module>
fire.Fire(ULMFiT())
File "/home/pczapla/anaconda3/envs/fastaiv1/lib/python3.7/site-packages/fire/core.py", line 127, in Fire
component_trace = _Fire(component, args, context, name)
File "/home/pczapla/anaconda3/envs/fastaiv1/lib/python3.7/site-packages/fire/core.py", line 366, in _Fire
component, remaining_args)
File "/home/pczapla/anaconda3/envs/fastaiv1/lib/python3.7/site-packages/fire/core.py", line 542, in _CallCallable
result = fn(*varargs, **kwargs)
File "/home/pczapla/workspace/ulmfit-multilingual/ulmfit/train_clas.py", line 54, in train_cls
learn.fit_one_cycle(num_cls_epochs, slice(1e-3 / (2.6 ** 4), 1e-3), moms=(0.8, 0.7))
File "/home/pczapla/workspace/_oss/fastai/fastai/fastai/train.py", line 22, in fit_one_cycle
learn.fit(cyc_len, max_lr, wd=wd, callbacks=callbacks)
File "/home/pczapla/workspace/_oss/fastai/fastai/fastai/basic_train.py", line 178, in fit
callbacks=self.callbacks+callbacks)
File "/home/pczapla/workspace/_oss/fastai/fastai/fastai/utils/mem.py", line 77, in wrapper
return func(*args, **kwargs)
File "/home/pczapla/workspace/_oss/fastai/fastai/fastai/basic_train.py", line 90, in fit
loss = loss_batch(model, xb, yb, loss_func, opt, cb_handler)
File "/home/pczapla/workspace/_oss/fastai/fastai/fastai/basic_train.py", line 20, in loss_batch
out = model(*xb)
File "/home/pczapla/anaconda3/envs/fastaiv1/lib/python3.7/site-packages/torch/nn/modules/module.py", line 477, in __call__
result = self.forward(*input, **kwargs)
File "/home/pczapla/anaconda3/envs/fastaiv1/lib/python3.7/site-packages/torch/nn/modules/container.py", line 92, in forward
input = module(input)
File "/home/pczapla/anaconda3/envs/fastaiv1/lib/python3.7/site-packages/torch/nn/modules/module.py", line 477, in __call__
result = self.forward(*input, **kwargs)
File "/home/pczapla/workspace/_oss/fastai/fastai/fastai/text/learner.py", line 235, in forward
return self.concat(raw_outputs), self.concat(outputs)
File "/home/pczapla/workspace/_oss/fastai/fastai/fastai/text/learner.py", line 221, in concat
return [torch.cat([l[si] for l in arrs], dim=1) for si in range_of(arrs[0])]
File "/home/pczapla/workspace/_oss/fastai/fastai/fastai/text/learner.py", line 221, in <listcomp>
return [torch.cat([l[si] for l in arrs], dim=1) for si in range_of(arrs[0])]
RuntimeError: CUDA error: out of memory
```
-319
View File
@@ -1,319 +0,0 @@
# RU
## SP15k nl4 QRNN
```
Training lm from random weights
epoch train_loss valid_loss accuracy
1 3.053061 3.070487 0.450466
2 2.874137 2.999093 0.455027
3 2.864496 2.969308 0.458116
4 2.890568 2.903564 0.466970
5 2.746530 2.839789 0.474205
6 2.683900 2.750476 0.486806
7 2.674458 2.658535 0.499701
8 2.595780 2.573735 0.512515
9 2.530827 2.512999 0.522372
10 2.505664 2.491850 0.526431
Total time: 10:43:03
data/wiki/ru-100/models/sp15k
Saving info data/wiki/ru-100/models/sp15k/qrnn_nl4.m/info.json
```
```bash
python -m ulmfit cls --dataset-path data/mldoc/ru-1 --base-lm-path data/wiki/ru-100/models/sp30k/lstm_nl4.m --lang=ru --name 'nl4-100' --cuda-id=1 - train 20 --bs 40 --num-cls-epochs=2
```
## SP25k qrnn
### LM
```bash
python -m ulmfit lm --dataset-path data/wiki/${LANG}-100 --tokenizer='sp' --nl 4 --name
'nl4' --max-vocab 25000 --lang ${LANG} --qrnn=True - train 10 --bs=50 --drop_mult=0 --label-smoothing-eps=0.10 --tokenizer='sp
Max vocab: 25000
Cache dir: data/wiki/ru-100/models/sp25k
Model dir: data/wiki/ru-100/models/sp25k/qrnn_nl4.m
Wiki text was split to 193047 articles
Wiki text was split to 460 articles
Data lm, trn: 193047, val: 460
Size of vocabulary: 25000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '', '▁,', '▁.', '▁в', 'а', 'и', 'е', '▁и', 'й', 'х', '▁на']
Training args: {'clip': 0.12, 'alpha': 2, 'beta': 1, 'drop_mult': 0} dps: {'output_p': 0.25, 'hidden_p': 0.1, 'input_p': 0.2, 'embed_p': 0.02, 'weight_p': 0.15}
Training lm from random weights
epoch train_loss valid_loss accuracy
1 4.154972 4.198218 0.447508
2 4.030367 4.159642 0.449420
3 4.138530 4.146010 0.451526
4 3.997120 4.097048 0.457177
5 3.999151 4.036350 0.465117
6 3.935380 3.955517 0.476446
7 3.912357 3.875987 0.487591
8 3.785693 3.789099 0.501560
9 3.743162 3.725730 0.512294
10 3.690226 3.706929 0.516769
Total time: 12:10:03
data/wiki/ru-100/models/sp25k
```
```bash
python -m ulmfit cls --dataset-path data/mldoc/${LANG}-1 --base-lm-path data/wiki/${LANG
}-100/models/sp25k/qrnn_${NAME}.m --lang=${LANG} --name ${NAME} - train 20 --bs 18 --num-cls-epochs=4 --lr_sched=1cycle --label-smoothing-eps=0.1
Max vocab: 25000
Cache dir: /home/n-waves/workspace/ulmfit-multilingual/data/mldoc/ru-1/models/sp25k
Model dir: /home/n-waves/workspace/ulmfit-multilingual/data/mldoc/ru-1/models/sp25k/qrnn_nl4.m
Loading validation /home/n-waves/workspace/ulmfit-multilingual/data/mldoc/ru-1/ru.dev.csv
Running tokenization lm...
Data lm, trn: 9195, val: 1021
Running tokenization cls...
Data cls, trn: 1000, val: 1000
Running tokenization tst...
Data tst, trn: 1000, val: 4000
Size of vocabulary: 25000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁,', '▁.', '▁в', 'а', 'и', 'е', '▁и', 'й', 'х', '▁на']
Training args: {'clip': 0.12, 'alpha': 2, 'beta': 1, 'drop_mult': 0.3} dps: {'output_p': 0.25, 'hidden_p': 0.1, 'input_p': 0.2, 'embed_p': 0.02, 'weight_p': 0.15}
Loading pretrained model
Unknown tokens 0, first 100: []
Training lm from: [PosixPath('/home/n-waves/workspace/ulmfit-multilingual/data/wiki/ru-100/models/sp25k/qrnn_nl4.m/lm_best'), PosixPath('/home/n-waves/workspace/ulmfit-multilingual/data/wiki/ru-100/models/sp25k/qrnn_nl4.m/../itos')]
epoch train_loss valid_loss accuracy
1 4.626971 3.868075 0.474742
Total time: 01:58
epoch train_loss valid_loss accuracy
1 3.821786 3.625366 0.519506
2 3.570115 3.379288 0.566803
3 3.517294 3.179166 0.599955
4 3.160131 3.028985 0.626484
5 3.135806 2.923198 0.644557
6 3.055160 2.840300 0.659376
7 3.005086 2.770163 0.672080
8 2.811366 2.708846 0.684065
9 2.818394 2.658951 0.694358
10 2.881018 2.605373 0.705269
11 2.793422 2.560091 0.715893
12 2.708385 2.516373 0.725908
13 2.690258 2.471159 0.735673
14 2.748342 2.436113 0.744533
15 2.601220 2.394404 0.754131
16 2.616882 2.372301 0.760451
17 2.602902 2.349164 0.766014
18 2.560349 2.336217 0.769222
19 2.549936 2.332076 0.770150
20 2.546798 2.331103 0.770472
Total time: 53:22
/home/n-waves/workspace/ulmfit-multilingual/data/mldoc/ru-1/models/sp25k
Saving info /home/n-waves/workspace/ulmfit-multilingual/data/mldoc/ru-1/models/sp25k/qrnn_nl4.m/info.json
Single training schedule
epoch train_loss valid_loss accuracy
1 1.043533 0.961182 0.731000
2 0.859086 0.837210 0.824000
3 0.735276 0.724173 0.871000
4 0.612012 0.711034 0.857000
Total time: 01:15
Saving models at /home/n-waves/workspace/ulmfit-multilingual/data/mldoc/ru-1/models/sp25k/qrnn_nl4.m
Loss and accuracy using (cls_best): [0.3957597, tensor(0.8720)]
0.3957597017288208
0.871999979019165
```
## VF60k QRNN
### LM
### MLDoc
```bash
Max vocab: 60000
Cache dir: /home/n-waves/workspace/ulmfit-multilingual/data/mldoc/ru-1/models/vf60k
Model dir: /home/n-waves/workspace/ulmfit-multilingual/data/mldoc/ru-1/models/vf60k/qrnn_nl4.m
Loading validation /home/n-waves/workspace/ulmfit-multilingual/data/mldoc/ru-1/ru.dev.csv
Running tokenization lm...
Data lm, trn: 9195, val: 1021
Running tokenization cls...
Data cls, trn: 1000, val: 1000
Running tokenization tst...
Data tst, trn: 1000, val: 4000
Size of vocabulary: 55567
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', ',', '.', '-', 'в', ')', '(', 'на', "&'", 'и', 'по', 'с', 'the']
Training args: {'clip': 0.12, 'alpha': 2, 'beta': 1, 'drop_mult': 0.3} dps: {'output_p': 0.25, 'hidden_p': 0.1, 'input_p': 0.2, 'embed_p': 0.02, 'weight_p': 0.15}
Loading pretrained model
Unknown tokens 34364, first 100: ['рейтер', '941', '8520', '095', 'said', '\x7f', 'доллару', 'янв', 'погашение', '3272', 'reuter', 'xd0', 'фев', '509410', 'уставный', 'which', 'percent', 'объективность', 'торгах', 'купона', 'million', 'its', 'июл', '044', 'алма-атинское', 'валютной', 'триллиона', 'межбанковской', 'would', 'авг', 'government', 'котировки', 'балансовая', 'ртс', 'выплата', 'прц', '8832', 'yeltsin', '983', 'средневзвешенная', '961', 'president', 'дек', 'minister', '2264', 'нацбанка', 'цбр', 'июн', 'newsroom', 'ммвб', 'гособлигаций', 'стр.1', 'also', 'foreign', 'офз', 'заявленный', 'шестимесячных', 'дисконтных', '-сказал', 'предыдущему', 'тбилисское', 'размещенный', 'told', 'riga', 'лари', 'стр.2', 'kroons', 'окт', 'сиданко', '--московское', 'adr', 'мосэнерго', 'shares', 'пресс-релизе', 'дилеры', 'триллионов', 'акциям', 'billion', 'демченко', 'тнк', 'litas', 'lats', 'дилеров', '--алма-атинское', 'щелкните', 'tuesday', 'зинец', 'friday', 'умвб', 'thursday', 'онэксим', 'трейдеры', 'nato', 'feb', 'дивиденды', 'former', 'could', 'нацбанк', 'стр.6', 'economic']
Bptt 70
Training lm from: [PosixPath('/home/n-waves/workspace/ulmfit-multilingual/data/wiki/ru-100/models/vf60k/qrnn_nl4.m/lm_best'), PosixPath('/home/n-waves/workspace/ulmfit-multilingual/data/wiki/ru-100/models/vf60k/qrnn_nl4.m/../itos')]
epoch train_loss valid_loss accuracy
1 5.637876 4.853484 0.379844
Total time: 01:28
epoch train_loss valid_loss accuracy
1 4.906714 4.683807 0.405109
2 4.850066 4.490903 0.434562
3 4.591409 4.284740 0.464436
4 4.379681 4.103634 0.490118
5 4.079576 3.954377 0.511206
6 4.199800 3.811692 0.531036
7 4.004812 3.694871 0.548372
8 3.995378 3.584868 0.567285
9 3.884090 3.499729 0.583162
10 3.897333 3.416602 0.598120
11 3.726276 3.338907 0.613920
12 3.690300 3.263694 0.629643
13 3.614015 3.192474 0.646335
14 3.530548 3.136064 0.659729
15 3.451486 3.100320 0.668686
16 3.444497 3.058001 0.678824
17 3.407755 3.024943 0.686764
18 3.383617 3.008939 0.690451
19 3.342304 2.999911 0.692378
20 3.339514 2.998623 0.692671
Total time: 36:01
/home/n-waves/workspace/ulmfit-multilingual/data/mldoc/ru-1/models/vf60k
Saving info /home/n-waves/workspace/ulmfit-multilingual/data/mldoc/ru-1/models/vf60k/qrnn_nl4.m/info.json
Single training schedule
epoch train_loss valid_loss accuracy
1 0.946690 0.855268 0.805000
2 0.808650 0.750561 0.866000
3 0.701750 0.712251 0.884000
4 0.596392 0.687266 0.884000
Total time: 00:44
Saving models at /home/n-waves/workspace/ulmfit-multilingual/data/mldoc/ru-1/models/vf60k/qrnn_nl4.m
Loss and accuracy using (cls_best): [0.37472174, tensor(0.8802)]
0.3747217357158661
0.8802499771118164
```
## SP30k LSTM nl4
### LM
```
python -m ulmfit lm --dataset-path data/wiki/ru-100 --cuda-id=0 --tokenizer='sp' --nl 4 --name 'nl4' --max-vocab 30000 --lang ru --qrnn=False - train 10 --bs=50 --drop_mult=0
Size of vocabulary: 30000 [39/805]
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁,', '▁.', '▁в', 'а', '▁и', 'е', 'и', 'й', '▁на', 'х']
Training args: {'tie_weights': True, 'clip': 0.12, 'bptt': 70, 'pretrained_fnames': None, 'pretrained_model': None, 'drop_mult': 0} dps: [0.25 0.1 0.2 0.02 0.15]
Training lm from random weights
epoch train_loss valid_loss accuracy
1 3.200520 3.295865 0.436852
2 3.027569 3.168700 0.445551
3 3.007320 3.132495 0.450450
4 2.940000 3.041745 0.459344
5 2.876227 2.952338 0.469182
6 2.742553 2.860888 0.480943
7 2.684717 2.769994 0.492934
8 2.569419 2.669971 0.507300
9 2.525698 2.604086 0.516840
10 2.495174 2.591011 0.519415
data/wiki/ru-100/models/sp30k
Saving info data/wiki/ru-100/models/sp30k/lstm_nl4.m/info.json
```
### MLDoc - bsp
MultiCCA: 85.65% ulmfit: 87.27%
```
python -m ulmfit cls --dataset-path data/mldoc/ru-1 --base-lm-path data/wiki/ru-100/models/sp30k/lstm_nl4.m --lang=ru --name 'nl4-100' --cuda-id=1 - train 20 --bs 40 --num-cls-epochs=2
Max vocab: 30000
Cache dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ru-1/models/sp30k
Model dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ru-1/models/sp30k/lstm_nl4.m
Loading validation /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ru-1/ru.dev.csv
Running tokenization...
Saving tokenized: cls.trn 9195, cls.val 1021
Running tokenization...
Saving tokenized: cls.trn 1000, cls.val 1000
Size of vocabulary: 30000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁,', '▁.', '▁в', 'а', '▁и', 'е', 'и', 'й', '▁на', 'х']
Training args: {'tie_weights': True, 'clip': 0.12, 'bptt': 70, 'pretrained_fnames': [PosixPath('/home/pczapla/workspace/ulmfit-multilingual/data/wiki/ru-100/models/sp30k/lstm_nl4.m/lm_best'), PosixPath('/home/pczapla/workspace/ulmfit-multilingual/data/wiki/ru-100/models/sp30k/lstm_nl4.m/../itos')], 'pretrained_model': None, 'drop_mult': 0.3} dps: [0.25 0.1 0.2 0.02 0.15]
Unknown tokens 0, first 100: []
Training lm from: [PosixPath('/home/pczapla/workspace/ulmfit-multilingual/data/wiki/ru-100/models/sp30k/lstm_nl4.m/lm_best'), PosixPath('/home/pczapla/workspace/ulmfit-multilingual/data/wiki/ru-100/models/sp30k/lstm_nl4.m/../itos')]
epoch train_loss valid_loss accuracy
1 2.764138 2.289755 0.552181
epoch train_loss valid_loss accuracy
1 2.414295 2.161708 0.572407
2 2.310551 2.013092 0.596075
3 2.124479 1.864450 0.620103
4 1.970015 1.723395 0.642392
5 1.883664 1.623308 0.658949
6 1.793856 1.513542 0.677954
7 1.625767 1.424582 0.693092
8 1.677054 1.335406 0.709802
9 1.578936 1.264322 0.723626
10 1.523383 1.194463 0.737942
11 1.436643 1.129712 0.750586
12 1.351507 1.072792 0.762524
13 1.357552 1.020739 0.773266
14 1.310516 0.975852 0.783653
15 1.216484 0.940323 0.791262
16 1.187942 0.909915 0.797675
17 1.141316 0.885367 0.803305
18 1.114629 0.871992 0.805929
19 1.075366 0.867010 0.807009
20 1.166387 0.865594 0.807241
/home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ru-1/models/sp30k
Saving info /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ru-1/models/sp30k/lstm_nl4.m/info.json
Starting classifier training
epoch train_loss valid_loss accuracy
1 0.831180 0.610087 0.787000
epoch train_loss valid_loss accuracy
1 0.678307 0.435860 0.856000
epoch train_loss valid_loss accuracy
1 0.547668 0.399889 0.870000
epoch train_loss valid_loss accuracy
1 0.445839 0.396535 0.869000
2 0.417901 0.369961 0.882000
Saving models at /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ru-1/models/sp30k/lstm_nl4.m
Loss and accuracy using (cls_best): [0.38499942, tensor(0.8727)]
```
### MLDoc run 2x sp
```
python -m ulmfit cls --dataset-path data/mldoc/ru-1 --base-lm-path data/wiki/ru-100/models/sp30k/lstm_nl4.m --lang=ru --name 'nl4' --cuda-id=1 - train 20 --bs 40 --num-cls-epochs=2
Max vocab: 30000
Cache dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ru-1/models/sp30k
Model dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ru-1/models/sp30k/lstm_nl4.m
Loading validation /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ru-1/ru.dev.csv
Running tokenization...
Saving tokenized: cls.trn 9195, cls.val 1021
Running tokenization...
Saving tokenized: cls.trn 1000, cls.val 1000
Size of vocabulary: 30000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁,', '▁.', '▁в', 'а', '▁и', 'е', 'и', 'й', '▁на', 'х']
Training args: {'tie_weights': True, 'clip': 0.12, 'bptt': 70, 'pretrained_fnames': [PosixPath('/home/pczapla/workspace/ulmfit-multilingual/data/wiki/ru-100/models/sp30k/lstm_nl4.m/lm_best'), PosixPath('/home/pczapla/workspace/ulmfit-multilingual/data/wiki/ru-100/models/sp30k/lstm_nl4.m/../itos')], 'pretrained_model': None, 'alpha': 2, 'beta': 1, 'drop_mult': 0.3} dps: [0.25 0.1 0.2 0.02 0.15]
Unknown tokens 0, first 100: []
Training lm from: [PosixPath('/home/pczapla/workspace/ulmfit-multilingual/data/wiki/ru-100/models/sp30k/lstm_nl4.m/lm_best'), PosixPath('/home/pczapla/workspace/ulmfit-multilingual/data/wiki/ru-100/models/sp30k/lstm_nl4.m/../itos')]
epoch train_loss valid_loss accuracy
1 2.662225 2.284158 0.552927
epoch train_loss valid_loss accuracy
1 2.436114 2.151187 0.574219
2 2.260576 2.012279 0.595820
3 2.067110 1.862512 0.620246
4 2.000703 1.729883 0.641713
5 1.860899 1.609955 0.661346
6 1.751010 1.522195 0.676297
7 1.705993 1.420628 0.694044
8 1.592143 1.338552 0.708978
9 1.524927 1.270614 0.722596
10 1.475408 1.198585 0.736638
11 1.438226 1.134858 0.749314
12 1.408821 1.076875 0.761448
13 1.345137 1.020660 0.773432
14 1.321399 0.978076 0.783070
15 1.235357 0.936674 0.791642
16 1.204204 0.906822 0.798548
17 1.198709 0.884949 0.803528
18 1.176732 0.874523 0.805585
19 1.111195 0.871806 0.806239
20 1.031497 0.869280 0.806826
/home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ru-1/models/sp30k
Saving info /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ru-1/models/sp30k/lstm_nl4.m/info.json
Starting classifier training
epoch train_loss valid_loss accuracy
1 0.834704 0.615589 0.786000
epoch train_loss valid_loss accuracy
1 0.679823 0.418461 0.851000
epoch train_loss valid_loss accuracy
1 0.555612 0.426877 0.861000
epoch train_loss valid_loss accuracy
1 0.468084 0.391777 0.873000
2 0.434714 0.388670 0.882000
Saving models at /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ru-1/models/sp30k/lstm_nl4.m
Loss and accuracy using (cls_best): [0.3987146, tensor(0.8680)]
0.3987146019935608
0.8679999709129333
```
```
Second execution
epoch train_loss valid_loss accuracy
1 2.749340 2.284773 0.552775
epoch train_loss valid_loss accuracy
1 2.418463 2.157943 0.572302
```
-91
View File
@@ -1,91 +0,0 @@
```
export CUDA_VISIBLE_DEVICES=0
LANG=ru
python -m ulmfit cls --dataset-path data/mldoc/${LANG}-1 --base-lm-path data/wiki/${LANG}-100/models/sp15k/qrnn_nl4.m --lang=${LANG} --name 'nl4-lm5' - train 5 --bs 20 --num-cls-epochs=8 --lr_sched=1cycle --label-smoothing-eps=0.1
Max vocab: 15000
Cache dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ru-1/models/sp15k
Model dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ru-1/models/sp15k/qrnn_nl4-lm5.m
Loading validation /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ru-1/ru.dev.csv
Data lm, trn: 9195, val: 1021
Data cls, trn: 1000, val: 1000
Data tst, trn: 1000, val: 4000
Size of vocabulary: 15000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁,', '▁.', '▁в', 'а', 'и', 'е', '▁и', 'й', '▁на', 'х']
Training args: {'clip': 0.12, 'alpha': 2, 'beta': 1, 'drop_mult': 0.3} dps: {'output_p': 0.25, 'hidden_p': 0.1, 'input_p': 0.2, 'embed_p': 0.02, 'weight_p': 0.15}
/home/pczapla/anaconda3/envs/fastaiv1/lib/python3.7/site-packages/torch/utils/cpp_extension.py:152: UserWarning:
!! WARNING !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Your compiler (c++) may be ABI-incompatible with PyTorch!
Please use a compiler that is ABI-compatible with GCC 4.9 and above.
See https://gcc.gnu.org/onlinedocs/libstdc++/manual/abi.html.
See https://gist.github.com/goldsborough/d466f43e8ffc948ff92de7486c5216d6
for instructions on how to install GCC 4.9 or higher.
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! WARNING !!
warnings.warn(ABI_INCOMPATIBILITY_WARNING.format(compiler))
Loading pretrained model
Unknown tokens 0, first 100: []
Bptt 70
Training lm from: [PosixPath('/home/pczapla/workspace/ulmfit-multilingual/data/wiki/ru-100/models/sp15k/qrnn_nl4.m/lm_best'), PosixPath('/home/pczapla/workspace/ulmfit-multilingual/data/wiki/ru-100/models/sp15k/qrnn_nl4.m/../itos')]
epoch train_loss valid_loss accuracy
1 4.549059 3.763798 0.472608
Total time: 02:05
epoch train_loss valid_loss accuracy
1 3.543295 3.263310 0.567992
2 3.166918 2.968566 0.619391
3 3.057842 2.812808 0.648944
4 2.842979 2.726823 0.665521
5 2.872606 2.703771 0.670281
Total time: 14:40
/home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ru-1/models/sp15k
Saving info /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ru-1/models/sp15k/qrnn_nl4-lm5.m/info.json
```
```
python -m ulmfit cls --dataset-path data/mldoc/${LANG}-1 --base-lm-path data/wiki/${LANG}-100/models/sp15k/qrnn_nl4.m --lang=${LANG} --name 'nl4-lm5' - train 5 --bs 18 --num-cls-epochs=8 --lr_sched=1cycle --label-smoothing-eps=0.1
Max vocab: 15000
Cache dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ru-1/models/sp15k
Model dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ru-1/models/sp15k/qrnn_nl4-lm5.m
Loading validation /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ru-1/ru.dev.csv
Data lm, trn: 9195, val: 1021
Data cls, trn: 1000, val: 1000
Data tst, trn: 1000, val: 4000
Size of vocabulary: 15000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁,', '▁.', '▁в', 'а', 'и', 'е', '▁и', 'й', '▁на', 'х']
/home/pczapla/anaconda3/envs/fastaiv1/lib/python3.7/site-packages/torch/utils/cpp_extension.py:152: UserWarning:
!! WARNING !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Your compiler (c++) may be ABI-incompatible with PyTorch!
Please use a compiler that is ABI-compatible with GCC 4.9 and above.
See https://gcc.gnu.org/onlinedocs/libstdc++/manual/abi.html.
See https://gist.github.com/goldsborough/d466f43e8ffc948ff92de7486c5216d6
for instructions on how to install GCC 4.9 or higher.
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! WARNING !!
warnings.warn(ABI_INCOMPATIBILITY_WARNING.format(compiler))
Single training schedule
epoch train_loss valid_loss accuracy
1 1.021985 0.763919 0.822000
2 0.903123 0.756099 0.849000
3 0.831409 0.852466 0.832000
4 0.744423 0.753127 0.858000
5 0.669933 0.747895 0.862000
6 0.607411 0.744035 0.869000
7 0.554080 0.706676 0.872000
8 0.532403 0.719503 0.870000
Total time: 03:12
Saving models at /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ru-1/models/sp15k/qrnn_nl4-lm5.m
Loss and accuracy using (cls_best): [0.41288647, tensor(0.8615)]
0.41288647055625916
0.8615000247955322
```
-132
View File
@@ -1,132 +0,0 @@
## bptt140
### CLS
```
LANG=ru
python -m ulmfit lm --dataset-path data/wiki/${LANG}-100 --tokenizer='sp' --nl 4 --name 'nl4-bptt140' --max-vocab 15000 --lang ${LANG} --qrnn=True - train 14 --bs=50 --drop_mult=0 --label-smoothing-eps=0.1
Max vocab: 15000
Cache dir: data/wiki/ru-100/models/sp15k
Model dir: data/wiki/ru-100/models/sp15k/qrnn_nl4-bptt140.m
Wiki text was split to 193047 articles
Wiki text was split to 460 articles
Data lm, trn: 193047, val: 460
Size of vocabulary: 15000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁,', '▁.', '▁в', 'а', 'и', 'е', '▁и', 'й', '▁на', 'х']
Training args: {'clip': 0.12, 'alpha': 2, 'beta': 1, 'drop_mult': 0} dps: {'output_p': 0.25, 'hidden_p': 0.1, 'input_p': 0.2, 'embed_p': 0.02, 'weight_p': 0.15}
/home/pczapla/anaconda3/envs/fastaiv1/lib/python3.7/site-packages/torch/utils/cpp_extension.py:152: UserWarning:
!! WARNING !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Your compiler (c++) may be ABI-incompatible with PyTorch!
Please use a compiler that is ABI-compatible with GCC 4.9 and above.
See https://gcc.gnu.org/onlinedocs/libstdc++/manual/abi.html.
See https://gist.github.com/goldsborough/d466f43e8ffc948ff92de7486c5216d6
for instructions on how to install GCC 4.9 or higher.
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! WARNING !!
warnings.warn(ABI_INCOMPATIBILITY_WARNING.format(compiler))
Bptt 70
Training lm from random weights
epoch train_loss valid_loss accuracy
1 4.022324 4.046203 0.451453
2 3.840025 3.935647 0.462081
3 3.873172 3.940451 0.459741
4 3.850415 3.918466 0.462763
5 3.814188 3.898976 0.465359
6 3.771836 3.857443 0.472302
7 3.761032 3.801748 0.479811
8 3.712323 3.755207 0.486181
9 3.706044 3.707724 0.493604
10 3.693287 3.650429 0.502407
11 3.563701 3.588871 0.513251
12 3.477192 3.538018 0.522175
13 3.486541 3.504327 0.528571
14 3.484132 3.495028 0.530480
Total time: 19:53:42
data/wiki/ru-100/models/sp15k
Saving info data/wiki/ru-100/models/sp15k/qrnn_nl4-bptt140.m/info.json
```
### MLDoc
```
python -m ulmfit cls --dataset-path data/mldoc/${LANG}-1 --base-lm-path data/wiki/${LANG}-100/models/sp15k/qrnn_nl4-bptt140.m --lang=${LANG} --name nl4-bptt140 --bptt=140 - train 20 --bs 18 --num-cls-epochs=8 --lr_sched=1cycle --label-smoothing-eps=0.1
Max vocab: 15000
Cache dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ru-1/models/sp15k
Model dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ru-1/models/sp15k/qrnn_nl4-bptt140.m
Loading validation /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ru-1/ru.dev.csv
Running tokenization lm140...
Data lm140, trn: 9195, val: 1021
Data cls, trn: 1000, val: 1000
Data tst, trn: 1000, val: 4000
Size of vocabulary: 15000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁,', '▁.', '▁в', 'а', 'и', 'е', '▁и', 'й', '▁на', 'х']
Training args: {'clip': 0.12, 'alpha': 2, 'beta': 1, 'drop_mult': 0.3} dps: {'output_p': 0.25, 'hidden_p': 0.1, 'input_p': 0.2, 'embed_p': 0.02, 'weight_p': 0.15}
/home/pczapla/anaconda3/envs/fastaiv1/lib/python3.7/site-packages/torch/utils/cpp_extension.py:152: UserWarning:
!! WARNING !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Your compiler (c++) may be ABI-incompatible with PyTorch!
Please use a compiler that is ABI-compatible with GCC 4.9 and above.
See https://gcc.gnu.org/onlinedocs/libstdc++/manual/abi.html.
See https://gist.github.com/goldsborough/d466f43e8ffc948ff92de7486c5216d6
for instructions on how to install GCC 4.9 or higher.
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! WARNING !!
warnings.warn(ABI_INCOMPATIBILITY_WARNING.format(compiler))
Loading pretrained model
Unknown tokens 0, first 100: []
Bptt 140
Training lm from: [PosixPath('/home/pczapla/workspace/ulmfit-multilingual/data/wiki/ru-100/models/sp15k/qrnn_nl4-bptt140.m/lm_best'), PosixPath('/home/pczapla/workspace/ulmfit-multilingual/data/wiki/ru-100/models/sp15k/qrnn_nl4-bptt140.m/../itos')]
epoch train_loss valid_loss accuracy
1 3.855653 2.852676 0.452966
Total time: 01:56
epoch train_loss valid_loss accuracy
1 3.052491 2.572216 0.504417
2 2.565436 2.252638 0.557341
3 2.238792 1.980807 0.599827
4 1.990266 1.784574 0.629615
5 1.851867 1.647570 0.651466
6 1.800950 1.539561 0.668753
7 1.692110 1.447140 0.684268
8 1.546868 1.380541 0.696082
9 1.618451 1.312476 0.708090
10 1.478336 1.255234 0.718722
11 1.477739 1.197032 0.729453
12 1.418238 1.151929 0.738932
13 1.384237 1.103246 0.748681
14 1.245625 1.061356 0.757009
15 1.289399 1.028937 0.763857
16 1.280893 1.006447 0.768844
17 1.268177 0.985106 0.773329
18 1.251713 0.975138 0.775565
19 1.288352 0.968812 0.776884
20 1.164147 0.967133 0.777174
Total time: 52:46
/home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ru-1/models/sp15k
Saving info /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ru-1/models/sp15k/qrnn_nl4-bptt140.m/info.json
Single training schedule
epoch train_loss valid_loss accuracy
1 0.905054 0.572781 0.811000
2 0.747270 0.606469 0.806000
3 0.644590 0.682804 0.810000
4 0.457427 0.605931 0.863000
5 0.351969 0.652187 0.842000
6 0.286099 0.589351 0.860000
7 0.218377 0.622760 0.857000
8 0.185043 0.597372 0.860000
Total time: 03:05
Saving models at /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ru-1/models/sp15k/qrnn_nl4-bptt140.m
Loss and accuracy using (cls_best): [0.47860995, tensor(0.8737)] [0.48851612, tensor(0.8600)]
val_loss: 0.48851612
val_accuracy: 0.8600000143051147
tst_loss: 0.47860995
tst_accuracy: 0.8737499713897705
```
-123
View File
@@ -1,123 +0,0 @@
## BS=18, lr_mult=1.0
epoch train_loss valid_loss accuracy
1 4.427713 3.693394 0.484268
Total time: 01:32
epoch train_loss valid_loss accuracy
1 3.758918 3.446661 0.529820
2 3.394254 3.199054 0.577411
3 3.235364 3.014517 0.610520
4 3.125459 2.871101 0.637153
5 2.994313 2.773862 0.654470
6 2.915075 2.693080 0.669942
7 2.855732 2.622858 0.683629
8 2.755074 2.572147 0.694145
9 2.697898 2.517524 0.704816
10 2.689881 2.468190 0.715927
11 2.579573 2.432807 0.723324
12 2.659464 2.387878 0.733931
13 2.520637 2.344804 0.744233
14 2.482952 2.315014 0.751855
15 2.564730 2.279045 0.761163
16 2.552707 2.255916 0.766971
17 2.511244 2.240169 0.770991
18 2.461429 2.228213 0.774309
19 2.426440 2.222140 0.775745
20 2.425955 2.221128 0.775836
Total time: 1:14:17
## BS=500, lr_mult=1.0
epoch train_loss valid_loss accuracy
1 5.536769 3.850831 0.444662
Total time: 01:10
epoch train_loss valid_loss accuracy
1 4.845898 3.781763 0.461471
2 4.388605 3.643141 0.491225
3 4.038255 3.464554 0.526143
## BS=500, lr_mult=27
epoch train_loss valid_loss accuracy
1 7.234749 5.868155 0.312675
Total time: 01:41
## BS=500, lr_mult=10 + BS=50 lr_mult=10 for cls
/data/wiki/ru-100/models/sp15k/qrnn_nl4sl.m/../itos')]
epoch train_loss valid_loss accuracy
1 5.052441 4.082105 0.439539
Total time: 02:27
epoch train_loss valid_loss accuracy
1 4.120197 3.712686 0.498216
2 3.727043 3.373258 0.557896
3 3.383009 3.109635 0.598970
4 3.180799 2.938478 0.626816
5 3.048913 2.812639 0.647257
6 2.943903 2.727179 0.661784
7 2.864300 2.650275 0.674248
8 2.773810 2.583594 0.687063
9 2.724850 2.529445 0.697573
10 2.673996 2.473824 0.708698
11 2.657637 2.431461 0.716904
12 2.591277 2.372668 0.730318
13 2.537707 2.323294 0.741157
14 2.486507 2.280270 0.751768
15 2.435933 2.238660 0.762545
16 2.401303 2.208848 0.769561
17 2.374117 2.184253 0.776400
18 2.341421 2.169156 0.780388
19 2.328202 2.163922 0.781700
20 2.315462 2.161784 0.782105
Total time: 1:07:09
------------------- Checking the influence of number of epochs on the accuracy
(multifit) test@test:~/workspace/ulmfit-multilingual$ rm /home/test/workspace/ulmfit-multilingual/data/mldoc/ru-1/models/sp15k/qrnn_nl4sl-bs500.m/cls*
(multifit) test@test:~/workspace/ulmfit-multilingual$ python -m ulmfit cls --dataset-path data/mldoc/${LANG}-1 --base-lm-path data/wiki/${LANG}-100/models/sp15k/qrnn_${NAME}.m --lang=${LANG} --name ${NAME}-bs500 - train 0 --bs 50 --num-cls-epochs=4 --lr_sched=1cycle --label-smoothing-eps=0.1 --lr_mult=1
Max vocab: 15000
Cache dir: /home/test/workspace/ulmfit-multilingual/data/mldoc/ru-1/models/sp15k
Model dir: /home/test/workspace/ulmfit-multilingual/data/mldoc/ru-1/models/sp15k/qrnn_nl4sl-bs500.m
Loading validation /home/test/workspace/ulmfit-multilingual/data/mldoc/ru-1/ru.dev.csv
Data lm, trn: 9195, val: 1021
Data cls, trn: 1000, val: 1000
Data tst, trn: 1000, val: 4000
Size of vocabulary: 15000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁,', '▁.', '▁в', 'а', 'и', 'е', '▁и', 'й', '▁на', 'х']
Single training schedule
epoch train_loss valid_loss accuracy
1 1.063845 1.111960 0.601000
2 0.902245 0.766871 0.817000
3 0.766261 0.707502 0.861000
4 0.680053 0.694492 0.866000
Total time: 01:22
Saving models at /home/test/workspace/ulmfit-multilingual/data/mldoc/ru-1/models/sp15k/qrnn_nl4sl-bs500.m
Loss and accuracy using (cls_best): [0.41532615, tensor(0.8630)]
0.41532614827156067
0.8629999756813049
(multifit) test@test:~/workspace/ulmfit-multilingual$ python -m ulmfit cls --dataset-path data/mldoc/${LANG}-1 --base-lm-path data/wiki/${LANG}-100/models/sp15k/qrnn_${NAME}.m --lang=${LANG} --name ${NAME}-bs500 - train 0 --bs 50 --num-cls-epochs=16 --lr_sched=1cycle --label-smoothing-eps=0.1 --lr_mult=1
Max vocab: 15000
Cache dir: /home/test/workspace/ulmfit-multilingual/data/mldoc/ru-1/models/sp15k
Model dir: /home/test/workspace/ulmfit-multilingual/data/mldoc/ru-1/models/sp15k/qrnn_nl4sl-bs500.m
Loading validation /home/test/workspace/ulmfit-multilingual/data/mldoc/ru-1/ru.dev.csv
Data lm, trn: 9195, val: 1021
Data cls, trn: 1000, val: 1000
Data tst, trn: 1000, val: 4000
Size of vocabulary: 15000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁,', '▁.', '▁в', 'а', 'и', 'е', '▁и', 'й', '▁на', 'х']
Loading last classifier
Single training schedule
epoch train_loss valid_loss accuracy
1 0.556688 0.706000 0.873000
2 0.537578 0.717411 0.865000
3 0.532326 0.775549 0.854000
4 0.529178 0.767506 0.861000
5 0.521306 0.797604 0.860000
6 0.527344 0.736225 0.868000
7 0.516393 0.724941 0.878000
8 0.510422 0.716110 0.873000
9 0.504320 0.701886 0.869000
10 0.500323 0.676577 0.878000
11 0.493490 0.682657 0.873000
12 0.484450 0.682047 0.878000
13 0.479248 0.682782 0.880000
14 0.474778 0.688019 0.873000
15 0.472664 0.685304 0.874000
16 0.470747 0.677925 0.878000
Total time: 07:57
-260
View File
@@ -1,260 +0,0 @@
CUDA_VISIBLE_DEVICES=0 python -m ulmfit lm --dataset-path data/wiki/${LANG}-100 --tokenizer='sp' --nl 5 --name 'nl5-merity' --max-vocab 15000 --lang ${LANG} --qrnn=True --bptt=140 --nh 2500 - train 14 --bs=50 --drop_mult=0 --label-smoothing-eps=0.1
CUDA_VISIBLE_DEVICES=1 python -m ulmfit lm --dataset-path data/wiki/${LANG}-100 --tokenizer='sp' --nl 4 --name 'nl4-wide2' --max-vocab 15000 --lang ${LANG} --qrnn=True --nh 3100 - train 10 --bs=100 --drop_mult=0 --label-smoothing-eps=0.1
CUDA_VISIBLE_DEVICES=2 python -m ulmfit lm --dataset-path data/wiki/${LANG}-100 --tokenizer='sp' --nl 4 --name 'nl4-merity' --max-vocab 15000 --lang ${LANG} --qrnn=True --bptt=140 --nh 2500 - train 14 --bs=50 --drop_mult=0 --label-smoothing-eps=0.1
CUDA_VISIBLE_DEVICES=3 python -m ulmfit lm --dataset-path data/wiki/ru-100 --bidir=False --qrnn=True --nl 4 --tokenizer=sp --max-vocab 15000 --lang ru --name nl4sl - train 10 --drop-mult=0 --bs=50 --label-smoothing-eps=0.1
## 25vocab
CUDA_VISIBLE_DEVICES=3 python -m ulmfit lm --dataset-path data/wiki/ru-100 --bidir=False --qrnn=True --nl 4 --tokenizer=sp --max-vocab 25000 --lang ru --name nl4 - train 10 --drop-mult=0 --bs=50 --label-smoothing-eps=0.1
LANG=ru
CUDA_VISIBLE_DEVICES=0 python -m ulmfit lm --dataset-path data/wiki/${LANG}-100 --tokenizer='sp' --nl 4 --name 'nl4-merity-wide2' --max-vocab 15000 --lang ${LANG} --qrnn=True --bptt=140 --nh 3100 - train 10 --bs=50 --drop_mult=0 --label-smoothing-eps=0.1
##### CLS
export CUDA_VISIBLE_DEVICES=0
LANG=ru
NAME=nl5-merity
python -m ulmfit cls --dataset-path data/mldoc/${LANG}-1 --base-lm-path data/wiki/${LANG}-100/models/sp15k/qrnn_${NAME}.m --lang=${LANG} --name ${NAME} - train 20 --bs 18 --num-cls-epochs=4 --lr_sched=1cycle --label-smoothing-eps=0.1
export CUDA_VISIBLE_DEVICES=1
LANG=ru
NAME=nl4-wide2
python -m ulmfit cls --dataset-path data/mldoc/${LANG}-1 --base-lm-path data/wiki/${LANG}-100/models/sp15k/qrnn_${NAME}.m --lang=${LANG} --name ${NAME} - train 20 --bs 18 --num-cls-epochs=4 --lr_sched=1cycle --label-smoothing-eps=0.1
export CUDA_VISIBLE_DEVICES=2
LANG=ru
NAME=nl4-merity
python -m ulmfit cls --dataset-path data/mldoc/${LANG}-1 --base-lm-path data/wiki/${LANG}-100/models/sp15k/qrnn_${NAME}.m --lang=${LANG} --name ${NAME} - train 20 --bs 18 --num-cls-epochs=4 --lr_sched=1cycle --label-smoothing-eps=0.1
export CUDA_VISIBLE_DEVICES=3
LANG=ru
NAME=nl4sl
python -m ulmfit cls --dataset-path data/mldoc/${LANG}-1 --base-lm-path data/wiki/${LANG}-100/models/sp15k/qrnn_${NAME}.m --lang=${LANG} --name ${NAME} - train 20 --bs 18 --num-cls-epochs=4 --lr_sched=1cycle --label-smoothing-eps=0.1
-----------------------CLS1
export CUDA_VISIBLE_DEVICES=0
LANG=ru
NAME=nl4
python -m ulmfit cls --dataset-path data/mldoc/${LANG}-1 --base-lm-path data/wiki/${LANG}-100/models/sp15k/qrnn_${NAME}.m --lang=${LANG} --name ${NAME} - train 20 --bs 18 --num-cls-epochs=4 --lr_sched=1cycle --label-smoothing-eps=0.1
export CUDA_VISIBLE_DEVICES=0
LANG=ru
NAME=nl8
python -m ulmfit cls --dataset-path data/mldoc/${LANG}-1 --base-lm-path data/wiki/${LANG}-100/models/sp15k/qrnn_${NAME}.m --lang=${LANG} --name ${NAME} - train 20 --bs 18 --num-cls-epochs=4 --lr_sched=1cycle --label-smoothing-eps=0.1
python -m ulmfit cls --dataset-path data/wiki/${LANG}-100 --tokenizer='sp' --nl 5 --name 'nl5-merity' --max-vocab 15000 --lang ${LANG} --qrnn=True --bptt=140 --nh 2500 - train 14 --bs=50 --drop_mult=0 --label-smoothing-eps=0.1
CUDA_VISIBLE_DEVICES=1 python -m ulmfit lm --dataset-path data/wiki/${LANG}-100 --tokenizer='sp' --nl 4 --name 'nl4-wide2' --max-vocab 15000 --lang ${LANG} --qrnn=True --nh 3100 - train 10 --bs=100 --drop_mult=0 --label-smoothing-eps=0.1
CUDA_VISIBLE_DEVICES=2 python -m ulmfit lm --dataset-path data/wiki/${LANG}-100 --tokenizer='sp' --nl 4 --name 'nl4-merity' --max-vocab 15000 --lang ${LANG} --qrnn=True --bptt=140 --nh 2500 - train 14 --bs=50 --drop_mult=0 --label-smoothing-eps=0.1
CUDA_VISIBLE_DEVICES=3 python -m ulmfit lm --dataset-path data/wiki/ru-100 --bidir=False --qrnn=True --nl 4 --tokenizer=sp --max-vocab 15000 --lang ru --name nl4sl - train 10 --drop-mult=0 --bs=50 --label-smoothing-eps=0.1
##
------------------------
7 3.680504 3.678406 0.498396
8 3.556062 3.596037 0.512345
9 3.553716 3.535783 0.523509
10 3.523366 3.515352 0.527935
Total time: 20:03:59
data/wiki/ru-100/models/sp15k
Saving info data/wiki/ru-100/models/sp15k/qrnn_ nl4sl.m/info.json
### Ru
```
export CUDA_VISIBLE_DEVICES=3
LANG=ru
NAME=nl4sl
python -m ulmfit cls --dataset-path data/mldoc/${LANG}-1 --base-lm-path data/wiki/${LANG}-100/models/sp15k/qrnn_${NAME}.m --lang=${LANG} --name ${NAME} - train 20 --bs 18 --num-cls-epochs=4 --lr_sched=1cycle --label-smoothing-eps=0.1
Max vocab: 15000
Cache dir: /home/test/workspace/ulmfit-multilingual/data/mldoc/ru-1/models/sp15k
Model dir: /home/test/workspace/ulmfit-multilingual/data/mldoc/ru-1/models/sp15k/qrnn_nl4sl.m
Loading validation /home/test/workspace/ulmfit-multilingual/data/mldoc/ru-1/ru.dev.csv
Data lm, trn: 9195, val: 1021
Data cls, trn: 1000, val: 1000
Data tst, trn: 1000, val: 4000
Size of vocabulary: 15000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁,', '▁.', '▁в', 'а', 'и', 'е', '▁и', 'й', '▁на', 'х']
Training args: {'clip': 0.12, 'alpha': 2, 'beta': 1, 'drop_mult': 0.3} dps: {'output_p': 0.25, 'hidden_p': 0.1, 'input_p': 0.2, 'embed_p': 0.02, 'weight_p': 0.15}
Loading pretrained model
Unknown tokens 0, first 100: []
Training lm from: [PosixPath('/home/test/workspace/ulmfit-multilingual/data/wiki/ru-100/models/sp15k/qrnn_nl4sl.m/lm_best'), PosixPath('/home/test/workspace/ulmfit-multilingual/data/wiki/ru-100/models/sp15k/qrnn_nl4sl.m/../itos')]
epoch train_loss valid_loss accuracy
1 4.427713 3.693394 0.484268
Total time: 01:32
epoch train_loss valid_loss accuracy
1 3.758918 3.446661 0.529820
2 3.394254 3.199054 0.577411
3 3.235364 3.014517 0.610520
4 3.125459 2.871101 0.637153
5 2.994313 2.773862 0.654470
6 2.915075 2.693080 0.669942
7 2.855732 2.622858 0.683629
8 2.755074 2.572147 0.694145
9 2.697898 2.517524 0.704816
10 2.689881 2.468190 0.715927
11 2.579573 2.432807 0.723324
12 2.659464 2.387878 0.733931
13 2.520637 2.344804 0.744233
14 2.482952 2.315014 0.751855
15 2.564730 2.279045 0.761163
16 2.552707 2.255916 0.766971
17 2.511244 2.240169 0.770991
18 2.461429 2.228213 0.774309
19 2.426440 2.222140 0.775745
20 2.425955 2.221128 0.775836
Total time: 1:14:17
/home/test/workspace/ulmfit-multilingual/data/mldoc/ru-1/models/sp15k
Saving info /home/test/workspace/ulmfit-multilingual/data/mldoc/ru-1/models/sp15k/qrnn_nl4sl.m/info.json
Single training schedule
epoch train_loss valid_loss accuracy
1 1.022382 0.779370 0.822000
2 0.866379 0.792353 0.832000
3 0.715650 0.698579 0.865000
4 0.603621 0.693501 0.884000
Total time: 02:05
Saving models at /home/test/workspace/ulmfit-multilingual/data/mldoc/ru-1/models/sp15k/qrnn_nl4sl.m
Loss and accuracy using (cls_best): [0.3978519, tensor(0.8723)]
0.3978519141674042
0.8722500205039978
```
----
```bash
$ export CUDA_VISIBLE_DEVICES=0
$ LANG=ru
$ NAME=nl4
$ python -m ulmfit cls --dataset-path data/mldoc/${LANG}-1 --base-lm-path data/wiki/${LANG}-100/models/sp15k/qrnn_${NAME}.m --lang=${LANG} --name ${NAME} - train 20 --bs 18 --num-cls-epochs=4 --lr_sched=1cycle --label-smoothing-eps=0.1
Max vocab: 15000
Cache dir: /home/n-waves/workspace/ulmfit-multilingual/data/mldoc/ru-1/models/sp15k
Model dir: /home/n-waves/workspace/ulmfit-multilingual/data/mldoc/ru-1/models/sp15k/qrnn_nl4.m
Loading validation /home/n-waves/workspace/ulmfit-multilingual/data/mldoc/ru-1/ru.dev.csv
Data lm, trn: 9195, val: 1021
Data cls, trn: 1000, val: 1000
Data tst, trn: 1000, val: 4000
Size of vocabulary: 15000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁,', '▁.', '▁в', 'а', 'и', 'е', '▁и', 'й', '▁на', 'х']
Size of vocabulary: 15000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁,', '▁.', '▁в', 'а', 'и', 'е', '▁и', 'й', '▁на', 'х']
Training args: {'clip': 0.12, 'alpha': 2, 'beta': 1, 'drop_mult': 0.3} dps: {'output_p': 0.25, 'hidden_p': 0.1, 'input_p': 0.2, 'embed_p': 0.02, 'weight_p': 0.15}
Loading pretrained model
Unknown tokens 0, first 100: []
Training lm from: [PosixPath('/home/n-waves/workspace/ulmfit-multilingual/data/wiki/ru-100/models/sp15k/qrnn_nl4.m/lm_best'), PosixPath('/home/n-waves/workspace/ulmfit-multilingual/data/wiki/ru-100/models/sp15k/qrnn_nl4.m/../itos')]
epoch train_loss valid_loss accuracy
1 4.531968 3.764185 0.474252
Total time: 01:44
epoch train_loss valid_loss accuracy
1 3.770046 3.506013 0.522443
2 3.546580 3.251341 0.571620
3 3.320569 3.055680 0.606364
4 3.130226 2.912925 0.631395
5 3.072772 2.809725 0.649728
6 2.765424 2.731825 0.662963
7 2.959237 2.662104 0.676203
8 2.807999 2.600417 0.688423
9 2.771271 2.548279 0.699473
10 2.809488 2.501688 0.709020
11 2.707221 2.454946 0.719196
12 2.597226 2.417315 0.728432
13 2.609972 2.376176 0.737923
14 2.590427 2.341666 0.746216
15 2.572995 2.306599 0.754747
16 2.496636 2.285632 0.760806
17 2.508584 2.266456 0.765147
18 2.441373 2.253839 0.768449
19 2.430915 2.249204 0.769536
20 2.426130 2.247966 0.769886
Total time: 47:33
/home/n-waves/workspace/ulmfit-multilingual/data/mldoc/ru-1/models/sp15k
Saving info /home/n-waves/workspace/ulmfit-multilingual/data/mldoc/ru-1/models/sp15k/qrnn_nl4.m/info.json
Single training schedule
epoch train_loss valid_loss accuracy
1 1.060299 0.890710 0.716000
2 0.884965 0.769866 0.853000
3 0.722994 0.723213 0.875000
4 0.609488 0.730594 0.865000
Total time: 01:14
Saving models at /home/n-waves/workspace/ulmfit-multilingual/data/mldoc/ru-1/models/sp15k/qrnn_nl4.m
Loss and accuracy using (cls_best): [0.39589784, tensor(0.8692)]
0.39589783549308777
0.8692499995231628
```
## wide 2
```bash
$ CUDA_VISIBLE_DEVICES=1 python -m ulmfit lm --dataset-path data/wiki/${LANG}-100 --tokenizer='sp' --nl 4 --name 'nl4-wide2' --max-vocab 15000 --lang ${LANG} --qrnn=True --nh 3100 - train 10 --bs=100 --drop_mult=0 --label-smoothing-eps=0.1
Max vocab: 15000
Cache dir: data/wiki/ru-100/models/sp15k
Model dir: data/wiki/ru-100/models/sp15k/qrnn_nl4-wide2.m
Wiki text was split to 193047 articles
Wiki text was split to 460 articles
Data lm, trn: 193047, val: 460
Size of vocabulary: 15000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁,', '▁.', '▁в', 'а', 'и', 'е', '▁и', 'й', '▁на', 'х']
Training args: {'clip': 0.12, 'alpha': 2, 'beta': 1, 'drop_mult': 0} dps: {'output_p': 0.25, 'hidden_p': 0.1, 'input_p': 0.2, 'embed_p': 0.02, 'weight_p': 0.15}
Training lm from random weights
epoch train_loss valid_loss accuracy
1 3.908233 3.950865 0.463469
2 3.738863 3.815026 0.477703
3 3.696502 3.779513 0.483625
4 3.692592 3.720908 0.490143
5 3.600519 3.652444 0.501671
6 3.564568 3.582584 0.511550
7 3.472859 3.493226 0.525943
8 3.390483 3.407970 0.541749
9 3.351620 3.344207 0.552758
10 3.329683 3.330087 0.556380
Total time: 51:05:43
data/wiki/ru-100/models/sp15k
Saving info data/wiki/ru-100/models/sp15k/qrnn_nl4-wide2.m/info.json
```
### MLDoc
export CUDA_VISIBLE_DEVICES=1
LANG=ru
NAME=nl4-wide2
python -m ulmfit cls --dataset-path data/mldoc/${LANG}-1 --base-lm-path data/wiki/${LANG}-100/models/sp15k/qrnn_${NAME}.m --lang=${LANG} --name ${NAME} - train 20 --bs 18 --num-cls-epochs=4 --lr_sched=1cycle --label-smoothing-eps=0.1
## Merity nl4
```bash
CUDA_VISIBLE_DEVICES=2 python -m ulmfit lm --dataset-path data/wiki/${LANG}-100 --tokenizer='sp' --nl 4 --name 'nl4-merity' --max-vocab 15000 --lang ${LANG} --qrnn=True --bptt=140 --nh 2500 - train 14 --bs=50 --drop_mult=0 --label-smoothing-eps=0.1
Max vocab: 15000
Cache dir: data/wiki/ru-100/models/sp15k
Model dir: data/wiki/ru-100/models/sp15k/qrnn_nl4-merity.m
Wiki text was split to 193047 articles
Wiki text was split to 460 articles
Data lm, trn: 193047, val: 460
Size of vocabulary: 15000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁,', '▁.', '▁в', 'а', 'и', 'е', '▁и', 'й', '▁на', 'х']
Training args: {'clip': 0.12, 'alpha': 2, 'beta': 1, 'drop_mult': 0} dps: {'output_p': 0.25, 'hidden_p': 0.1, 'input_p': 0.2, 'embed_p': 0.02, 'weight_p': 0.15}
Training lm from random weights
epoch train_loss valid_loss accuracy
1 3.965899 3.977734 0.460046
2 3.806082 3.858176 0.472396
3 3.839230 3.874757 0.469224
4 3.762105 3.868653 0.469943
5 3.800827 3.833991 0.474116
6 3.755466 3.796329 0.479868
7 3.691958 3.747888 0.487367
8 3.660529 3.702986 0.493545
9 3.593282 3.635035 0.504086
10 3.585948 3.579200 0.513631
11 3.473865 3.512114 0.525391
12 3.451973 3.455807 0.535520
13 3.418731 3.417129 0.542943
14 3.385637 3.407541 0.545545
Total time: 51:32:09
data/wiki/ru-100/models/sp15k
Saving info data/wiki/ru-100/models/sp15k/qrnn_nl4-merity.m/info.json
```
#### MLDoc
export CUDA_VISIBLE_DEVICES=2
LANG=ru
NAME=nl4-merity
python -m ulmfit cls --dataset-path data/mldoc/${LANG}-1 --base-lm-path data/wiki/${LANG}-100/models/sp15k/qrnn_${NAME}.m --lang=${LANG} --name ${NAME} - train 20 --bs 18 --num-cls-epochs=4 --lr_sched=1cycle --label-smoothing-eps=0.1
-101
View File
@@ -1,101 +0,0 @@
## LM
### MLDoc 1
```
python -m ulmfit cls --dataset-path data/mldoc/${LANG}-1 --base-lm-path data/wiki/${LANG}-100/models/sp15k/qrnn_${NAME}.m --lang=${LANG} --name ${NAME} - train 20 --bs 18 --num-cls-epochs=4 --lr_sched=1cycle --label-smoothing-eps=0.1
Max vocab: 15000
Cache dir: /home/test/workspace/ulmfit-multilingual/data/mldoc/ru-1/models/sp15k
Model dir: /home/test/workspace/ulmfit-multilingual/data/mldoc/ru-1/models/sp15k/qrnn_nl4-merity.m
Loading validation /home/test/workspace/ulmfit-multilingual/data/mldoc/ru-1/ru.dev.csv
Data lm, trn: 9195, val: 1021
Data cls, trn: 1000, val: 1000
Data tst, trn: 1000, val: 4000
Size of vocabulary: 15000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁,', '▁.', '▁в', 'а', 'и', 'е', '▁и', 'й', '▁на', 'х']
Training args: {'clip': 0.12, 'alpha': 2, 'beta': 1, 'drop_mult': 0.3} dps: {'output_p': 0.25, 'hidden_p': 0.1, 'input_p': 0.2, 'embed_p': 0.02, 'weight_p': 0.15}
Loading pretrained model
Unknown tokens 0, first 100: []
Training lm from: [PosixPath('/home/test/workspace/ulmfit-multilingual/data/wiki/ru-100/models/sp15k/qrnn_nl4-merity.m/lm_best'), PosixPath('/home/test/workspace/ulmfit-multilingual/data/wiki/ru-100/models/sp15k/qrnn_nl4-merity.m/../itos')]
epoch train_loss valid_loss accuracy
1 4.411345 3.660489 0.486965
Total time: 02:43
epoch train_loss valid_loss accuracy
1 3.613334 3.372079 0.544188
2 3.325245 3.100234 0.596406
3 3.181919 2.906442 0.631586
4 3.010830 2.767429 0.656378
5 2.880418 2.663865 0.676339
6 2.825526 2.571074 0.694140
7 2.766901 2.483362 0.711652
8 2.601965 2.417213 0.726853
9 2.569160 2.341699 0.744193
10 2.588142 2.272457 0.760294
11 2.494011 2.198197 0.779175
12 2.421921 2.135517 0.795854
13 2.396429 2.075012 0.812815
14 2.306572 2.019140 0.828851
15 2.281730 1.966554 0.843595
16 2.206670 1.927567 0.854515
17 2.143836 1.901352 0.862114
18 2.141715 1.884954 0.867003
19 2.070353 1.876935 0.869214
20 2.066195 1.874844 0.869665
Total time: 2:12:21
/home/test/workspace/ulmfit-multilingual/data/mldoc/ru-1/models/sp15k
Saving info /home/test/workspace/ulmfit-multilingual/data/mldoc/ru-1/models/sp15k/qrnn_nl4-merity.m/info.json
Single training schedule
epoch train_loss valid_loss accuracy
1 0.994393 0.755689 0.844000
2 0.859871 0.822650 0.856000
3 0.678185 0.721333 0.859000
4 0.586906 0.693618 0.878000
Total time: 04:17
Saving models at /home/test/workspace/ulmfit-multilingual/data/mldoc/ru-1/models/sp15k/qrnn_nl4-merity.m
Loss and accuracy using (cls_best): [0.3872361, tensor(0.8777)]
0.387236088514328
0.8777499794960022
```
### MLDoc 2
```
(multifit) test@test:~/workspace/ulmfit-multilingual$ python -m ulmfit cls --dataset-path data/mldoc/${LANG}-1 --base-lm-path data/mldoc/${LANG}-1/models/sp15k/qrnn_${NAME}.
m --lang=${LANG} --name ${NAME}-16 - train 0 --bs 18 --num-cls-epochs=16 --lr_sched=1cycle --label-smoothing-eps=0.1
Max vocab: 15000
Cache dir: /home/test/workspace/ulmfit-multilingual/data/mldoc/ru-1/models/sp15k
Model dir: /home/test/workspace/ulmfit-multilingual/data/mldoc/ru-1/models/sp15k/qrnn_nl4-merity-16.m
Loading validation /home/test/workspace/ulmfit-multilingual/data/mldoc/ru-1/ru.dev.csv
Data lm, trn: 9195, val: 1021
Data cls, trn: 1000, val: 1000
Data tst, trn: 1000, val: 4000
Size of vocabulary: 15000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁,', '▁.', '▁в', 'а', 'и', 'е', '▁и', 'й', '▁на', 'х']
Training args: {'clip': 0.12, 'alpha': 2, 'beta': 1, 'drop_mult': 0.3} dps: {'output_p': 0.25, 'hidden_p': 0.1, 'input_p': 0.2, 'embed_p': 0.02, 'weight_p': 0.15}
Loading pretrained model
Unknown tokens 0, first 100: []
/home/test/workspace/ulmfit-multilingual/data/mldoc/ru-1/models/sp15k
Saving info /home/test/workspace/ulmfit-multilingual/data/mldoc/ru-1/models/sp15k/qrnn_nl4-merity-16.m/info.json
Single training schedule
epoch train_loss valid_loss accuracy
1 1.081481 0.837775 0.781000
2 0.901621 0.798574 0.858000
3 0.778870 0.826576 0.859000
4 0.693465 0.787875 0.833000
5 0.639763 0.841092 0.861000
6 0.595044 0.731504 0.853000
7 0.576115 0.796013 0.819000
8 0.544098 0.744034 0.875000
9 0.531359 0.699035 0.879000
10 0.513886 0.698310 0.879000
11 0.495473 0.686897 0.864000
12 0.489863 0.688584 0.881000
13 0.481086 0.675660 0.881000
14 0.479960 0.684917 0.883000
15 0.490157 0.687865 0.882000
16 0.486081 0.679104 0.882000
Total time: 15:26
Saving models at /home/test/workspace/ulmfit-multilingual/data/mldoc/ru-1/models/sp15k/qrnn_nl4-merity-16.m
Loss and accuracy using (cls_best): [0.4047818, tensor(0.8737)]
0.4047817885875702
0.8737499713897705
```
-38
View File
@@ -1,38 +0,0 @@
## LM
```bash
CUDA_VISIBLE_DEVICES=0 python -m ulmfit lm --dataset-path data/wiki/${LANG}-100 --tokenizer='sp' --nl 5 --name 'nl5-mer
ity' --max-vocab 15000 --lang ${LANG} --qrnn=True --bptt=140 --nh 2500 - train 14 --bs=50 --drop_mult=0 --label-smoothing-eps=0.1
Max vocab: 15000
Cache dir: data/wiki/ru-100/models/sp15k
Model dir: data/wiki/ru-100/models/sp15k/qrnn_nl5-merity.m
Wiki text was split to 193047 articles
Wiki text was split to 460 articles
Data lm, trn: 193047, val: 460
Size of vocabulary: 15000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁,', '▁.', '▁в', 'а', 'и', 'е', '▁и', 'й', '▁на', 'х']
Training args: {'clip': 0.12, 'alpha': 2, 'beta': 1, 'drop_mult': 0} dps: {'output_p': 0.25, 'hidden_p': 0.1, 'input_p': 0.2, 'embed_p': 0.02, 'weight_p': 0.15}
Training lm from random weights
epoch train_loss valid_loss accuracy
1 3.969639 4.024787 0.452887
2 3.814622 3.834142 0.476612
3 3.798372 3.846118 0.473666
4 3.742609 3.835311 0.474612
5 3.715114 3.790690 0.480469
6 3.652987 3.748408 0.486146
7 3.573350 3.697325 0.493774
8 3.589853 3.637134 0.504189
9 3.558110 3.583030 0.512137
10 3.501382 3.510491 0.524148
11 3.408982 3.437177 0.536634
12 3.402717 3.373548 0.548113
13 3.293624 3.331311 0.556288
14 3.309859 3.322777 0.558426
Total time: 68:05:15
data/wiki/ru-100/models/sp15k
Saving info data/wiki/ru-100/models/sp15k/qrnn_nl5-merity.m/info.json
```
### MLDoc 1
```
```
-78
View File
@@ -1,78 +0,0 @@
python -m ulmfit cls --dataset-path data/mldoc/${LANG}-1 --base-lm-path data/wiki/${LANG}-100/models/sp15k/qrnn_${NAME}.m --lang=${LANG} --name ${NAME}-2 - train 20 --bs 18 --num-cls-epochs=4 --lr_sched=1cycle --label-smoothing-eps=0.1
Max vocab: 15000
Cache dir: /home/n-waves/workspace/ulmfit-multilingual/data/mldoc/ru-1/models/sp15k
Model dir: /home/n-waves/workspace/ulmfit-multilingual/data/mldoc/ru-1/models/sp15k/qrnn_nl8-2.m
Loading validation /home/n-waves/workspace/ulmfit-multilingual/data/mldoc/ru-1/ru.dev.csv
Data lm, trn: 9195, val: 1021
Data cls, trn: 1000, val: 1000
Data tst, trn: 1000, val: 4000
Size of vocabulary: 15000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁,', '▁.', '▁в', 'а', 'и', 'е', '▁и', 'й', '▁на', 'х']
Training args: {'clip': 0.12, 'alpha': 2, 'beta': 1, 'drop_mult': 0.3} dps: {'output_p': 0.25, 'hidden_p': 0.1, 'input_p': 0.2, 'embed_p': 0.02, 'weight_p': 0.15}
Loading pretrained model
Unknown tokens 0, first 100: []
Training lm from: [PosixPath('/home/n-waves/workspace/ulmfit-multilingual/data/wiki/ru-100/models/sp15k/qrnn_nl8.m/lm_best'), PosixPath('/home/n-waves/workspace/ulmfit-multilingual/data/wiki/ru-100/models/sp15k/qrnn_nl8.m/../itos')]
epoch train_loss valid_loss accuracy
1 3.966292 3.450758 0.527065
Total time: 02:58
epoch train_loss valid_loss accuracy
1 3.495761 3.276329 0.560047
2 3.319947 3.102911 0.593742
3 3.137904 2.955317 0.620171
4 3.040286 2.839161 0.642270
5 2.869962 2.753622 0.658331
6 2.905739 2.680881 0.672860
7 2.836454 2.620925 0.685026
8 2.857271 2.569716 0.695722
9 2.702872 2.520050 0.705589
10 2.701559 2.473591 0.715346
11 2.740815 2.429558 0.725597
12 2.646513 2.389550 0.735010
13 2.587685 2.349614 0.744885
14 2.546527 2.311087 0.754463
15 2.568136 2.278581 0.762980
16 2.492115 2.252367 0.769275
17 2.338561 2.230529 0.775072
18 2.447506 2.218215 0.778437
19 2.364424 2.212115 0.780085
20 2.367132 2.210520 0.780424
Total time: 1:30:47
/home/n-waves/workspace/ulmfit-multilingual/data/mldoc/ru-1/models/sp15k
Saving info /home/n-waves/workspace/ulmfit-multilingual/data/mldoc/ru-1/models/sp15k/qrnn_nl8-2.m/info.json
Single training schedule
epoch train_loss valid_loss accuracy
1 0.969255 0.769736 0.843000
2 0.846340 0.813483 0.839000
3 0.718175 0.705339 0.867000
4 0.609513 0.726442 0.875000
Total time: 02:54
Saving models at /home/n-waves/workspace/ulmfit-multilingual/data/mldoc/ru-1/models/sp15k/qrnn_nl8-2.m
Loss and accuracy using (cls_best): [0.4056449, tensor(0.8698)]
0.40564489364624023
(fastaiv1) n-waves@GV100:~/workspace/ulmfit-multilingual$ CUDA_VISIBLE_DEVICES=0 python -m ulmfit lm --dataset-path data/wiki/${LANG}-100 --tokenizer='sp' --nl 4 --name 'nl4-merity-wide2' --max-vocab 15000 --lang ${LANG} --qrnn=True --bptt=140 --nh 3100 - train 10 --bs=50 --drop_mult=0 --label-smoothing-eps=0.1
Max vocab: 15000
Cache dir: data/wiki/ru-100/models/sp15k
Model dir: data/wiki/ru-100/models/sp15k/qrnn_nl4-merity-wide2.m
Wiki text was split to 193047 articles
Wiki text was split to 460 articles
Data lm, trn: 193047, val: 460
Size of vocabulary: 15000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁,', '▁.', '▁в', 'а', 'и', 'е', '▁и', 'й', '▁на', 'х']
Training args: {'clip': 0.12, 'alpha': 2, 'beta': 1, 'drop_mult': 0} dps: {'output_p': 0.25, 'hidden_p': 0.1, 'input_p': 0.2, 'embed_p': 0.02, 'weight_p': 0.15}
Training lm from random weights
epoch train_loss valid_loss accuracy
1 3.871650 3.908779 0.467000
2 3.834093 3.884629 0.467916
3 3.741005 3.870331 0.469612
4 3.785444 3.818511 0.476906
5 3.741888 3.752743 0.486148
6 3.678481 3.672177 0.499054
7 3.570398 3.581498 0.512801
8 3.455193 3.482614 0.530569
9 3.379779 3.409405 0.543477
10 3.384574 3.387195 0.548881
Total time: 27:24:33
data/wiki/ru-100/models/sp15k
-115
View File
@@ -1,115 +0,0 @@
```
python -m ulmfit cls --dataset-path data/mldoc/${LANG}-1 --tokenizer sp --max-vocab 16000 --qrnn True --lang=${LANG} --name nl4 - train 20 --bs 18 --num-cls-epochs=4 --lr_sched=1cycle --label-smoothing-eps=0.1
Max vocab: 16000
Cache dir: data/mldoc/ru-1/models/sp16k
Model dir: data/mldoc/ru-1/models/sp16k/qrnn_nl4.m
Loading validation data/mldoc/ru-1/ru.dev.csv
/sentencepiece/src/sentencepiece_trainer.cc(185) LOG(INFO) Running command: --input=data/mldoc/ru-1/models/sp16k/all_text.txt --character_coverage=0.99 --unk_id=8 --pad_id=-1 --bos_id=-1 --eos_id=-1 --max_sentence_length=20480 --input_sentence_size=10000000 --user_defined_symbols=xxunk,xxpad,xxbos,xxfld,xxmaj,xxup,xxrep,xxwrep --model_prefix=data/mldoc/ru-1/models/sp16k/spm --vocab_size=16000 --model_type=unigram
/sentencepiece/src/unigram_model_trainer.cc(481) LOG(INFO) Starts training with :
input: "data/mldoc/ru-1/models/sp16k/all_text.txt"
model_prefix: "data/mldoc/ru-1/models/sp16k/spm"
model_type: UNIGRAM
vocab_size: 16000
character_coverage: 0.99
input_sentence_size: 10000000
max_sentence_length: 20480
user_defined_symbols: "xxunk"
user_defined_symbols: "xxpad"
user_defined_symbols: "xxbos"
user_defined_symbols: "xxfld"
user_defined_symbols: "xxmaj"
user_defined_symbols: "xxup"
user_defined_symbols: "xxrep"
user_defined_symbols: "xxwrep"
unk_id: 8
bos_id: -1
eos_id: -1
pad_id: -1
/sentencepiece/src/trainer_interface.cc(183) LOG(INFO) Loading corpus: data/mldoc/ru-1/models/sp16k/all_text.txt
/sentencepiece/src/trainer_interface.cc(216) LOG(INFO) Loading: ▁ ▁киев▁,▁20▁июн▁(▁ ▁рейтер▁)▁-▁ ▁нацбанк▁ ▁украины▁планирует▁постепенно▁отказаться▁от▁кредитных▁аукционов▁и▁использовать▁для▁рефинансирования▁банков▁только▁операции▁репо▁и▁ломбардное▁кредитование▁,▁сказала▁директор▁департамента▁ ▁нбу▁ ▁наталия▁ ▁гребеник▁.▁&'▁ ▁от▁кредитных▁аукционов▁ ▁нбу▁будет▁в▁дальнейшем▁отказываться▁,▁используя▁репо▁и▁ломбардное▁кредитование▁&'▁,▁-▁сказала▁директор▁кредитно-эмиссионного▁департамента▁.▁ ▁по▁ее▁словам▁,▁в▁настоящее▁время▁ ▁нацбанк▁использует▁все▁три▁канала▁рефинансирования▁банков▁.▁ ▁удельный▁вес▁рефинансирования▁через▁операции▁репо▁составляет▁50▁процентов▁,▁через▁кредитные▁аукционы▁и▁ломбардное▁кредитование▁под▁залог▁гособлигаций▁по▁25▁процентов▁.▁в▁частности▁,▁с▁начала▁года▁были▁проведены▁четыре▁кредитных▁аукционах▁на▁которых▁банкам▁было▁продано▁560▁миллионов▁гривен▁кредитов▁,▁сказала▁ ▁гребеник▁.▁ ▁по▁ее▁словам▁,▁средняя▁ставка▁продажи▁ресурсов▁на▁кредитных▁аукционах▁на▁3-4▁процента▁превышала▁ставку▁рефинансирования▁,▁действующую▁на▁день▁проведения▁аукциона▁.▁ ▁действующая▁в▁настоящее▁время▁ставка▁рефинансирования▁ ▁нбу▁составляет▁21▁процент▁годовых▁,▁ломбардная▁ставка▁-▁31▁процент▁.▁ ▁по▁соглашениям▁репо▁ставка▁может▁быть▁ниже▁ставки▁рефинансирования▁,▁но▁не▁более▁,▁чем▁на▁5▁процентных▁пунктов▁,▁сказал▁ ▁гребеник▁.▁ ▁по▁ее▁словам▁,▁в▁будущем▁ ▁нбу▁также▁планирует▁освоить▁инструмент▁векселей▁при▁рефинансировании▁коммерческих▁банков▁.▁&'▁ ▁мы▁будем▁переходить▁к▁использованию▁векселей▁как▁залога▁,▁что▁даст▁нам▁возможность▁более▁четко▁определять▁стоимость▁денежных▁ресурсов▁&'▁,▁-▁сказала▁ ▁гребеник▁.▁-▁ ▁наталия▁ ▁зинец▁,▁ ▁киевское▁бюро▁,▁(▁044▁)▁244▁9150▁.▁(▁c▁)▁ ▁reuters▁ ▁limited▁1997▁. size=0
/sentencepiece/src/trainer_interface.cc(200) LOG(INFO) Too long lines (>=20480 bytes (it can be changed with --max_sentence_length flag). Skipped.
/sentencepiece/src/trainer_interface.cc(200) LOG(INFO) Too long lines (>=20480 bytes (it can be changed with --max_sentence_length flag). Skipped.
/sentencepiece/src/trainer_interface.cc(240) LOG(INFO) Loaded 998 sentences
/sentencepiece/src/trainer_interface.cc(241) LOG(INFO) Loaded 0 test sentences
/sentencepiece/src/trainer_interface.cc(265) LOG(INFO) all chars count=1565524
/sentencepiece/src/trainer_interface.cc(273) LOG(INFO) Done: 99.1426% characters are covered.
/sentencepiece/src/trainer_interface.cc(283) LOG(INFO) Alphabet size=68
/sentencepiece/src/trainer_interface.cc(284) LOG(INFO) Final character coverage=0.991426
/sentencepiece/src/trainer_interface.cc(316) LOG(INFO) Done! 998 sentences are loaded
/sentencepiece/src/unigram_model_trainer.cc(127) LOG(INFO) Using 998 sentences for making seed sentencepieces
/sentencepiece/src/unigram_model_trainer.cc(155) LOG(INFO) Making suffix array...
/sentencepiece/src/unigram_model_trainer.cc(159) LOG(INFO) Extracting frequent sub strings...
/sentencepiece/src/unigram_model_trainer.cc(210) LOG(INFO) Initialized 67755 seed sentencepieces
/sentencepiece/src/trainer_interface.cc(322) LOG(INFO) Tokenizing input sentences with whitespace: 998
/sentencepiece/src/trainer_interface.cc(331) LOG(INFO) Done! 31975
/sentencepiece/src/unigram_model_trainer.cc(502) LOG(INFO) Using 31975 sentences for EM training
/sentencepiece/src/unigram_model_trainer.cc(518) LOG(INFO) EM sub_iter=0 size=22877 obj=16.6184 num_tokens=70560 num_tokens/piece=3.08432
/sentencepiece/src/unigram_model_trainer.cc(518) LOG(INFO) EM sub_iter=1 size=19595 obj=14.256 num_tokens=71915 num_tokens/piece=3.67007
/sentencepiece/src/unigram_model_trainer.cc(518) LOG(INFO) EM sub_iter=0 size=17579 obj=14.2013 num_tokens=73054 num_tokens/piece=4.15575
/sentencepiece/src/unigram_model_trainer.cc(518) LOG(INFO) EM sub_iter=1 size=17469 obj=14.1655 num_tokens=73390 num_tokens/piece=4.20116
/sentencepiece/src/trainer_interface.cc(387) LOG(INFO) Saving model: data/mldoc/ru-1/models/sp16k/spm.model
/sentencepiece/src/trainer_interface.cc(411) LOG(INFO) Saving vocabs: data/mldoc/ru-1/models/sp16k/spm.vocab
Running tokenization lm...
Data lm, trn: 9195, val: 1021
Running tokenization cls...
Data cls, trn: 1000, val: 1000
Running tokenization tst...
Data tst, trn: 1000, val: 4000
Size of vocabulary: 16000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', ',', '▁.', 'и', 'е', '▁в', 'й', '▁-', 'а', ')', '(']
Training args: {'clip': 0.12, 'alpha': 2, 'beta': 1, 'drop_mult': 0.3} dps: {'output_p': 0.25, 'hidden_p': 0.1, 'input_p': 0.2, 'embed_p': 0.02, 'weight_p': 0.15}
/home/pczapla/anaconda3/envs/fastaiv1/lib/python3.7/site-packages/torch/utils/cpp_extension.py:152: UserWarning:
!! WARNING !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Your compiler (c++) may be ABI-incompatible with PyTorch!
Please use a compiler that is ABI-compatible with GCC 4.9 and above.
See https://gcc.gnu.org/onlinedocs/libstdc++/manual/abi.html.
See https://gist.github.com/goldsborough/d466f43e8ffc948ff92de7486c5216d6
for instructions on how to install GCC 4.9 or higher.
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! WARNING !!
warnings.warn(ABI_INCOMPATIBILITY_WARNING.format(compiler))
Bptt 70
Training lm from random weights
epoch train_loss valid_loss accuracy
1 4.311670 4.217185 0.471835
2 3.735446 3.595414 0.552916
3 3.553164 3.354127 0.581794
4 3.363475 3.259169 0.593828
5 3.514256 3.261860 0.590224
6 3.413725 3.223500 0.597156
7 3.453391 3.182702 0.601941
8 3.317564 3.131130 0.610511
9 3.398653 3.092810 0.616117
10 3.276093 3.037282 0.624851
11 3.207109 2.980038 0.634575
12 3.141415 2.928465 0.643130
13 3.164837 2.878245 0.653095
14 3.093078 2.823911 0.662821
15 3.026668 2.770853 0.673216
16 2.968236 2.723534 0.682577
17 2.983422 2.690081 0.689747
18 2.862256 2.666973 0.694282
19 2.876733 2.656204 0.696821
20 2.853209 2.654935 0.696994
Total time: 39:43
data/mldoc/ru-1/models/sp16k
Saving info data/mldoc/ru-1/models/sp16k/qrnn_nl4.m/info.json
Single training schedule
epoch train_loss valid_loss accuracy
1 0.993379 0.788644 0.807000
2 0.832733 0.773031 0.864000
3 0.706515 0.715565 0.864000
4 0.618606 0.720445 0.868000
Total time: 00:56
Saving models at data/mldoc/ru-1/models/sp16k/qrnn_nl4.m
Loss and accuracy using (cls_best): [0.39357555, tensor(0.8685)]
0.3935755491256714
0.8684999942779541
```
-13
View File
@@ -1,13 +0,0 @@
\toprule
RNN type & Vocabluary Size & Tokenization & Language & MLDoc Accuracy\\
\midrule
LSTM 3 & 60k & moses & DE & 94.74 \\
LSTM 4 & 30k & sentence piece & DE & 95.40 \\
QRNN 4 & 60k & moses & DE & 95.28 \\
QRNN 4 & 15k & sentence piece & DE & 96.10 \\
\midrule
LSTM 4 & 30k & sentence piece & RU & 87.27 \\
LSTM 4 & 15k & sentence piece & RU & 86.47 \\
QRNN 4 & 60k & moses & RU & 87.60 \\
QRNN 4 & 25k & sentence piece & RU & 87.20 \\
QRNN 4 & 15k & sentence piece & RU & 87.17 \\
-28
View File
@@ -1,28 +0,0 @@
```
% python -m ulmfit lm --dataset-path data/wiki/${LANG}-100 --tokenizer='sp' --nl 4 --name
'nl4' --max-vocab 25000 --lang ${LANG} --qrnn=True - train 10 --bs=50 --drop_mult=0 --label-smoothing-eps=0.10 --tokenizer='sp
Max vocab: 25000
Cache dir: data/wiki/ru-100/models/sp25k
Model dir: data/wiki/ru-100/models/sp25k/qrnn_nl4.m
Wiki text was split to 193047 articles
Wiki text was split to 460 articles
Data lm, trn: 193047, val: 460
Size of vocabulary: 25000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁,', '▁.', '▁в', 'а', 'и', 'е', '▁и', 'й', 'х', '▁на']
Training args: {'clip': 0.12, 'alpha': 2, 'beta': 1, 'drop_mult': 0} dps: {'output_p': 0.25, 'hidden_p': 0.1, 'input_p': 0.2, 'embed_p': 0.02, 'weight_p': 0.15}
Training lm from random weights
epoch train_loss valid_loss accuracy
1 4.154972 4.198218 0.447508
2 4.030367 4.159642 0.449420
3 4.138530 4.146010 0.451526
4 3.997120 4.097048 0.457177
5 3.999151 4.036350 0.465117
6 3.935380 3.955517 0.476446
7 3.912357 3.875987 0.487591
8 3.785693 3.789099 0.501560
9 3.743162 3.725730 0.512294
10 3.690226 3.706929 0.516769
Total time: 12:10:03
data/wiki/ru-100/models/sp25k
Saving info data/wiki/ru-100/models/sp25k/qrnn_nl4.m/info.json
```
-183
View File
@@ -1,183 +0,0 @@
3 2.812496 2.877055 0.468569
4 2.705551 2.792535 0.479420
5 2.649598 2.726415 0.487439
6 2.599835 2.635610 0.499679
7 2.574639 2.554657 0.512358
8 2.489573 2.475936 0.523280
9 2.396540 2.415555 0.534089
10 2.374290 2.401968 0.536601
Total time: 15:49:20
data/wiki/ru-100/models/sp15k
Saving info data/wiki/ru-100/models/sp15k/qrnn_nl4-wide2.m/info.json
Fire trace:
1. Initial component
2. Accessed property "lm" (/home/test/workspace/ulmfit-multilingual/ulmfit/__main__.py:32)
3. Called routine "LMHyperParams" (/home/test/workspace/ulmfit-multilingual/ulmfit/__main__.py:32)
4. Accessed property "train" (/home/test/workspace/ulmfit-multilingual/ulmfit/pretrain_lm.py:174)
5. Called routine "train_lm" (/home/test/workspace/ulmfit-multilingual/ulmfit/pretrain_lm.py:174)
6. ('Could not consume arg:', '--nh')
Type: NoneType
String form: None
Usage: __main__.py lm --dataset-path data/wiki/ru-100 --tokenizer=sp --nl 4 --name nl4-wide2 --max-vocab 15000 --lang ru --qrnn=True - train 10 --bs=100 --drop_mult=0 -
(multifit) test@test:~/workspace/ulmfit-multilingual$ less data/wiki/ru-100/models/sp15k/qrnn_nl4-wide2.m/info.json
(multifit) test@test:~/workspace/ulmfit-multilingual$ CUDA_VISIBLE_DEVICES=1 python -m ulmfit lm --dataset-path data/wiki/${LANG}-100 --tokenizer='sp' --nl 4 --name 'nl4-wide2' --max-vocab 15000 --lang ${LANG} --qrnn=True - train 10 --bs=100 --drop_mult=0 ^C100 --
(multifit) test@test:~/workspace/ulmfit-multilingual$ mv data/wiki/ru-100/models/sp15k/qrnn_nl4-wide2.m/ data/wiki/ru-100/models/sp15k/qrnn_nl4-2.m/
(multifit) test@test:~/workspace/ulmfit-multilingual$ less data/wiki/ru-100/models/sp15k/qrnn_nl4-wide2.m/info.json^C
(multifit) test@test:~/workspace/ulmfit-multilingual$ CUDA_VISIBLE_DEVICES=1 python -m ulmfit lm --dataset-path data/wiki/${LANG}-100 --tokenizer='sp' --nl 4 --name 'nl4-wid
e2' --max-vocab 15000 --lang ${LANG} --qrnn=True --nh 3100 - train 10 --bs=100 --drop_mult=0
Max vocab: 15000
Cache dir: data/wiki/ru-100/models/sp15k
Model dir: data/wiki/ru-100/models/sp15k/qrnn_nl4-wide2.m
^CTraceback (most recent call last):
File "/home/test/anaconda3/envs/multifit/lib/python3.7/runpy.py", line 193, in _run_module_as_main
"__main__", mod_spec)
File "/home/test/anaconda3/envs/multifit/lib/python3.7/runpy.py", line 85, in _run_code
exec(code, run_globals)
File "/home/test/workspace/ulmfit-multilingual/ulmfit/__main__.py", line 119, in <module>
fire.Fire(ULMFiT())
File "/home/test/anaconda3/envs/multifit/lib/python3.7/site-packages/fire/core.py", line 127, in Fire
component_trace = _Fire(component, args, context, name)
File "/home/test/anaconda3/envs/multifit/lib/python3.7/site-packages/fire/core.py", line 366, in _Fire
component, remaining_args)
File "/home/test/anaconda3/envs/multifit/lib/python3.7/site-packages/fire/core.py", line 542, in _CallCallable
result = fn(*varargs, **kwargs)
File "/home/test/workspace/ulmfit-multilingual/ulmfit/pretrain_lm.py", line 176, in train_lm
data_lm = self.load_wiki_data(bs=bs) if data_lm is None else data_lm
File "/home/test/workspace/ulmfit-multilingual/ulmfit/pretrain_lm.py", line 253, in load_wiki_data
train_df=read_wiki_articles(trn_path),
File "/home/test/workspace/ulmfit-multilingual/ulmfit/pretrain_lm.py", line 48, in read_wiki_articles
if i < len(lines)-2 and lines[i+1].strip() == "" and istitle(lines[i+2]):
File "/home/test/workspace/ulmfit-multilingual/ulmfit/pretrain_lm.py", line 39, in istitle
return len(re.findall(r'^ ?= [^=]* = ?$', line)) != 0
File "/home/test/anaconda3/envs/multifit/lib/python3.7/re.py", line 223, in findall
return _compile(pattern, flags).findall(string)
KeyboardInterrupt
^C
(multifit) test@test:~/workspace/ulmfit-multilingual$ CUDA_VISIBLE_DEVICES=1 python -m ulmfit lm --dataset-path data/wiki/${LANG}-100 --tokenizer='sp' --nl 4 --name 'nl4-wide2' --max-vocab 15000 --lang ${LANG} --qrnn=True --nh 3100 - train 10 --bs=100 --drop_mult=0 --label-smoothing-eps=0.1
Max vocab: 15000
Cache dir: data/wiki/ru-100/models/sp15k
Model dir: data/wiki/ru-100/models/sp15k/qrnn_nl4-wide2.m
Wiki text was split to 193047 articles
Wiki text was split to 460 articles
Data lm, trn: 193047, val: 460
Size of vocabulary: 15000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁,', '▁.', '▁в', 'а', 'и', 'е', '▁и', 'й', '▁на', 'х']
Training args: {'clip': 0.12, 'alpha': 2, 'beta': 1, 'drop_mult': 0} dps: {'output_p': 0.25, 'hidden_p': 0.1, 'input_p': 0.2, 'embed_p': 0.02, 'weight_p': 0.15}
Training lm from random weights
epoch train_loss valid_loss accuracy
1 3.908233 3.950865 0.463469
2 3.738863 3.815026 0.477703
3 3.696502 3.779513 0.483625
4 3.692592 3.720908 0.490143
5 3.600519 3.652444 0.501671
6 3.564568 3.582584 0.511550
7 3.472859 3.493226 0.525943
8 3.390483 3.407970 0.541749
9 3.351620 3.344207 0.552758
10 3.329683 3.330087 0.556380
Total time: 51:05:43
data/wiki/ru-100/models/sp15k
Saving info data/wiki/ru-100/models/sp15k/qrnn_nl4-wide2.m/info.json
(multifit) test@test:~/workspace/ulmfit-multilingual$ export CUDA_VISIBLE_DEVICES=1
(multifit) test@test:~/workspace/ulmfit-multilingual$ LANG=ru
(multifit) test@test:~/workspace/ulmfit-multilingual$ NAME=nl4-wide2
(multifit) test@test:~/workspace/ulmfit-multilingual$ python -m ulmfit cls --dataset-path data/mldoc/${LANG}-1 --base-lm-path data/wiki/${LANG}-100/models/sp15k/qrnn_${NAME}.m --lang=${LANG} --name ${NAME} - train 20 --bs 18 --num-cls-epochs=4 --lr_sched=1cycle --label-smoothing-eps=0.1
Max vocab: 15000
Cache dir: /home/test/workspace/ulmfit-multilingual/data/mldoc/ru-1/models/sp15k
Model dir: /home/test/workspace/ulmfit-multilingual/data/mldoc/ru-1/models/sp15k/qrnn_nl4-wide2.m
Loading validation /home/test/workspace/ulmfit-multilingual/data/mldoc/ru-1/ru.dev.csv
Data lm, trn: 9195, val: 1021
Data cls, trn: 1000, val: 1000
Data tst, trn: 1000, val: 4000
Size of vocabulary: 15000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁,', '▁.', '▁в', 'а', 'и', 'е', '▁и', 'й', '▁на', 'х']
Training args: {'clip': 0.12, 'alpha': 2, 'beta': 1, 'drop_mult': 0.3} dps: {'output_p': 0.25, 'hidden_p': 0.1, 'input_p': 0.2, 'embed_p': 0.02, 'weight_p': 0.15}
Loading pretrained model
Unknown tokens 0, first 100: []
Training lm from: [PosixPath('/home/test/workspace/ulmfit-multilingual/data/wiki/ru-100/models/sp15k/qrnn_nl4-wide2.m/lm_best'), PosixPath('/home/test/workspace/ulmfit-multilingual/data/wiki/ru-100/models/sp15k/qrnn_nl4-wide2.m/../itos')]
epoch train_loss valid_loss accuracy
1 3.777423 3.222261 0.564503
Total time: 04:35
epoch train_loss valid_loss accuracy
1 3.292465 3.029143 0.602257
2 3.034045 2.858176 0.634576
3 2.943366 2.710314 0.665116
4 2.722069 2.596702 0.687515
5 2.819853 2.508158 0.705020
6 2.734984 2.417240 0.724748
7 2.674353 2.332395 0.743694
8 2.527344 2.251373 0.762892
9 2.473972 2.168185 0.784043
10 2.359504 2.093983 0.803255
11 2.287590 2.019540 0.823566
12 2.254421 1.943832 0.845138
13 2.203321 1.884380 0.863381
14 2.142532 1.824186 0.881509
15 2.121573 1.777664 0.894901
16 2.013238 1.740772 0.905824
17 2.026189 1.715271 0.913569
18 1.904322 1.700163 0.917917
19 1.889113 1.692539 0.919811
20 1.903118 1.691033 0.920319
Total time: 3:10:09
/home/test/workspace/ulmfit-multilingual/data/mldoc/ru-1/models/sp15k
Saving info /home/test/workspace/ulmfit-multilingual/data/mldoc/ru-1/models/sp15k/qrnn_nl4-wide2.m/info.json
Single training schedule
epoch train_loss valid_loss accuracy
1 1.006922 0.880313 0.788000
2 0.823572 0.782953 0.860000
3 0.679078 0.749164 0.872000
4 0.579215 0.707200 0.872000
Total time: 06:30
Saving models at /home/test/workspace/ulmfit-multilingual/data/mldoc/ru-1/models/sp15k/qrnn_nl4-wide2.m
Loss and accuracy using (cls_best): [0.3935929, tensor(0.8708)]
0.393592894077301
0.8707500100135803
(multifit) test@test:~/workspace/ulmfit-multilingual$ python -m ulmfit cls --dataset-path data/mldoc/${LANG}-1 --base-lm-path data/mldoc/${LANG}-1/models/sp15k/qrnn_${NAME}.m --lang=${LANG} --name ${NAME}-16 - train 0 --bs 18 --num-cls-epochs=16 --lr_sched=1cycle --label-smoothing-eps=0.1
Max vocab: 15000
Cache dir: /home/test/workspace/ulmfit-multilingual/data/mldoc/ru-1/models/sp15k
Model dir: /home/test/workspace/ulmfit-multilingual/data/mldoc/ru-1/models/sp15k/qrnn_nl4-wide2-16.m
Loading validation /home/test/workspace/ulmfit-multilingual/data/mldoc/ru-1/ru.dev.csv
Data lm, trn: 9195, val: 1021
Data cls, trn: 1000, val: 1000
Data tst, trn: 1000, val: 4000
Size of vocabulary: 15000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁,', '▁.', '▁в', 'а', 'и', 'е', '▁и', 'й', '▁на', 'х']
Training args: {'clip': 0.12, 'alpha': 2, 'beta': 1, 'drop_mult': 0.3} dps: {'output_p': 0.25, 'hidden_p': 0.1, 'input_p': 0.2, 'embed_p': 0.02, 'weight_p': 0.15}
Loading pretrained model
Unknown tokens 0, first 100: []
/home/test/workspace/ulmfit-multilingual/data/mldoc/ru-1/models/sp15k
Saving info /home/test/workspace/ulmfit-multilingual/data/mldoc/ru-1/models/sp15k/qrnn_nl4-wide2-16.m/info.json
Single training schedule
epoch train_loss valid_loss accuracy
1 1.067446 0.822965 0.824000
2 0.897088 0.845636 0.826000
3 0.778055 0.828693 0.847000
4 0.685080 0.893327 0.823000
5 0.620457 0.929057 0.800000
6 0.587644 0.802154 0.859000
7 0.570255 0.713434 0.872000
8 0.543071 0.705259 0.871000
9 0.517465 0.715090 0.867000
10 0.498291 0.695459 0.876000
11 0.497857 0.698052 0.862000
12 0.486924 0.681911 0.878000
13 0.479041 0.676714 0.874000
14 0.475131 0.677843 0.878000
15 0.467238 0.672065 0.876000
16 0.476889 0.680850 0.875000
Total time: 23:47
Saving models at /home/test/workspace/ulmfit-multilingual/data/mldoc/ru-1/models/sp15k/qrnn_nl4-wide2-16.m
Loss and accuracy using (cls_best): [0.41155785, tensor(0.8700)]
0.4115578532218933
0.8700000047683716
-280
View File
@@ -1,280 +0,0 @@
TOK=sp15k
NAME=e8avg
for LANG in ru fr; do
for i in 1 2 3 4 5 6 7 8 9; do python -m ulmfit eval --glob="mldoc/${LANG}-1/models/${TOK}/qrnn_nl4.m" --name ${NAME}_$i --num-cls-epochs=8 --label-smoothing-eps=0.1 --lr_sched=1cycle --bs=18; done
done
TOK=sp15k
NAME=avg
for LANG in ru fr; do
for i in 1 2 3 4 5 6 7 8 9; do python -m ulmfit eval --glob="mldoc/${LANG}-1/models/${TOK}/qrnn_nl4.m" --name ${NAME}_$i --num-cls-epochs=4 --label-smoothing-eps=0.1 --lr_sched=1cycle --bs=18; done
done
NAME=e8avg
TOK=vf60k
for LANG in ru fr; do
for i in 1 2 3 4 5 6 7 8 9; do python -m ulmfit eval --glob="mldoc/${LANG}-1/models/${TOK}/qrnn_nl4.m" --name ${NAME}_$i --num-cls-epochs=8 --label-smoothing-eps=0.1 --lr_sched=1cycle --bs=18; done
done
NAME=avg
TOK=vf60k
for LANG in ru fr; do
for i in 1 2 3 4 5 6 7 8 9; do python -m ulmfit eval --glob="mldoc/${LANG}-1/models/${TOK}/qrnn_nl4.m" --name ${NAME}_$i --num-cls-epochs=4 --label-smoothing-eps=0.1 --lr_sched=1cycle --bs=18; done
done
for TOK in vf60k sp15k; do
for LANG in ru fr; do
NAME=e8avg
for i in 1 2 3 4 5 6 7 8 9; do python -m ulmfit eval --glob="mldoc/${LANG}-1/models/${TOK}/qrnn_nl4.m" --name ${NAME}_$i --num-cls-epochs=8 --label-smoothing-eps=0.1 --lr_sched=1cycle --bs=18; done
done
done
for TOK in vf60k sp15k; do
for LANG in ru fr; do
NAME=avg
for i in 1 2 3 4 5 6 7 8 9; do python -m ulmfit eval --glob="mldoc/${LANG}-1/models/${TOK}/qrnn_nl4.m" --name ${NAME}_$i --num-cls-epochs=4 --label-smoothing-eps=0.1 --lr_sched=1cycle --bs=18; done
done
done
LANG=es
for i in 1 2 3 4 5 6 7 9; do python -m ulmfit eval --glob="mldoc/${LANG}-1/models/sp15k/qrnn_nl4.m" --name avg_$i --num-cls-epochs=4 --label-smoothing-eps=0.1 --lr_sched=1cycle --bs=18; done
LANG=de
for i in 1 2 3 4 5 6 7 9; do python -m ulmfit eval --glob="mldoc/${LANG}-1/models/sp15k/qrnn_nl4.m" --name avg_$i --num-cls-epochs=4 --label-smoothing-eps=0.1 --lr_sched=1cycle --bs=18; done
## epoch 8
vf60k
ds de-1 es-1 fr-1 it-1 ru-1
best 95.45 96.17 94.77 90.72 87.85
max 95.63 96.43 95.32 91.05 88.30
avg 95.42 96.05 95.07 90.59 87.80
sp15k
ds de-1 es-1 fr-1 it-1 ru-1
best 96.17 95.92 94.55 90.45 86.95
max 96.28 96.03 95.10 90.72 87.45
avg 96.01 95.72 94.63 90.37 86.95
-0--
0 data/mldoc/fr-1/models/vf60k/qrnn_e8avg_1.m 0.95325 0.211328 0.951 0.211664
1 data/mldoc/fr-1/models/vf60k/qrnn_e8avg_2.m 0.95075 0.199939 0.947 0.198606
2 data/mldoc/fr-1/models/vf60k/qrnn_e8avg_3.m 0.95125 0.217569 0.952 0.215529
3 data/mldoc/fr-1/models/vf60k/qrnn_e8avg_4.m 0.95225 0.208047 0.951 0.203784
4 data/mldoc/fr-1/models/vf60k/qrnn_e8avg_5.m 0.95025 0.206937 0.946 0.206194
5 data/mldoc/fr-1/models/vf60k/qrnn_e8avg_6.m 0.95075 0.203967 0.951 0.204809
6 data/mldoc/fr-1/models/vf60k/qrnn_e8avg_7.m 0.94775 0.211408 0.954 0.201543
7 data/mldoc/fr-1/models/vf60k/qrnn_e8avg_8.m 0.95075 0.202703 0.952 0.197218
8 data/mldoc/fr-1/models/vf60k/qrnn_e8avg_9.m 0.94925 0.207698 0.947 0.204896
9 data/mldoc/ru-1/models/vf60k/qrnn_avg_1.m 0.88300 0.375823 0.876 0.364029
10 data/mldoc/ru-1/models/vf60k/qrnn_avg_2.m 0.87675 0.386695 0.883 0.356660
11 data/mldoc/ru-1/models/vf60k/qrnn_avg_3.m 0.87750 0.372321 0.879 0.374368
12 data/mldoc/ru-1/models/vf60k/qrnn_avg_4.m 0.87400 0.379490 0.875 0.370343
13 data/mldoc/ru-1/models/vf60k/qrnn_avg_5.m 0.87725 0.380067 0.877 0.367522
14 data/mldoc/ru-1/models/vf60k/qrnn_avg_6.m 0.87525 0.393280 0.874 0.368825
15 data/mldoc/ru-1/models/vf60k/qrnn_avg_7.m 0.87900 0.380393 0.882 0.373376
16 data/mldoc/ru-1/models/vf60k/qrnn_avg_8.m 0.88025 0.376825 0.875 0.375059
17 data/mldoc/ru-1/models/vf60k/qrnn_avg_9.m 0.88125 0.380887 0.884 0.367705
18 data/mldoc/ru-1/models/vf60k/qrnn_e8avg_1.m 0.87850 0.385976 0.888 0.385302
19 data/mldoc/ru-1/models/vf60k/qrnn_e8avg_2.m 0.87600 0.384469 0.879 0.384878
20 data/mldoc/ru-1/models/vf60k/qrnn_e8avg_4.m 0.87600 0.386223 0.870 0.391646
21 data/mldoc/ru-1/models/vf60k/qrnn_e8avg_5.m 0.87950 0.385152 0.885 0.371122
22 data/mldoc/ru-1/models/vf60k/qrnn_e8avg_6.m 0.88175 0.383746 0.875 0.391054
23 data/mldoc/ru-1/models/vf60k/qrnn_e8avg_7.m 0.87850 0.392120 0.874 0.382000
24 data/mldoc/ru-1/models/vf60k/qrnn_e8avg_8.m 0.87250 0.394342 0.881 0.378663
25 data/mldoc/ru-1/models/vf60k/qrnn_e8avg_9.m 0.87950 0.387625 0.881 0.380548
ds fr-1 ru-1
best 94.77 87.85
max 95.32 88.30
avg 95.07 87.80
---
# epoch 4
## SP15k
name tst_accuracy tst_loss val_accuracy val_loss
0 data/mldoc/de-1/models/sp15k/qrnn_avg_1.m 0.95700 0.142444 0.945 0.206329
1 data/mldoc/de-1/models/sp15k/qrnn_avg_2.m 0.95975 0.141225 0.955 0.189209
2 data/mldoc/de-1/models/sp15k/qrnn_avg_3.m 0.95925 0.140172 0.946 0.198159
3 data/mldoc/de-1/models/sp15k/qrnn_avg_4.m 0.95650 0.145889 0.942 0.193202
4 data/mldoc/de-1/models/sp15k/qrnn_avg_5.m 0.96000 0.137710 0.953 0.192368
5 data/mldoc/de-1/models/sp15k/qrnn_avg_6.m 0.95975 0.145318 0.954 0.196413
6 data/mldoc/de-1/models/sp15k/qrnn_avg_7.m 0.95925 0.141719 0.943 0.199226
7 data/mldoc/de-1/models/sp15k/qrnn_avg_8.m 0.96100 0.140644 0.949 0.204398
8 data/mldoc/de-1/models/sp15k/qrnn_avg_9.m 0.96050 0.143330 0.949 0.189472
9 data/mldoc/es-1/models/sp15k/qrnn_avg_1.m 0.95700 0.149081 0.963 0.162808
10 data/mldoc/es-1/models/sp15k/qrnn_avg_2.m 0.95875 0.141572 0.963 0.150970
11 data/mldoc/es-1/models/sp15k/qrnn_avg_3.m 0.95900 0.151387 0.962 0.157047
12 data/mldoc/es-1/models/sp15k/qrnn_avg_4.m 0.95375 0.165935 0.956 0.182161
13 data/mldoc/es-1/models/sp15k/qrnn_avg_5.m 0.95850 0.151109 0.960 0.156376
14 data/mldoc/es-1/models/sp15k/qrnn_avg_6.m 0.95800 0.150724 0.961 0.152761
15 data/mldoc/es-1/models/sp15k/qrnn_avg_7.m 0.95875 0.142476 0.963 0.151585
16 data/mldoc/es-1/models/sp15k/qrnn_avg_8.m 0.95525 0.165120 0.957 0.164723
17 data/mldoc/es-1/models/sp15k/qrnn_avg_9.m 0.95725 0.151323 0.960 0.156123
18 data/mldoc/it-1/models/sp15k/qrnn_avg_1.m 0.90175 0.312996 0.900 0.297118
19 data/mldoc/it-1/models/sp15k/qrnn_avg_2.m 0.90250 0.316763 0.903 0.274423
20 data/mldoc/it-1/models/sp15k/qrnn_avg_3.m 0.89900 0.329157 0.915 0.290098
21 data/mldoc/it-1/models/sp15k/qrnn_avg_4.m 0.90100 0.322112 0.907 0.285727
22 data/mldoc/it-1/models/sp15k/qrnn_avg_5.m 0.90100 0.308545 0.910 0.276683
23 data/mldoc/it-1/models/sp15k/qrnn_avg_6.m 0.90275 0.323594 0.915 0.287004
24 data/mldoc/it-1/models/sp15k/qrnn_avg_7.m 0.89925 0.295158 0.910 0.269167
25 data/mldoc/it-1/models/sp15k/qrnn_avg_9.m 0.90325 0.312664 0.908 0.297471
ds de-1 es-1 it-1
best 95.97 95.70 89.90
max 96.10 95.90 90.32
avg 95.92 95.74 90.13
## VF60k
name tst_accuracy tst_loss val_accuracy val_loss
0 data/mldoc/de-1/models/vf60k/qrnn_avg.m 0.95250 0.193797 0.946 0.225316
1 data/mldoc/de-1/models/vf60k/qrnn_avg_1.m 0.95575 0.157327 0.947 0.189885
2 data/mldoc/de-1/models/vf60k/qrnn_avg_2.m 0.95400 0.174519 0.947 0.201792
3 data/mldoc/de-1/models/vf60k/qrnn_avg_3.m 0.95325 0.180489 0.947 0.208106
4 data/mldoc/de-1/models/vf60k/qrnn_avg_4.m 0.95425 0.161056 0.949 0.199169
5 data/mldoc/de-1/models/vf60k/qrnn_avg_5.m 0.94775 0.182012 0.941 0.210262
6 data/mldoc/de-1/models/vf60k/qrnn_avg_6.m 0.95375 0.164578 0.947 0.198632
7 data/mldoc/de-1/models/vf60k/qrnn_avg_7.m 0.95575 0.152596 0.947 0.196844
8 data/mldoc/de-1/models/vf60k/qrnn_avg_8.m 0.95350 0.167661 0.942 0.203538
9 data/mldoc/es-1/models/vf60k/qrnn_avg.m 0.95950 0.146121 0.961 0.161852
10 data/mldoc/es-1/models/vf60k/qrnn_avg_1.m 0.95500 0.154836 0.960 0.176217
11 data/mldoc/es-1/models/vf60k/qrnn_avg_2.m 0.95850 0.154539 0.961 0.163008
12 data/mldoc/es-1/models/vf60k/qrnn_avg_3.m 0.96100 0.151916 0.966 0.169869
13 data/mldoc/es-1/models/vf60k/qrnn_avg_4.m 0.95825 0.144630 0.962 0.144410
14 data/mldoc/es-1/models/vf60k/qrnn_avg_5.m 0.95675 0.155685 0.960 0.175439
15 data/mldoc/es-1/models/vf60k/qrnn_avg_6.m 0.95900 0.143995 0.959 0.164156
16 data/mldoc/es-1/models/vf60k/qrnn_avg_7.m 0.95800 0.144662 0.962 0.162957
17 data/mldoc/es-1/models/vf60k/qrnn_avg_8.m 0.95850 0.149185 0.962 0.163159
18 data/mldoc/it-1/models/vf60k/qrnn_avg.m 0.89925 0.320389 0.912 0.272104
19 data/mldoc/it-1/models/vf60k/qrnn_avg_1.m 0.90525 0.305978 0.920 0.255507
20 data/mldoc/it-1/models/vf60k/qrnn_avg_2.m 0.90725 0.287647 0.917 0.245568
21 data/mldoc/it-1/models/vf60k/qrnn_avg_3.m 0.89925 0.313870 0.910 0.271480
22 data/mldoc/it-1/models/vf60k/qrnn_avg_4.m 0.91125 0.285618 0.915 0.255942
23 data/mldoc/it-1/models/vf60k/qrnn_avg_5.m 0.91100 0.288841 0.911 0.255724
24 data/mldoc/it-1/models/vf60k/qrnn_avg_6.m 0.90525 0.287412 0.914 0.253394
25 data/mldoc/it-1/models/vf60k/qrnn_avg_7.m 0.90000 0.308104 0.910 0.256991
26 data/mldoc/it-1/models/vf60k/qrnn_avg_8.m 0.90450 0.301262 0.918 0.251368
ds de-1 es-1 it-1
best 95.42 96.10 90.53
max 95.57 96.10 91.12
avg 95.34 95.83 90.48
# IT
## VF60k - 9 runs eval
for i in 1 2 3 4 5 6 7 8; do python -m ulmfit eval --glob="mldoc/${LANG}-1/models/vf60k/qrnn_nl4.m" --name avg_$i --num-cls-epochs=4 --label-smoothing-eps=0.1 --lr_sched=1cycle --bs=10; done
python -m ulmfit eval --glob="mldoc/${LANG}-1/models/vf60k/qrnn_nl4*.m" --train=False
name tst_accuracy tst_loss val_accuracy val_loss
0 data/mldoc/it-1/models/vf60k/qrnn_nl4.m 0.89925 0.320389 0.912 0.272104
1 data/mldoc/it-1/models/vf60k/qrnn_nl4_1.m 0.90525 0.305978 0.920 0.255507
2 data/mldoc/it-1/models/vf60k/qrnn_nl4_2.m 0.90725 0.287647 0.917 0.245568
3 data/mldoc/it-1/models/vf60k/qrnn_nl4_3.m 0.89925 0.313870 0.910 0.271480
4 data/mldoc/it-1/models/vf60k/qrnn_nl4_4.m 0.91125 0.285618 0.915 0.255942
5 data/mldoc/it-1/models/vf60k/qrnn_nl4_5.m 0.91100 0.288841 0.911 0.255724
6 data/mldoc/it-1/models/vf60k/qrnn_nl4_6.m 0.90525 0.287412 0.914 0.253394
7 data/mldoc/it-1/models/vf60k/qrnn_nl4_7.m 0.90000 0.308104 0.910 0.256991
8 data/mldoc/it-1/models/vf60k/qrnn_nl4_8.m 0.90450 0.301262 0.918 0.251368
ds it-1
best 90.53
max 91.12
avg 90.48
## sp15k - 9 runs eval
LANG=it
for i in 1 2 3 4 5 6 7 9; do python -m ulmfit eval --glob="mldoc/${LANG}-1/models/sp15k/qrnn_nl4.m" --name avg_$i --num-cls-epochs=4 --label-smoothing-eps=0.1 --lr_sched=1cycle --bs=18; done
python -m ulmfit eval --glob="mldoc/${LANG}-1/models/sp15k/qrnn_nl4_a*.m" --train=False
name tst_accuracy tst_loss val_accuracy val_loss
0 data/mldoc/it-1/models/sp15k/qrnn_avg_1.m 0.90175 0.312996 0.900 0.297118
1 data/mldoc/it-1/models/sp15k/qrnn_avg_2.m 0.90250 0.316763 0.903 0.274423
2 data/mldoc/it-1/models/sp15k/qrnn_avg_3.m 0.89900 0.329157 0.915 0.290098
3 data/mldoc/it-1/models/sp15k/qrnn_avg_4.m 0.90100 0.322112 0.907 0.285727
4 data/mldoc/it-1/models/sp15k/qrnn_avg_5.m 0.90100 0.308545 0.910 0.276683
5 data/mldoc/it-1/models/sp15k/qrnn_avg_6.m 0.90275 0.323594 0.915 0.287004
6 data/mldoc/it-1/models/sp15k/qrnn_avg_7.m 0.89925 0.295158 0.910 0.269167
7 data/mldoc/it-1/models/sp15k/qrnn_avg_9.m 0.90325 0.312664 0.908 0.297471
ds it-1
best 89.90
max 90.32
avg 90.13
# ES
## VF60k - 8 runs eval
for i in 1 2 3 4 5 6 7 8; do python -m ulmfit eval --glob="mldoc/${LANG}-1/models/vf60k/qrnn_nl4.m" --name avg_$i --num-cls-epochs=4 --label-smoothing-eps=0.1 --lr_sched=1cycle --bs=10; done
python -m ulmfit eval --glob="mldoc/${LANG}-1/models/vf60k/qrnn_nl4*.m" --train=False
name tst_accuracy tst_loss val_accuracy val_loss
0 data/mldoc/es-1/models/vf60k/qrnn_nl4.m 0.95950 0.146121 0.961 0.161852
1 data/mldoc/es-1/models/vf60k/qrnn_nl4_1.m 0.95500 0.154836 0.960 0.176217
2 data/mldoc/es-1/models/vf60k/qrnn_nl4_2.m 0.95850 0.154539 0.961 0.163008
3 data/mldoc/es-1/models/vf60k/qrnn_nl4_3.m 0.96100 0.151916 0.966 0.169869
4 data/mldoc/es-1/models/vf60k/qrnn_nl4_4.m 0.95825 0.144630 0.962 0.144410
5 data/mldoc/es-1/models/vf60k/qrnn_nl4_5.m 0.95675 0.155685 0.960 0.175439
6 data/mldoc/es-1/models/vf60k/qrnn_nl4_6.m 0.95900 0.143995 0.959 0.164156
7 data/mldoc/es-1/models/vf60k/qrnn_nl4_7.m 0.95800 0.144662 0.962 0.162957
8 data/mldoc/es-1/models/vf60k/qrnn_nl4_8.m 0.95850 0.149185 0.962 0.163159
ds es-1
best 96.10
max 96.10
avg 95.83
## sp15k - 8 runs eval
LANG=es
for i in 1 2 3 4 5 6 7 9; do python -m ulmfit eval --glob="mldoc/${LANG}-1/models/sp15k/qrnn_nl4.m" --name avg_$i --num-cls-epochs=4 --label-smoothing-eps=0.1 --lr_sched=1cycle --bs=18; done
python -m ulmfit eval --glob="mldoc/${LANG}-1/models/sp15k/qrnn_avg*.m" --train=False
name tst_accuracy tst_loss val_accuracy val_loss
0 data/mldoc/es-1/models/sp15k/qrnn_avg_1.m 0.95700 0.149081 0.963 0.162808
1 data/mldoc/es-1/models/sp15k/qrnn_avg_2.m 0.95875 0.141572 0.963 0.150970
2 data/mldoc/es-1/models/sp15k/qrnn_avg_3.m 0.95900 0.151387 0.962 0.157047
3 data/mldoc/es-1/models/sp15k/qrnn_avg_4.m 0.95375 0.165935 0.956 0.182161
4 data/mldoc/es-1/models/sp15k/qrnn_avg_5.m 0.95850 0.151109 0.960 0.156376
5 data/mldoc/es-1/models/sp15k/qrnn_avg_6.m 0.95800 0.150724 0.961 0.152761
6 data/mldoc/es-1/models/sp15k/qrnn_avg_7.m 0.95875 0.142476 0.963 0.151585
7 data/mldoc/es-1/models/sp15k/qrnn_avg_8.m 0.95525 0.165120 0.957 0.164723
8 data/mldoc/es-1/models/sp15k/qrnn_avg_9.m 0.95725 0.151323 0.960 0.156123
ds es-1
best 95.70
max 95.90
avg 95.74
# DE
## VF60k - 9 runs eval
for i in 1 2 3 4 5 6 7 8; do python -m ulmfit eval --glob="mldoc/${LANG}-1/models/vf60k/qrnn_nl4.m" --name avg_$i --num-cls-epochs=4 --label-smoothing-eps=0.1 --lr_sched=1cycle --bs=10; done
python -m ulmfit eval --glob="mldoc/${LANG}-1/models/vf60k/qrnn_nl4*.m" --train=False
name tst_accuracy tst_loss val_accuracy val_loss
0 data/mldoc/de-1/models/vf60k/qrnn_nl4.m 0.95250 0.193797 0.946 0.225316
1 data/mldoc/de-1/models/vf60k/qrnn_nl4_1.m 0.95575 0.157327 0.947 0.189885
2 data/mldoc/de-1/models/vf60k/qrnn_nl4_2.m 0.95400 0.174519 0.947 0.201792
3 data/mldoc/de-1/models/vf60k/qrnn_nl4_3.m 0.95325 0.180489 0.947 0.208106
4 data/mldoc/de-1/models/vf60k/qrnn_nl4_4.m 0.95425 0.161056 0.949 0.199169
5 data/mldoc/de-1/models/vf60k/qrnn_nl4_5.m 0.94775 0.182012 0.941 0.210262
6 data/mldoc/de-1/models/vf60k/qrnn_nl4_6.m 0.95375 0.164578 0.947 0.198632
7 data/mldoc/de-1/models/vf60k/qrnn_nl4_7.m 0.95575 0.152596 0.947 0.196844
8 data/mldoc/de-1/models/vf60k/qrnn_nl4_8.m 0.95350 0.167661 0.942 0.203538
ds de-1
best 95.42
max 95.57
avg 95.34
## sp15k - 8 runs eval
for i in 1 2 3 4 5 6 7 9; do python -m ulmfit eval --glob="mldoc/${LANG}-1/models/sp15k/qrnn_nl4.m" --name avg_$i --num-cls-epochs=4 --label-smoothing-eps=0.1 --lr_sched=1cycle --bs=18; done
python -m ulmfit eval --glob="mldoc/${LANG}-1/models/sp15k/qrnn_avg*.m" --train=False
name tst_accuracy tst_loss val_accuracy val_loss
0 data/mldoc/de-1/models/sp15k/qrnn_avg_1.m 0.95700 0.142444 0.945 0.206329
1 data/mldoc/de-1/models/sp15k/qrnn_avg_2.m 0.95975 0.141225 0.955 0.189209
2 data/mldoc/de-1/models/sp15k/qrnn_avg_3.m 0.95925 0.140172 0.946 0.198159
3 data/mldoc/de-1/models/sp15k/qrnn_avg_4.m 0.95650 0.145889 0.942 0.193202
4 data/mldoc/de-1/models/sp15k/qrnn_avg_5.m 0.96000 0.137710 0.953 0.192368
5 data/mldoc/de-1/models/sp15k/qrnn_avg_6.m 0.95975 0.145318 0.954 0.196413
6 data/mldoc/de-1/models/sp15k/qrnn_avg_7.m 0.95925 0.141719 0.943 0.199226
7 data/mldoc/de-1/models/sp15k/qrnn_avg_8.m 0.96100 0.140644 0.949 0.204398
8 data/mldoc/de-1/models/sp15k/qrnn_avg_9.m 0.96050 0.143330 0.949 0.189472
ds de-1
best 95.97
max 96.10
avg 95.92
# RU
## VF60k - 9 runs eval
for i in 1 2 3 4 5 6 7 8; do python -m ulmfit eval --glob="mldoc/${LANG}-1/models/vf60k/qrnn_nl4.m" --name nl4_$i --num-cls-epochs=4 --label-smoothing-eps=0.1 --lr_sched=1cycle --bs=10; done
python -m ulmfit eval --glob="mldoc/${LANG}-1/models/vf60k/qrnn_nl4*.m" --train=False
-241
View File
@@ -1,241 +0,0 @@
# FR
## LM
```
LANG=fr
python -m ulmfit lm --dataset-path data/wiki/${LANG}-100 --tokenizer='vf' --nl 4 --name 'nl4' --max-vocab 60000 --lang ${LANG} --qrnn=True - train 10 --bs=50 --drop_mult=0 --label-smoothing-eps=0.0
Max vocab: 60000
Cache dir: data/wiki/fr-100/models/vf60k
Model dir: data/wiki/fr-100/models/vf60k/qrnn_nl4.m
Wiki text was split to 174227 articles
Wiki text was split to 491 articles
Running tokenization lm...
Data lm, trn: 174227, val: 491
Size of vocabulary: 60003
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', 'de', ',', '\n', '.', 'la', 'le', 'et', 'à', 'en', "l'", "&'", 'les']
Training args: {'clip': 0.12, 'alpha': 2, 'beta': 1, 'drop_mult': 0} dps: {'output_p': 0.25, 'hidden_p': 0.1, 'input_p': 0.2, 'embed_p': 0.02, 'weight_p': 0.15}
Bptt 70
Training lm from random weights
epoch train_loss valid_loss accuracy
1 3.359852 3.022507 0.434433
2 3.253006 2.955765 0.435078
3 3.274156 2.917242 0.442870
4 3.181276 2.850124 0.451273
5 3.169587 2.813115 0.456411
6 3.075235 2.773676 0.462836
7 3.054632 2.723182 0.469485
8 2.964262 2.661821 0.479831
9 3.019209 2.631244 0.487013
10 2.899521 2.618838 0.489004
Total time: 10:48:33
data/wiki/fr-100/models/vf60k
Saving info data/wiki/fr-100/models/vf60k/qrnn_nl4.m/info.json
```
## CLS
# ES
## LM
```
LANG=es
python -m ulmfit lm --dataset-path data/wiki/${LANG}-100 --tokenizer='vf' --nl 4 --name 'nl4' --max-vocab 60000 --lang ${LANG} --qrnn=True - train 10 --bs=50 --drop_mult=0 --label-smoothing-eps=0.0
Max vocab: 60000
Cache dir: data/wiki/es-100/models/vf60k
Model dir: data/wiki/es-100/models/vf60k/qrnn_nl4.m
Wiki text was split to 161509 articles
Wiki text was split to 78 articles
Running tokenization lm...
Data lm, trn: 161509, val: 78
Size of vocabulary: 60003
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', 'de', ',', '\n', '.', 'la', 'el', 'en', 'y', 'a', "&'", 'que', 'los']
Training args: {'clip': 0.12, 'alpha': 2, 'beta': 1, 'drop_mult': 0} dps: {'output_p': 0.25, 'hidden_p': 0.1, 'input_p': 0.2, 'embed_p': 0.02, 'weight_p': 0.15}
Bptt 70
Training lm from random weights
epoch train_loss valid_loss accuracy
1 3.285345 3.884676 0.312458
2 3.157721 3.832607 0.313905
3 3.193605 3.800210 0.316862
4 3.152273 3.747068 0.319891
5 3.028921 3.713120 0.324912
6 3.067516 3.652925 0.330345
7 3.006576 3.571537 0.339488
8 2.922181 3.529282 0.345483
9 2.871947 3.497736 0.352535
10 2.862057 3.491642 0.354063
Total time: 14:46:42
data/wiki/es-100/models/vf60k
Saving info data/wiki/es-100/models/vf60k/qrnn_nl4.m/info.json
```
## MLDoc
```
python -m ulmfit cls --dataset-path data/mldoc/${LANG}-1 --base-lm-path data/wiki/${LANG}-100/models/vf60k/qrnn_nl4.m --lang=${LANG} --name nl4 - train 20 --bs 18 --num-cls-epochs=4 --lr_sched=1cycle --label-smoothing-eps=0.1
Max vocab: 60000
Cache dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/es-1/models/vf60k
Model dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/es-1/models/vf60k/qrnn_nl4.m
Loading validation /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/es-1/es.dev.csv
Running tokenization lm...
Data lm, trn: 13013, val: 1445
Running tokenization cls...
Data cls, trn: 1000, val: 1000
Running tokenization tst...
Data tst, trn: 1000, val: 4000
Size of vocabulary: 34317
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', 'de', ',', '.', 'el', 'la', 'a', 'en', ')', '(', 'y', 'los', 'que']
Training args: {'clip': 0.12, 'alpha': 2, 'beta': 1, 'drop_mult': 0.3} dps: {'output_p': 0.25, 'hidden_p': 0.1, 'input_p': 0.2, 'embed_p': 0.02, 'weight_p': 0.15}
Loading pretrained model
Unknown tokens 17152, first 100: ['pct', 'reuter', 'corresponsalía', 'mln', 'indice', 'cotizaba', 'mlns', '585-8308', 'francfort', 'oct', 'jul', 'abr', '585-2154', 'ibex-35', 'feb', 'ibex', 'ago', '585-2152', 'bundesbank', 'ftse', '585-2196', 'interanual', '585-2159', 'cac-40', 'cotizaban', 'uem', 'm.m', '10a', 'alcista', 'bbv', 'anoche', 'argentaria', 'pagarés', 'btp', 'transferibles', 'c.l.p', 'bch', '8,80', '585-8315', 'corros', 'retevisión', '7,35', 'spread', 'bln', 'cnmv', 'decenal', 'opv', 'vespertina', 'greenspan', 'alzas', 'nikkei', 'cambista', 'tir', 'preapertura', 'mibtel', 'tabacalera', 'ptas', 'día-día', 'diff', '18-26', '6-12', 'dif.d.ant', 'max.año', 'min.año', 'spi', 'inem', 'indust', 'fecsa', 'securities', 'repos', 'fomc', 'obligs', 'mibor', 'descartaban', 'sepi', 'interbancario', 'tietmeyer', '5,50', 'piqué', '6,75', 'aprobacion', 'moscu', 'brutas', 'deficit', '0830', 'buba', 'g-7', 'waigel', 'stet', 'petróleo-químicas', '.ibex', '5,25', '6,00', '3m', '5,30', 'trimestrales', 'cauto', 'smi', 'ant-', 'facilitadas']
Bptt 70
Training lm from: [PosixPath('/home/pczapla/workspace/ulmfit-multilingual/data/wiki/es-100/models/vf60k/qrnn_nl4.m/lm_best'), PosixPath('/home/pczapla/workspace/ulmfit-multilingual/data/wiki/es-100/models/vf60k/qrnn_nl4.m/../itos')]
epoch train_loss valid_loss accuracy
1 3.714449 2.774868 0.469673
Total time: 01:42
epoch train_loss valid_loss accuracy
1 3.239635 2.591123 0.496131
2 2.935826 2.367645 0.535486
3 2.631979 2.196012 0.564117
4 2.640709 2.058490 0.582902
5 2.434918 1.949251 0.599310
6 2.293211 1.855961 0.613708
7 2.224960 1.773834 0.626423
8 2.188689 1.698404 0.639268
9 2.024225 1.623230 0.653119
10 2.041964 1.555204 0.665692
11 1.925207 1.492332 0.677868
12 1.864637 1.421467 0.693237
13 1.779024 1.361629 0.706401
14 1.817028 1.301509 0.719889
15 1.719223 1.261717 0.730797
16 1.573684 1.221963 0.740282
17 1.583578 1.192796 0.747645
18 1.590957 1.174528 0.751411
19 1.546806 1.167247 0.753300
20 1.514999 1.165146 0.753615
Total time: 37:16
/home/pczapla/workspace/ulmfit-multilingual/data/mldoc/es-1/models/vf60k
Saving info /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/es-1/models/vf60k/qrnn_nl4.m/info.json
Single training schedule
epoch train_loss valid_loss accuracy
1 0.654116 0.368231 0.907000
2 0.447137 0.287264 0.961000
3 0.308758 0.285717 0.958000
4 0.216707 0.275839 0.962000
Total time: 00:42
Saving models at /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/es-1/models/vf60k/qrnn_nl4.m
Loss and accuracy using (cls_best): [0.14618756, tensor(0.9597)] [0.16216491, tensor(0.9620)]
val_loss: 0.16216491
val_accuracy: 0.9620000123977661
tst_loss: 0.14618756
tst_accuracy: 0.9597499966621399
```
# IT
## LM
```
LANG=it
python -m ulmfit lm --dataset-path data/wiki/${LANG}-100 --tokenizer='vf' --nl 4 --name 'nl4' --max-vocab 60000 --lang ${LANG} --qrnn=True - train 10 --bs=50 --drop_mult=0 --label-smoothing-eps=0.0
Max vocab: 60000
Cache dir: data/wiki/it-100/models/vf60k
Model dir: data/wiki/it-100/models/vf60k/qrnn_nl4.m
Wiki text was split to 164583 articles
Wiki text was split to 98 articles
Data lm, trn: 164583, val: 98
Size of vocabulary: 60003
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', ',', '\n', '.', 'di', 'e', "&'", 'il', 'la', 'in', 'a', 'del', 'che']
Training args: {'clip': 0.12, 'alpha': 2, 'beta': 1, 'drop_mult': 0} dps: {'output_p': 0.25, 'hidden_p': 0.1, 'input_p': 0.2, 'embed_p': 0.02, 'weight_p': 0.15}
Bptt 70
Training lm from random weights
epoch train_loss valid_loss accuracy
1 3.629171 4.075579 0.290754
2 3.496484 4.007234 0.291424
3 3.541803 3.973911 0.294861
4 3.431979 3.926369 0.299076
5 3.432869 3.880250 0.303598
6 3.356332 3.823208 0.309304
7 3.256672 3.760301 0.316393
8 3.312303 3.708765 0.323862
9 3.240380 3.670833 0.329326
10 3.240536 3.661237 0.331286
Total time: 15:32:22
data/wiki/it-100/models/vf60k
Saving info data/wiki/it-100/models/vf60k/qrnn_nl4.m/info.json
```
```bash
python -m ulmfit cls --dataset-path data/mldoc/${LANG}-1 --base-lm-path data/wiki/${LANG}-100/models/vf60k/qrnn_nl4.m --lang=${LANG} --name nl4 - train 20 --bs 18 --num-cls-epochs=4 --lr_sched=1cycle --label-smoothing-eps=0.1
Max vocab: 60000
Cache dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/it-1/models/vf60k
Model dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/it-1/models/vf60k/qrnn_nl4.m
Loading validation /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/it-1/it.dev.csv
Data lm, trn: 13500, val: 1500
Running tokenization cls...
Data cls, trn: 1000, val: 1000
Running tokenization tst...
Data tst, trn: 1000, val: 4000
Size of vocabulary: 29600
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '.', ',', 'di', 'e', ')', '(', 'il', "'", 'a', 'in', 'la', 'del']
Training args: {'clip': 0.12, 'alpha': 2, 'beta': 1, 'drop_mult': 0.3} dps: {'output_p': 0.25, 'hidden_p': 0.1, 'input_p': 0.2, 'embed_p': 0.02, 'weight_p': 0.15}
Loading pretrained model
Unknown tokens 13370, first 100: ['pct', 'reuter', 'mld', 'mln', 'societa', 'dealer', 'btp', 'ott', 'dlr', 'attivita', 'venerdi', 'nov', 'feb', 'dic', 'stet', 'mibtel', 'bundesbank', 'bankitalia', 'mib30', 'perche', 'ipsoa', 'comit', 'cct', 'nil', 'cedola', 'puo', 'possibilita', 'lunedi', 'tranche', 'stg', 'warrant', 'stamane', 'ctz', 'giovedi', 'citta', 'ord', 'consob', 'uem', 'martedi', 'spread', 'verra', 't-bond', 'mercoledi', 'risp', 'viv', 'ffr', 'avra', 'compart', 'gmn', 'dovra', 'potra', 'fib30', 'contrattazioni', 'gemina', 'frf', 'controvalore', 'overnight', 'cir', 'apr', 'consensus', 'tendenziale', 'nikkei', 'autorita', 'tus', 'pretasse', 'fib', 'rialzi', 'fomc', 'gilt', 'circ', 'destagionalizzati', 'prec', 'liquidita', 'ecu', 'destagionalizzato', 'cariplo', 'stamani', 'obbligazionario', 'bur', 'imi', 'aggiudicazione', 'treu', 'ambroveneto', 'fixing', 'hpi', 'rnc', 'capacita', 'dietimi', 'greenspan', 'tietmeyer', 'waigel', 'nasdaq', 'eltsin', 'redditivita', 'liffe', 'telematico', 'ifil', 'interpellati', '6,25', 'visco']
Bptt 70
Training lm from: [PosixPath('/home/pczapla/workspace/ulmfit-multilingual/data/wiki/it-100/models/vf60k/qrnn_nl4.m/lm_best'), PosixPath('/home/pczapla/workspace/ulmfit-multilingual/data/wiki/it-100/models/vf60k/qrnn_nl4.m/../itos')]
epoch train_loss valid_loss accuracy
1 4.406445 3.675336 0.338066
Total time: 01:10
epoch train_loss valid_loss accuracy
1 3.870676 3.516882 0.355481
2 3.633525 3.322235 0.383076
3 3.454955 3.121748 0.408930
4 3.210115 2.935245 0.433205
5 3.112426 2.775076 0.452784
6 2.991053 2.638768 0.471221
7 2.904022 2.533667 0.485577
8 2.808465 2.426029 0.501932
9 2.713658 2.320023 0.518699
10 2.580141 2.226892 0.533786
11 2.532727 2.133867 0.549680
12 2.449591 2.034733 0.567797
13 2.387805 1.963019 0.583013
14 2.337399 1.880745 0.598986
15 2.217255 1.818780 0.612503
16 2.175724 1.764977 0.623581
17 2.057536 1.726874 0.631422
18 2.093975 1.705599 0.635835
19 2.030292 1.694430 0.637838
20 2.057254 1.691360 0.638669
Total time: 32:28
/home/pczapla/workspace/ulmfit-multilingual/data/mldoc/it-1/models/vf60k
Saving info /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/it-1/models/vf60k/qrnn_nl4.m/info.json
***OOTM**
```
```
python -m ulmfit cls --dataset-path data/mldoc/${LANG}-1 --base-lm-path data/wiki/${LANG}-100/models/vf60k/qrnn_nl4.m --lang=${LANG} --name nl4 - train 20 --bs 18 --num-cls-epochs=4 --lr_sched=1cycle --label-smoothing-eps=0.1
python -m ulmfit cls --dataset-path data/mldoc/${LANG}-1 --base-lm-path data/wiki/${LANG}-100/models/vf60k/qrnn_nl4.m --lang=${LANG} --name nl4 - train 20 --bs 10 --num-cls-epochs=4 --lr_sched=1cycle --label-smoothing-eps=0.1
Max vocab: 60000
Cache dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/it-1/models/vf60k
Model dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/it-1/models/vf60k/qrnn_nl4.m
Loading validation /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/it-1/it.dev.csv
Data lm, trn: 13500, val: 1500
Data cls, trn: 1000, val: 1000
Data tst, trn: 1000, val: 4000
Size of vocabulary: 29600
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '.', ',', 'di', 'e', ')', '(', 'il', "'", 'a', 'in', 'la', 'del']
Single training schedule
epoch train_loss valid_loss accuracy
1 0.736275 0.717692 0.837000
2 0.593485 0.444027 0.876000
3 0.376322 0.411704 0.907000
4 0.244267 0.370927 0.915000
Total time: 00:33
Saving models at /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/it-1/models/vf60k/qrnn_nl4.m
Loss and accuracy using (cls_best): [0.3200554, tensor(0.8997)] [0.27118126, tensor(0.9150)]
val_loss: 0.27118126
val_accuracy: 0.9150000214576721
tst_loss: 0.3200554
tst_accuracy: 0.8997499942779541
```
-178
View File
@@ -1,178 +0,0 @@
## SP25k
```bash
python -m ulmfit lm --dataset-path data/wiki/${LANG}-100 --tokenizer='sp' --nl 4 --name
'nl4' --max-vocab 25000 --lang ${LANG} --qrnn=True - train 10 --bs=50 --drop_mult=0 --label-smoothing-eps=0.10 --tokenizer='sp
Max vocab: 25000
Cache dir: data/wiki/ru-100/models/sp25k
Model dir: data/wiki/ru-100/models/sp25k/qrnn_nl4.m
Wiki text was split to 193047 articles
Wiki text was split to 460 articles
Data lm, trn: 193047, val: 460
Size of vocabulary: 25000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '', '▁,', '▁.', '▁в', 'а', 'и', 'е', '▁и', 'й', 'х', '▁на']
Training args: {'clip': 0.12, 'alpha': 2, 'beta': 1, 'drop_mult': 0} dps: {'output_p': 0.25, 'hidden_p': 0.1, 'input_p': 0.2, 'embed_p': 0.02, 'weight_p': 0.15}
Training lm from random weights
epoch train_loss valid_loss accuracy
1 4.154972 4.198218 0.447508
2 4.030367 4.159642 0.449420
3 4.138530 4.146010 0.451526
4 3.997120 4.097048 0.457177
5 3.999151 4.036350 0.465117
6 3.935380 3.955517 0.476446
7 3.912357 3.875987 0.487591
8 3.785693 3.789099 0.501560
9 3.743162 3.725730 0.512294
10 3.690226 3.706929 0.516769
Total time: 12:10:03
data/wiki/ru-100/models/sp25k
Saving info data/wiki/ru-100/models/sp25k/qrnn_nl4.m/info.json
```
```
python -m ulmfit cls --dataset-path data/mldoc/${LANG}-1 --base-lm-path data/wiki/${LANG}-100/models/sp25k/qrnn_${NAME}.m --lang=${LANG} --name ${NAME} - train 20 --bs 18 --num-cls-epochs=4 --lr_sched=1cycle --label-smoothing-eps=0.1
Max vocab: 25000
Cache dir: /home/n-waves/workspace/ulmfit-multilingual/data/mldoc/ru-1/models/sp25k
Model dir: /home/n-waves/workspace/ulmfit-multilingual/data/mldoc/ru-1/models/sp25k/qrnn_nl4.m
Loading validation /home/n-waves/workspace/ulmfit-multilingual/data/mldoc/ru-1/ru.dev.csv
Running tokenization lm...
Data lm, trn: 9195, val: 1021
Running tokenization cls...
Data cls, trn: 1000, val: 1000
Running tokenization tst...
Data tst, trn: 1000, val: 4000
Size of vocabulary: 25000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁,', '▁.', '▁в', 'а', 'и', 'е', '▁и', 'й', 'х', '▁на']
Training args: {'clip': 0.12, 'alpha': 2, 'beta': 1, 'drop_mult': 0.3} dps: {'output_p': 0.25, 'hidden_p': 0.1, 'input_p': 0.2, 'embed_p': 0.02, 'weight_p': 0.15}
Loading pretrained model
Unknown tokens 0, first 100: []
Training lm from: [PosixPath('/home/n-waves/workspace/ulmfit-multilingual/data/wiki/ru-100/models/sp25k/qrnn_nl4.m/lm_best'), PosixPath('/home/n-waves/workspace/ulmfit-multilingual/data/wiki/ru-100/models/sp25k/qrnn_nl4.m/../itos')]
epoch train_loss valid_loss accuracy
1 4.626971 3.868075 0.474742
Total time: 01:58
epoch train_loss valid_loss accuracy
1 3.821786 3.625366 0.519506
2 3.570115 3.379288 0.566803
3 3.517294 3.179166 0.599955
4 3.160131 3.028985 0.626484
5 3.135806 2.923198 0.644557
6 3.055160 2.840300 0.659376
7 3.005086 2.770163 0.672080
8 2.811366 2.708846 0.684065
9 2.818394 2.658951 0.694358
10 2.881018 2.605373 0.705269
11 2.793422 2.560091 0.715893
12 2.708385 2.516373 0.725908
13 2.690258 2.471159 0.735673
14 2.748342 2.436113 0.744533
15 2.601220 2.394404 0.754131
16 2.616882 2.372301 0.760451
17 2.602902 2.349164 0.766014
18 2.560349 2.336217 0.769222
19 2.549936 2.332076 0.770150
20 2.546798 2.331103 0.770472
Total time: 53:22
/home/n-waves/workspace/ulmfit-multilingual/data/mldoc/ru-1/models/sp25k
Saving info /home/n-waves/workspace/ulmfit-multilingual/data/mldoc/ru-1/models/sp25k/qrnn_nl4.m/info.json
Single training schedule
epoch train_loss valid_loss accuracy
1 1.043533 0.961182 0.731000
2 0.859086 0.837210 0.824000
3 0.735276 0.724173 0.871000
4 0.612012 0.711034 0.857000
Total time: 01:15
Saving models at /home/n-waves/workspace/ulmfit-multilingual/data/mldoc/ru-1/models/sp25k/qrnn_nl4.m
Loss and accuracy using (cls_best): [0.3957597, tensor(0.8720)]
0.3957597017288208
0.871999979019165
```
## V60k
## VF60k
```
LANG=ru
python -m ulmfit lm --dataset-path data/wiki/${LANG}-100 --tokenizer='vf' --nl 4 --name 'nl4' --max-vocab 60000 --lang ${LANG} --qrnn=True - train 10 --bs=50 --drop_mult=0 --label-smoothing-eps=0.1
Max vocab: 60000
Cache dir: data/wiki/ru-100/models/vf60k
Model dir: data/wiki/ru-100/models/vf60k/qrnn_nl4.m
Wiki text was split to 193047 articles
Wiki text was split to 460 articles
Running tokenization lm...
Data lm, trn: 193047, val: 460
Size of vocabulary: 60003
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', ',', '\n', '.', 'в', 'и', ')', '(', 'на', '—', '«', '»', 'с']
Training args: {'clip': 0.12, 'alpha': 2, 'beta': 1, 'drop_mult': 0} dps: {'output_p': 0.25, 'hidden_p': 0.1, 'input_p': 0.2, 'embed_p': 0.02, 'weight_p': 0.15}
Training lm from random weights
epoch train_loss valid_loss accuracy
1 4.586900 4.478803 0.413023
2 4.483496 4.400461 0.418495
3 4.484620 4.390928 0.418422
4 4.373594 4.350045 0.422567
5 4.350337 4.307665 0.427411
6 4.314571 4.249700 0.436324
7 4.232540 4.183857 0.446341
8 4.252573 4.119820 0.455522
9 4.136978 4.088805 0.462345
10 4.116755 4.079840 0.465394
Total time: 11:24:03
data/wiki/ru-100/models/vf60k
```
## SP15k LSTM nl 3
```bash
python -m ulmfit cls --dataset-path data/mldoc/${LANG}-1 --base-lm-path data/wiki/${LANG}-100/models/sp15k/lstm_nl4.m --lang=${LANG} --name nl4 - train 20 --bs 18 --num-cls-epochs=4 --lr_sched=1cycle --label-smoothing-eps=0.1
Max vocab: 15000
Cache dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ru-1/models/sp15k
Model dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ru-1/models/sp15k/lstm_nl4.m
Loading validation /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ru-1/ru.dev.csv
Data lm, trn: 9195, val: 1021
Data cls, trn: 1000, val: 1000
Data tst, trn: 1000, val: 4000
Size of vocabulary: 15000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁,', '▁.', '▁в', 'а', 'и', 'е', '▁и', 'й', '▁на', 'х']
Training args: {'clip': 0.12, 'alpha': 2, 'beta': 1, 'drop_mult': 0.3} dps: {'output_p': 0.25, 'hidden_p': 0.1, 'input_p': 0.2, 'embed_p': 0.02, 'weight_p': 0.15}
Loading pretrained model
Unknown tokens 0, first 100: []
Bptt 70
Training lm from: [PosixPath('/home/pczapla/workspace/ulmfit-multilingual/data/wiki/ru-100/models/sp15k/lstm_nl4.m/lm_best'), PosixPath('/home/pczapla/workspace/ulmfit-multilingual/data/wiki/ru-100/models/sp15k/lstm_nl4.m/../itos')]
epoch train_loss valid_loss accuracy
1 3.705343 3.261906 0.558008
Total time: 05:27
epoch train_loss valid_loss accuracy
1 3.243956 3.073661 0.594862
2 3.139877 2.917376 0.625388
3 2.941367 2.786331 0.650792
4 2.846027 2.682831 0.671712
5 2.796714 2.600119 0.687167
6 2.841771 2.527643 0.702408
7 2.726931 2.459425 0.717738
8 2.619217 2.402231 0.729743
9 2.626002 2.349137 0.742474
10 2.535362 2.299844 0.753796
11 2.501980 2.257779 0.764137
12 2.427705 2.209901 0.776203
13 2.393852 2.167961 0.787562
14 2.340693 2.129181 0.797972
15 2.307895 2.094267 0.807763
16 2.330075 2.069201 0.814278
17 2.232444 2.049109 0.820321
18 2.306738 2.038069 0.823257
19 2.232783 2.031799 0.825218
20 2.227589 2.030583 0.825465
Total time: 2:13:57
/home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ru-1/models/sp15k
Saving info /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ru-1/models/sp15k/lstm_nl4.m/info.json
Single training schedule
epoch train_loss valid_loss accuracy
1 1.019235 0.894525 0.820000
2 0.885900 0.831892 0.772000
3 0.714437 0.711899 0.865000
4 0.608688 0.706948 0.868000
Total time: 05:07
Saving models at /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/ru-1/models/sp15k/lstm_nl4.m
Loss and accuracy using (cls_best): [0.42021805, tensor(0.8648)]
0.4202180504798889
0.8647500276565552
```
File diff suppressed because it is too large Load Diff
-163
View File
@@ -1,163 +0,0 @@
# ZH
## SP15k QRNN
## SP30k LSTM nl 4
### LM
```
python -m ulmfit lm --dataset-path data/wiki/zh-100 --cuda-id=0 --tokenizer='sp' --nl 4 --name 'nl4' --max-vocab 30000 --lang zh --qrnn=False - train 10 --bs=50 --drop_mult=0
Max vocab: 30000
Cache dir: data/wiki/zh-100/models/sp30k
Model dir: data/wiki/zh-100/models/sp30k/lstm_nl4.m
Tokenized data loaded
Size of vocabulary: 30000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁,', '▁的', '▁。', '▁年', '▁、', '▁在', '▁一', '▁中', '▁人', '▁是']
Training args: {'tie_weights': True, 'clip': 0.12, 'bptt': 70, 'pretrained_fnames': None, 'pretrained_model': None, 'drop_mult': 0} dps: [0.25 0.1 0.2 0.02 0.15]
Training lm from random weights
epoch train_loss valid_loss accuracy
1 2.736679 3.050473 0.428462
2 2.664505 3.011505 0.432414
3 2.607435 2.942389 0.439985
4 2.561503 2.851523 0.451965
5 2.499060 2.798222 0.459438
6 2.387191 2.720054 0.471021
7 2.356725 2.648299 0.479029
8 2.301895 2.553860 0.493597
9 2.275601 2.481724 0.505979
10 2.187606 2.465159 0.509590
```
### MLDoc
```
python -m ulmfit cls --dataset-path data/mldoc/zh-1 --base-lm-path data/wiki/zh-100/models/sp30k/lstm_nl4.m --lang=zh --name 'nl4' --cuda-id=0 - train 20 --bs 40 --num-cls-epochs=2
Max vocab: 30000
Cache dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/zh-1/models/sp30k
Model dir: /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/zh-1/models/sp30k/lstm_nl4.m
Loading validation /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/zh-1/zh.dev.csv
Tokenized data loaded, lm.trn 13500, lm.val 1500
Tokenized data loaded, cls.trn 1000, cls.val 1000
Size of vocabulary: 30000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁,', '▁的', '▁。', '▁年', '▁、', '▁在', '▁一', '▁中', '▁人', '▁是']
Training args: {'tie_weights': True, 'clip': 0.12, 'bptt': 70, 'pretrained_fnames': [PosixPath('/home/pczapla/workspace/ulmfit-multilingual/data/wiki/zh-100/models/sp30k/lstm_nl4.m/lm_best'), PosixPath('/home/pczapla/workspace/ulmfit-multilingual/data/wiki/zh-100/models/sp30k/lstm_nl4.m/../itos')], 'pretrained_model': None, 'alpha': 2, 'beta': 1, 'drop_mult': 0.3} dps: [0.25 0.1 0.2 0.02 0.15]
Unknown tokens 0, first 100: []
Training lm from: [PosixPath('/home/pczapla/workspace/ulmfit-multilingual/data/wiki/zh-100/models/sp30k/lstm_nl4.m/lm_best'), PosixPath('/home/pczapla/workspace/ulmfit-multilingual/data/wiki/zh-100/models/sp30k/lstm_nl4.m/../itos')]
epoch train_loss valid_loss accuracy
1 2.604460 2.225315 0.546099
epoch train_loss valid_loss accuracy
1 2.240892 2.020697 0.578796
2 2.025043 1.816424 0.613192
3 1.832658 1.646025 0.640532
4 1.746628 1.530125 0.659058
5 1.621672 1.425179 0.675305
6 1.544814 1.345650 0.689195
7 1.464704 1.271710 0.702200
8 1.412583 1.204830 0.714764
9 1.332440 1.147108 0.725389
10 1.327941 1.092910 0.736447
11 1.227284 1.039441 0.747662
12 1.200814 0.991910 0.758105
13 1.161579 0.947898 0.768121
14 1.100010 0.908599 0.776732
15 1.059006 0.872309 0.785161
16 1.045412 0.844972 0.791998
17 1.026688 0.824872 0.796891
18 1.013831 0.812786 0.799699
19 0.978586 0.807678 0.800954
20 0.982473 0.805671 0.801201
/home/pczapla/workspace/ulmfit-multilingual/data/mldoc/zh-1/models/sp30k
Saving info /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/zh-1/models/sp30k/lstm_nl4.m/info.json
Starting classifier training
epoch train_loss valid_loss accuracy
1 0.637427 0.505143 0.836000
epoch train_loss valid_loss accuracy
1 0.471189 0.317678 0.887000
epoch train_loss valid_loss accuracy
1 0.384985 0.288901 0.904000
epoch train_loss valid_loss accuracy
1 0.316358 0.275456 0.906000
2 0.295534 0.278589 0.907000
Saving models at /home/pczapla/workspace/ulmfit-multilingual/data/mldoc/zh-1/models/sp30k/lstm_nl4.m
Loss and accuracy using (cls_best): [0.28411642, tensor(0.9020)]
0.2841164171695709
0.9020000100135803
```
## SP60k LSTM nl 4
### LM
```
Wiki text was split to 153503 articles
Wiki text was split to 145 articles
Size of vocabulary: 60000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁,', '▁的', '▁。', '▁年', '▁、', '▁在', '▁一', '▁中', '▁是', '▁人']
Training args: {'tie_weights': True, 'clip': 0.12, 'bptt': 70, 'pretrained_fnames': None, 'pretrained_model': None, 'drop_mult': 0} dps: [0.25 0.1 0.2 0.02 0.15]
Training lm from random weights
epoch train_loss valid_loss accuracy
1 3.312704 3.701317 0.334740
2 3.212988 3.648671 0.336709
3 3.060103 3.584413 0.344427
4 3.108131 3.477978 0.356738
5 2.952951 3.410785 0.365901
6 2.919397 3.325265 0.376316
7 2.839392 3.224750 0.391707
8 2.750095 3.132644 0.404416
9 2.805704 3.066595 0.415245
10 2.653435 3.055314 0.417736
data/wiki/zh-100/models/sp60k
Saving info data/wiki/zh-100/models/sp60k/lstm_nl4.m/info.json
```
### MLDoc
```
python -m ulmfit cls --dataset-path data/mldoc/zh-1 --base-lm-path data/wiki/zh-100/models/sp60k/lstm_nl4.m --lang=zh --name 'nl4' --cu
da-id=0 - train 20 --bs 40 --num-cls-epochs=2
Max vocab: 60000
Cache dir: /home/n-waves/workspace/ulmfit-multilingual/data/mldoc/zh-1/models/sp60k
Model dir: /home/n-waves/workspace/ulmfit-multilingual/data/mldoc/zh-1/models/sp60k/lstm_nl4.m
Loading validation /home/n-waves/workspace/ulmfit-multilingual/data/mldoc/zh-1/zh.dev.csv
Tokenized data loaded, lm.trn 13500, lm.val 1500
Tokenized data loaded, cls.trn 1000, cls.val 1000
Size of vocabulary: 60000
First 20 words in vocab: ['xxunk', 'xxpad', 'xxbos', 'xxfld', 'xxmaj', 'xxup', 'xxrep', 'xxwrep', '<unk>', '▁', '▁,', '▁的', '▁。', '▁年', '▁、', '▁在', '▁一', '▁中', '▁是', '▁人']
Training args: {'tie_weights': True, 'clip': 0.12, 'bptt': 70, 'pretrained_fnames': [PosixPath('/home/n-waves/workspace/ulmfit-multilingual/data/wiki/zh-100/models/sp60k/lstm_nl4.m/lm_best'), Po
sixPath('/home/n-waves/workspace/ulmfit-multilingual/data/wiki/zh-100/models/sp60k/lstm_nl4.m/../itos')], 'pretrained_model': None, 'drop_mult': 0.3} dps: [0.25 0.1 0.2 0.02 0.15]
Unknown tokens 0, first 100: []
Training lm from: [PosixPath('/home/n-waves/workspace/ulmfit-multilingual/data/wiki/zh-100/models/sp60k/lstm_nl4.m/lm_best'), PosixPath('/home/n-waves/workspace/ulmfit-multilingual/data/wiki/zh-
100/models/sp60k/lstm_nl4.m/../itos')]
epoch train_loss valid_loss accuracy
1 3.055914 2.690310 0.467917
epoch train_loss valid_loss accuracy
1 2.713421 2.464873 0.503386
2 2.429520 2.215309 0.543961
3 2.247576 2.010849 0.578106
4 2.083628 1.853473 0.602419
5 1.969939 1.734762 0.621440
6 1.904438 1.624005 0.640240
7 1.783416 1.526202 0.656981
8 1.719215 1.445780 0.671753
9 1.621891 1.366912 0.687187
10 1.589463 1.295759 0.701207
11 1.510032 1.223578 0.716387
12 1.404720 1.160607 0.729603
13 1.414636 1.107378 0.741273
14 1.364716 1.056422 0.753112
15 1.327804 1.011525 0.763934
16 1.255990 0.976447 0.771864
17 1.181438 0.951213 0.778309
18 1.192709 0.936060 0.781858
19 1.190164 0.928613 0.783513
20 1.172130 0.927612 0.783722
/home/n-waves/workspace/ulmfit-multilingual/data/mldoc/zh-1/models/sp60k
Saving info /home/n-waves/workspace/ulmfit-multilingual/data/mldoc/zh-1/models/sp60k/lstm_nl4.m/info.json
Starting classifier training
epoch train_loss valid_loss accuracy
1 0.646537 0.516221 0.836000
epoch train_loss valid_loss accuracy
1 0.441884 0.361802 0.873000
epoch train_loss valid_loss accuracy
1 0.376583 0.318426 0.893000
epoch train_loss valid_loss accuracy
1 0.280910 0.314279 0.889000
2 0.308887 0.309718 0.903000
Saving models at /home/n-waves/workspace/ulmfit-multilingual/data/mldoc/zh-1/models/sp60k/lstm_nl4.m
Loss and accuracy using (cls_last): [0.30276635, tensor(0.8978)]
```
-50
View File
@@ -1,50 +0,0 @@
# Results
## Set-up.
- Num Tokens 15K
- GPU V100
- LM BPTT = 70
- LM BS = 64
- CLAS BS = 32
| Model | LSTM | QRNN |
|----------------|-----------|-----------|
| LM ms/batch | 143ms | 71ms |
| CLAS ms/batch | 467ms | 156ms |
```
> python results/time_benchmark/qrnn_benchmark.py
Vocab size 14513
QRNN
LM
epoch train_loss valid_loss accuracy
1 6.326089
Total time: 00:11
Batch size torch.Size([64, 70])
Params = 22 MM
Training time is 71.0 ms per batch
CLAS
epoch train_loss valid_loss accuracy
1 0.712603
Total time: 00:10
Batch size torch.Size([32, 1445])
Params = 22 MM
Training time is 156.0 ms per batch
LSTM
LM
epoch train_loss valid_loss accuracy
1 6.262911
Total time: 00:21
Batch size torch.Size([64, 70])
Params = 37 MM
Training time is 143.0 ms per batch
CLAS
epoch train_loss valid_loss accuracy
1 0.706715
Total time: 00:32
Batch size torch.Size([32, 1445])
Params = 37 MM
Training time is 467.0 ms per batch
```
-52
View File
@@ -1,52 +0,0 @@
import glob
import shutil
import time
from fastai.text import *
orig_path = untar_data(URLs.IMDB)
path = Path('data') / 'imdb_small'
path.mkdir(parents=True, exist_ok=True)
for mode in ['train', 'test']:
for label in ['pos', 'neg']:
tgt_path = path / mode / label
tgt_path.mkdir(parents=True, exist_ok=True)
# Keep just 10% of the files
pattern = str(orig_path / mode / label / '3*.txt')
for file in glob.glob(pattern):
shutil.copy(file, tgt_path)
data_lm = TextLMDataBunch.from_folder(path, valid='test')
data_clas = TextClasDataBunch.from_folder(path, bs=32, vocab=data_lm.train_ds.vocab, valid='test')
print('Vocab size', len(data_lm.train_ds.vocab.itos))
def count_parameters(model, requires_grad):
return sum(p.numel() for p in model.parameters() if p.requires_grad == requires_grad)
def test(qrnn, func, config, data, arch=AWD_LSTM):
total = len(list(data.train_dl))
config = config.copy()
config['qrnn'] = qrnn
learn = func(data, AWD_LSTM, config=config, pretrained=False)
learn.unfreeze()
params = count_parameters(learn.model, True)
total = len(list(data.train_dl))
start_time = time.clock()
learn.fit(1)
diff = time.clock() - start_time
print('Batch size', data.one_batch()[0].shape)
print(f'Params = {params // 1000000} MM')
print(f'Training time is {1000 * diff // total} ms per batch')
for qrnn in [True, False]:
print('QRNN' if qrnn else 'LSTM')
print('LM')
test(qrnn, language_model_learner, config=awd_lstm_lm_config, data=data_lm)
print('CLAS')
test(qrnn, text_classifier_learner, config=awd_lstm_clas_config, data=data_clas)
+8
View File
@@ -0,0 +1,8 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from setuptools import setup, find_packages
setup(
name="multifit",
version="1.0",
packages=find_packages(),
)
+59
View File
@@ -0,0 +1,59 @@
from multifit import ULMFiT
from fastai.text import *
from sotabencheval.language_modelling import WikiText103Evaluator
from sotabencheval.utils import is_server
def iterate_over_batches(data, bs, bptt):
def batched(Z, bptt):
sz = Z.shape[-1]
for s in range(0, sz, bptt):
yield Z[..., s:s+bptt]
size = data.numel()
batched_size = ((size-1) // bs) * bs
# filp - to be able to switch to batch_size 1 later and maintain trasnfoxl memory
X = data[:batched_size].view(bs, -1).flip(0,)
Y = data[1:batched_size+1].view(bs, -1).flip(0,)
yield from zip(batched(X, bptt), batched(Y, bptt))
X = data[None, batched_size:-1]
Y = data[None, batched_size+1:]
yield from zip(batched(X, bptt), batched(Y, bptt))
#TODO the tokenization removes new lines so te perplexity coalculation is off
def evaluate(pretrained_name):
model = ULMFiT().from_pretrained_(pretrained_name)
if is_server():
wikitext_folder = WikiText103Evaluator.dataset.get_path(local_root="unused")
else:
wikitext_folder = untar_data(URLs.WIKITEXT)
ds = model.arch.dataset(wikitext_folder, tokenizer=model.pretrain_lm.tokenizer)
test_df = ds.read_data(ds.tst_path)
data_lm = ds.databunch_from_df(TextLMDataBunch, test_df, test_df, bs=20, bptt=70)
learn = model.finetune_lm.get_learner(data_lm)
full_data = np.concatenate(data_lm.valid_ds.items)
evaluator = WikiText103Evaluator(
model_name="Multifit (slim)",
model_description=pretrained_name,
paper_arxiv_id="1909.04761",
local_root=str(wikitext_folder)
)
learn.loss_func = None
dev = torch.device("cuda")
evaluator.reset()
batches = iterate_over_batches(torch.tensor(full_data), bs=200, bptt=70)
for x,y in progress_bar(batches, total=len(full_data)//200//70):
logits = learn.pred_batch(batch=[x.to(dev), y.to(dev)])
log_probs = torch.log_softmax(logits, -1)
evaluator.add(log_probs, y)
if evaluator.cache_exists:
break
evaluator.save()
print(pretrained_name)
evaluator.print_results()
return evaluator.results
evaluate("en_multifit_nl3_wiki103")
+10
View File
@@ -0,0 +1,10 @@
#!/usr/bin/env bash -x
source /workspace/venv/bin/activate
PYTHON=${PYTHON:-"python"}
REPO="$( cd "$(dirname "$0")" ; cd .. ; pwd -P )"
cd $REPO
$PYTHON -m pip install -e .
$PYTHON -m pip install torch
$PYTHON -m pip install spacy
#$PYTHON -m spacy download en
$PYTHON -m pip install git+https://github.com/PiotrCzapla/sotabench-eval.git
+52
View File
@@ -0,0 +1,52 @@
import pandas as pd, numpy as np
import fire
from pathlib import Path
from sys import stderr
from sklearn.model_selection import train_test_split
import re
def to_csv(df, path):
df.to_csv(path, header=None, index=None)
def remove_rt(df):
return df.assign(text=df.text.str.replace('^RT @anonymized_account ',''))
def remove_duplicates(df):
exact = df[~df.duplicated('text')]
prefixes = exact.text.map(lambda t: t.endswith('') and exact.text.str.startswith(t[:-1]).sum()>1)
return exact[~prefixes]
def cross_remove_duplicates(from_df, other_df):
exact = from_df[~from_df.text.isin(other_df.text)]
other_prefixes = other_df.text[other_df.text.str.endswith('')].str[:-1]
if len(other_prefixes):
other_prefixes_re = re.compile('^'+'|'.join([f'({re.escape(t)})' for t in other_prefixes]))
else:
other_prefixes_re = re.compile('^$')
prefixes = exact.text.map(lambda t:
(t.endswith('') and other_df.text.str.startswith(t[:-1]).any()) or
other_prefixes_re.match(t) is not None
)
return exact[~prefixes]
def split(data_dir, dedup=False):
data_dir = Path(data_dir)
train = pd.read_csv(data_dir / "pl.unsup.csv", header=None, names=["label", "text"])
val_ratio = 0.1
train = remove_rt(train)
trn, val = train_test_split(train, test_size=val_ratio, random_state=12345, stratify=train.label)
if dedup:
trn = remove_duplicates(trn)
val = remove_duplicates(val)
val = cross_remove_duplicates(val, trn)
l1, l2, l3 = len(remove_duplicates(train)), len(trn), len(val)
if l1 != l2 + l3:
print("Warning: some condition believed by me to be invariant is not hold")
print(f"{l1} should be equal to {l2} + {l3} = {l2+l3}")
to_csv(trn, data_dir / "pl.train.csv")
to_csv(val, data_dir / "pl.dev.csv")
if __name__ == "__main__": fire.Fire(split)
View File
-162
View File
@@ -1,162 +0,0 @@
import os
import glob
import fire
import ulmfit.pretrain_lm
import ulmfit.train_clas
from fastai import *
from fastai.text import *
from fastai_contrib.utils import *
"""
It is a mixture of a pytest unit test and woven together to compose an end to end functional test.
"""
import fastai.core
fastai.core.defaults.cpus = 1
cuda_id=0
def copy_head(src_fn, dst_fn, n=1000):
with src_fn.open("r") as s, dst_fn.open("w") as d:
for i in range(n):
d.write(s.readline())
def get_test_data():
data = get_data_folder()
wt = data / "wiki" / "wikitext-2"
imdb = data / "imdb"
test_data = data / "test"
if test_data.exists():
shutil.rmtree(test_data)
test_wt = test_data / 'wikitext-s'
test_imdb = test_data / 'imdb'
test_wt.mkdir(exist_ok=True, parents=True)
test_imdb.mkdir(exist_ok=True, parents=True)
sz=1
# we use the same text to see if models can overfit
copy_head(wt / 'en.wiki.train.tokens', test_wt / 'en.wiki.train.tokens', n=1000*sz)
copy_head(wt / 'en.wiki.train.tokens', test_wt / 'en.wiki.valid.tokens', n=600*sz)
copy_head(wt / 'en.wiki.train.tokens', test_wt / 'en.wiki.test.tokens', n=600*sz)
copy_head(imdb / 'train.csv', test_imdb / 'train.csv', n=10*sz)
copy_head(imdb / 'train.csv', test_imdb / 'test.csv', n=6 * sz)
copy_head(imdb / 'train.csv', test_imdb / 'dev.csv', n=6 * sz)
copy_head(imdb / 'train.csv', test_imdb / 'unsup.csv', n=1*sz)
return test_data, test_wt
def test_ulmfit_works_with_relative_paths():
""" Test ulmfit with (default) Moses tokenizer on small wikipedia dataset.
"""
os.chdir(get_data_folder()/"..")
test_data, wt2 = get_test_data()
lm_name = 'end-to-end-test-default'
cuda_id = 0
exp = ulmfit.pretrain_lm.LMHyperParams(
dataset_path=wt2.relative_to(Path.cwd()),
lang='en',
qrnn=False,
max_vocab=1000,
name=lm_name,
cuda_id=cuda_id)
exp.train_lm(num_epochs=1, bs=2)
#assert exp.results['accuracy'] > 0.02
exp2 = ulmfit.train_clas.CLSHyperParams.from_lm(test_data / 'imdb', exp.model_dir)
exp2.train_cls(num_lm_epochs=1, unfreeze=False, bs=4,)
# should work for the second time as well
exp2 = ulmfit.train_clas.CLSHyperParams.from_lm(test_data / 'imdb', exp.model_dir)
exp2.train_cls(num_lm_epochs=0, unfreeze=False, bs=4, )
def test_ulmfit_default_end_to_end():
""" Test ulmfit with (default) Moses tokenizer on small wikipedia dataset.
"""
test_data, wt2 = get_test_data()
lm_name = 'end-to-end-test-default'
cuda_id = 0
exp = ulmfit.pretrain_lm.LMHyperParams(
dataset_path=wt2,
lang='en',
qrnn=False,
max_vocab=1000,
name=lm_name,
cuda_id=cuda_id)
exp.train_lm(num_epochs=1, bs=2)
#assert exp.results['accuracy'] > 0.02
exp2 = ulmfit.train_clas.CLSHyperParams.from_lm(test_data / 'imdb', exp.model_dir)
exp2.train_cls(num_lm_epochs=0, unfreeze=False, bs=4,)
def test_ulmfit_fastai_end_to_end():
""" Test ulmfit with sentencepiece tokenizer on small wikipedia dataset.
"""
test_data, wt2 = get_test_data()
lm_name = 'end-to-end-test-fastai'
exp = ulmfit.pretrain_lm.LMHyperParams(
dataset_path=wt2,
lang='en',
cuda_id=cuda_id,
qrnn=False,
tokenizer='f',
max_vocab=100,
nl=1,
name=lm_name,
)
exp.train_lm(num_epochs=1, bs=2)
exp2 = ulmfit.train_clas.CLSHyperParams.from_lm(test_data / 'imdb', exp.model_dir)
exp2.train_cls(num_lm_epochs=0, unfreeze=False, bs=4, )
def test_ulmfit_fastai_end_to_end_label_smoothing():
""" Test ulmfit with sentencepiece tokenizer on small wikipedia dataset.
"""
test_data, wt2 = get_test_data()
lm_name = 'end-to-end-test-fastai'
exp = ulmfit.pretrain_lm.LMHyperParams(
dataset_path=wt2,
lang='en',
cuda_id=cuda_id,
qrnn=False,
tokenizer='f',
max_vocab=100,
name=lm_name,
)
exp.train_lm(num_epochs=1, bs=2, label_smoothing_eps=0.1)
exp2 = ulmfit.train_clas.CLSHyperParams.from_lm(test_data / 'imdb', exp.model_dir)
exp2.train_cls(num_lm_epochs=0, unfreeze=False, bs=4, label_smoothing_eps=0.1 )
def test_ulmfit_sentencepiece_end_to_end():
""" Test ulmfit with sentencepiece tokenizer on small wikipedia dataset.
"""
test_data, wt2 = get_test_data()
lm_name = 'end-to-end-test-spm'
exp = ulmfit.pretrain_lm.LMHyperParams(
dataset_path=wt2,
lang='en',
cuda_id=cuda_id,
qrnn=False,
tokenizer=ulmfit.pretrain_lm.Tokenizers.SUBWORD,
max_vocab=200,
name=lm_name,
)
exp.train_lm(num_epochs=1, bs=2)
# not supported yet
exp2 = ulmfit.train_clas.CLSHyperParams.from_lm(test_data / 'imdb', exp.model_dir)
exp2.train_cls(num_lm_epochs=0, unfreeze=False, bs=4, )
if __name__ == "__main__":
fire.Fire() # allows using all functions via CLI
-41
View File
@@ -1,41 +0,0 @@
# Todo
- [ ] Update these docs
Getting Started
---
## Download and Extract the Wikipedia corpus
In Linux, you can do all the following steps automatically with [prepare_wiki.sh](./prepare_wiki.sh)
**Manual Instructions**
We use the [WikiExtractor.py](http://medialab.di.unipi.it/wiki/Wikipedia_Extractor). It is a Python script that extracts and cleans text from a [Wikipedia database dump](http://download.wikimedia.org/).
At the end of this step, you should have the following directory structure inside ulmfit:
```bash
|- data
|- wiki
|- wiki_dumps
|- wiki_extr
|- wikiextractor
```
The extracted data should be in the folder `wiki_extr` -> language name e.g.`en` (english), `fr` (french) `hi` (hindi) and so on.
## Create and Post Process WikiText
### Create and Post-Process
If you used the automated shell script from previous step, this might look something like
```bash
python create_wikitext.py -i data/wiki_extr/hi -o data/wiki/hi -l hi
```
for hindi (unicode: 'hi')
This should create two splits of your Wikimedia Dumps: a small and large one.
_**Then**_, use the [postprocess_wikitext.py](./postprocess_wikitext.py) script to finish post processing. This processes numbers, builds a vocab, and limits the vocabulary size. This might look following for Hindi (`hi`)
```bash
python postprocess_wikitext.py data/wiki/hi-2 hi
python postprocess_wikitext.py data/wiki/hi-100 hi
```
-1
View File
@@ -1 +0,0 @@
-188
View File
@@ -1,188 +0,0 @@
import gc
import os
import pprint
import tarfile
import shutil
from collections import OrderedDict
from functools import wraps
import pandas as pd
import fire
from .pretrain_lm import LMHyperParams, json_save, json_load, np
from .train_clas import CLSHyperParams
from pathlib import Path
from string import Template
class FireView:
def __init__(self, **kwargs):
for k,v in kwargs.items():
setattr(self, k, v)
def get_lang_from_dataset_path(ds):
lang,*_ = ds.name.split("-")
if len(lang) == 2:
return lang
return "en"
def get_dataset_path(p, dataset_template):
ds = [x for x in p.parents if x.name == "models"][0].parent
lang = get_lang_from_dataset_path(ds)
pattern = Template(dataset_template).substitute(lang=lang, ds_name=ds.name)
print(pattern)
for ds_path in ds.parent.glob(pattern):
yield lang, ds_path
class ULMFiT:
@wraps(LMHyperParams)
def lm(self, dataset_path, **changes):
changes['dataset_path'] = dataset_path
params = LMHyperParams(**changes)
return FireView(train=params.train_lm)
lm2 = LMHyperParams
@wraps(CLSHyperParams)
def cls(self, dataset_path, base_lm_path=None, **changes):
if base_lm_path is not None:
params = CLSHyperParams.from_lm(dataset_path, base_lm_path, **changes)
else:
params = CLSHyperParams(dataset_path=dataset_path, **changes)
return FireView(train=params.train_cls, validate_cls=params.validate_cls)
@wraps(CLSHyperParams)
def load_cls(self, model_path, **changes):
params = CLSHyperParams.from_json(model_path, **changes)
return FireView(train=params.train_cls, validate_cls=params.validate_cls)
def eval_noise_resistance(self, lang="de", size=1, prefix_name="", model="sp15k/qrnn_nl4.m",
num_cls_epochs=8, bs=18, lr_sched="1cycle", label_smoothing_eps=0.0, **kwargs):
results= []
for noise in range(0, 80, 5):
print("Noise: ", noise)
d = self.eval(glob=f"mldoc/{lang}-1/models/{model}",
name=f"nl4_{prefix_name}{noise}",
noise=noise/100,
dataset_template='${lang}-'+str(size),
num_cls_epochs=num_cls_epochs,
bs=bs,
lr_sched=lr_sched,
label_smoothing_eps=label_smoothing_eps,
return_df=True,
**kwargs)
val = d['tst_accuracy'][0]
results.append((noise/100, val))
df = pd.DataFrame(results, columns=["noise", "accuracy"])
df.to_csv(f"noise_{lang}-{size}{prefix_name}.csv")
print(df)
def tar(self, model_path):
data_dir = (Path.cwd()/"data").resolve()
params = CLSHyperParams.from_json(model_path)
name = str(params.dataset_dir.resolve().relative_to(data_dir)).replace("/", "-")
tar_name = f"models/{name}-{params.tokenizer_prefix}-{params.model_name}.tar"
print("Storing model in", tar_name)
with tarfile.open(tar_name, mode="w") as tar:
for g in map(params.model_dir.glob, ['*_best.pth', 'info.json', '../spm.*', '../itos.*',]):
for f in g:
dest = f.resolve().relative_to(Path.cwd())
print("Adding", f, dest)
tar.add(f, dest)
def generate_pseudo_labels(self, glob="mldoc/*-1-laser-en1/models/sp15k/qrnn_nl4.m", bs=20, dest_dataset_template='${ds_name}-ps'):
for base_model in sorted(Path("data").glob(glob)):
print("Processing", base_model)
dataset_path = [x for x in base_model.parents if x.name == "models"][0].parent
lang = get_lang_from_dataset_path(dataset_path)
dest_dataset_path = dataset_path.parent/Template(dest_dataset_template).substitute(ds_name=dataset_path.name)
try:
_name = base_model.name.replace(".m", "").replace("lstm_", "").replace("qrnn_", "")
params = CLSHyperParams.from_lm(dataset_path, base_model, lang=lang, name=_name, cuda_id=0)
key = str(params.model_dir.relative_to(Path.cwd()))
if (params.model_dir / "results.npy").exists():
d = np.load(params.model_dir / "results.npy")
d = d.tolist() # magiacally convert to dict
elif (params.model_dir / "cls_best.pth").exists():
print("Evaluating previously trained model")
d = params.validate_cls(label_smoothing_eps=0.1)
else:
print("The model is not trained ignoring")
continue
print("Generating pseduolabels", dest_dataset_path)
params.generate_pseudo_labels(dest_dataset_path, bs=bs)
del params
except Exception as e:
print("Error", e)
raise e
gc.collect()
def ls(self, glob="mldoc/*-1/models/sp30k/lstm_nl4.m"):
for i, name in enumerate(sorted(Path("data").glob(glob))):
print(i, name, "cls:", (name/"cls_best.pth").exists())
def eval(self, glob="mldoc/*-1/models/sp30k/lstm_nl4.m", dataset_template='${ds_name}', name=None,
num_lm_epochs=0, cuda_id=0, train=True, to_csv=None, return_df=False, label_smoothing_eps=0.0,
**trn_params):
results = []
def extract_agg(group):
best = group.loc[group["val_accuracy"].idxmax()]["tst_accuracy"]
return pd.Series({'best': best* 100,
'max': group['tst_accuracy'].max()* 100,
'avg': group['tst_accuracy'].mean()* 100})
def pivot_to_lang(df):
df['ds'] = df['name'].str.extract(r'data/[a-z]*/([^/]{1,12})[^/]*/models')
best = df.groupby('ds').apply(extract_agg)
best = best.round(2)
return best.T
for base_model in sorted(Path("data").glob(glob)):
print("Processing", base_model)
for lang, dataset_path in sorted(get_dataset_path(base_model, dataset_template)):
try:
_name = name
if name is None:
_name = base_model.name.replace(".m","").replace("lstm_","").replace("qrnn_","")
params = CLSHyperParams.from_lm(dataset_path, base_model, lang=lang, name=_name, cuda_id=cuda_id)
key = str(params.model_dir.relative_to(Path.cwd()))
if (params.model_dir / "results.npy").exists():
d = np.load(params.model_dir / "results.npy")
d = d.tolist() # magiacally convert to dict
elif (params.model_dir/"cls_best.pth").exists():
print("Evaluating previously trained model")
d = params.validate_cls(label_smoothing_eps=label_smoothing_eps)
elif train:
print("Training")
d = params.train_cls(num_lm_epochs=num_lm_epochs, label_smoothing_eps=label_smoothing_eps, **trn_params)
else:
print("Skipping", (params.model_dir/"cls_best.pth"))
d = None
if d is not None:
d['name']=key
np.save(params.model_dir / "results.npy", d)
results.append(d)
del params
except Exception as e:
print("Error", e)
gc.collect()
df = pd.DataFrame.from_records(results)
print(df)
print(pivot_to_lang(df))
if to_csv is not None:
print(f"Saving result to: {to_csv}")
df.to_csv(to_csv)
if return_df:
return df
def remove_lm_saves(self):
for lm_save in Path("data").glob("**/lm_*.pth"):
num = lm_save.stem.split("_")[-1]
if not num.isdigit():
continue
if int(num) not in [5, 10, 15]:
print("rm ", lm_save)
os.remove(lm_save)
# python -m ulmfit cls --dataset-path data/mldoc/de-1-laser --base-lm-path data/mldoc/de-1/models/sp30k/lstm_nl4.m --lang=de --name 'nl4' --cuda-id=1 - train 0 --bs 40 --num-cls-epochs=2
if __name__ == '__main__':
fire.Fire(ULMFiT())
-35
View File
@@ -1,35 +0,0 @@
"""
Script to merge WikiText files created with `create_wikitext.py`.
"""
import fire
from pathlib import Path
from contextlib import ExitStack
def merge_wikitext(paths, langs, dest_path, num_sentences):
wiki_paths = [Path(path) for path in paths]
for wiki_path in wiki_paths:
assert wiki_path.exists(), f'Error: {wiki_path} does not exist.'
dest_path = Path(dest_path)
dest_path.mkdir(exist_ok=True)
splits = ['train', 'valid', 'test']
concat_langs = '-'.join(langs)
for split in splits:
with ExitStack() as stack:
files = [stack.enter_context(open(
wiki_path / f'{lang}.wiki.{split}.tokens', 'r', encoding='utf-8'))
for lang, wiki_path in zip(langs, wiki_paths)]
output = stack.enter_context(open(dest_path / f'{concat_langs}.wiki.{split}.tokens', 'w', encoding='utf-8'))
done = False
while not done:
for file in files:
lines = [file.readline() for x in range(num_sentences)]
size = len(lines)
lines = [line for line in lines if line]
if len(lines) < size:
done = True
for line in lines:
output.write(line)
if __name__ == '__main__':
fire.Fire(merge_wikitext)
-341
View File
@@ -1,341 +0,0 @@
"""
Script to train a model on a preprocessed Wiki dataset. Note that the dataset is
expected to have been tokenized with Moses and processed with `postprocess_wikitext.py`.
That is, the data is expected to be white-space separated and numbers are expected
to be split.
"""
import fire
from fastai.callbacks import CSVLogger
from fastai.text import *
from fastai_contrib.utils import read_whitespace_file, \
validate, UNK, get_sentencepiece, PAD_TOKEN_ID, \
replace_std_toks, MosesPreprocessingFunc
LM_BEST = "lm_best"
ENC_BEST = "enc_best"
class Tokenizers(Enum):
SUBWORD='sp'
BROKENSUBWORD = 'bsp'
MOSES='v'
MOSES_FA='vf'
FASTAI='f'
def istitle(line):
return len(re.findall(r'^ ?= [^=]* = ?$', line)) != 0
def read_wiki_articles(filename):
articles = []
with open(filename, encoding='utf8') as f:
lines = f.readlines()
current_article = []
for i,line in enumerate(lines):
current_article.append(line)
if i < len(lines)-2 and lines[i+1].strip() == "" and istitle(lines[i+2]):
articles.append("".join(current_article))
current_article = []
articles.append("".join(current_article))
print(f"Wiki text was split to {len(articles)} articles")
return pd.DataFrame({'texts': np.array(articles, dtype=np.object)})
def json_save(f, d):
with Path(f).open("w") as fp:
json.dump(d, fp)
def json_load(f):
with open(f, 'r') as f:
return json.load(f)
@dataclass
class LMHyperParams:
dataset_path: Union[str, Path] # data_dir
base_lm_path: Union[str, Path] = None
backwards: str = False
bidir: bool =False
qrnn: bool = True
max_vocab: int = 60000
tokenizer: Tokenizers = Tokenizers.MOSES
pretrained_model: str = None
emb_sz:int = 400
nh: int = None
nl: int = 3
# these hyperparameters are for training on ~100M tokens (e.g. WikiText-103)
# for training on smaller datasets, more dropout is necessary
dps = dict(output_p=0.25, hidden_p=0.1, input_p=0.2, embed_p=0.02, weight_p=0.15) # consider removing dps & clip from the default hyperparams and put them to train
clip: float = 0.12
bptt: int = 70
# alpha and beta - defaults like in fastai/text/learner.py:RNNLearner()
rnn_alpha: float = 2 # activation regularization (AR)
rnn_beta: float = 1 # temporal activation regularization (TAR)
lang: str = 'en'
name: str = None
cuda_id: InitVar[int] = 0
def __post_init__(self, cuda_id):
if self.bidir and self.backwards:
raise ValueError('Both "backwards" and "bidir" options cannot be enabled at the same time')
if not torch.cuda.is_available():
print('CUDA not available. Setting device=-1.')
cuda_id = -1
torch.cuda.set_device(cuda_id)
self.dataset_path = Path(self.dataset_path)
self.base_lm_path = Path(self.base_lm_path) if self.base_lm_path is not None else None
self.tokenizer = Tokenizers(self.tokenizer) if isinstance(self.tokenizer, str) else self.tokenizer
assert self.dataset_path.exists()
self.cache_dir = self.dataset_path / 'models' / self.tokenizer_prefix
self.model_dir = self.cache_dir / self.model_name
print('Max vocab:', self.max_vocab)
print('Cache dir:', self.cache_dir)
print('Model dir:', self.model_dir)
if self.nh is None: self.nh = 1550 if self.qrnn else 1150
if self.name is None: self.name = self.lang
@property
def tokenizer_prefix(self): return f"{self.tokenizer.value}{self.max_vocab // 1000}k"
@property
def model_direction(self):
if self.bidir:
return 'bi'
if self.backwards:
return 'bwd'
else:
return ''
@property
def model_prefix(self): return self.model_direction + ('qrnn' if self.qrnn else 'lstm')
@property
def model_name(self): return f"{self.model_prefix}_{self.name}.m"
@property
def pretrained_fnames(self): return [self.base_lm_path / LM_BEST, self.base_lm_path / '../itos'] if self.base_lm_path else None
def tokenizer_to_fastai_args(self, sp_data_func, use_moses):
moses_preproc = [MosesPreprocessingFunc(self.lang)] if use_moses else []
if self.tokenizer is Tokenizers.SUBWORD or self.tokenizer is Tokenizers.BROKENSUBWORD:
if self.base_lm_path and not(self.cache_dir/"spm.model").exists(): # ensure we are using the same sentence piece model
shutil.copy(self.base_lm_path / '..' / 'itos.pkl', self.cache_dir)
shutil.copy(self.base_lm_path / '..' / 'spm.model', self.cache_dir)
shutil.copy(self.base_lm_path / '..' / 'spm.vocab', self.cache_dir)
args = get_sentencepiece(self.cache_dir,
sp_data_func,
vocab_size=self.max_vocab,
lang=self.lang,
pre_rules=moses_preproc + defaults.text_pre_rules,
post_rules=defaults.text_post_rules)
elif self.tokenizer is Tokenizers.MOSES:
args = dict(tokenizer=Tokenizer(tok_func=BaseTokenizer,
lang=self.lang,
pre_rules=moses_preproc + [replace_std_toks],
post_rules=[]))
elif self.tokenizer is Tokenizers.MOSES_FA:
args = dict(tokenizer=Tokenizer(tok_func=BaseTokenizer,
lang=self.lang,
pre_rules=moses_preproc + defaults.text_pre_rules,
post_rules=defaults.text_post_rules))
elif self.tokenizer is Tokenizers.FASTAI:
args = dict()
else:
raise ValueError(
f"self.tokenizer has wrong value {self.tokenizer}, Allowed values are taken from {Tokenizers}")
return args
def save_info(self):
from dataclasses import asdict
vals = {k: (str(v) if isinstance(v, Path) else v) for k,v in asdict(self).items()}
vals.pop('name', None)
vals.pop('lang', None)
vals['tokenizer'] = self.tokenizer.value
json_save(self.model_dir/'info.json', vals)
print("Saving info", self.model_dir / 'info.json')
def train_lm(self, num_epochs=20, data_lm=None, bs=70, true_wd=False, drop_mult=0.0, lr=5e-3, label_smoothing_eps=0.0):
self.model_dir.mkdir(exist_ok=True, parents=True)
data_lm = self.load_wiki_data(bs=bs) if data_lm is None else data_lm
learn = self.create_lm_learner(data_lm, drop_mult=drop_mult, label_smoothing_eps=label_smoothing_eps)
print("Bptt", data_lm.bptt)
learn.true_wd = true_wd
if num_epochs > 0:
if self.pretrained_fnames or self.pretrained_model:
print("Training lm from: ", self.pretrained_fnames or self.pretrained_model)
if learn.true_wd:
learn.freeze_to(-1)
learn.fit_one_cycle(1, 1e-2, moms=(0.8, 0.7))
learn.unfreeze()
learn.fit_one_cycle(num_epochs, 1e-3, moms=(0.8, 0.7))
else:
learn.freeze_to(-1)
learn.fit_one_cycle(1, 1e-2, moms=(0.8, 0.7), wd=1e-7) # TODO Fix the learning rates
learn.unfreeze()
learn.fit_one_cycle(num_epochs, 1e-3, moms=(0.8, 0.7), wd=1e-7)
else:
print("Training lm from random weights")
learn.unfreeze()
if not learn.true_wd: learn.fit_one_cycle(num_epochs, lr, (0.8, 0.7), wd=1e-7)
else: learn.fit_one_cycle(num_epochs, lr, (0.8, 0.7)) # TODO find proper values
learn.save("lm_best_with_opt", with_opt=True)
learn.save_encoder(ENC_BEST)
learn.save(LM_BEST, with_opt=False)
print(learn.path)
self.save_info()
# do we need to return `learn'? it adds noise to Fire output
#return learn
def create_lm_learner(self, data_lm, dps=None, label_smoothing_eps=0.0, **kwargs):
assert self.bidir == False, "bidirectional model is not yet supported"
config = dict(emb_sz=self.emb_sz, n_hid=self.nh, n_layers=self.nl, pad_token=PAD_TOKEN_ID, qrnn=self.qrnn,
tie_weights=True, out_bias=True)
config.update(dps or self.dps)
trn_args = dict(clip=self.clip, alpha=self.rnn_alpha, beta=self.rnn_beta)
trn_args.update(kwargs)
print ("Training args: ", trn_args, "dps: ", dps or self.dps)
learn = language_model_learner(data_lm, AWD_LSTM, config=config, model_dir=self.model_dir.relative_to(data_lm.path), pretrained=False, **trn_args)
if self.pretrained_model is not None:
print("Loading pretrained model")
model_path = untar_data(self.pretrained_model, data=False)
fnames = [list(model_path.glob(f'*.{ext}'))[0] for ext in ['pth', 'pkl']]
learn.load_pretrained(*fnames)
learn.freeze()
if self.pretrained_fnames is not None:
print("Loading pretrained model")
fnames = [f'{fn}.{ext}' for fn,ext in zip(self.pretrained_fnames, ['pth', 'pkl'])]
learn.load_pretrained(*fnames)
learn.freeze()
# compared to standard Adam, we set beta_1 to 0.8
learn.opt_fn = partial(optim.Adam, betas=(0.8, 0.99))
learn.callback_fns += [partial(CSVLogger, filename=f"{learn.model_dir}/lm-history"),
# partial(SaveModelCallback, every='improvement', name='lm') disabled due to Memory issues
]
if label_smoothing_eps > 0.0:
learn.loss_func = FlattenedLoss(LabelSmoothingCrossEntropy, eps=label_smoothing_eps)
return learn
def load_train_text(self):
trn_path = self.dataset_path / f'{self.lang}.wiki.train.tokens'
with open(trn_path) as f:
return [line.rstrip('\n') for line in f]
def load_wiki_data(self, bs=70):
self.model_dir.mkdir(exist_ok=True, parents=True)
trn_path = self.dataset_path / f'{self.lang}.wiki.train.tokens'
val_path = self.dataset_path / f'{self.lang}.wiki.valid.tokens'
tst_path = self.dataset_path / f'{self.lang}.wiki.test.tokens'
for path_ in [trn_path, val_path, tst_path]:
assert path_.exists(), f'Error: {path_} does not exist.'
args = self.tokenizer_to_fastai_args(sp_data_func=self.load_train_text, use_moses=False)
data_lm = self.lm_databunch(f"lm{self.bptt if self.bptt != 70 else ''}",
train_df=read_wiki_articles(trn_path),
valid_df=read_wiki_articles(val_path),
classes=None,
bs=bs,
text_cols='texts',
bptt=self.bptt,
**args)
itos, stoi, trn_path = data_lm.vocab.itos, data_lm.vocab.stoi, data_lm.path
print('Size of vocabulary:', len(itos))
print('First 20 words in vocab:', data_lm.vocab.itos[:20])
return data_lm
def lm_databunch(self, name, *args, **kwargs):
return self.databunch(name, bunch_class=TextLMDataBunch, *args, **kwargs)
def databunch(self, name, bunch_class, train_df, valid_df, bs, force=False, **args):
bunch_path = self.cache_dir / name
if force and bunch_path.exist():
print("Forcefully recreating the databunch, removing previously stored data")
for f in bunch_path.glob("*.npy"):
f.unlink()
if bunch_path.isdir():
if name != ".":
bunch_path.rmdir()
else:
bunch_path.unlink()
if (bunch_path / 'itos.pkl').exists():
data = bunch_class.load(self.cache_dir, name, bs=bs)
elif bunch_path.exists():
data = load_data(self.cache_dir, file=name, bs=bs)
else:
print(f"Running tokenization {name}...")
data = bunch_class.from_df(path=self.cache_dir,
train_df=train_df,
valid_df=valid_df,
max_vocab=self.max_vocab,
bs=bs,
**args)
data.save(name)
with open(self.cache_dir/"itos.pkl", 'wb') as f:
pickle.dump(data.vocab.itos, f)
print(f"Data {name}, trn: {len(data.train_ds)}, val: {len(data.valid_ds)}")
return data
@classmethod
def from_lm(cls, dataset_path, base_lm_path, **kwargs) -> 'LMHyperParams':
dataset_path = Path(dataset_path).resolve()
base_lm_path = Path(base_lm_path).resolve()
d = json_load(base_lm_path/'info.json')
d['dataset_path'] = dataset_path
d['base_lm_path'] = base_lm_path
d.pop('bs', None)
d.pop('drop_mult', None)
subword = d.pop('subword', False)
tokenizer = d.pop('tokenizer', None)
if tokenizer is not None:
d['tokenizer'] = Tokenizers(tokenizer)
elif subword:
d['tokenizer'] = Tokenizers.SUBWORD
else:
d['tokenizer'] = Tokenizers.MOSES
d.update(kwargs)
return cls(**d)
@classmethod
def from_json(cls, model_path:Path, **kwargs):
model_path = Path(model_path).resolve()
name = re.search(r"[a-z]+_(.+).m", model_path.name).group(1)
with open(model_path / 'info.json', 'r') as f:
d = json.load(f)
d.update(kwargs)
d['name'] = name
dataset_path = path_strip(model_path, "data", "models").parent
d['dataset_path'] = str(dataset_path)
d['lang'] = infer_lang_from_dataset(dataset_path.name)
return cls(**d)
def infer_lang_from_dataset(name:str):
return name.split("-")[0]
def path_strip(path, from_folder, to_folder):
to_p = [p for p in path.parents if p.name == to_folder][0]
from_p = [p for p in path.parents if p.name == from_folder][0]
return to_p.relative_to(from_p.parent)
def validate_lm(self):
if not self.exp.subword and self.exp.max_vocab is None:
raise NotImplementedError("figure out how to validate and save results")
# only if we use the unpreprocessed version and the full vocabulary
# are the perplexity results comparable to previous work
print(f"Validating model performance with test tokens from: {trn_path}")
tst_tok = read_whitespace_file(trn_path)
tst_ids = np.array([([stoi.get(w, stoi[UNK]) for w in s]) for s in tst_tok])
logloss, perplexity = validate(learn.model, tst_ids, self.exp.bptt)
print('Test logloss:', logloss.item(), 'perplexity:', perplexity.item())
if __name__ == '__main__':
fire.Fire(LMHyperParams)
-109
View File
@@ -1,109 +0,0 @@
from dataclasses import dataclass
from ulmfit.train_clas import LMHyperParams
from fastai.text import TextLMDataBunch, TextClasDataBunch
from fastai.basic_train import LearnerCallback
from fastai.torch_core import PBar, Rank0Tensor
from torch import nn, Tensor
from typing import List, Collection, Any
from pathlib import Path
import pandas as pd
import fire
import random
@dataclass
class ParallelAlignmentCallback(LearnerCallback):
"A `LearnerCallback` that adds parallel alignment between sentences."
data_src:TextClasDataBunch
data_tgt:TextClasDataBunch
alpha:float=0.1
def __post_init__(self):
self.bs = self.data_src.bs
self.loss = nn.CosineEmbeddingLoss(margin=0.5)
self.ones = torch.cat((torch.ones(self.bs), -torch.ones(self.bs)))
def pool(self, x:Tensor, bs:int, is_max:bool):
"Pool the tensor along the seq_len dimension."
f = F.adaptive_max_pool1d if is_max else F.adaptive_avg_pool1d
return f(x.transpose(1,2), (1,)).view(bs,-1)
def get_representation(batch):
last_output = self.learn.model(batch)
output = last_output[1][-1]
bs,sl,_ = output.size()
avgpool = self.pool(output, bs, False)
mxpool = self.pool(output, bs, True)
return torch.cat([output[:,-1], mxpool, avgpool], 1)
def on_train_begin(self, pbar:PBar, metrics_names:Collection[str], **kwargs:Any)->None:
self.counter = 0
def on_backward_begin(self, last_loss:Rank0Tensor, last_input:Tensor, **kwargs):
"Adjust the loss by adding similarity of parallel sentences"
src_rep = self.get_representation(data_src.train_ds[self.counter])
tgt_rep = self.get_representation(data_tgt.train_ds[self.counter])
offset = -random.randrange(1, self.bs)
src_rep = torch.cat((src_rep, src_rep))
tgt_rep = torch.cat((tgt_rep, tgt_rep[range(offset, self.bs + offset)]))
parallel_loss = self.alpha * self.loss(src_rep, tgt_rep, self.y)
self.counter += 1
self.counter %= len(data_src.train_ds)
return last_loss + parallel_loss
@dataclass
class XLingualLMHyperParams(LMHyperParams):
parallel_data_path: str=None
parallel_data_bs: int=32
src_lang: str=None
tgt_lang: str=None
def create_lm_learner(self, data_lm, dps=None, **kwargs):
learner = super().create_lm_learner(data_lm, dps, **kwargs)
if self.parallel_data_path is not None:
src_trn_df = pd.read_csv(self.parallel_data_path / self.src_lang / 'train.csv', header=None)
tgt_trn_df = pd.read_csv(self.parallel_data_path / self.tgt_lang / 'train.csv', header=None)
bs = self.parallel_data_bs
data_src = TextClasDataBunch.from_df(path=self.cache_dir, train_df=src_trn_df, lm_type=self.lm_type, bs=bs)
data_tgt = TextClasDataBunch.from_df(path=self.cache_dir, train_df=tgt_trn_df, lm_type=self.lm_type, bs=bs)
learner.callback_fns = [
partial(ParallelAlignmentCallback, data_src=data_src, data_tgt=data_tgt)
] + learner.callback_fns
def load_wiki_data(self, bs=70):
trn_path = self.dataset_path / f'{self.lang}.wiki.train.tokens'
val_path = self.dataset_path / f'{self.lang}.wiki.valid.tokens'
tst_path = self.dataset_path / f'{self.lang}.wiki.test.tokens'
for path_ in [trn_path, val_path, tst_path]:
assert path_.exists(), f'Error: {path_} does not exist.'
args = self.tokenzier_to_fastai_args(trn_data_loading_func=self.load_train_text, add_moses=False)
try:
data_lm = TextLMDataBunch.load(self.cache_dir, '.', lm_type=self.lm_type, bs=bs)
print("Tokenized data loaded")
except FileNotFoundError:
print("Running tokenization")
data_lm = TextLMDataBunch.from_df(path=self.cache_dir, train_df=read_wiki_articles(trn_path),
valid_df=read_wiki_articles(val_path),
classes=None, lm_type=self.lm_type, max_vocab=self.max_vocab,
bs=bs, text_cols='texts', **args)
data_lm.save('.')
itos, stoi, trn_path = data_lm.vocab.itos, data_lm.vocab.stoi, data_lm.path
print('Size of vocabulary:', len(itos))
print('First 20 words in vocab:', data_lm.vocab.itos[:20])
return data_lm
if __name__ == '__main__':
fire.Fire(XLingualLMHyperParams)
# python -m ulmfit.XLingualLMHyperParams --dataset-path data/wiki/wikitext-103 --bidir=True --qrnn=True --nl=4 --tokenizer=sp --name 'nl4' --bs 120 --cuda-id 0 - train 10 --drop-mult=0 --bs 40
-271
View File
@@ -1,271 +0,0 @@
"""
Train a classifier on top of a language model trained with `pretrain_lm.py`.
Optionally fine-tune LM before.
"""
import fire
from fastai.callbacks import CSVLogger
from fastai.text import *
from fastai_contrib.utils import PAD_TOKEN_ID
from ulmfit.pretrain_lm import LMHyperParams, ENC_BEST
class CLSHyperParams(LMHyperParams):
# dir_path -> data/imdb/
use_test_for_validation=False
bicls_head:str = 'BiPoolingLinearClassifier'
def __post_init__(self, *args, **kwargs):
super().__post_init__(*args, **kwargs)
self.dataset_dir=self.dataset_path
@property
def need_fine_tune_lm(self): return not (self.model_dir/f"enc_best.pth").exists()
def lr_schedule_layered(self, learn, num_cls_epochs):
learn.freeze_to(-1)
learn.fit_one_cycle(1, 2e-2, moms=(0.8, 0.7))
if num_cls_epochs > 1:
learn.freeze_to(-2)
learn.fit_one_cycle(1, slice(1e-2 / (2.6 ** 4), 1e-2), moms=(0.8, 0.7))
learn.freeze_to(-3)
learn.fit_one_cycle(1, slice(5e-3 / (2.6 ** 4), 5e-3), moms=(0.8, 0.7))
learn.unfreeze()
learn.fit_one_cycle(num_cls_epochs, slice(1e-3 / (2.6 ** 4), 1e-3), moms=(0.8, 0.7))
def lr_schedule_2cycle(self, learn, num_cls_epochs):
print("2cycle training schedule")
learn.freeze_to(-1)
learn.fit_one_cycle(1, 2e-2, moms=(0.8, 0.7))
learn.unfreeze()
if num_cls_epochs > 1:
learn.fit_one_cycle(num_cls_epochs -1, slice(1e-2 / (2.6 ** 4), 1e-2), moms=(0.8, 0.7))
def lr_schedule_1cycle(self, learn, num_cls_epochs):
print("Single training schedule")
learn.unfreeze()
learn.fit_one_cycle(num_cls_epochs, slice(1e-2 / (2.6 ** 4), 2e-2), moms=(0.8, 0.7))
def lr_schedule_false_wd(self, learn, num_cls_epochs):
learn.true_wd = False
print("Starting classifier training")
learn.fit_one_cycle(1, 5e-2, moms=(0.8, 0.7), wd=1e-7)
if num_cls_epochs > 1:
learn.freeze_to(-2)
learn.fit_one_cycle(1, slice(5e-2 / (2.6 ** 4), 5e-2), moms=(0.8, 0.7), wd=1e-7)
learn.freeze_to(-3)
learn.fit_one_cycle(1, slice(5e-4 / (2.6 ** 4), 5e-4), moms=(0.8, 0.7), wd=1e-7)
learn.unfreeze()
if num_cls_epochs > 5:
learn.fit_one_cycle(num_cls_epochs-4, slice(1e-2 / (2.6 ** 4), 1e-2), moms=(0.8, 0.7), wd=1e-7)
def train_cls(self, num_lm_epochs, unfreeze=True, num_cls_frozen_epochs=1, bs=40, drop_mul_lm=0.3, drop_mul_cls=0.5,
use_test_for_validation=False, num_cls_epochs=2, limit=None, noise=0.0, cls_max_len=20*70, lr_sched='layered',
label_smoothing_eps=0.0, random_init=False):
assert use_test_for_validation == False, "use_test_for_validation=True is not supported"
self.model_dir.mkdir(exist_ok=True, parents=True)
if not unfreeze:
num_cls_epochs = 1
data_clas, data_lm, data_tst = self.load_cls_data(bs, limit=limit, noise=noise)
if self.need_fine_tune_lm and not random_init:
if not (self.model_dir/(ENC_BEST+".pth")).exists():
self.train_lm(num_lm_epochs, data_lm=data_lm, drop_mult=drop_mul_lm, label_smoothing_eps=label_smoothing_eps)
else:
print("Language model already exist, skipping finetuning")
learn = self.create_cls_learner(data_clas, drop_mult=drop_mul_cls, max_len=cls_max_len,
label_smoothing_eps=label_smoothing_eps, random_init=random_init)
if not random_init:
try:
learn.load('cls_best')
print("Loading last classifier")
except FileNotFoundError:
learn.load_encoder(ENC_BEST)
else:
print("Starting classifier from random weights")
if hasattr(self, 'lr_schedule_'+lr_sched):
learn.true_wd = True
getattr(self, 'lr_schedule_'+lr_sched)(learn, num_cls_epochs)
else:
raise ValueError(f"Wrong lr_sched: {lr_sched}")
print(f"Saving models at {learn.path / learn.model_dir}")
learn.save('cls_last', with_opt=False)
learn.save('cls_best', with_opt=False) # we don't use early stopping for the time being
del learn
return self.validate_cls('cls_best', bs=bs, data_cls=data_clas, data_tst=data_tst, learn=None)
def validate_cls(self, save_name='cls_best', bs=40, data_cls=None, data_tst=None, learn=None, label_smoothing_eps=0.0):
if data_tst is None:
data_cls, _, data_tst = self.load_cls_data(bs)
if learn is None:
learn = self.create_cls_learner(data_tst, drop_mult=0.3, label_smoothing_eps=label_smoothing_eps)
learn.unfreeze()
learn.load(save_name)
f1 = FBeta(beta=1, average='binary')
f1.on_train_begin()
learn.metrics += [f1]
val_res=[-1, -1]
if data_cls:
val_res = learn.validate(data_cls.valid_dl)
tst_res = learn.validate(data_tst.valid_dl)
print(f"Loss and accuracy using ({save_name}):", tst_res, val_res)
results = {'val_loss': val_res[0], 'val_accuracy': float(val_res[1]), 'tst_loss':tst_res[0], 'tst_accuracy': float(tst_res[1]) }
return results
def generate_pseudo_labels(self, dest_folder, save_name='cls_best', bs=40, data_cls=None, learn=None, label_smoothing_eps=0.0):
if data_cls is None:
data_cls, _, _ = self.load_cls_data(bs)
if learn is None:
learn = self.create_cls_learner(data_cls, drop_mult=0.3, label_smoothing_eps=label_smoothing_eps)
learn.unfreeze()
learn.load(save_name)
def make_data_set(ds_type, name):
probs, lbls = learn.get_preds(ds_type=ds_type, ordered=True)
preds = torch.argmax(probs, 1)
preds = to_np(preds)
fn = self.dataset_path / f"{self.lang}.{name}.csv"
if fn.exists():
df = pd.read_csv(fn, header=None)
df = df.iloc[(len(df) - len(preds)):] # account for the training files where first 10% elements were taken as validation
else:
df = pd.read_csv(self.dataset_path / f"{self.lang}.dev.csv", header=None)
df = df.iloc[:len(preds)] # if using training only get first n for validatation
accuracy = (df[0] == preds).sum() / len(preds)
print(f"Generating {name} dataset of size {len(preds)}, the accuracy is {accuracy}")
df['preds'] = preds
print(df.head())
del df['preds']
assert accuracy > 0.7, f"Accuracy is smaller than 0.7 {accuracy}"
df[0] = preds
dest_folder.mkdir(parents=True, exist_ok=True)
df.to_csv(dest_folder / f"{self.lang}.{name}.csv", index=None, header=None)
make_data_set(DatasetType.Train, "train")
make_data_set(DatasetType.Valid, "dev")
shutil.copy(self.dataset_path / f"{self.lang}.test.csv", dest_folder)
shutil.copy(self.dataset_path / f"{self.lang}.unsup.csv", dest_folder)
def create_cls_learner(self, data_clas, dps=None, label_smoothing_eps=0.0, random_init=False, **kwargs):
assert self.bidir == False, "bidirectional model is not yet supported"
config = dict(emb_sz=self.emb_sz, n_hid=self.nh, n_layers=self.nl, pad_token=PAD_TOKEN_ID, qrnn=self.qrnn)
config.update(dps or self.dps)
trn_args=dict(bptt=self.bptt, clip=self.clip)
trn_args.update(kwargs)
learn = text_classifier_learner(data_clas, AWD_LSTM, config=config,
pretrained=False, path=self.model_dir.parent, model_dir=self.model_dir.name, **trn_args)
if self.pretrained_model is not None and not random_init:
print("Loading pretrained model", self.pretrained_model)
model_path = untar_data(self.pretrained_model, data=False)
fnames = [list(model_path.glob(f'*.{ext}'))[0] for ext in ['pth', 'pkl']]
learn.load_pretrained(*fnames, strict=False)
learn.freeze()
learn.callback_fns += [partial(CSVLogger, filename=f"{learn.model_dir}/cls-history"),
#partial(SaveModelCallback, every='improvement', name='cls_best') disabled due to memory issues
]
if label_smoothing_eps > 0.0:
learn.loss_func = FlattenedLoss(LabelSmoothingCrossEntropy, eps=label_smoothing_eps)
return learn
def load_cls_data(self, bs, **kwargs):
self.model_dir.mkdir(exist_ok=True, parents=True)
add_trn_to_lm = True
lang = self.lang
use_moses = True
if 'xnli' in str(self.dataset_dir):
NotImplementedError("Support for Xnli is not implemented yet")
if 'imdb' in self.dataset_dir.name:
lang=''
add_trn_to_lm = True
if 'mldoc' in str(self.dataset_dir):
add_trn_to_lm = False # False as trn_df is contained in unsup already
lang = self.lang
data = self.load_data(lang=lang,
add_trn_to_lm=add_trn_to_lm,
use_moses=use_moses,
**kwargs)
return self.databunches(bs, **data)
def load_data(self, lang='', **kwargs):
prefix = '' if lang == '' else lang+'.'
trn_df = pd.read_csv(self.dataset_path / f'{prefix}train.csv', header=None)
tst_df = pd.read_csv(self.dataset_path / f'{prefix}test.csv', header=None)
val_fn = self.dataset_path / f'{prefix}dev.csv'
if val_fn.exists():
print("Loading validation", val_fn)
val_df = pd.read_csv(val_fn, header=None)
else:
val_df = None
unsup_fn = self.dataset_path / f'{prefix}unsup.csv'
unsup_df = pd.read_csv(unsup_fn, header=None) if unsup_fn.exists() else trn_df[:0]
if val_df is None:
print("Validation set not found using 10% of trn")
val_len = max(int(len(trn_df) * 0.1), 2)
trn_len = len(trn_df) - val_len
trn_df, val_df = trn_df[:trn_len], trn_df[trn_len:]
kwargs.update(dict(trn_df=trn_df, val_df=val_df, tst_df=tst_df, unsup_df=unsup_df))
return kwargs
def add_noise(self, trn_df, noise):
count = len(trn_df)
labels = trn_df[0].unique()
assert np.issubdtype(labels.dtype, np.integer), "noise only works on numerical numbers"
modulo = labels.max() + 1
idx_to_distrub = np.random.permutation(count)[:int(count * noise)]
trn_df.loc[idx_to_distrub, [0]] = (np.random.randint(1, modulo - 1, size=len(idx_to_distrub)) +
trn_df.loc[idx_to_distrub][0]) % modulo
print(f"Added noise to {len(idx_to_distrub)} examples, only {(count - len(idx_to_distrub)) / count} have correct labels")
return trn_df
def databunches(self, bs, trn_df, val_df, tst_df, unsup_df, add_trn_to_lm=True, use_moses=False, force=False, limit=None, noise=0.0):
lm_trn_df = pd.concat([unsup_df, val_df, tst_df] + ([trn_df] if add_trn_to_lm else []))
val_len = max(int(len(lm_trn_df) * 0.1), 2)
lm_trn_df = lm_trn_df[val_len:]
lm_val_df = lm_trn_df[:val_len]
cls_name="cls"
if limit is not None:
print("Limiting data set to:", limit)
trn_df = trn_df[:limit]
val_df = val_df[:limit]
cls_name=f'{cls_name}limit{limit}'
if noise > 0.0:
trn_df = self.add_noise(trn_df, noise)
val_df = self.add_noise(val_df, noise)
cls_name = f'{cls_name}noise{noise}tv'
args = self.tokenizer_to_fastai_args(sp_data_func=lambda: trn_df[1], use_moses=use_moses)
args['text_cols'] = list(trn_df.columns.values)[1:]
args['mark_fields'] = True
lm_suffix = self.bptt if self.bptt != 70 else ""
data_lm = self.lm_databunch(f'lm{lm_suffix}', train_df=lm_trn_df, valid_df=lm_val_df, bs=bs, force=force, bptt=self.bptt, **args)
args['vocab'] = data_lm.vocab
data_cls = self.cls_databunch(cls_name, train_df=trn_df, valid_df=val_df, bs=bs, force=force, **args)
data_tst = self.cls_databunch('tst', train_df=val_df, valid_df=tst_df, bs=bs, force=force, **args) # Hack to load test dataset with labels
print('Size of vocabulary:', len(data_lm.vocab.itos))
print('First 20 words in vocab:', data_lm.vocab.itos[:20])
return data_cls, data_lm, data_tst
def cls_databunch(self, name, *args, **kwargs):
return self.databunch(name, bunch_class=TextClasDataBunch, *args, **kwargs)
if __name__ == '__main__':
fire.Fire(CLSHyperParams)
##
-73
View File
@@ -1,73 +0,0 @@
from dataclasses import dataclass
from ulmfit.train_clas import CLSHyperParams
from fastai.text import TextLMDataBunch, TextClasDataBunch
from typing import List
from pathlib import Path
import pandas as pd
import fire
@dataclass
class XLingualCLSHyperParams(CLSHyperParams):
csv_name: str='train.csv'
target_paths: List[str]=None
parallel_data_path: str=None
def __post_init__(self, *args, **kwargs):
super().__post_init__(*args, **kwargs)
self.target_paths = [] if self.target_paths is None else self.target_paths
def load_cls_data(self, bs, force=False, use_test_for_validation=False, **kwargs):
args = self.tokenzier_to_fastai_args(trn_data_loading_func=lambda: trn_df[1], add_moses=True)
src_path = self.dataset_path
csv_name = self.csv_name
tgt_paths = [Path(tgt_path) for tgt_path in self.target_paths]
mixed_csv = pd.read_csv(src_path / csv_name, header=None)
for tgt_path in tgt_paths:
mixed_csv = pd.concat([mixed_csv, pd.read_csv(tgt_path / csv_name, header=None)])
xcvs_name = ('x_' + csv_name)
mixed_csv.to_csv(src_path / xcvs_name, header=None, index=False)
try:
if force: raise FileNotFoundError("Forcing reloading of caches")
data_lm = TextLMDataBunch.load(src_path, 'xlm', lm_type=self.lm_type, bs=bs)
print(f"Tokenized data loaded, xlm.trn {len(data_lm.train_ds)}, xlm.val {len(data_lm.valid_ds)}")
except FileNotFoundError:
print(f"Running tokenization...")
data_lm = TextLMDataBunch.from_csv(path=src_path, csv_name=xcvs_name, bs=bs, lm_type=self.lm_type, **kwargs, **args)
print(f"Saving tokenized: cls.trn {len(data_lm.train_ds)}, cls.val {len(data_lm.valid_ds)}")
data_lm.save('xlm')
try:
if force: raise FileNotFoundError("Forcing reloading of caches")
data_cls = TextClasDataBunch.load(src_path, 'cls', bs=bs)
print(f"Tokenized data loaded, cls.trn {len(data_cls.train_ds)}, cls.val {len(data_cls.valid_ds)}")
except FileNotFoundError:
args['vocab'] = data_lm.vocab # make sure we use the same vocab for classifcation
print(f"Running tokenization...")
data_cls = TextClasDataBunch.from_csv(path=src_path, csv_name=csv_name, bs=bs, **kwargs, **args)
print(f"Saving tokenized: cls.trn {len(data_cls.train_ds)}, cls.val {len(data_cls.valid_ds)}")
data_cls.save('cls')
print('Size of vocabulary:', len(data_lm.vocab.itos))
print('First 20 words in vocab:', data_lm.vocab.itos[:20])
return data_cls, data_lm
def validate_cls(self, save_name='cls_last', bs=40):
args = self.tokenzier_to_fastai_args(trn_data_loading_func=lambda: trn_df[1], add_moses=True)
data_clas, data_lm = self.load_cls_data(bs, use_test_for_validation=True)
data_eval = [
TextClasDataBunch.from_csv(path=Path(tgt_path), csv_name=self.csv_name, **args)
for tgt_path in self.target_paths
]
for data in [data_clas] + data_eval:
learn = self.create_cls_learner(data, drop_mult=0.1)
learn.load(save_name)
print(f"Loss and accuracy using ({save_name}) for dataset at {data.path}:", learn.validate())
if __name__ == '__main__':
fire.Fire(XLingualCLSHyperParams)