Mấy năm trước, làm NLP cho tiếng Việt là một cuộc chiến. Dữ liệu thì ít, tool thì chắp vá, mô hình SOTA (state-of-the-art) trên thế giới toàn nói tiếng Anh. Muốn làm gì cho ra hồn cũng phải tự xây từ ban đầu.
Giờ thì cuộc chơi đã khác. Các ông lớn như Google, OpenAI tung ra mô hình ngày càng khủng, nhưng có một sự thật không thể chối cãi: chúng vẫn là những mô hình “tây”, được dạy chủ yếu bằng dữ liệu và văn hóa phương Tây. Bạn hỏi GPT-4 về cơ học lượng tử, nó trả lời vanh vách. Nhưng bạn thả cho nó một cái comment trên Shopee kiểu “shop giao hàng rùa bò, sp lởm”, có khi nó chịu, hoặc đưa ra một câu trả lời chung chung vô thưởng vô phạt.
Vấn đề không nằm ở con người, mà ở dữ liệu.
Đây là lúc những mô hình bản địa như PhoBERT của VinAI tỏa sáng. Nó không phải là một mô hình toàn năng, nhưng nó làm rất tốt một việc: hiểu tiếng Việt. Nó được sinh ra từ dữ liệu tiếng Việt, cho người Việt.
Hôm nay chúng ta sẽ không bàn lý thuyết nhiều. Chúng ta sẽ bắt tay vào làm thực tế luôn nhá =))): dùng PhoBERT để xem dân mạng đang vui hay buồn, tức là làm phân tích tình cảm.
Bỏ qua mớ lý thuyết hàn lâm - Tại sao cái này thực sự “work”?
Đừng nghĩ Transformer hay BERT là cái gì đó quá ma thuật. Cứ tưởng tượng BERT như một người đã đọc toàn bộ kho tàng văn học, báo chí, và comment dạo trên mạng của Việt Nam.
Nó không chỉ học thuộc lòng từ “tốt” là tích cực, “tệ” là tiêu cực. Nó học được cái “cảm giác” của ngữ cảnh. Nó hiểu rằng “giá ngon” và “món này ngon” mang sắc thái khác nhau. Nó biết “dịch vụ nhanh thật sự” khác hẳn với “dịch vụ nhanh ghê” đầy mỉa mai. Khả năng “đọc vị” ngữ cảnh hai chiều (bidirectional) này là thứ khiến các phương pháp đếm từ khóa cổ điển phải hít khói.
Nói đủ rồi. Bắt tay vào code thôi 😂
Đồ nghề và thực chiến
Đầu tiên, phải có “đồ nghề”. Nếu bạn là dân Python, chắc không lạ gì pip.
# Cài 2 thư viện cần thiết
pip install transformers torch Giờ là phần hay ho. Thay vì phải train model cả tháng trời (và tốn cả đống tiền điện), chúng ta sẽ đứng trên vai người khổng lồ - hay cụ thể hơn là các bạn đã fine-tune sẵn một model PhoBERT cho việc này.
Mở editor lên và gõ:
# Chỉ cần vài dòng để gọi cả một bộ não AI về máy
from transformers import pipeline
# "pipeline" là một hàm cực kỳ tiện lợi của Hugging Face
# Nó gói gọn mọi bước lằng nhằng (tokenize, predict, etc.) vào một chỗ
sentiment_analyzer = pipeline(
task="sentiment-analysis",
model="wonrax/phobert-base-vietnamese-sentiment"
) Ok, đã được tải về. Giờ thử thách nhẹ cho nó xem sao.
# Vài bình luận đậm chất Việt Nam
comments = [
"Hàng xịn, shop tư vấn nhiệt tình, 10 điểm!",
"Chờ mòn mỏi cả tuần mới nhận được hàng. Thất vọng toàn tập.",
"Cũng được, không có gì đặc biệt cho lắm.",
"Trời ơi cái đầm xinh xỉu luôn á shop ơi!!!",
"Giá hơi chát nhưng chất lượng thì khỏi bàn." # Câu này hơi khó nè
]
# Cho model xử lý hàng loạt
results = sentiment_analyzer(comments)
for comment, result in zip(comments, results):
label_map = {'POS': 'Tích cực', 'NEG': 'Tiêu cực', 'NEU': 'Trung tính'}
label = label_map[result['label']]
score = result['score']
print(f"'{comment}'")
print(f" => Cảm xúc: {label} | Độ chắc chắn: {score:.2%}\n")
Và đây là kết quả:
‘Hàng xịn, shop tư vấn nhiệt tình, 10 điểm!’ \=> Cảm xúc: Tích cực | Độ chắc chắn: 99.89%
‘Chờ mòn mỏi cả tuần mới nhận được hàng. Thất vọng toàn tập.’ \=> Cảm xúc: Tiêu cực | Độ chắc chắn: 99.95%
‘Cũng được, không có gì đặc biệt cho lắm.’ \=> Cảm xúc: Trung tính | Độ chắc chắn: 98.24%
‘Trời ơi cái đầm xinh xỉu luôn á shop ơi!!!’ \=> Cảm xúc: Tích cực | Độ chắc chắn: 99.88%
‘Giá hơi chát nhưng chất lượng thì khỏi bàn.’ \=> Cảm xúc: Tích cực | Độ chắc chắn: 97.51%
Khá ấn tượng đúng không? Nó đã hiểu được cấu trúc “A nhưng B” trong câu cuối và nhận ra sắc thái chung là tích cực, dù có một vế phàn nàn về giá.
Vậy nó có phải cây đũa thần không?
Tất nhiên là không.
Mô hình này, cũng như mọi mô hình AI khác, có giới hạn của nó.
- Mỉa mai & Ngôn ngữ phức tạp: Nó vẫn sẽ “tạch” với những câu mỉa mai kiểu “Ồ dịch vụ nhanh ghê, mình đặt từ năm ngoái năm nay mới nhận được”. Hiểu được mỉa mai là một trong những bài toán khó nhất của NLP.
- Teen code & Sai chính tả: Nếu người dùng viết “sp dep wa shop oi” thì có thể nó hiểu, nhưng với những từ biến tấu phức tạp hơn, nó sẽ bắt đầu “lú”.
- Bối cảnh chuyên ngành: Model này được train trên dữ liệu feedback của sinh viên, nên nó sẽ hơi kém khi đọc bình luận về bất động sản hay review phim kiếm hiệp. Dữ liệu đầu vào quyết định khẩu vị của model.
Vậy thì sao? Chúng ta làm gì tiếp?
Dùng model có sẵn thì vui, nhưng cái hay của cuộc chơi AI là bạn có thể tự tune lại nó. Nếu bạn có dữ liệu của riêng mình (ví dụ: 10,000 bình luận về mỹ phẩm có gán nhãn sẵn), bạn hoàn toàn có thể fine-tune tiếp model PhoBERT này để nó hiểu về lĩnh vực của bạn hơn nữa.
Sân chơi AI giờ đã phẳng hơn rất nhiều. Việc tiếp cận các mô hình tân tiến không còn là đặc quyền của các phòng lab lớn. Với những công cụ như PhoBERT và cộng đồng Hugging Face, người Việt hoàn toàn có thể tạo ra những sản phẩm AI “made in Vietnam” thực sự giải quyết vấn đề của người Việt.