<a name="introduction"></a> BERTweet.BR: A Pre-Trained Language Model for Tweets in Portuguese
Having the same architecture of BERTweet we trained our model from scratch following RoBERTa pre-training procedure on a corpus of approximately 9GB containing 100M Portuguese Tweets.
Usage
Normalized Inputs
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
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
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'}]