diff --git a/ulmfit/train_xlingual_clas.py b/ulmfit/train_xlingual_clas.py index f383411..6d94ddf 100644 --- a/ulmfit/train_xlingual_clas.py +++ b/ulmfit/train_xlingual_clas.py @@ -19,7 +19,7 @@ class XLingualCLSHyperParams(CLSHyperParams): 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): + def get_tokenizer_args(self): if self.tokenizer is Tokenizers.SUBWORD: args = get_sentencepiece(self.base_lm_path.parent, self.base_lm_path.parent / 'train.csv', self.name, vocab_size=self.max_vocab, pre_rules=[], post_rules=[]) @@ -33,6 +33,10 @@ class XLingualCLSHyperParams(CLSHyperParams): raise ValueError( f"self.tokenizer has wrong value {self.tokenizer}, Allowed values are taken from {Tokenizers}") + return args + + def load_cls_data(self, bs, force=False, use_test_for_validation=False, **kwargs): + args = self.get_tokenizer_args() src_path = self.dataset_path csv_name = self.csv_name tgt_paths = [Path(tgt_path) for tgt_path in self.target_paths] @@ -42,11 +46,6 @@ class XLingualCLSHyperParams(CLSHyperParams): xcvs_name = ('x_' + csv_name) mixed_csv.to_csv(src_path / xcvs_name, header=None, index=False) - - data_eval = [ - TextClasDataBunch.from_csv(path=tgt_path, csv_name=csv_name, **kwargs) - for tgt_path in tgt_paths - ] try: if force: raise FileNotFoundError("Forcing reloading of caches") @@ -72,7 +71,20 @@ class XLingualCLSHyperParams(CLSHyperParams): 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_eval + return data_cls, data_lm + + def validate_cls(self, save_name='cls_last', bs=40): + args = self.get_tokenizer_args() + data_clas, data_lm = self.load_cls_data_full(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__':