File size: 3,816 Bytes
f5344ed
487659f
f5344ed
 
6686b7f
f8c2752
 
966dd59
 
 
 
07fab57
 
966dd59
 
 
 
 
07fab57
966dd59
f38ec9f
5c8dfaa
 
5af2a4f
5c8dfaa
966dd59
5c8dfaa
966dd59
 
5c8dfaa
f38ec9f
 
 
5af2a4f
 
 
 
07fab57
 
 
 
 
1332e64
07fab57
 
 
1332e64
1bcd20e
1332e64
5c8dfaa
 
 
 
 
1332e64
5c8dfaa
24940da
5c8dfaa
24940da
 
 
 
5c8dfaa
5af2a4f
 
 
 
 
 
 
5c8dfaa
5af2a4f
 
 
1332e64
07fab57
786a2bc
 
07fab57
 
 
 
 
 
 
 
1bcd20e
5c8dfaa
1bcd20e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
966dd59
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
---
language: pt
license: apache-2.0
---

# <a name="introduction"></a> BERTweet.BR: A Pre-Trained Language Model for Tweets in Portuguese

Having the same architecture of [BERTweet](https://huggingface.co/docs/transformers/model_doc/bertweet) we trained our model from scratch following [RoBERTa](https://huggingface.co/docs/transformers/model_doc/roberta) pre-training procedure on a corpus of approximately 9GB containing 100M Portuguese Tweets.

## Usage

### Normalized Inputs

```python
import torch
from transformers import AutoModel, AutoTokenizer 

model = AutoModel.from_pretrained('melll-uff/bertweetbr')
tokenizer = AutoTokenizer.from_pretrained('melll-uff/bertweetbr', normalization=False)

# INPUT TWEETS ALREADY NORMALIZED!
inputs = [
    "Procuro um amor , que seja bom pra mim ... vou procurar , eu vou até o fim :nota_musical:",
    "Que jogo ontem @USER :mãos_juntas:",
    "Demojizer para Python é :polegar_para_cima: e está disponível em HTTPURL"]

encoded_inputs = tokenizer(inputs, return_tensors="pt", padding=True)

with torch.no_grad():
    last_hidden_states = model(**encoded_inputs)

# CLS Token of last hidden states. Shape: (number of input sentences, hidden sizeof the model)
last_hidden_states[0][:,0,:]

tensor([[-0.1430, -0.1325,  0.1595,  ..., -0.0802, -0.0153, -0.1358],
        [-0.0108,  0.1415,  0.0695,  ...,  0.1420,  0.1153, -0.0176],
        [-0.1854,  0.1866,  0.3163,  ..., -0.2117,  0.2123, -0.1907]])
```

 ### Normalize raw input Tweets

 ```python
from emoji import demojize
import torch
from transformers import AutoModel, AutoTokenizer 

model = AutoModel.from_pretrained('melll-uff/bertweetbr')
tokenizer = AutoTokenizer.from_pretrained('melll-uff/bertweetbr', normalization=True)

inputs = [
    "Procuro um amor , que seja bom pra mim ... vou procurar , eu vou até o fim 🎵",
    "Que jogo ontem @cristiano 🙏",
    "Demojizer para Python é 👍 e está disponível em https://pypi.org/project/emoji/"]

tokenizer.demojizer = lambda x: demojize(x, language='pt')

[tokenizer.normalizeTweet(s) for s in inputs]

# Tokenizer first normalizes tweet sentences
['Procuro um amor , que seja bom pra mim ... vou procurar , eu vou até o fim :nota_musical:',
 'Que jogo ontem @USER :mãos_juntas:',
 'Demojizer para Python é :polegar_para_cima: e está disponível em HTTPURL']

encoded_inputs = tokenizer(inputs, return_tensors="pt", padding=True)

with torch.no_grad():
    last_hidden_states = model(**encoded_inputs)

# CLS Token of last hidden states. Shape: (number of input sentences, hidden sizeof the model)
last_hidden_states[0][:,0,:]

tensor([[-0.1430, -0.1325,  0.1595,  ..., -0.0802, -0.0153, -0.1358],
        [-0.0108,  0.1415,  0.0695,  ...,  0.1420,  0.1153, -0.0176],
        [-0.1854,  0.1866,  0.3163,  ..., -0.2117,  0.2123, -0.1907]])
```

 ### Mask Filling with Pipeline

 ```python
from transformers import pipeline

model_name = 'melll-uff/bertweetbr'
tokenizer = AutoTokenizer.from_pretrained('melll-uff/bertweetbr', normalization=False)

filler_mask = pipeline("fill-mask", model=model_name, tokenizer=tokenizer)
filler_mask("Rio é a <mask> cidade do Brasil.", top_k=5)

# Output
[{'sequence': 'Rio é a melhor cidade do Brasil.',
  'score': 0.9871652126312256,
  'token': 120,
  'token_str': 'm e l h o r'},
 {'sequence': 'Rio é a pior cidade do Brasil.',
  'score': 0.005050931591540575,
  'token': 316,
  'token_str': 'p i o r'},
 {'sequence': 'Rio é a maior cidade do Brasil.',
  'score': 0.004420778248459101,
  'token': 389,
  'token_str': 'm a i o r'},
 {'sequence': 'Rio é a minha cidade do Brasil.',
  'score': 0.0021856199018657207,
  'token': 38,
  'token_str': 'm i n h a'},
 {'sequence': 'Rio é a segunda cidade do Brasil.',
  'score': 0.0002110043278662488,
  'token': 667,
  'token_str': 's e g u n d a'}]
```