niobures commited on
Commit
a449186
·
verified ·
1 Parent(s): c417f9c

MiniLMv2-goemotions-v2-onnx

Browse files
MiniLMv2-goemotions-v2-onnx/.gitattributes ADDED
@@ -0,0 +1,35 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ *.7z 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
+ *.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
9
+ *.joblib filter=lfs diff=lfs merge=lfs -text
10
+ *.lfs.* filter=lfs diff=lfs merge=lfs -text
11
+ *.mlmodel filter=lfs diff=lfs merge=lfs -text
12
+ *.model filter=lfs diff=lfs merge=lfs -text
13
+ *.msgpack filter=lfs diff=lfs merge=lfs -text
14
+ *.npy filter=lfs diff=lfs merge=lfs -text
15
+ *.npz filter=lfs diff=lfs merge=lfs -text
16
+ *.onnx filter=lfs diff=lfs merge=lfs -text
17
+ *.ot filter=lfs diff=lfs merge=lfs -text
18
+ *.parquet filter=lfs diff=lfs merge=lfs -text
19
+ *.pb filter=lfs diff=lfs merge=lfs -text
20
+ *.pickle filter=lfs diff=lfs merge=lfs -text
21
+ *.pkl filter=lfs diff=lfs merge=lfs -text
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
32
+ *.xz filter=lfs diff=lfs merge=lfs -text
33
+ *.zip filter=lfs diff=lfs merge=lfs -text
34
+ *.zst filter=lfs diff=lfs merge=lfs -text
35
+ *tfevents* filter=lfs diff=lfs merge=lfs -text
MiniLMv2-goemotions-v2-onnx/README.md ADDED
@@ -0,0 +1,177 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ datasets:
3
+ - go_emotions
4
+ language:
5
+ - en
6
+ library_name: transformers
7
+ inference: false
8
+ model-index:
9
+ - name: text-classification-goemotions
10
+ results:
11
+ - task:
12
+ name: Text Classification
13
+ type: text-classification
14
+ dataset:
15
+ name: go_emotions
16
+ type: multilabel_classification
17
+ config: simplified
18
+ split: test
19
+ args: simplified
20
+ metrics:
21
+ - name: F1
22
+ type: f1
23
+ value: 0.482
24
+ license: apache-2.0
25
+ tags:
26
+ - emotions
27
+ - multi-class-classification
28
+ - multi-label-classification
29
+ - onnx
30
+ - int8
31
+ - emotion
32
+ - ONNXRuntime
33
+ ---
34
+
35
+ # Text Classification GoEmotions
36
+
37
+ This a ONNX quantized model and is fined-tuned version of [MiniLMv2-L6-H384](https://huggingface.co/nreimers/MiniLMv2-L6-H384-distilled-from-RoBERTa-Large) on the on the [go_emotions](https://huggingface.co/datasets/go_emotions) dataset using [tasinho/text-classification-goemotions](https://huggingface.co/tasinhoque/text-classification-goemotions) as teacher model.
38
+ The original model can be found [here](https://huggingface.co/minuva/MiniLMv2-goemotions-v2)
39
+
40
+ # Optimum
41
+
42
+ ## Installation
43
+
44
+ Install from source:
45
+ ```bash
46
+ python -m pip install optimum[onnxruntime]@git+https://github.com/huggingface/optimum.git
47
+ ```
48
+
49
+
50
+ ## Run the Model
51
+ ```py
52
+ from optimum.onnxruntime import ORTModelForSequenceClassification
53
+ from transformers import AutoTokenizer, pipeline
54
+
55
+ model = ORTModelForSequenceClassification.from_pretrained('minuva/MiniLMv2-goemotions-v2-onnx', provider="CPUExecutionProvider")
56
+ tokenizer = AutoTokenizer.from_pretrained('minuva/MiniLMv2-goemotions-v2-onnx', use_fast=True, model_max_length=256, truncation=True, padding='max_length')
57
+
58
+ pipe = pipeline(task='text-classification', model=model, tokenizer=tokenizer, )
59
+ texts = ["that's wrong", "can you please answer me?"]
60
+ pipe(texts)
61
+ # [{'label': 'anger', 'score': 0.9727636575698853},
62
+ # {'label': 'love', 'score': 0.9874765276908875}]
63
+ ```
64
+ # ONNX Runtime only
65
+
66
+ A lighter solution for deployment
67
+
68
+
69
+ ## Installation
70
+ ```bash
71
+ pip install tokenizers
72
+ pip install onnxruntime
73
+ git clone https://huggingface.co/minuva/MiniLMv2-goemotions-v2-onnx
74
+ ```
75
+
76
+ ## Run the Model
77
+
78
+ ```py
79
+ import os
80
+ import numpy as np
81
+ import json
82
+
83
+ from tokenizers import Tokenizer
84
+ from onnxruntime import InferenceSession
85
+
86
+
87
+ model_name = "minuva/MiniLMv2-goemotions-v2-onnx"
88
+
89
+ tokenizer = Tokenizer.from_pretrained(model_name)
90
+ tokenizer.enable_padding(
91
+ pad_token="<pad>",
92
+ pad_id=1,
93
+ )
94
+ tokenizer.enable_truncation(max_length=256)
95
+ batch_size = 16
96
+
97
+ texts = ["I am angry", "I feel in love"]
98
+ outputs = []
99
+ model = InferenceSession("MiniLMv2-goemotions-v2-onnx/model_optimized_quantized.onnx", providers=['CUDAExecutionProvider'])
100
+
101
+ with open(os.path.join("MiniLMv2-goemotions-v2-onnx", "config.json"), "r") as f:
102
+ config = json.load(f)
103
+
104
+ output_names = [output.name for output in model.get_outputs()]
105
+ input_names = [input.name for input in model.get_inputs()]
106
+
107
+ for subtexts in np.array_split(np.array(texts), len(texts) // batch_size + 1):
108
+ encodings = tokenizer.encode_batch(list(subtexts))
109
+ inputs = {
110
+ "input_ids": np.vstack(
111
+ [encoding.ids for encoding in encodings],
112
+ ),
113
+ "attention_mask": np.vstack(
114
+ [encoding.attention_mask for encoding in encodings],
115
+ ),
116
+ "token_type_ids": np.vstack(
117
+ [encoding.type_ids for encoding in encodings],
118
+ ),
119
+ }
120
+
121
+ for input_name in input_names:
122
+ if input_name not in inputs:
123
+ raise ValueError(f"Input name {input_name} not found in inputs")
124
+
125
+ inputs = {input_name: inputs[input_name] for input_name in input_names}
126
+ output = np.squeeze(
127
+ np.stack(
128
+ model.run(output_names=output_names, input_feed=inputs)
129
+ ),
130
+ axis=0,
131
+ )
132
+ outputs.append(output)
133
+
134
+ outputs = np.concatenate(outputs, axis=0)
135
+ scores = 1 / (1 + np.exp(-outputs))
136
+ results = []
137
+ for item in scores:
138
+ labels = []
139
+ scores = []
140
+ for idx, s in enumerate(item):
141
+ labels.append(config["id2label"][str(idx)])
142
+ scores.append(float(s))
143
+ results.append({"labels": labels, "scores": scores})
144
+
145
+
146
+ res = []
147
+
148
+ for result in results:
149
+ joined = list(zip(result['labels'], result['scores']))
150
+ max_score = max(joined, key=lambda x: x[1])
151
+ res.append(max_score)
152
+
153
+ res
154
+
155
+ # [('anger', 0.9745745062828064), ('love', 0.9884329438209534)]
156
+ ```
157
+ # Training hyperparameters
158
+
159
+ The following hyperparameters were used during training:
160
+ - learning_rate: 6e-05
161
+ - train_batch_size: 64
162
+ - eval_batch_size: 64
163
+ - seed: 42
164
+ - optimizer: Adam with betas=(0.9,0.999) and epsilon=1e-08
165
+ - lr_scheduler_type: linear
166
+
167
+
168
+ # Metrics (comparison with teacher model)
169
+
170
+ | Teacher (params) | Student (params) | Set | Score (teacher) | Score (student) |
171
+ |--------------------|-------------|----------|--------| --------|
172
+ | tasinhoque/text-classification-goemotions (355M) | MiniLMv2-goemotions-v2-onnx (30M) | Validation | 0.514252 | 0.4780 |
173
+ | tasinhoque/text-classification-goemotions (335M) | MiniLMv2-goemotions-v2-onnx (30M) | Test | 0.501937 | 0.482 |
174
+
175
+ # Deployment
176
+
177
+ Check out our [fast-nlp-text-emotion repository](https://github.com/minuva/fast-nlp-text-emotion) for a FastAPI based server to easily deploy this model on CPU devices.
MiniLMv2-goemotions-v2-onnx/config.json ADDED
@@ -0,0 +1,88 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "_name_or_path": "../output/minilmv2-roberta-v2-goemotions-opt",
3
+ "architectures": [
4
+ "RobertaForSequenceClassification"
5
+ ],
6
+ "attention_probs_dropout_prob": 0.1,
7
+ "bos_token_id": 0,
8
+ "classifier_dropout": null,
9
+ "eos_token_id": 2,
10
+ "hidden_act": "gelu",
11
+ "hidden_dropout_prob": 0.1,
12
+ "hidden_size": 384,
13
+ "id2label": {
14
+ "0": "admiration",
15
+ "1": "amusement",
16
+ "2": "anger",
17
+ "3": "annoyance",
18
+ "4": "approval",
19
+ "5": "caring",
20
+ "6": "confusion",
21
+ "7": "curiosity",
22
+ "8": "desire",
23
+ "9": "disappointment",
24
+ "10": "disapproval",
25
+ "11": "disgust",
26
+ "12": "embarrassment",
27
+ "13": "excitement",
28
+ "14": "fear",
29
+ "15": "gratitude",
30
+ "16": "grief",
31
+ "17": "joy",
32
+ "18": "love",
33
+ "19": "nervousness",
34
+ "20": "optimism",
35
+ "21": "pride",
36
+ "22": "realization",
37
+ "23": "relief",
38
+ "24": "remorse",
39
+ "25": "sadness",
40
+ "26": "surprise",
41
+ "27": "neutral"
42
+ },
43
+ "initializer_range": 0.02,
44
+ "intermediate_size": 1536,
45
+ "label2id": {
46
+ "admiration": "0",
47
+ "amusement": "1",
48
+ "anger": "2",
49
+ "annoyance": "3",
50
+ "approval": "4",
51
+ "caring": "5",
52
+ "confusion": "6",
53
+ "curiosity": "7",
54
+ "desire": "8",
55
+ "disappointment": "9",
56
+ "disapproval": "10",
57
+ "disgust": "11",
58
+ "embarrassment": "12",
59
+ "excitement": "13",
60
+ "fear": "14",
61
+ "gratitude": "15",
62
+ "grief": "16",
63
+ "joy": "17",
64
+ "love": "18",
65
+ "nervousness": "19",
66
+ "neutral": "27",
67
+ "optimism": "20",
68
+ "pride": "21",
69
+ "realization": "22",
70
+ "relief": "23",
71
+ "remorse": "24",
72
+ "sadness": "25",
73
+ "surprise": "26"
74
+ },
75
+ "layer_norm_eps": 1e-05,
76
+ "max_position_embeddings": 514,
77
+ "model_type": "roberta",
78
+ "num_attention_heads": 12,
79
+ "num_hidden_layers": 6,
80
+ "pad_token_id": 1,
81
+ "position_embedding_type": "absolute",
82
+ "problem_type": "multi_label_classification",
83
+ "torch_dtype": "float32",
84
+ "transformers_version": "4.30.0",
85
+ "type_vocab_size": 1,
86
+ "use_cache": true,
87
+ "vocab_size": 50265
88
+ }
MiniLMv2-goemotions-v2-onnx/merges.txt ADDED
The diff for this file is too large to render. See raw diff
 
MiniLMv2-goemotions-v2-onnx/model_optimized_quantized.onnx ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:594ac3bf3c82e2ea187e50982ea2f811ede5377eaad0c8ad23bc04ee8a2486c6
3
+ size 30458927
MiniLMv2-goemotions-v2-onnx/ort_config.json ADDED
@@ -0,0 +1,35 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "one_external_file": true,
3
+ "opset": null,
4
+ "optimization": {},
5
+ "optimum_version": "1.14.1",
6
+ "quantization": {
7
+ "activations_dtype": "QUInt8",
8
+ "activations_symmetric": false,
9
+ "format": "QOperator",
10
+ "is_static": false,
11
+ "mode": "IntegerOps",
12
+ "nodes_to_exclude": [],
13
+ "nodes_to_quantize": [],
14
+ "operators_to_quantize": [
15
+ "Conv",
16
+ "MatMul",
17
+ "Attention",
18
+ "LSTM",
19
+ "Gather",
20
+ "Transpose",
21
+ "EmbedLayerNormalization"
22
+ ],
23
+ "per_channel": false,
24
+ "qdq_add_pair_to_weight": false,
25
+ "qdq_dedicated_pair": false,
26
+ "qdq_op_type_per_channel_support_to_axis": {
27
+ "MatMul": 1
28
+ },
29
+ "reduce_range": false,
30
+ "weights_dtype": "QInt8",
31
+ "weights_symmetric": true
32
+ },
33
+ "transformers_version": "4.30.0",
34
+ "use_external_data_format": false
35
+ }
MiniLMv2-goemotions-v2-onnx/source.txt ADDED
@@ -0,0 +1 @@
 
 
1
+ https://huggingface.co/minuva/MiniLMv2-goemotions-v2-onnx
MiniLMv2-goemotions-v2-onnx/special_tokens_map.json ADDED
@@ -0,0 +1,15 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "bos_token": "<s>",
3
+ "cls_token": "<s>",
4
+ "eos_token": "</s>",
5
+ "mask_token": {
6
+ "content": "<mask>",
7
+ "lstrip": true,
8
+ "normalized": false,
9
+ "rstrip": false,
10
+ "single_word": false
11
+ },
12
+ "pad_token": "<pad>",
13
+ "sep_token": "</s>",
14
+ "unk_token": "<unk>"
15
+ }
MiniLMv2-goemotions-v2-onnx/tokenizer.json ADDED
The diff for this file is too large to render. See raw diff
 
