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
Safetensors
Model size
105M params
Tensor type
F32
·
Inference Providers NEW
This model is not currently available via any of the supported Inference Providers.