Chuyển đến nội dung chính

第 17 課:越南語 NLP — 挑戰與解決方案

越南語語言特徵:分詞(VnCoreNLP、underthesea)、變音符號、複合詞。 PhoBERT、ViT5、BARTpho。越南資料集:VLSP、vietnews。越南任務的基準模型。多語言 NLP 的最佳實踐。

🧠 人工智慧與機器學習 — 第 16 課 第 17 課:越南語 NLP — 挑戰與 解決方案

NLP 從基礎到進階:掌握自然語言處理

第 6 部分:NLP 產生與現代趨勢

亞洲開發網

簡介

越南語屬於分析語言(孤立語言)-根本與英語不同。越南語 NLP 需要對語言特性和專業工具有深入的了解。


1. 具體挑戰

1.1 分詞 — 問題#1

越南語不像英文那樣用空格分隔單字:

Tiếng Anh: "machine learning"     → ["machine", "learning"]  ← Rõ ràng
Tiếng Việt: "học sinh học sinh học" → ???
  - "học_sinh / học / sinh_học"    ← học sinh ĐI học môn sinh học
  - "học / sinh_học / sinh_học"    ← ???
from underthesea import word_tokenize

text = "Trường đại học Bách Khoa Hà Nội là trường đại học kỹ thuật hàng đầu"
tokens = word_tokenize(text)
print(tokens)
# ['Trường', 'đại_học', 'Bách_Khoa', 'Hà_Nội', 'là', 'trường',
#  'đại_học', 'kỹ_thuật', 'hàng_đầu']

1.2 聲調標記

# 6 thanh điệu: ngang, sắc, huyền, hỏi, ngã, nặng
# "ma", "má", "mà", "mả", "mã", "mạ" — 6 từ hoàn toàn khác nghĩa!

# Vấn đề: user thường gõ không dấu
text_no_accent = "hoc sinh hoc sinh hoc"
# Cần accent restoration trước khi xử lý NLP

1.3 挑戰比較表

挑戰英語越南語
字邊界空間需要分詞
形態詞形變化(跑/跑/跑)無屈折變化
語氣/口音沒有6 種聲音
資源很多少很多
分詞器效率~1 個標記/單字~1.5-2 個令牌/字(法學碩士)

2.越南語NLP工具

2.1 海底

from underthesea import (
    word_tokenize,
    pos_tag,
    ner,
    classify,
    sentiment,
)

text = "Nguyễn Phú Trọng làm việc tại Hà Nội, Việt Nam"

# Word segmentation
print(word_tokenize(text))

# POS Tagging
print(pos_tag(text))
# [('Nguyễn_Phú_Trọng', 'Np'), ('làm_việc', 'V'), ('tại', 'E'),
#  ('Hà_Nội', 'Np'), (',', 'CH'), ('Việt_Nam', 'Np')]

# NER
print(ner(text))
# [('Nguyễn_Phú_Trọng', 'B-PER'), ..., ('Hà_Nội', 'B-LOC'), ...]

# Sentiment
print(sentiment("Sản phẩm này rất tốt"))
# positive

2.2 VnCoreNLP

from vncorenlp import VnCoreNLP

annotator = VnCoreNLP("VnCoreNLP-1.2.jar", annotators="wseg,pos,ner", max_heap_size='-Xmx2g')

text = "Trường Đại học Bách Khoa Hà Nội tuyển sinh năm 2026"
result = annotator.annotate(text)

for sentence in result['sentences']:
    for word_info in sentence:
        print(f"  {word_info['form']:20s} | {word_info['posTag']:5s} | {word_info['nerLabel']}")

3. 越南語預訓練模型

型號類型基地任務
菲伯特編碼器羅伯塔分類、NER、QA
巴特佛編碼-十二月巴特總結、生成
ViT5編碼-十二月T5總結、翻譯
XLM-羅伯塔編碼器羅伯塔多語言任務
BGE-M3編碼器—多語言嵌入

用於文字分類的 PhoBERT

from transformers import AutoTokenizer, AutoModelForSequenceClassification

# PhoBERT yêu cầu word segmentation TRƯỚC khi tokenize
from underthesea import word_tokenize

text = "Sản phẩm rất tốt và giao hàng nhanh"
segmented = word_tokenize(text, format="text")
# "Sản_phẩm rất tốt và giao_hàng nhanh"

tokenizer = AutoTokenizer.from_pretrained("vinai/phobert-base-v2")
model = AutoModelForSequenceClassification.from_pretrained(
    "vinai/phobert-base-v2", num_labels=3
)

inputs = tokenizer(segmented, return_tensors="pt")
outputs = model(**inputs)

4. 越南語資料集

資料集任務尺寸來源
VLSP 2016-2023NER、SA、QA、WS變更VLSP 研討會
UIT-VSFC感想16,000 則評論大學
越南新聞總結15 萬篇文章越南AI
PhoNER_新冠肺炎NER (新冠肺炎)35K 實體維艾
ViQuAD問答23K QA 對大學

5. 最佳實踐

  1. 在使用 PhoBERT 之前總是進行分詞
  2. Unicode NFC 標準化 — 特別重要
  3. 多語言模型(XLM-R、BGE-M3)通常更適合零樣本
  4. 透過反向翻譯(EN→VI→EN)或LLM合成資料增加資料

總結

方面解決方案
分詞海底,VnCoreNLP
分類/NERPhoBERT v2
總結ViT5、BARTpho
嵌入BGE-M3,多語言-e5
譯NLLB,環境5

下一篇文章

第 18 課:NLP 管道生產 — 將 NLP 模型投入生產:服務、監控、CI/CD。