Đinh Trác Đức Anh commited on
Commit ·
50f5d14
1
Parent(s): 41489bc
fix <unk> case
Browse files- tokenizer.py +22 -3
tokenizer.py
CHANGED
|
@@ -159,8 +159,10 @@ class MorphemeAwareTokenizer(AutoTokenizer):
|
|
| 159 |
"""
|
| 160 |
Align BMES tags với subwords, xử lý các trường hợp:
|
| 161 |
- Dấu câu dính với chữ (vd: 'c.', '3.')
|
| 162 |
-
- Ký tự đặc biệt
|
| 163 |
- Subword splitting phức tạp
|
|
|
|
|
|
|
| 164 |
"""
|
| 165 |
aligned_tags = []
|
| 166 |
syll_idx = 0
|
|
@@ -172,8 +174,25 @@ class MorphemeAwareTokenizer(AutoTokenizer):
|
|
| 172 |
sub = subwords_list[i]
|
| 173 |
|
| 174 |
# Special tokens - luôn tag là 'S'
|
| 175 |
-
if sub in ["<s>", "</s>", "<pad>", "<
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 176 |
aligned_tags.append("S")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 177 |
i += 1
|
| 178 |
continue
|
| 179 |
|
|
@@ -322,4 +341,4 @@ class MorphemeAwareTokenizer(AutoTokenizer):
|
|
| 322 |
bmes_tags = torch.tensor([BMES_MAP[t] for t in bmes_tags]).unsqueeze(0)
|
| 323 |
|
| 324 |
encoded['bmes_tags'] = bmes_tags
|
| 325 |
-
return encoded
|
|
|
|
| 159 |
"""
|
| 160 |
Align BMES tags với subwords, xử lý các trường hợp:
|
| 161 |
- Dấu câu dính với chữ (vd: 'c.', '3.')
|
| 162 |
+
- Ký tự đặc biệt, <unk> tokens
|
| 163 |
- Subword splitting phức tạp
|
| 164 |
+
|
| 165 |
+
🔧 FIX: Xử lý <unk> token bằng cách skip nó và tiếp tục alignment
|
| 166 |
"""
|
| 167 |
aligned_tags = []
|
| 168 |
syll_idx = 0
|
|
|
|
| 174 |
sub = subwords_list[i]
|
| 175 |
|
| 176 |
# Special tokens - luôn tag là 'S'
|
| 177 |
+
if sub in ["<s>", "</s>", "<pad>", "<mask>"]:
|
| 178 |
+
aligned_tags.append("S")
|
| 179 |
+
i += 1
|
| 180 |
+
continue
|
| 181 |
+
|
| 182 |
+
# 🔧 XỬ LÝ <unk> TOKEN
|
| 183 |
+
if sub == "<unk>":
|
| 184 |
+
# <unk> token là biểu diễn của 1 ký tự không được vocab nhận diện
|
| 185 |
+
# Gán tag 'S' cho nó và bỏ qua 1 syllable trong bmes_list nếu có
|
| 186 |
aligned_tags.append("S")
|
| 187 |
+
|
| 188 |
+
# Nếu còn syllable, skip nó vì đã được thay thế bằng <unk>
|
| 189 |
+
if syll_idx < len(bmes_list):
|
| 190 |
+
syll_idx += 1
|
| 191 |
+
|
| 192 |
+
# Reset buffer để tránh cascade errors
|
| 193 |
+
buffer_raw = ""
|
| 194 |
+
subword_positions = []
|
| 195 |
+
|
| 196 |
i += 1
|
| 197 |
continue
|
| 198 |
|
|
|
|
| 341 |
bmes_tags = torch.tensor([BMES_MAP[t] for t in bmes_tags]).unsqueeze(0)
|
| 342 |
|
| 343 |
encoded['bmes_tags'] = bmes_tags
|
| 344 |
+
return encoded
|