|
--- |
|
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'}] |
|
``` |