smenaaliaga commited on
Commit
ca01597
·
verified ·
1 Parent(s): c22adfb

Upload PIBot Joint BERT model package

Browse files
README.md ADDED
@@ -0,0 +1,154 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ language: es
3
+ license: mit
4
+ tags:
5
+ - pytorch
6
+ - bert
7
+ - joint-bert
8
+ - intent-classification
9
+ - slot-filling
10
+ - named-entity-recognition
11
+ - multi-head-classification
12
+ - spanish
13
+ - macroeconomics
14
+ pipeline_tag: token-classification
15
+ library_name: transformers
16
+ ---
17
+
18
+ # PIBot Joint BERT
19
+
20
+ Modelo **JointBERT multi-cabeza** para consultas macroeconómicas en español.
21
+ Predice simultáneamente **5 cabezas de intención** + **slot filling BIO** por token.
22
+
23
+ ## Configuración del checkpoint
24
+
25
+ | Parámetro | Valor |
26
+ |---|---|
27
+ | **Task** | `pibimacecv5` |
28
+ | **Base model** | `dccuchile/bert-base-spanish-wwm-cased` (BETO) |
29
+ | **Model type** | `bert` |
30
+ | **Custom code** | Sí (`trust_remote_code=True`) |
31
+
32
+ ## Cabezas de intención
33
+
34
+ | Cabeza | Archivo de labels |
35
+ |---|---|
36
+ | `calc_mode` | `labels/calc_mode_label.txt` |
37
+ | `activity` | `labels/activity_label.txt` |
38
+ | `region` | `labels/region_label.txt` |
39
+ | `investment` | `labels/investment_label.txt` |
40
+ | `req_form` | `labels/req_form_label.txt` |
41
+
42
+ ## Slot filling
43
+
44
+ - Etiquetado BIO por token (`labels/slot_label.txt`)
45
+
46
+ ## Estructura del repositorio
47
+
48
+ ```text
49
+ ├── config.json # Configuración del modelo
50
+ ├── model.safetensors # Pesos del modelo
51
+ ├── training_args.bin # Argumentos de entrenamiento
52
+ ├── tokenizer.json # Tokenizer
53
+ ├── tokenizer_config.json
54
+ ├── vocab.txt
55
+ ├── special_tokens_map.json
56
+ ├── modeling_jointbert.py # Código custom (AutoModel)
57
+ ├── module.py # Clasificadores por cabeza
58
+ ├── __init__.py
59
+ ├── labels/
60
+ │ ├── calc_mode_label.txt
61
+ │ ├── activity_label.txt
62
+ │ ├── region_label.txt
63
+ │ ├── investment_label.txt
64
+ │ ├── req_form_label.txt
65
+ │ └── slot_label.txt
66
+ └── README.md
67
+ ```
68
+
69
+ ## Uso rápido
70
+
71
+ ### Descargar y cargar el modelo
72
+
73
+ ```python
74
+ import torch
75
+ from pathlib import Path
76
+ from transformers import AutoConfig, AutoTokenizer, AutoModel
77
+
78
+ repo_id = "tu-usuario/pibot-jointbert" # Cambiar por tu repo
79
+
80
+ # 1. Cargar tokenizer y config
81
+ tokenizer = AutoTokenizer.from_pretrained(repo_id, trust_remote_code=True)
82
+ config = AutoConfig.from_pretrained(repo_id, trust_remote_code=True)
83
+
84
+ # 2. Cargar training args y labels
85
+ from huggingface_hub import hf_hub_download
86
+
87
+ args_path = hf_hub_download(repo_id, "training_args.bin")
88
+ train_args = torch.load(args_path, weights_only=False)
89
+
90
+ def read_labels(repo_id, filename):
91
+ path = hf_hub_download(repo_id, f"labels/{filename}")
92
+ return [line.strip() for line in open(path, encoding="utf-8") if line.strip()]
93
+
94
+ calc_mode_labels = read_labels(repo_id, "calc_mode_label.txt")
95
+ activity_labels = read_labels(repo_id, "activity_label.txt")
96
+ region_labels = read_labels(repo_id, "region_label.txt")
97
+ investment_labels = read_labels(repo_id, "investment_label.txt")
98
+ req_form_labels = read_labels(repo_id, "req_form_label.txt")
99
+ slot_labels = read_labels(repo_id, "slot_label.txt")
100
+
101
+ # 3. Instanciar modelo
102
+ model = AutoModel.from_pretrained(
103
+ repo_id,
104
+ config=config,
105
+ trust_remote_code=True,
106
+ args=train_args,
107
+ calc_mode_label_lst=calc_mode_labels,
108
+ activity_label_lst=activity_labels,
109
+ region_label_lst=region_labels,
110
+ investment_label_lst=investment_labels,
111
+ req_form_label_lst=req_form_labels,
112
+ slot_label_lst=slot_labels,
113
+ )
114
+ model.eval()
115
+ ```
116
+
117
+ ### Inferencia
118
+
119
+ ```python
120
+ text = "cual fue el ultimo imacec"
121
+ inputs = tokenizer(text, return_tensors="pt", truncation=True, max_length=64)
122
+
123
+ with torch.no_grad():
124
+ outputs = model(**inputs)
125
+
126
+ # outputs contiene logits de cada cabeza de intención y slot filling
127
+ calc_mode_logits = outputs[1] # (batch, num_calc_mode_labels)
128
+ activity_logits = outputs[2] # (batch, num_activity_labels)
129
+ region_logits = outputs[3] # (batch, num_region_labels)
130
+ investment_logits = outputs[4] # (batch, num_investment_labels)
131
+ req_form_logits = outputs[5] # (batch, num_req_form_labels)
132
+ slot_logits = outputs[6] # (batch, seq_len, num_slot_labels)
133
+ ```
134
+
135
+ ### Uso en endpoint (snapshot local)
136
+
137
+ ```python
138
+ from huggingface_hub import snapshot_download
139
+
140
+ # Descargar checkpoint completo
141
+ model_dir = snapshot_download("tu-usuario/pibot-jointbert")
142
+
143
+ # Cargar labels desde carpeta local
144
+ from pathlib import Path
145
+ labels_dir = Path(model_dir) / "labels"
146
+ labels = {}
147
+ for f in labels_dir.glob("*_label.txt"):
148
+ labels[f.stem] = [l.strip() for l in f.read_text(encoding="utf-8").splitlines() if l.strip()]
149
+ ```
150
+
151
+ ## Referencia
152
+
153
+ - Paper base: [BERT for Joint Intent Classification and Slot Filling](https://arxiv.org/abs/1810.04805v2)
154
+ - Implementación original: [monologg/JointBERT](https://github.com/monologg/JointBERT)
__init__.py ADDED
@@ -0,0 +1 @@
 
 
1
+ from .modeling_jointbert import JointBERT
config.json ADDED
@@ -0,0 +1,28 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "_name_or_path": "dccuchile/bert-base-spanish-wwm-cased",
3
+ "architectures": [
4
+ "JointBERT"
5
+ ],
6
+ "attention_probs_dropout_prob": 0.1,
7
+ "classifier_dropout": null,
8
+ "finetuning_task": "pibimacecv5",
9
+ "gradient_checkpointing": false,
10
+ "hidden_act": "gelu",
11
+ "hidden_dropout_prob": 0.1,
12
+ "hidden_size": 768,
13
+ "initializer_range": 0.02,
14
+ "intermediate_size": 3072,
15
+ "layer_norm_eps": 1e-12,
16
+ "max_position_embeddings": 512,
17
+ "model_type": "bert",
18
+ "num_attention_heads": 12,
19
+ "num_hidden_layers": 12,
20
+ "output_past": true,
21
+ "pad_token_id": 1,
22
+ "position_embedding_type": "absolute",
23
+ "torch_dtype": "float32",
24
+ "transformers_version": "4.46.0",
25
+ "type_vocab_size": 2,
26
+ "use_cache": true,
27
+ "vocab_size": 31002
28
+ }
labels/.gitkeep ADDED
File without changes
labels/activity_label.txt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ none
2
+ specific
3
+ general
labels/calc_mode_label.txt ADDED
@@ -0,0 +1,4 @@
 
 
 
 
 
1
+ original
2
+ prev_period
3
+ yoy
4
+ contribution
labels/investment_label.txt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ none
2
+ specific
3
+ general
labels/region_label.txt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ none
2
+ specific
3
+ general
labels/req_form_label.txt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ latest
2
+ point
3
+ range
labels/slot_label.txt ADDED
@@ -0,0 +1,15 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ O
2
+ B-ACTIVITY
3
+ B-FREQUENCY
4
+ B-INDICATOR
5
+ B-INVESTMENT
6
+ B-PERIOD
7
+ B-REGION
8
+ B-SEASONALITY
9
+ I-ACTIVITY
10
+ I-FREQUENCY
11
+ I-INDICATOR
12
+ I-INVESTMENT
13
+ I-PERIOD
14
+ I-REGION
15
+ I-SEASONALITY
model.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:1d6084a789c8845d2d09b6ff593aff3639c66db677c9c7bd7399fca3eed7b902
3
+ size 439525264
modeling_jointbert.py ADDED
@@ -0,0 +1,125 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import torch.nn as nn
2
+ from transformers import PreTrainedModel, AutoModel
3
+ from .module import CalcModeClassifier, ActivityClassifier, RegionClassifier, InvestmentClassifier, ReqFormClassifier, SlotClassifier
4
+
5
+ try:
6
+ from torchcrf import CRF
7
+ except ImportError:
8
+ CRF = None
9
+
10
+ class JointBERT(PreTrainedModel):
11
+ def __init__(self, config, args, calc_mode_label_lst, activity_label_lst, region_label_lst, investment_label_lst, req_form_label_lst, slot_label_lst):
12
+ super(JointBERT, self).__init__(config)
13
+ self.args = args
14
+
15
+ self.num_calc_mode_labels = len(calc_mode_label_lst)
16
+ self.num_activity_labels = len(activity_label_lst)
17
+ self.num_region_labels = len(region_label_lst)
18
+ self.num_investment_labels = len(investment_label_lst)
19
+ self.num_req_form_labels = len(req_form_label_lst)
20
+ self.num_slot_labels = len(slot_label_lst)
21
+
22
+ # Usar AutoModel para soportar cualquier encoder transformer
23
+ self.encoder = AutoModel.from_pretrained(args.model_name_or_path, config=config)
24
+
25
+ self.calc_mode_classifier = CalcModeClassifier(config.hidden_size, self.num_calc_mode_labels, args.dropout_rate)
26
+ self.activity_classifier = ActivityClassifier(config.hidden_size, self.num_activity_labels, args.dropout_rate)
27
+ self.region_classifier = RegionClassifier(config.hidden_size, self.num_region_labels, args.dropout_rate)
28
+ self.investment_classifier = InvestmentClassifier(config.hidden_size, self.num_investment_labels, args.dropout_rate)
29
+ self.req_form_classifier = ReqFormClassifier(config.hidden_size, self.num_req_form_labels, args.dropout_rate)
30
+ self.slot_classifier = SlotClassifier(config.hidden_size, self.num_slot_labels, args.dropout_rate)
31
+
32
+ if args.use_crf:
33
+ if CRF is None:
34
+ raise ImportError("torchcrf no está instalado. Instala con: pip install pytorch-crf o ejecuta sin --use_crf")
35
+ crf_init_errors = []
36
+ for init_fn in (
37
+ lambda: CRF(self.num_slot_labels, pad_idx=None, use_gpu=False),
38
+ lambda: CRF(self.num_slot_labels, batch_first=True),
39
+ lambda: CRF(num_tags=self.num_slot_labels, batch_first=True),
40
+ lambda: CRF(self.num_slot_labels),
41
+ lambda: CRF(num_tags=self.num_slot_labels),
42
+ ):
43
+ try:
44
+ self.crf = init_fn()
45
+ break
46
+ except TypeError as e:
47
+ crf_init_errors.append(str(e))
48
+ else:
49
+ raise TypeError("No se pudo inicializar CRF con las firmas conocidas: " + " | ".join(crf_init_errors))
50
+
51
+ def forward(self, input_ids, attention_mask, token_type_ids=None,
52
+ calc_mode_label_ids=None, activity_label_ids=None, region_label_ids=None, investment_label_ids=None, req_form_label_ids=None, slot_labels_ids=None):
53
+ outputs = self.encoder(input_ids, attention_mask=attention_mask,
54
+ token_type_ids=token_type_ids) # sequence_output, pooled_output, (hidden_states), (attentions)
55
+ sequence_output = outputs[0]
56
+ pooled_output = outputs[1] # [CLS]
57
+
58
+ calc_mode_logits = self.calc_mode_classifier(pooled_output)
59
+ activity_logits = self.activity_classifier(pooled_output)
60
+ region_logits = self.region_classifier(pooled_output)
61
+ investment_logits = self.investment_classifier(pooled_output)
62
+ req_form_logits = self.req_form_classifier(pooled_output)
63
+ slot_logits = self.slot_classifier(sequence_output)
64
+
65
+ total_loss = 0
66
+ # 1. Calc Mode CrossEntropy
67
+ if calc_mode_label_ids is not None:
68
+ calc_mode_loss_fct = nn.CrossEntropyLoss()
69
+ calc_mode_loss = calc_mode_loss_fct(calc_mode_logits.view(-1, self.num_calc_mode_labels), calc_mode_label_ids.view(-1))
70
+ total_loss += calc_mode_loss
71
+
72
+ # 2. Activity CrossEntropy
73
+ if activity_label_ids is not None:
74
+ activity_loss_fct = nn.CrossEntropyLoss()
75
+ activity_loss = activity_loss_fct(activity_logits.view(-1, self.num_activity_labels), activity_label_ids.view(-1))
76
+ total_loss += activity_loss
77
+
78
+ # 3. Region CrossEntropy
79
+ if region_label_ids is not None:
80
+ region_loss_fct = nn.CrossEntropyLoss()
81
+ region_loss = region_loss_fct(region_logits.view(-1, self.num_region_labels), region_label_ids.view(-1))
82
+ total_loss += region_loss
83
+
84
+ # 4. Investment CrossEntropy
85
+ if investment_label_ids is not None:
86
+ investment_loss_fct = nn.CrossEntropyLoss()
87
+ investment_loss = investment_loss_fct(investment_logits.view(-1, self.num_investment_labels), investment_label_ids.view(-1))
88
+ total_loss += investment_loss
89
+
90
+ # 5. Req Form CrossEntropy
91
+ if req_form_label_ids is not None:
92
+ req_form_loss_fct = nn.CrossEntropyLoss()
93
+ req_form_loss = req_form_loss_fct(req_form_logits.view(-1, self.num_req_form_labels), req_form_label_ids.view(-1))
94
+ total_loss += req_form_loss
95
+
96
+ # 6. Slot Softmax
97
+ if slot_labels_ids is not None and self.args.slot_loss_coef != 0:
98
+ if self.args.use_crf:
99
+ # CRF doesn't handle ignore_index (-100), so we replace it with PAD (0)
100
+ slot_labels_ids_crf = slot_labels_ids.clone()
101
+ slot_labels_ids_crf[slot_labels_ids_crf == self.args.ignore_index] = 0
102
+ if hasattr(self.crf, 'viterbi_decode'):
103
+ # TorchCRF API: forward returns log-likelihood per batch item
104
+ slot_loss = -self.crf(slot_logits, slot_labels_ids_crf, attention_mask.bool()).mean()
105
+ else:
106
+ # pytorch-crf API
107
+ slot_loss = self.crf(slot_logits, slot_labels_ids_crf, mask=attention_mask.bool(), reduction='mean')
108
+ slot_loss = -1 * slot_loss # negative log-likelihood
109
+ else:
110
+ slot_loss_fct = nn.CrossEntropyLoss(ignore_index=self.args.ignore_index)
111
+ # Only keep active parts of the loss
112
+ if attention_mask is not None:
113
+ active_loss = attention_mask.view(-1) == 1
114
+ active_logits = slot_logits.view(-1, self.num_slot_labels)[active_loss]
115
+ active_labels = slot_labels_ids.view(-1)[active_loss]
116
+ slot_loss = slot_loss_fct(active_logits, active_labels)
117
+ else:
118
+ slot_loss = slot_loss_fct(slot_logits.view(-1, self.num_slot_labels), slot_labels_ids.view(-1))
119
+ total_loss += self.args.slot_loss_coef * slot_loss
120
+
121
+ outputs = ((calc_mode_logits, activity_logits, region_logits, investment_logits, req_form_logits, slot_logits),) + outputs[2:] # add hidden states and attention if they are here
122
+
123
+ outputs = (total_loss,) + outputs
124
+
125
+ return outputs # (loss), logits, (hidden_states), (attentions) # Logits is a tuple of all classifier logits
module.py ADDED
@@ -0,0 +1,62 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import torch.nn as nn
2
+
3
+ class CalcModeClassifier(nn.Module):
4
+ def __init__(self, input_dim, num_calc_mode_labels, dropout_rate=0.):
5
+ super(CalcModeClassifier, self).__init__()
6
+ self.dropout = nn.Dropout(dropout_rate)
7
+ self.linear = nn.Linear(input_dim, num_calc_mode_labels)
8
+
9
+ def forward(self, x):
10
+ x = self.dropout(x)
11
+ return self.linear(x)
12
+
13
+ class ActivityClassifier(nn.Module):
14
+ def __init__(self, input_dim, num_activity_labels, dropout_rate=0.):
15
+ super(ActivityClassifier, self).__init__()
16
+ self.dropout = nn.Dropout(dropout_rate)
17
+ self.linear = nn.Linear(input_dim, num_activity_labels)
18
+
19
+ def forward(self, x):
20
+ x = self.dropout(x)
21
+ return self.linear(x)
22
+
23
+ class RegionClassifier(nn.Module):
24
+ def __init__(self, input_dim, num_region_labels, dropout_rate=0.):
25
+ super(RegionClassifier, self).__init__()
26
+ self.dropout = nn.Dropout(dropout_rate)
27
+ self.linear = nn.Linear(input_dim, num_region_labels)
28
+
29
+ def forward(self, x):
30
+ x = self.dropout(x)
31
+ return self.linear(x)
32
+
33
+ class InvestmentClassifier(nn.Module):
34
+ def __init__(self, input_dim, num_investment_labels, dropout_rate=0.):
35
+ super(InvestmentClassifier, self).__init__()
36
+ self.dropout = nn.Dropout(dropout_rate)
37
+ self.linear = nn.Linear(input_dim, num_investment_labels)
38
+
39
+ def forward(self, x):
40
+ x = self.dropout(x)
41
+ return self.linear(x)
42
+
43
+ class ReqFormClassifier(nn.Module):
44
+ def __init__(self, input_dim, num_req_form_labels, dropout_rate=0.):
45
+ super(ReqFormClassifier, self).__init__()
46
+ self.dropout = nn.Dropout(dropout_rate)
47
+ self.linear = nn.Linear(input_dim, num_req_form_labels)
48
+
49
+ def forward(self, x):
50
+ x = self.dropout(x)
51
+ return self.linear(x)
52
+
53
+ class SlotClassifier(nn.Module):
54
+ def __init__(self, input_dim, num_slot_labels, dropout_rate=0.):
55
+ super(SlotClassifier, self).__init__()
56
+ self.dropout = nn.Dropout(dropout_rate)
57
+ self.linear = nn.Linear(input_dim, num_slot_labels)
58
+
59
+ def forward(self, x):
60
+ x = self.dropout(x)
61
+ return self.linear(x)
62
+
special_tokens_map.json ADDED
@@ -0,0 +1,37 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "cls_token": {
3
+ "content": "[CLS]",
4
+ "lstrip": false,
5
+ "normalized": false,
6
+ "rstrip": false,
7
+ "single_word": false
8
+ },
9
+ "mask_token": {
10
+ "content": "[MASK]",
11
+ "lstrip": false,
12
+ "normalized": false,
13
+ "rstrip": false,
14
+ "single_word": false
15
+ },
16
+ "pad_token": {
17
+ "content": "[PAD]",
18
+ "lstrip": false,
19
+ "normalized": false,
20
+ "rstrip": false,
21
+ "single_word": false
22
+ },
23
+ "sep_token": {
24
+ "content": "[SEP]",
25
+ "lstrip": false,
26
+ "normalized": false,
27
+ "rstrip": false,
28
+ "single_word": false
29
+ },
30
+ "unk_token": {
31
+ "content": "[UNK]",
32
+ "lstrip": false,
33
+ "normalized": false,
34
+ "rstrip": false,
35
+ "single_word": false
36
+ }
37
+ }
tokenizer.json ADDED
The diff for this file is too large to render. See raw diff
 
