--- 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 ) ```