MiniLMv2-goemotions-v2-onnx/tokenizer_config.json ADDED
@@ -0,0 +1,64 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "add_prefix_space": false,
3
+ "added_tokens_decoder": {
4
+ "0": {
5
+ "content": "<s>",
6
+ "lstrip": false,
7
+ "normalized": false,
8
+ "rstrip": false,
9
+ "single_word": false,
10
+ "special": true
11
+ },
12
+ "1": {
13
+ "content": "<pad>",
14
+ "lstrip": false,
15
+ "normalized": false,
16
+ "rstrip": false,
17
+ "single_word": false,
18
+ "special": true
19
+ },
20
+ "2": {
21
+ "content": "</s>",
22
+ "lstrip": false,
23
+ "normalized": false,
24
+ "rstrip": false,
25
+ "single_word": false,
26
+ "special": true
27
+ },
28
+ "3": {
29
+ "content": "<unk>",
30
+ "lstrip": false,
31
+ "normalized": false,
32
+ "rstrip": false,
33
+ "single_word": false,
34
+ "special": true
35
+ },
36
+ "50264": {
37
+ "content": "<mask>",
38
+ "lstrip": true,
39
+ "normalized": false,
40
+ "rstrip": false,
41
+ "single_word": false,
42
+ "special": true
43
+ }
44
+ },
45
+ "bos_token": "<s>",
46
+ "clean_up_tokenization_spaces": true,
47
+ "cls_token": "<s>",
48
+ "eos_token": "</s>",
49
+ "errors": "replace",
50
+ "mask_token": "<mask>",
51
+ "max_length": 64,
52
+ "model_max_length": 512,
53
+ "pad_to_multiple_of": null,
54
+ "pad_token": "<pad>",
55
+ "pad_token_type_id": 0,
56
+ "padding_side": "right",
57
+ "sep_token": "</s>",
58
+ "stride": 0,
59
+ "tokenizer_class": "RobertaTokenizer",
60
+ "trim_offsets": true,
61
+ "truncation_side": "right",
62
+ "truncation_strategy": "longest_first",
63
+ "unk_token": "<unk>"
64
+ }
MiniLMv2-goemotions-v2-onnx/vocab.json ADDED
The diff for this file is too large to render. See raw diff