wangchanberta-thainer-corpus-v2-2

This model is a fine-tuned version of airesearch/wangchanberta-base-att-spm-uncased on an pythainlp/thainer-corpus-v2.2 dataset. It achieves the following results on the evaluation set:

  • Loss: 0.1053
  • Precision: 0.8300
  • Recall: 0.8870
  • F1: 0.8575
  • Accuracy: 0.9717

Model description

Training and evaluation data

Validation from the Validation set

{'eval_loss': 0.10526859760284424,
 'eval_precision': 0.8299675891298928,
 'eval_recall': 0.8870237143618439,
 'eval_f1': 0.8575476558475013,
 'eval_accuracy': 0.9717195641875889,
 'eval_runtime': 18.2172,
 'eval_samples_per_second': 80.967,
 'eval_steps_per_second': 5.105,
 'epoch': 10.0}

Test from the Test set

{'eval_loss': 0.11170374602079391,
 'eval_precision': 0.8178285159096429,
 'eval_recall': 0.8823375262054507,
 'eval_f1': 0.8488591957645278,
 'eval_accuracy': 0.968742017138478,
 'eval_runtime': 18.6202,
 'eval_samples_per_second': 79.054,
 'eval_steps_per_second': 4.941,
 'epoch': 10.0}

How to use

Inference

Huggingface doesn't support inference token classification for Thai and It will give wrong tag. You must using this code.

from transformers import AutoTokenizer
from transformers import AutoModelForTokenClassification
from pythainlp.tokenize import word_tokenize # pip install pythainlp
import torch

name="Porameht/wangchanberta-thainer-corpus-v2-2"
tokenizer = AutoTokenizer.from_pretrained(name)
model = AutoModelForTokenClassification.from_pretrained(name)

sentence="นายปรเมศ คุ้มสมบัติ 552/44 หมู่ 1 บ้านหนองบัว ต.ภูหอ อ.ภูหลวง จ.เลย 42230"
cut=word_tokenize(sentence.replace(" ", "<_>"))
inputs=tokenizer(cut,is_split_into_words=True,return_tensors="pt")

ids = inputs["input_ids"]
mask = inputs["attention_mask"]
# forward pass
outputs = model(ids, attention_mask=mask)
logits = outputs[0]

predictions = torch.argmax(logits, dim=2)
predicted_token_class = [model.config.id2label[t.item()] for t in predictions[0]]

def fix_span_error(words,ner):
    _ner = []
    _ner=ner
    _new_tag=[]
    for i,j in zip(words,_ner):
        #print(i,j)
        i=tokenizer.decode(i)
        if i.isspace() and j.startswith("B-"):
            j="O"
        if i=='' or i=='<s>' or i=='</s>':
            continue
        if i=="<_>":
            i=" "
        _new_tag.append((i,j))
    return _new_tag

ner_tag=fix_span_error(inputs['input_ids'][0],predicted_token_class)
ner_tag

output:

[('นาย', 'B-PERSON'),
 ('ปร', 'I-PERSON'),
 ('เม', 'I-PERSON'),
 ('ศ', 'I-PERSON'),
 (' ', 'B-LOCATION'),
 ('คุ้ม', 'I-PERSON'),
 ('สมบัติ', 'I-PERSON'),
 (' ', 'O'),
 ('55', 'O'),
 ('2/', 'O'),
 ('44', 'O'),
 (' ', 'B-LOCATION'),
 ('หมู่', 'B-LOCATION'),
 (' ', 'I-LOCATION'),
 ('1', 'I-LOCATION'),
 (' ', 'B-LOCATION'),
 ('บ้าน', 'B-LOCATION'),
 ('หนอง', 'I-LOCATION'),
 ('บัว', 'I-LOCATION'),
 (' ', 'B-LOCATION'),
 ('ต', 'B-LOCATION'),
 ('.', 'I-LOCATION'),
 ('ภู', 'I-LOCATION'),
 ('หอ', 'I-LOCATION'),
 (' ', 'B-LOCATION'),
 ('อ', 'B-LOCATION'),
 ('.', 'I-LOCATION'),
 ('ภู', 'I-LOCATION'),
 ('หลวง', 'I-LOCATION'),
 (' ', 'B-LOCATION'),
 ('จ', 'B-LOCATION'),
 ('.', 'I-LOCATION'),
 ('เลย', 'I-LOCATION'),
 (' ', 'B-ZIP'),
 ('4', 'B-ZIP'),
 ('22', 'B-ZIP'),
 ('30', 'B-ZIP')]

Training procedure

Training hyperparameters

The following hyperparameters were used during training:

  • learning_rate: 2e-05
  • train_batch_size: 16
  • eval_batch_size: 16
  • seed: 42
  • optimizer: Use adamw_torch with betas=(0.9,0.999) and epsilon=1e-08 and optimizer_args=No additional optimizer arguments
  • lr_scheduler_type: linear
  • num_epochs: 10

Training results

Training Loss Epoch Step Validation Loss Precision Recall F1 Accuracy
No log 1.0 274 0.1790 0.6867 0.7908 0.7351 0.9484
0.2681 2.0 548 0.1331 0.7788 0.8463 0.8111 0.9650
0.2681 3.0 822 0.1135 0.8082 0.8766 0.8410 0.9692
0.0829 4.0 1096 0.1053 0.8300 0.8870 0.8575 0.9717
0.0829 5.0 1370 0.1136 0.8175 0.8868 0.8507 0.9704
0.0512 6.0 1644 0.1135 0.8408 0.8836 0.8616 0.9723
0.0512 7.0 1918 0.1162 0.8429 0.8894 0.8656 0.9725
0.037 8.0 2192 0.1205 0.8475 0.8916 0.8690 0.9730
0.037 9.0 2466 0.1237 0.8490 0.8942 0.8710 0.9732
0.0275 10.0 2740 0.1222 0.8480 0.8934 0.8701 0.9733

Framework versions

  • Transformers 4.47.1
  • Pytorch 2.5.1+cu121
  • Datasets 3.2.0
  • Tokenizers 0.21.0
Downloads last month
13
Safetensors
Model size
105M params
Tensor type
F32
·
Inference Providers NEW
This model is not currently available via any of the supported Inference Providers.

Model tree for Porameht/wangchanberta-thainer-corpus-v2-2

Finetuned
(32)
this model

Dataset used to train Porameht/wangchanberta-thainer-corpus-v2-2