Files changed (1) hide show
  1. README.md +84 -4
README.md CHANGED
@@ -1,12 +1,14 @@
1
  ---
2
- language:
3
  - th
 
4
  tags:
5
  - sentiment-analysis
6
  - thai
7
  - wangchanberta
 
 
8
  - lstm
9
- pipeline_tag: text-classification
10
  license: apache-2.0
11
  library_name: transformers
12
  datasets:
@@ -15,5 +17,83 @@ datasets:
15
 
16
  # Thai Sentiment (WangchanBERTa + LSTM Heads)
17
 
18
- โมเดลสำหรับ Sentiment Analysis ภาษาไทย โดยใช้ WangchanBERTa เป็น backbone
19
- และเพิ่ม LSTM/CNN-LSTM heads เพื่อปรับปรุง performance
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  ---
2
+ language:
3
  - th
4
+ pipeline_tag: text-classification
5
  tags:
6
  - sentiment-analysis
7
  - thai
8
  - wangchanberta
9
+ - bilstm
10
+ - cnn
11
  - lstm
 
12
  license: apache-2.0
13
  library_name: transformers
14
  datasets:
 
17
 
18
  # Thai Sentiment (WangchanBERTa + LSTM Heads)
19
 
20
+ โมเดลสำหรับวิเคราะห์อารมณ์ (2 คลาส: NEG/POS) ภาษาไทย โดยใช้ **WangchanBERTa** เป็น backbone และเพิ่มหัว (heads) แบบ LSTM/CNN-LSTM หลายสถาปัตยกรรมสำหรับเปรียบเทียบและใช้งานตามบริบท
21
+
22
+ รีโปนี้บรรจุโมเดล 4 ตัว (เก็บเป็นโฟลเดอร์ย่อย):
23
+
24
+ - `WCB/` — WangchanBERTa (ใช้ [CLS])
25
+ - `WCB_BiLSTM/` — WangchanBERTa → BiLSTM → Pooling
26
+ - `WCB_CNN_BiLSTM/` — WangchanBERTa → CNN → BiLSTM → Pooling
27
+ - `WCB_4Layer_BiLSTM/` — WangchanBERTa (ถ่วงน้ำหนัก 4 เลเยอร์สุดท้าย) → BiLSTM → Pooling
28
+
29
+ แต่ละโฟลเดอร์มี `model.safetensors` และ `config.json` (เมตาดาต้า: `id2label/label2id`, `max_length`, `pooling_after_lstm`, `base_model`)
30
+
31
+ ## สรุปผลการประเมิน (5-fold CV)
32
+
33
+ | Model | Accuracy (%) | F1-Score (%) | AUC (%) |
34
+ |---|---:|---:|---:|
35
+ | WCB | **90.33 ± 0.32** | **89.92 ± 0.33** | **95.72 ± 0.22** |
36
+ | WCB_BiLSTM | **90.93 ± 0.37** | **90.54 ± 0.39** | **95.57 ± 1.22** |
37
+ | WCB_CNN_BiLSTM | **90.14 ± 0.66** | **89.73 ± 0.68** | **95.83 ± 0.42** |
38
+ | WCB_4Layer_BiLSTM | **90.52 ± 0.65** | **90.13 ± 0.68** | **95.43 ± 0.36** |
39
+
40
+ **ข้อสังเกตย่อ**
41
+ - **แม่นยำสูงสุด**: `WCB_BiLSTM` (Acc/F1 สูงสุด) แต่ AUC แปรปรวนกว่าตัวอื่นเล็กน้อย (±1.22%).
42
+ - **AUC สูงสุด/เสถียรดี**: `WCB_CNN_BiLSTM` (AUC 95.83% ±0.42) เหมาะหากให้ความสำคัญกับการแยกคลาสจากสกอร์ความเชื่อมั่น แต่ Acc/F1 ต่ำกว่าเล็กน้อย.
43
+ - **เร็ว/เสถียร**: `WCB` เร็วที่สุดและเสถียรสุด เหมาะงานทรัพยากรจำกัด.
44
+
45
+ ### เวลาเทรน (โดยเฉลี่ย)
46
+ | Model | วินาที/รอบ | เวลารวม (ชม.) |
47
+ |---|---:|---:|
48
+ | WCB | 54.67 | 4.58 |
49
+ | WCB_BiLSTM | 67.84 | 5.68 |
50
+ | WCB_CNN_BiLSTM | 68.72 | 5.76 |
51
+ | WCB_4Layer_BiLSTM | 72.91 | 6.11 |
52
+
53
+ ## โครงสร้างรีโป
54
+
55
+ ```
56
+ .
57
+ ├─ WCB/
58
+ ├─ WCB_BiLSTM/
59
+ ├─ WCB_CNN_BiLSTM/
60
+ ├─ WCB_4Layer_BiLSTM/
61
+ ├─ common/
62
+ │ ├─ models.py
63
+ │ └─ __init__.py
64
+ ├─ requirements.txt
65
+ ├─ LICENSE
66
+ └─ README.md
67
+ ```
68
+
69
+ ## วิธีใช้งาน
70
+
71
+ ```python
72
+ import torch
73
+ from common.models import load_model
74
+
75
+ MODEL_DIR = "WCB_BiLSTM"
76
+
77
+ tokenizer, model, cfg = load_model(MODEL_DIR)
78
+ text = "มือถือรุ่นนี้ดีมาก ราคาคุ้มค่า"
79
+
80
+ enc = tokenizer(text, truncation=True, padding=True,
81
+ return_tensors="pt", max_length=cfg.get("max_length", 128))
82
+ with torch.no_grad():
83
+ logits = model(enc["input_ids"], enc["attention_mask"])
84
+ probs = torch.softmax(logits, dim=1)[0].tolist()
85
+ pred_id = int(torch.argmax(logits, dim=1))
86
+
87
+ id2label = {int(k): v for k, v in cfg["id2label"].items()}
88
+ print("label:", id2label[pred_id], "probs:", probs)
89
+ ```
90
+
91
+ ## เลือกโมเดลให้เหมาะงาน
92
+
93
+ - **ต้องการความแม่นยำสูงสุด** → `WCB_BiLSTM`
94
+ - **ทรัพยากรจำกัด/ต้องการความเร็ว** → `WCB`
95
+ - **โฟกัส AUC/การจัดอันดับความเสี่ยง** → `WCB_CNN_BiLSTM`
96
+ - **สมดุลโดยรวม** → `WCB_4Layer_BiLSTM`
97
+
98
+ ## License
99
+ Apache-2.0