harsh13333 commited on
Commit
1dd3a6e
1 Parent(s): 0685055

Upload 8 files

Browse files
Files changed (8) hide show
  1. .gitattributes +0 -3
  2. .gitignore +1 -0
  3. README.md +166 -1
  4. handler.py +46 -0
  5. loss.tsv +121 -0
  6. model.bin +3 -0
  7. requirements.txt +1 -0
  8. training.log +0 -0
.gitattributes CHANGED
@@ -2,7 +2,6 @@
2
  *.arrow filter=lfs diff=lfs merge=lfs -text
3
  *.bin filter=lfs diff=lfs merge=lfs -text
4
  *.bz2 filter=lfs diff=lfs merge=lfs -text
5
- *.ckpt filter=lfs diff=lfs merge=lfs -text
6
  *.ftz filter=lfs diff=lfs merge=lfs -text
7
  *.gz filter=lfs diff=lfs merge=lfs -text
8
  *.h5 filter=lfs diff=lfs merge=lfs -text
@@ -22,10 +21,8 @@
22
  *.pt filter=lfs diff=lfs merge=lfs -text
23
  *.pth filter=lfs diff=lfs merge=lfs -text
24
  *.rar filter=lfs diff=lfs merge=lfs -text
25
- *.safetensors filter=lfs diff=lfs merge=lfs -text
26
  saved_model/**/* filter=lfs diff=lfs merge=lfs -text
27
  *.tar.* filter=lfs diff=lfs merge=lfs -text
28
- *.tar filter=lfs diff=lfs merge=lfs -text
29
  *.tflite filter=lfs diff=lfs merge=lfs -text
30
  *.tgz filter=lfs diff=lfs merge=lfs -text
31
  *.wasm filter=lfs diff=lfs merge=lfs -text
 
2
  *.arrow filter=lfs diff=lfs merge=lfs -text
3
  *.bin filter=lfs diff=lfs merge=lfs -text
4
  *.bz2 filter=lfs diff=lfs merge=lfs -text
 
5
  *.ftz filter=lfs diff=lfs merge=lfs -text
6
  *.gz filter=lfs diff=lfs merge=lfs -text
7
  *.h5 filter=lfs diff=lfs merge=lfs -text
 
21
  *.pt filter=lfs diff=lfs merge=lfs -text
22
  *.pth filter=lfs diff=lfs merge=lfs -text
23
  *.rar filter=lfs diff=lfs merge=lfs -text
 
24
  saved_model/**/* filter=lfs diff=lfs merge=lfs -text
25
  *.tar.* filter=lfs diff=lfs merge=lfs -text
 
26
  *.tflite filter=lfs diff=lfs merge=lfs -text
27
  *.tgz filter=lfs diff=lfs merge=lfs -text
28
  *.wasm filter=lfs diff=lfs merge=lfs -text
.gitignore ADDED
@@ -0,0 +1 @@
 
 
1
+ .venv
README.md CHANGED
@@ -1,3 +1,168 @@
1
  ---
2
- license: afl-3.0
 
 
 
 
 
 
 
 
 
3
  ---
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  ---
2
+ tags:
3
+ - flair
4
+ - token-classification
5
+ - sequence-tagger-model
6
+ - endpoints-template
7
+ language: en
8
+ datasets:
9
+ - shipping_label_ner
10
+ widget:
11
+ - text: "On September 1st George won 1 dollar while watching Game of Thrones."
12
  ---
