|
--- |
|
language: en |
|
tags: |
|
- singapore |
|
- sg |
|
- singlish |
|
- malaysia |
|
- ms |
|
- manglish |
|
- bert-large-uncased |
|
license: mit |
|
datasets: |
|
- reddit singapore, malaysia |
|
- hardwarezone |
|
widget: |
|
- text: "kopi c siew [MASK]" |
|
- text: "die [MASK] must try" |
|
--- |
|
|
|
# Model name |
|
|
|
SingBert Large - Bert for Singlish (SG) and Manglish (MY). |
|
|
|
## Model description |
|
|
|
Similar to [SingBert](https://huggingface.co/zanelim/singbert) but the large version, which was initialized from [BERT large uncased (whole word masking)](https://github.com/google-research/bert#pre-trained-models), with pre-training finetuned on |
|
[singlish](https://en.wikipedia.org/wiki/Singlish) and [manglish](https://en.wikipedia.org/wiki/Manglish) data. |
|
|
|
## Intended uses & limitations |
|
|
|
#### How to use |
|
|
|
```python |
|
>>> from transformers import pipeline |
|
>>> nlp = pipeline('fill-mask', model='zanelim/singbert-large-sg') |
|
>>> nlp("kopi c siew [MASK]") |
|
|
|
[{'sequence': '[CLS] kopi c siew dai [SEP]', |
|
'score': 0.9003700017929077, |
|
'token': 18765, |
|
'token_str': 'dai'}, |
|
{'sequence': '[CLS] kopi c siew mai [SEP]', |
|
'score': 0.0779474675655365, |
|
'token': 14736, |
|
'token_str': 'mai'}, |
|
{'sequence': '[CLS] kopi c siew. [SEP]', |
|
'score': 0.0032227332703769207, |
|
'token': 1012, |
|
'token_str': '.'}, |
|
{'sequence': '[CLS] kopi c siew bao [SEP]', |
|
'score': 0.0017727474914863706, |
|
'token': 25945, |
|
'token_str': 'bao'}, |
|
{'sequence': '[CLS] kopi c siew peng [SEP]', |
|
'score': 0.0012526646023616195, |
|
'token': 26473, |
|
'token_str': 'peng'}] |
|
|
|
>>> nlp("one teh c siew dai, and one kopi [MASK]") |
|
|
|
[{'sequence': '[CLS] one teh c siew dai, and one kopi. [SEP]', |
|
'score': 0.5249741077423096, |
|
'token': 1012, |
|
'token_str': '.'}, |
|
{'sequence': '[CLS] one teh c siew dai, and one kopi o [SEP]', |
|
'score': 0.27349168062210083, |
|
'token': 1051, |
|
'token_str': 'o'}, |
|
{'sequence': '[CLS] one teh c siew dai, and one kopi peng [SEP]', |
|
'score': 0.057190295308828354, |
|
'token': 26473, |
|
'token_str': 'peng'}, |
|
{'sequence': '[CLS] one teh c siew dai, and one kopi c [SEP]', |
|
'score': 0.04022320732474327, |
|
'token': 1039, |
|
'token_str': 'c'}, |
|
{'sequence': '[CLS] one teh c siew dai, and one kopi? [SEP]', |
|
'score': 0.01191170234233141, |
|
'token': 1029, |
|
'token_str': '?'}] |
|
|
|
>>> nlp("die [MASK] must try") |
|
|
|
[{'sequence': '[CLS] die die must try [SEP]', |
|
'score': 0.9921030402183533, |
|
'token': 3280, |
|
'token_str': 'die'}, |
|
{'sequence': '[CLS] die also must try [SEP]', |
|
'score': 0.004993876442313194, |
|
'token': 2036, |
|
'token_str': 'also'}, |
|
{'sequence': '[CLS] die liao must try [SEP]', |
|
'score': 0.000317625846946612, |
|
'token': 727, |
|
'token_str': 'liao'}, |
|
{'sequence': '[CLS] die still must try [SEP]', |
|
'score': 0.0002260878391098231, |
|
'token': 2145, |
|
'token_str': 'still'}, |
|
{'sequence': '[CLS] die i must try [SEP]', |
|
'score': 0.00016935862367972732, |
|
'token': 1045, |
|
'token_str': 'i'}] |
|
|
|
>>> nlp("dont play [MASK] leh") |
|
|
|
[{'sequence': '[CLS] dont play play leh [SEP]', |
|
'score': 0.9079819321632385, |
|
'token': 2377, |
|
'token_str': 'play'}, |
|
{'sequence': '[CLS] dont play punk leh [SEP]', |
|
'score': 0.006846973206847906, |
|
'token': 7196, |
|
'token_str': 'punk'}, |
|
{'sequence': '[CLS] dont play games leh [SEP]', |
|
'score': 0.004041737411171198, |
|
'token': 2399, |
|
'token_str': 'games'}, |
|
{'sequence': '[CLS] dont play politics leh [SEP]', |
|
'score': 0.003728888463228941, |
|
'token': 4331, |
|
'token_str': 'politics'}, |
|
{'sequence': '[CLS] dont play cheat leh [SEP]', |
|
'score': 0.0032805048394948244, |
|
'token': 21910, |
|
'token_str': 'cheat'}] |
|
|
|
>>> nlp("confirm plus [MASK]") |
|
|
|
{'sequence': '[CLS] confirm plus chop [SEP]', |
|
'score': 0.9749826192855835, |
|
'token': 24494, |
|
'token_str': 'chop'}, |
|
{'sequence': '[CLS] confirm plus chopped [SEP]', |
|
'score': 0.017554156482219696, |
|
'token': 24881, |
|
'token_str': 'chopped'}, |
|
{'sequence': '[CLS] confirm plus minus [SEP]', |
|
'score': 0.002725469646975398, |
|
'token': 15718, |
|
'token_str': 'minus'}, |
|
{'sequence': '[CLS] confirm plus guarantee [SEP]', |
|
'score': 0.000900257145985961, |
|
'token': 11302, |
|
'token_str': 'guarantee'}, |
|
{'sequence': '[CLS] confirm plus one [SEP]', |
|
'score': 0.0004384620988275856, |
|
'token': 2028, |
|
'token_str': 'one'}] |
|
|
|
>>> nlp("catch no [MASK]") |
|
|
|
[{'sequence': '[CLS] catch no ball [SEP]', |
|
'score': 0.9381157159805298, |
|
'token': 3608, |
|
'token_str': 'ball'}, |
|
{'sequence': '[CLS] catch no balls [SEP]', |
|
'score': 0.060842301696538925, |
|
'token': 7395, |
|
'token_str': 'balls'}, |
|
{'sequence': '[CLS] catch no fish [SEP]', |
|
'score': 0.00030917322146706283, |
|
'token': 3869, |
|
'token_str': 'fish'}, |
|
{'sequence': '[CLS] catch no breath [SEP]', |
|
'score': 7.552534952992573e-05, |
|
'token': 3052, |
|
'token_str': 'breath'}, |
|
{'sequence': '[CLS] catch no tail [SEP]', |
|
'score': 4.208395694149658e-05, |
|
'token': 5725, |
|
'token_str': 'tail'}] |
|
|
|
``` |
|
|
|
Here is how to use this model to get the features of a given text in PyTorch: |
|
```python |
|
from transformers import BertTokenizer, BertModel |
|
tokenizer = BertTokenizer.from_pretrained('zanelim/singbert-large-sg') |
|
model = BertModel.from_pretrained("zanelim/singbert-large-sg") |
|
text = "Replace me by any text you'd like." |
|
encoded_input = tokenizer(text, return_tensors='pt') |
|
output = model(**encoded_input) |
|
``` |
|
|
|
and in TensorFlow: |
|
```python |
|
from transformers import BertTokenizer, TFBertModel |
|
tokenizer = BertTokenizer.from_pretrained("zanelim/singbert-large-sg") |
|
model = TFBertModel.from_pretrained("zanelim/singbert-large-sg") |
|
text = "Replace me by any text you'd like." |
|
encoded_input = tokenizer(text, return_tensors='tf') |
|
output = model(encoded_input) |
|
``` |
|
|
|
#### Limitations and bias |
|
This model was finetuned on colloquial Singlish and Manglish corpus, hence it is best applied on downstream tasks involving the main |
|
constituent languages- english, mandarin, malay. Also, as the training data is mainly from forums, beware of existing inherent bias. |
|
|
|
## Training data |
|
Colloquial singlish and manglish (both are a mixture of English, Mandarin, Tamil, Malay, and other local dialects like Hokkien, Cantonese or Teochew) |
|
corpus. The corpus is collected from subreddits- `r/singapore` and `r/malaysia`, and forums such as `hardwarezone`. |
|
|
|
## Training procedure |
|
|
|
Initialized with [bert large uncased (whole word masking)](https://github.com/google-research/bert#pre-trained-models) vocab and checkpoints (pre-trained weights). |
|
Top 1000 custom vocab tokens (non-overlapped with original bert vocab) were further extracted from training data and filled into unused tokens in original bert vocab. |
|
|
|
Pre-training was further finetuned on training data with the following hyperparameters |
|
* train_batch_size: 512 |
|
* max_seq_length: 128 |
|
* num_train_steps: 300000 |
|
* num_warmup_steps: 5000 |
|
* learning_rate: 2e-5 |
|
* hardware: TPU v3-8 |
|
|