tokenizer_config.json ADDED
@@ -0,0 +1,57 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "added_tokens_decoder": {
3
+ "0": {
4
+ "content": "[MASK]",
5
+ "lstrip": false,
6
+ "normalized": false,
7
+ "rstrip": false,
8
+ "single_word": false,
9
+ "special": true
10
+ },
11
+ "1": {
12
+ "content": "[PAD]",
13
+ "lstrip": false,
14
+ "normalized": false,
15
+ "rstrip": false,
16
+ "single_word": false,
17
+ "special": true
18
+ },
19
+ "3": {
20
+ "content": "[UNK]",
21
+ "lstrip": false,
22
+ "normalized": false,
23
+ "rstrip": false,
24
+ "single_word": false,
25
+ "special": true
26
+ },
27
+ "4": {
28
+ "content": "[CLS]",
29
+ "lstrip": false,
30
+ "normalized": false,
31
+ "rstrip": false,
32
+ "single_word": false,
33
+ "special": true
34
+ },
35
+ "5": {
36
+ "content": "[SEP]",
37
+ "lstrip": false,
38
+ "normalized": false,
39
+ "rstrip": false,
40
+ "single_word": false,
41
+ "special": true
42
+ }
43
+ },
44
+ "clean_up_tokenization_spaces": false,
45
+ "cls_token": "[CLS]",
46
+ "do_basic_tokenize": true,
47
+ "do_lower_case": false,
48
+ "mask_token": "[MASK]",
49
+ "model_max_length": 512,
50
+ "never_split": null,
51
+ "pad_token": "[PAD]",
52
+ "sep_token": "[SEP]",
53
+ "strip_accents": false,
54
+ "tokenize_chinese_chars": true,
55
+ "tokenizer_class": "BertTokenizer",
56
+ "unk_token": "[UNK]"
57
+ }
training_args.bin ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:91f6bf5e8606b9c4a901c47a0cde8195ea2546e401ff0cef645286e98ffab140
3
+ size 2040
vocab.txt ADDED
The diff for this file is too large to render. See raw diff