Views
No views yet
| Dataset \ Run | Run 1 | Run 2 | Run 3† | Run 4 | Run 5 | Avg. |
|---|---|---|---|---|---|---|
| Development | 87.05 | 86.52 | 87.34 | 86.85 | 86.46 | 86.84 |
| Test | 85.43 | 85.88 | 85.72 | 85.47 | 85.62 | 85.62 |
1from argparse import ArgumentParser
2import torch, flair
3
4# dataset, model and embedding imports
5from flair.datasets import GERMEVAL_14
6from flair.embeddings import TransformerWordEmbeddings
7from flair.models import SequenceTagger
8from flair.trainers import ModelTrainer
9
10if __name__ == "__main__":
11
12 # All arguments that can be passed
13 parser = ArgumentParser()
14 parser.add_argument("-s", "--seeds", nargs='+', type=int, default='42') # pass list of seeds for experiments
15 parser.add_argument("-c", "--cuda", type=int, default=0, help="CUDA device") # which cuda device to use
16 parser.add_argument("-m", "--model", type=str, help="Model name (such as Hugging Face model hub name")
17
18 # Parse experimental arguments
19 args = parser.parse_args()
20
21 # use cuda device as passed
22 flair.device = f'cuda:{str(args.cuda)}'
23
24 # for each passed seed, do one experimental run
25 for seed in args.seeds:
26 flair.set_seed(seed)
27
28 # model
29 hf_model = args.model
30
31 # initialize embeddings
32 embeddings = TransformerWordEmbeddings(
33 model=hf_model,
34 layers="-1",
35 subtoken_pooling="first",
36 fine_tune=True,
37 use_context=False,
38 respect_document_boundaries=False,
39 )
40
41 # select dataset depending on which language variable is passed
42 corpus = GERMEVAL_14()
43
44 # make the dictionary of tags to predict
45 tag_dictionary = corpus.make_tag_dictionary('ner')
46
47 # init bare-bones sequence tagger (no reprojection, LSTM or CRF)
48 tagger: SequenceTagger = SequenceTagger(
49 hidden_size=256,
50 embeddings=embeddings,
51 tag_dictionary=tag_dictionary,
52 tag_type='ner',
53 use_crf=False,
54 use_rnn=False,
55 reproject_embeddings=False,
56 )
57
58 # init the model trainer
59 trainer = ModelTrainer(tagger, corpus, optimizer=torch.optim.AdamW)
60
61 # make string for output folder
62 output_folder = f"flert-ner-{hf_model}-{seed}"
63
64 # train with XLM parameters (AdamW, 20 epochs, small LR)
65 from torch.optim.lr_scheduler import OneCycleLR
66
67 trainer.train(
68 output_folder,
69 learning_rate=5.0e-5,
70 mini_batch_size=16,
71 mini_batch_chunk_size=1,
72 max_epochs=10,
73 scheduler=OneCycleLR,
74 embeddings_storage_mode='none',
75 weight_decay=0.,
76 train_with_dev=False,
77 )