NN_19K_NERFT / README.md
StrangeSX's picture
Update README.md
7dc86f0 verified
---
library_name: transformers
tags: []
---
# NN-NER-FT: โมเดล Named Entity Recognition (NER) ที่ Fine-tune แล้ว
## ภาพรวม
**NN-NER-FT** เป็นโมเดลสำหรับงาน Named Entity Recognition (NER) ในภาษาไทย ที่ผ่านการ fine-tune จากโมเดลพื้นฐาน โดยใช้ชุดข้อมูล NN-NER จาก Hugging Face ในการฝึก
โมเดลนี้สามารถระบุ entity ต่าง ๆ เช่น BRAND, PRODUCT_NAME, PRODUCT_SIZE, SPEC, SPEC_PER_UNIT, PACKAGE, และอื่น ๆ ในข้อความภาษาไทย
## การใช้งานที่ตั้งใจไว้
- **งานหลัก:** การระบุ Named Entities ในข้อความภาษาไทย
- **กลุ่มเป้าหมาย:** นักวิจัย, นักพัฒนา และองค์กรที่ต้องการระบบ NER สำหรับภาษาไทย
- **ข้อควรระวัง:** โมเดลนี้เหมาะสำหรับการทดลองและพัฒนาเบื้องต้น สำหรับงาน production อาจต้องปรับปรุงและเทรนเพิ่มเติม
## รายละเอียดการเทรน
### ข้อมูลชุดฝึก
- **ชุดข้อมูล:** NN-NER (จาก Hugging Face)
- **การแบ่งชุดข้อมูล:**
- Train: 80%
- Validation: 10%
- Test: 10%
### Hyperparameters (สำหรับการสาธิต)
- **Batch Size:** 16 (สำหรับทั้งการเทรนและการประเมินต่ออุปกรณ์)
- **Learning Rate:** 3e-5
- **Warmup Ratio:** 0.1
- **Weight Decay:** 0.01
- **Adam Optimizer:**
- Beta1: 0.9
- Beta2: 0.999
- Epsilon: 1e-8
- **Epochs:** 3 (สำหรับการสาธิต – ในงานจริงอาจเทรนมากขึ้น)
- **Mixed Precision:** ใช้ fp16
- **Checkpoint & Evaluation Strategy:**
- ประเมินผลทุก 100 steps
- บันทึก checkpoint ทุก 100 steps (จำกัดที่ 5 checkpoint ล่าสุด)
- โหลดโมเดลที่ดีที่สุดตาม metric `eval_loss`
### ตัวอย่างคำสั่งการตั้งค่า TrainingArguments
```python
thainer_training_args = TrainingArguments(
output_dir=path.join("finetuned_models", "NN-NER-FT"),
overwrite_output_dir=True,
evaluation_strategy="steps",
eval_steps=100,
save_strategy="steps",
save_steps=100,
save_total_limit=5,
per_device_train_batch_size=16,
per_device_eval_batch_size=16,
learning_rate=3e-5,
warmup_ratio=0.1,
weight_decay=0.01,
adam_beta1=0.9,
adam_beta2=0.999,
adam_epsilon=1e-8,
num_train_epochs=3,
fp16=True,
load_best_model_at_end=True,
metric_for_best_model="eval_loss"
)
```
### ผลการประเมินบนชุดทดสอบ
- **Test Loss**: 0.2114
- **Test Micro Average F1**: 0.8580
- **Test Macro Average F1**: 0.8034
### F1 Score แยกตาม Class
- **BRAND**: 0.8358
- **GRADE**: 0.6835
- **PACKAGE**: 0.8788
- **PRODUCT_NAME**: 0.8638
- **PRODUCT_SIZE**: 0.9624
- **SPEC**: 0.6606
- **SPEC_PER_UNIT**: 0.7481
- **SPEC_SIZE**: 0.6471
- **STORAGE_CONDITION**: 0.9504
### โค้ดการประเมินผล (Evaluation Pipeline)
```python
def thainer_f1_metric(eval_pred):
predictions = eval_pred.predictions.argmax(axis=2)
labels = eval_pred.label_ids
predictions = [
[thainer_id2label[p] for p, l in zip(p_row, l_row) if l != -100]
for p_row, l_row in zip(predictions, labels)
]
labels = [
[thainer_id2label[l] for l in l_row if l != -100]
for l_row in labels
]
result = seqeval_metric(y_pred=predictions, y_true=labels, output_dict=True)
tag_set = {tag[2:] for tag in thainer_id2label.values() if tag != "O"}
return {
"micro_average_f1": result["micro avg"]["f1-score"],
"macro_average_f1": result["macro avg"]["f1-score"],
"class_f1": {
tag: result[tag]["f1-score"]
for tag in result if tag in tag_set
}
}
thainer_trainer = Trainer(
model=thainer_model,
args=thainer_training_args,
train_dataset=thainer["train"],
eval_dataset=thainer["validation"],
tokenizer=tokenizer,
data_collator=thainer_data_collator,
compute_metrics=thainer_f1_metric
)
```