|
# <a name="introduction"></a> BERTweet: A pre-trained language model for English Tweets |
|
|
|
BERTweet is the first public large-scale language model pre-trained for English Tweets. BERTweet is trained based on the [RoBERTa](https://github.com/pytorch/fairseq/blob/master/examples/roberta/README.md) pre-training procedure. The corpus used to pre-train BERTweet consists of 850M English Tweets (16B word tokens ~ 80GB), containing 845M Tweets streamed from 01/2012 to 08/2019 and 5M Tweets related to the **COVID-19** pandemic. The general architecture and experimental results of BERTweet can be found in our [paper](https://aclanthology.org/2020.emnlp-demos.2/): |
|
|
|
@inproceedings{bertweet, |
|
title = {{BERTweet: A pre-trained language model for English Tweets}}, |
|
author = {Dat Quoc Nguyen and Thanh Vu and Anh Tuan Nguyen}, |
|
booktitle = {Proceedings of the 2020 Conference on Empirical Methods in Natural Language Processing: System Demonstrations}, |
|
pages = {9--14}, |
|
year = {2020} |
|
} |
|
|
|
**Please CITE** our paper when BERTweet is used to help produce published results or is incorporated into other software. |
|
|
|
For further information or requests, please go to [BERTweet's homepage](https://github.com/VinAIResearch/BERTweet)! |
|
|
|
### Main results |
|
|
|
<p float="left"> |
|
<img width="275" alt="postagging" src="https://user-images.githubusercontent.com/2412555/135724590-01d8d435-262d-44fe-a383-cd39324fe190.png" /> |
|
<img width="275" alt="ner" src="https://user-images.githubusercontent.com/2412555/135724598-1e3605e7-d8ce-4c5e-be4a-62ae8501fae7.png" /> |
|
</p> |
|
|
|
<p float="left"> |
|
<img width="275" alt="sentiment" src="https://user-images.githubusercontent.com/2412555/135724597-f1981f1e-fe73-4c03-b1ff-0cae0cc5f948.png" /> |
|
<img width="275" alt="irony" src="https://user-images.githubusercontent.com/2412555/135724595-15f4f2c8-bbb6-4ee6-82a0-034769dec183.png" /> |
|
</p> |
|
|
|
### <a name="models2"></a> Pre-trained models |
|
|
|
|
|
Model | #params | Arch. | Pre-training data |
|
---|---|---|--- |
|
`vinai/bertweet-base` | 135M | base | 850M English Tweets (cased) |
|
`vinai/bertweet-covid19-base-cased` | 135M | base | 23M COVID-19 English Tweets (cased) |
|
`vinai/bertweet-covid19-base-uncased` | 135M | base | 23M COVID-19 English Tweets (uncased) |
|
`vinai/bertweet-large` | 355M | large | 873M English Tweets (cased) |
|
|
|
### <a name="usage2"></a> Example usage |
|
|
|
|
|
```python |
|
import torch |
|
from transformers import AutoModel, AutoTokenizer |
|
|
|
bertweet = AutoModel.from_pretrained("vinai/bertweet-base") |
|
|
|
# For transformers v4.x+: |
|
tokenizer = AutoTokenizer.from_pretrained("vinai/bertweet-base", use_fast=False) |
|
|
|
# For transformers v3.x: |
|
# tokenizer = AutoTokenizer.from_pretrained("vinai/bertweet-base") |
|
|
|
# INPUT TWEET IS ALREADY NORMALIZED! |
|
line = "SC has first two presumptive cases of coronavirus , DHEC confirms HTTPURL via @USER :crying_face:" |
|
|
|
input_ids = torch.tensor([tokenizer.encode(line)]) |
|
|
|
with torch.no_grad(): |
|
features = bertweet(input_ids) # Models outputs are now tuples |
|
|
|
## With TensorFlow 2.0+: |
|
# from transformers import TFAutoModel |
|
# bertweet = TFAutoModel.from_pretrained("vinai/bertweet-base") |
|
``` |
|
|
|
### <a name="preprocess"></a> Normalize raw input Tweets |
|
|
|
Before applying `fastBPE` to the pre-training corpus of 850M English Tweets, we tokenized these Tweets using `TweetTokenizer` from the NLTK toolkit and used the `emoji` package to translate emotion icons into text strings (here, each icon is referred to as a word token). We also normalized the Tweets by converting user mentions and web/url links into special tokens `@USER` and `HTTPURL`, respectively. Thus it is recommended to also apply the same pre-processing step for BERTweet-based downstream applications w.r.t. the raw input Tweets. BERTweet provides this pre-processing step by enabling the `normalization` argument. This argument currently only supports models "`vinai/bertweet-base`", "`vinai/bertweet-covid19-base-cased`" and "`vinai/bertweet-covid19-base-uncased`". |
|
|
|
- Install `emoji`: `pip3 install emoji==0.6.0` |
|
- The `emoji` version must be either 0.5.4 or 0.6.0. Newer `emoji` versions have been updated to newer versions of the Emoji Charts, thus not consistent with the one used for pre-processing our pre-training Tweet corpus. |
|
|
|
```python |
|
import torch |
|
from transformers import AutoTokenizer |
|
|
|
# Load the AutoTokenizer with a normalization mode if the input Tweet is raw |
|
tokenizer = AutoTokenizer.from_pretrained("vinai/bertweet-base", normalization=True) |
|
|
|
# from transformers import BertweetTokenizer |
|
# tokenizer = BertweetTokenizer.from_pretrained("vinai/bertweet-base", normalization=True) |
|
|
|
line = "SC has first two presumptive cases of coronavirus, DHEC confirms https://postandcourier.com/health/covid19/sc-has-first-two-presumptive-cases-of-coronavirus-dhec-confirms/article_bddfe4ae-5fd3-11ea-9ce4-5f495366cee6.html?utm_medium=social&utm_source=twitter&utm_campaign=user-share… via @postandcourier" |
|
|
|
input_ids = torch.tensor([tokenizer.encode(line)]) |
|
``` |
|
|