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
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)
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
)
- Downloads last month
- 11
Inference Providers
NEW
This model is not currently available via any of the supported Inference Providers.