ricardoz commited on
Commit
b720f65
1 Parent(s): b1ccf17

sobe modelo

Browse files
Files changed (7) hide show
  1. README.md +104 -1
  2. config.json +24 -0
  3. flax_model.msgpack +3 -0
  4. model.safetensors +3 -0
  5. pytorch_model.bin +3 -0
  6. tf_model.h5 +3 -0
  7. vocab.txt +0 -0
README.md CHANGED
@@ -1,3 +1,106 @@
1
  ---
2
- license: mit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3
  ---
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  ---
2
+ language:
3
+ - pt
4
+ license: other
5
+ tags:
6
+ - bert
7
+ - pytorch
8
+ - sentence-transformers
9
+ - feature-extraction
10
+ - sentence-similarity
11
+ - transformers
12
+ - fill-mask
13
+ - NSP
14
+ - Next Sentence Prediction
15
+ datasets:
16
+ - brwac
17
+ library_name: transformers
18
+ pipeline_tag: fill-mask
19
  ---
20
+
21
+ # BERTugues Base (aka "BERTugues-base-portuguese-cased")
22
+
23
+ ## Introdução
24
+
25
+ O BERTugues foi pré-treinado seguindo os mesmos passos do [paper original do BERT](https://arxiv.org/abs/1810.04805v2), com os objetivos de Masked Language Modeling (MLM) e Next Sentence Prediction (NSP), com 1 milhão de *steps*, usando mais de 20 GB de textos. Como o [Bertimbau](https://huggingface.co/neuralmind/bert-base-portuguese-cased), foi pré-treinado com o dataset [BrWAC](https://www.inf.ufrgs.br/pln/wiki/index.php?title=BrWaC) e a Wikipédia em português para o Tokenizador, contando com algumas melhorias no fluxo de treinamento, como:
26
+ + **Remoção de caracteres pouco comuns no português do treinamento do Tokenizador.** No Bertimbau mais de 7000 dos 29794 usam caracteres orientais ou especiais, quase nunca usados no português. Por exemplo, existem os tokens: "##漫", "##켝", "##前", já no BERTugues fizemos a remoção desses caracteres antes de treinar o tokenizador;
27
+ + **😀 Adição dos principais Emojis no Tokenizador.** A Wikipédia conta com poucos Emojis em seu texto, dessa forma um baixo número de Emojis entravam nos Tokens. Como já [demonstrado na literatura](https://arxiv.org/abs/1910.13793), eles são importantes numa série de tarefas;
28
+ + **Filtragem de qualidade dos textos do BrWAC** seguindo o modelo heurística proposta pelo [paper do modelo Gopher](https://arxiv.org/abs/2112.11446) do Google, onde removemos do BrWac textos de baixa qualidade.
29
+
30
+ ## Tokenizador
31
+
32
+ Com a substituição dos Tokens pouco usados no português conseguimos diminuir a quantidade média de palavras que são quebradas em mais de um Token. No teste utilizando o [assin2](https://huggingface.co/datasets/assin2), mesmo dataset utilizando pelo Bertimbau para fazer o teste na dissertação de mestrado, diminuímos a quantidade média de palavras quebradas por texto de 3,8 para 3,0, no BERT multilinguagem esse número era 7,4.
33
+
34
+ ![imagem](https://github.com/ricardozago/BERTugues/blob/main/99_demais/subtokens_counts.png?raw=true)
35
+
36
+
37
+ ## Performance
38
+
39
+ Para comparar a performance testamos um problema de classificação de textos, utilizando a base de reviews de filmes do [IMDB](https://www.kaggle.com/datasets/luisfredgs/imdb-ptbr), que foi traduzida para o português e possui uma boa qualidade. Neste problema utilizamos a representação do BERTugues da frase e passamos ela por um modelo de Random Forest para realizar a classificação.
40
+
41
+ Também utilizamos a comparação de performance do paper [JurisBERT: Transformer-based model for embedding legal texts](https://repositorio.ufms.br/handle/123456789/5119), que pré-treina um BERT especialmente para textos de um domínio, usando o BERT multilinguagem e o Bertimbau como baseline. Neste caso utilizamos o [código disponibilizado pelo time do paper](https://github.com/alfaneo-ai/brazilian-legal-text-benchmark) e adicionamos o BERTugues. O modelo é utilizado para comparar se dois textos são do mesmo assunto ou não.
42
+
43
+ | Modelo | IMDB (F1) | STJ (F1) | PJERJ (F1) | TJMS (F1) | Média F1 |
44
+ |---------------------|-----------|----------|------------|-----------|----------|
45
+ | BERT Multilinguagem | 72,0% | 30,4% | 63,8% | 65,0% | 57,8% |
46
+ | Bertimbau-Base | 82,2% | 35,6% | 63,9% | 71,2% | 63,2% |
47
+ | Bertimbau-Large | **85,3%** | 43,0% | 63,8% | **74,0%** | 66,5% |
48
+ | BERTugues-Base | 84,0% | **45,2%** | **67,5%** | 70,0% | **66,7%** |
49
+
50
+ O BERTugues foi superior em 3 de 4 tarefa em relação ao Bertimbau-base e em 2 das 4 tarefas superior ao Bertimbau-Large, um modelo muito maior (3x mais parâmetros) e custoso computacionalmente.
51
+
52
+ ## Exemplo de uso
53
+
54
+ Diversos exemplos de uso estão disponíveis no nosso [nosso Github](https://github.com/ricardozago/BERTugues). Para uma rápida consulta adicionamos 2 exemplos abaixo:
55
+
56
+ Predição de palavras mascaradas (Masked Language Modeling):
57
+
58
+ ```python
59
+ from transformers import BertTokenizer, BertForMaskedLM, pipeline
60
+
61
+ model = BertForMaskedLM.from_pretrained("ricardoz/BERTugues-base-portuguese-cased")
62
+ tokenizer = BertTokenizer.from_pretrained("ricardoz/BERTugues-base-portuguese-cased", do_lower_case=False)
63
+
64
+ pipe = pipeline('fill-mask', model=model, tokenizer=tokenizer, top_k = 3)
65
+ pipe('[CLS] Eduardo abriu os [MASK], mas não quis se levantar. Ficou deitado e viu que horas eram.')
66
+
67
+ # [{'score': 0.7272418141365051,
68
+ # 'token': 7292,
69
+ # 'token_str': 'olhos',
70
+ # 'sequence': 'Eduardo abriu os olhos, mas não quis se levantar. Ficou deitado e viu que horas eram.'},
71
+ # {'score': 0.2677205801010132,
72
+ # 'token': 12761,
73
+ # 'token_str': 'braços',
74
+ # 'sequence': 'Eduardo abriu os braços, mas não quis se levantar. Ficou deitado e viu que horas eram.'},
75
+ # {'score': 0.0007434834260493517,
76
+ # 'token': 24298,
77
+ # 'token_str': 'óculos',
78
+ # 'sequence': 'Eduardo abriu os óculos, mas não quis se levantar. Ficou deitado e viu que horas eram.'}]
79
+
80
+ ```
81
+
82
+ Criação de um embedding para uma frase:
83
+
84
+ ```python
85
+ from transformers import BertTokenizer, BertModel, pipeline
86
+ import torch
87
+
88
+ model = BertModel.from_pretrained("ricardoz/BERTugues-base-portuguese-cased")
89
+ tokenizer = BertTokenizer.from_pretrained("ricardoz/BERTugues-base-portuguese-cased", do_lower_case=False)
90
+
91
+ input_ids = tokenizer.encode('[CLS] Eduardo abriu os olhos, mas não quis se levantar. Ficou deitado e viu que horas eram.', return_tensors='pt')
92
+
93
+ with torch.no_grad():
94
+ last_hidden_state = model(input_ids).last_hidden_state[:, 0]
95
+
96
+ last_hidden_state
97
+
98
+ # tensor([[-1.5727e+00, 5.4707e-01, -2.6169e-01, -3.0714e-01, -9.4545e-01,
99
+ # 4.1557e-01, -7.9884e-01, -2.1481e-01, 5.9792e-01, -1.4198e+00,
100
+ # 1.1929e-01, 8.0228e-01, 5.4977e-01, 1.2710e+00, -2.9444e-01,
101
+ # 1.3398e+00, 1.4413e-01, 8.2983e-01, -8.2349e-02, 1.8593e-01,
102
+ ```
103
+
104
+ ## Mais informações
105
+
106
+ Para mais informações acesso [nosso Github](https://github.com/ricardozago/BERTugues)!
config.json ADDED
@@ -0,0 +1,24 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "architectures": [
3
+ "BertForPreTraining"
4
+ ],
5
+ "attention_probs_dropout_prob": 0.1,
6
+ "classifier_dropout": null,
7
+ "hidden_act": "gelu",
8
+ "hidden_dropout_prob": 0.1,
9
+ "hidden_size": 768,
10
+ "initializer_range": 0.02,
11
+ "intermediate_size": 3072,
12
+ "layer_norm_eps": 1e-12,
13
+ "max_position_embeddings": 512,
14
+ "model_type": "bert",
15
+ "num_attention_heads": 12,
16
+ "num_hidden_layers": 12,
17
+ "pad_token_id": 0,
18
+ "position_embedding_type": "absolute",
19
+ "torch_dtype": "float32",
20
+ "transformers_version": "4.29.2",
21
+ "type_vocab_size": 2,
22
+ "use_cache": true,
23
+ "vocab_size": 30522
24
+ }
flax_model.msgpack ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:6614c3793e8f483f8780d22e9e4a3082dbdddb1794b489ff0545506cebc1ceb8
3
+ size 440433120
model.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:1f63a5a6a6dc6d6c4a01fec9c90e747249b3dfb0248e33761116c146fe9d1386
3
+ size 440453984
pytorch_model.bin ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:4caca4095eafc5ddf80456494b951729617cbb609a667edb2a03830b36cd491e
3
+ size 440497481
tf_model.h5 ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:776458c678dee6596dc2ae4c417a0dcc72e6d405155f4599bec10c8539cdc914
3
+ size 536063432
vocab.txt ADDED
The diff for this file is too large to render. See raw diff