13
+
14
+ # Fork of [flair/ner-english-shipping-labels](https://huggingface.co/flair/ner-english-ontonotes-large)
15
+
16
+ > This is fork of [flair/ner-english-ontonotes-large](https://huggingface.co/flair/ner-english-ontonotes-large) implementing a custom `handler.py` as an example for how to use `flair` models with [inference-endpoints](https://hf.co/inference-endpoints)
17
+
18
+ ## English NER in Flair (Ontonotes large model)
19
+
20
+ This is the large 5-class NER model for English that ships with [Flair](https://github.com/flairNLP/flair/).
21
+
22
+ F1-Score: **77.78** (Ontonotes)
23
+
24
+ Predicts 6 tags:
25
+
26
+ | **tag** | **meaning** |
27
+ |---------------------------------|-----------|
28
+ | NAME | Name of person |
29
+ | ORG | organizaiton name |
30
+ | GCNUMBER | GC tracking number|
31
+ | BGNUMBER | BG tracking number |
32
+ | COUNTRY | Country name |
33
+ | LOCATION | city and picode |
34
+
35
+ Based on document-level XLM-R embeddings and [FLERT](https://arxiv.org/pdf/2011.06993v1.pdf/).
36
+
37
+ ---
38
+
39
+ ### Demo: How to use in Flair
40
+
41
+ Requires: **[Flair](https://github.com/flairNLP/flair/)** (`pip install flair`)
42
+
43
+ ```python
44
+ from flair.data import Sentence
45
+ from flair.models import SequenceTagger
46
+
47
+ # load tagger
48
+ tagger = SequenceTagger.load("flair/ner-english-ontonotes-large")
49
+
50
+ # make example sentence
51
+ sentence = Sentence("On September 1st George won 1 dollar while watching Game of Thrones.")
52
+
53
+ # predict NER tags
54
+ tagger.predict(sentence)
55
+
56
+ # print sentence
57
+ print(sentence)
58
+
59
+ # print predicted NER spans
60
+ print('The following NER tags are found:')
61
+ # iterate over entities and print
62
+ for entity in sentence.get_spans('ner'):
63
+ print(entity)
64
+
65
+ ```
66
+
67
+ This yields the following output:
68
+ ```
69
+ Span [2,3]: "September 1st" [− Labels: DATE (1.0)]
70
+ Span [4]: "George" [− Labels: PERSON (1.0)]
71
+ Span [6,7]: "1 dollar" [− Labels: MONEY (1.0)]
72
+ Span [10,11,12]: "Game of Thrones" [− Labels: WORK_OF_ART (1.0)]
73
+ ```
74
+
75
+ So, the entities "*September 1st*" (labeled as a **date**), "*George*" (labeled as a **person**), "*1 dollar*" (labeled as a **money**) and "Game of Thrones" (labeled as a **work of art**) are found in the sentence "*On September 1st George Washington won 1 dollar while watching Game of Thrones*".
76
+
77
+
78
+ ---
79
+
80
+ ### Training: Script to train this model
81
+
82
+ The following Flair script was used to train this model:
83
+
84
+ ```python
85
+ from flair.data import Corpus
86
+ from flair.datasets import ColumnCorpus
87
+ from flair.embeddings import WordEmbeddings, StackedEmbeddings, FlairEmbeddings
88
+
89
+ # 1. load the corpus (Ontonotes does not ship with Flair, you need to download and reformat into a column format yourself)
90
+ corpus: Corpus = ColumnCorpus(
91
+ "resources/tasks/onto-ner",
92
+ column_format={0: "text", 1: "pos", 2: "upos", 3: "ner"},
93
+ tag_to_bioes="ner",
94
+ )
95
+
96
+ # 2. what tag do we want to predict?
97
+ tag_type = 'ner'
98
+
99
+ # 3. make the tag dictionary from the corpus
100
+ tag_dictionary = corpus.make_tag_dictionary(tag_type=tag_type)
101
+
102
+ # 4. initialize fine-tuneable transformer embeddings WITH document context
103
+ from flair.embeddings import TransformerWordEmbeddings
104
+
105
+ embeddings = TransformerWordEmbeddings(
106
+ model='xlm-roberta-large',
107
+ layers="-1",
108
+ subtoken_pooling="first",
109
+ fine_tune=True,
110
+ use_context=True,
111
+ )
112
+
113
+ # 5. initialize bare-bones sequence tagger (no CRF, no RNN, no reprojection)
114
+ from flair.models import SequenceTagger
115
+
116
+ tagger = SequenceTagger(
117
+ hidden_size=256,
118
+ embeddings=embeddings,
119
+ tag_dictionary=tag_dictionary,
120
+ tag_type='ner',
121
+ use_crf=False,
122
+ use_rnn=False,
123
+ reproject_embeddings=False,
124
+ )
125
+
126
+ # 6. initialize trainer with AdamW optimizer
127
+ from flair.trainers import ModelTrainer
128
+
129
+ trainer = ModelTrainer(tagger, corpus, optimizer=torch.optim.AdamW)
130
+
131
+ # 7. run training with XLM parameters (20 epochs, small LR)
132
+ from torch.optim.lr_scheduler import OneCycleLR
133
+
134
+ trainer.train('resources/taggers/ner-english-ontonotes-large',
135
+ learning_rate=5.0e-6,
136
+ mini_batch_size=4,
137
+ mini_batch_chunk_size=1,
138
+ max_epochs=20,
139
+ scheduler=OneCycleLR,
140
+ embeddings_storage_mode='none',
141
+ weight_decay=0.,
142
+ )
143
+ ```
144
+
145
+
146
+
147
+ ---
148
+
149
+ ### Cite
150
+
151
+ Please cite the following paper when using this model.
152
+
153
+ ```
154
+ @misc{schweter2020flert,
155
+ title={FLERT: Document-Level Features for Named Entity Recognition},
156
+ author={Stefan Schweter and Alan Akbik},
157
+ year={2020},
158
+ eprint={2011.06993},
159
+ archivePrefix={arXiv},
160
+ primaryClass={cs.CL}
161
+ }
162
+ ```
163
+
164
+ ---
165
+
166
+ ### Issues?
167
+
168
+ The Flair issue tracker is available [here](https://github.com/flairNLP/flair/issues/).
handler.py ADDED
@@ -0,0 +1,46 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from typing import Any, Dict, List
2
+ import os
3
+ from flair.data import Sentence
4
+ from flair.models import SequenceTagger
5
+
6
+ class EndpointHandler():
7
+ def __init__(
8
+ self,
9
+ path: str,
10
+ ):
11
+ self.tagger = SequenceTagger.load(os.path.join(path,"model.bin"))
12
+
13
+ def __call__(self, data: Dict[str, Any]) -> List[Dict[str, Any]]:
14
+ """
15
+ Args:
16
+ inputs (:obj:`str`):
17
+ a string containing some text
18
+ Return:
19
+ A :obj:`list`:. The object returned should be like [{"entity_group": "XXX", "word": "some word", "start": 3, "end": 6, "score": 0.82}] containing :
20
+ - "entity_group": A string representing what the entity is.
21
+ - "word": A substring of the original string that was detected as an entity.
22
+ - "start": the offset within `input` leading to `answer`. context[start:stop] == word
23
+ - "end": the ending offset within `input` leading to `answer`. context[start:stop] === word
24
+ - "score": A score between 0 and 1 describing how confident the model is for this entity.
25
+ """
26
+ inputs = data.pop("inputs", data)
27
+ sentence: Sentence = Sentence(inputs)
28
+
29
+ # Also show scores for recognized NEs
30
+ self.tagger.predict(sentence, label_name="predicted")
31
+
32
+ entities = []
33
+ for span in sentence.get_spans("predicted"):
34
+ if len(span.tokens) == 0:
35
+ continue
36
+ current_entity = {
37
+ "entity_group": span.tag,
38
+ "word": span.text,
39
+ "start": span.tokens[0].start_position,
40
+ "end": span.tokens[-1].end_position,
41
+ "score": span.score,
42
+ }
43
+
44
+ entities.append(current_entity)
45
+
46
+ return entities
loss.tsv ADDED
@@ -0,0 +1,121 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ EPOCH TIMESTAMP LEARNING_RATE TRAIN_LOSS
2
+ 1 08:17:20 0.1000 3.6498
3
+ 2 08:17:20 0.1000 2.6736
4
+ 3 08:17:20 0.1000 2.5362
5
+ 4 08:17:20 0.1000 2.2586
6
+ 5 08:17:20 0.1000 2.3726
7
+ 6 08:17:20 0.1000 2.1890
8
+ 7 08:17:21 0.1000 2.1492
9
+ 8 08:17:21 0.1000 2.0981
10
+ 9 08:17:21 0.1000 1.9099
11
+ 10 08:17:21 0.1000 1.7786
12
+ 11 08:17:21 0.1000 1.5913
13
+ 12 08:17:21 0.1000 1.5533
14
+ 13 08:17:22 0.1000 1.5620
15
+ 14 08:17:22 0.1000 1.5314
16
+ 15 08:17:22 0.1000 1.3500
17
+ 16 08:17:22 0.1000 1.3900
18
+ 17 08:17:23 0.1000 1.3232
19
+ 18 08:17:23 0.1000 1.1288
20
+ 19 08:17:23 0.1000 1.1317
21
+ 20 08:17:23 0.1000 1.0139
22
+ 21 08:17:23 0.1000 0.9761
23
+ 22 08:17:23 0.1000 1.2072
24
+ 23 08:17:23 0.1000 0.9009
25
+ 24 08:17:24 0.1000 0.8894
26
+ 25 08:17:24 0.1000 0.9252
27
+ 26 08:17:24 0.1000 0.9054
28
+ 27 08:17:24 0.1000 0.7883
29
+ 28 08:17:24 0.1000 0.8084
30
+ 29 08:17:24 0.1000 0.7761
31
+ 30 08:17:24 0.1000 0.7852
32
+ 31 08:17:25 0.1000 0.7688
33
+ 32 08:17:25 0.1000 0.7836
34
+ 33 08:17:25 0.1000 0.7338
35
+ 34 08:17:25 0.1000 0.6533
36
+ 35 08:17:25 0.1000 0.6309
37
+ 36 08:17:25 0.1000 0.6480
38
+ 37 08:17:25 0.1000 0.5591
39
+ 38 08:17:26 0.1000 0.5507
40
+ 39 08:17:26 0.1000 0.6041
41
+ 40 08:17:26 0.1000 0.6510
42
+ 41 08:17:26 0.1000 0.5804
43
+ 42 08:17:26 0.1000 0.5140
44
+ 43 08:17:26 0.1000 0.4635
45
+ 44 08:17:26 0.1000 0.4680
46
+ 45 08:17:27 0.1000 0.6061
47
+ 46 08:17:27 0.1000 0.5622
48
+ 47 08:17:27 0.1000 0.4827
49
+ 48 08:17:27 0.0500 0.3977
50
+ 49 08:17:27 0.0500 0.4279
51
+ 50 08:17:27 0.0500 0.3961
52
+ 51 08:17:27 0.0500 0.3775
53
+ 52 08:17:28 0.0500 0.3889
54
+ 53 08:17:28 0.0500 0.3675
55
+ 54 08:17:28 0.0500 0.3871
56
+ 55 08:17:28 0.0500 0.3514
57
+ 56 08:17:28 0.0500 0.3670
58
+ 57 08:17:28 0.0500 0.3303
59
+ 58 08:17:29 0.0500 0.3669
60
+ 59 08:17:29 0.0500 0.3577
61
+ 60 08:17:29 0.0500 0.3258
62
+ 61 08:17:29 0.0500 0.3332
63
+ 62 08:17:29 0.0500 0.3685
64
+ 63 08:17:29 0.0500 0.3106
65
+ 64 08:17:30 0.0500 0.2856
66
+ 65 08:17:30 0.0500 0.2952
67
+ 66 08:17:30 0.0500 0.2865
68
+ 67 08:17:30 0.0500 0.2844
69
+ 68 08:17:30 0.0500 0.2515
70
+ 69 08:17:31 0.0500 0.3155
71
+ 70 08:17:31 0.0500 0.2477
72
+ 71 08:17:31 0.0500 0.3029
73
+ 72 08:17:31 0.0500 0.2660
74
+ 73 08:17:31 0.0500 0.3264
75
+ 74 08:17:31 0.0500 0.2799
76
+ 75 08:17:32 0.0250 0.2766
77
+ 76 08:17:32 0.0250 0.2247
78
+ 77 08:17:32 0.0250 0.2453
79
+ 78 08:17:32 0.0250 0.2271
80
+ 79 08:17:32 0.0250 0.2329
81
+ 80 08:17:32 0.0250 0.2389
82
+ 81 08:17:33 0.0125 0.2508
83
+ 82 08:17:33 0.0125 0.2192
84
+ 83 08:17:33 0.0125 0.2158
85
+ 84 08:17:33 0.0125 0.2222
86
+ 85 08:17:33 0.0125 0.2167
87
+ 86 08:17:33 0.0125 0.2078
88
+ 87 08:17:33 0.0125 0.2183
89
+ 88 08:17:34 0.0125 0.2368
90
+ 89 08:17:34 0.0125 0.1910
91
+ 90 08:17:34 0.0125 0.1775
92
+ 91 08:17:34 0.0125 0.2070
93
+ 92 08:17:34 0.0125 0.1957
94
+ 93 08:17:34 0.0125 0.2066
95
+ 94 08:17:34 0.0125 0.1958
96
+ 95 08:17:35 0.0063 0.1911
97
+ 96 08:17:35 0.0063 0.1824
98
+ 97 08:17:35 0.0063 0.1891
99
+ 98 08:17:35 0.0063 0.2174
100
+ 99 08:17:35 0.0031 0.2056
101
+ 100 08:17:35 0.0031 0.1873
102
+ 101 08:17:36 0.0031 0.1985
103
+ 102 08:17:36 0.0031 0.1865
104
+ 103 08:17:36 0.0016 0.1874
105
+ 104 08:17:36 0.0016 0.2153
106
+ 105 08:17:36 0.0016 0.2044
107
+ 106 08:17:36 0.0016 0.1859
108
+ 107 08:17:36 0.0008 0.2098
109
+ 108 08:17:37 0.0008 0.2072
110
+ 109 08:17:37 0.0008 0.1640
111
+ 110 08:17:37 0.0008 0.2128
112
+ 111 08:17:37 0.0008 0.1954
113
+ 112 08:17:37 0.0008 0.1887
114
+ 113 08:17:37 0.0008 0.1824
115
+ 114 08:17:37 0.0004 0.2271
116
+ 115 08:17:38 0.0004 0.1896
117
+ 116 08:17:38 0.0004 0.1872
118
+ 117 08:17:38 0.0004 0.2119
119
+ 118 08:17:38 0.0002 0.2057
120
+ 119 08:17:38 0.0002 0.1747
121
+ 120 08:17:38 0.0002 0.1977
model.bin ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:c71dfca8fc533690b01b75ddf3613d10b2f64511f97b57d29ef98124023f79f3
3
+ size 408136407
requirements.txt ADDED
@@ -0,0 +1 @@
 
 
1
+ flair==0.13.1
training.log ADDED
The diff for this file is too large to render. See raw diff