aedev.net
  • Trang chủ
  • AI
  • Mobile
  • Flutter
  • React Native
  • Backend
  • DevOps
  • Hướng dẫn
No Result
View All Result
SAVED POSTS
aedev.net
  • Trang chủ
  • AI
  • Mobile
  • Flutter
  • React Native
  • Backend
  • DevOps
  • Hướng dẫn
No Result
View All Result
aedev.net
No Result
View All Result
Minh họa các khái niệm AI, mạng nơ-ron và lập trình trên máy tính

Chấm câu trả lời AI tiếng Việt: kiểm tra Unicode NFC trước khi dùng exact match

Suong Nguyen by Suong Nguyen
28/10/2026
in AI
0
585
SHARES
3.2k
VIEWS
Summarize with ChatGPTShare to Facebook

Bạn có thể thấy hai câu “cà phê” giống nhau trên màn hình, nhưng phép so sánh chuỗi vẫn trả false. Một bên có thể dùng ký tự dựng sẵn, bên kia dùng chữ cái đi cùng dấu tổ hợp. Nếu chấm câu trả lời AI bằng exact match, đây là một khác biệt biểu diễn cần kiểm tra trước khi kết luận mô hình trả lời sai.

Bài dùng fixture tự tạo và thư viện chuẩn Python, không gọi mô hình hoặc dịch vụ AI. Các ví dụ được kiểm tra bằng Python 3.9.6; tài liệu Unicode, Python và mã metric của Hugging Face được đọc ngày 28/10/2026. Điểm số bên dưới chỉ thuộc fixture, không phải kết quả đánh giá một sản phẩm.

1. Tạo hai chuỗi nhìn giống nhau

import unicodedata

reference = "cà phê"
prediction = "ca\u0300 phê"
print(reference == prediction)
print(len(reference), len(prediction))
print(unicodedata.normalize("NFC", reference) ==
      unicodedata.normalize("NFC", prediction))

Kết quả là False, 6 7, rồi True. Trong prediction, a và dấu huyền là hai code point. len ở đây không đo số token của mô hình hoặc số ký tự mà người dùng cảm nhận; nó giúp nhìn thấy khác biệt biểu diễn trong ví dụ này.

NFC là một dạng chuẩn hóa Unicode theo tương đương canonical. Nó không có nghĩa bỏ toàn bộ dấu tiếng Việt. Hai từ khác nhau như “ma” và “má” vẫn phải khác nhau sau bước chuẩn hóa này.

2. Viết rõ chính sách của metric

Giả sử bài toán là trích xuất một nhãn hoặc câu trả lời ngắn cần khớp đáp án tham chiếu. Chúng ta đặt tên chính sách là nfc-only-v1: chuẩn hóa NFC ở cả hai phía, giữ nguyên chữ hoa, khoảng trắng, dấu câu và chữ số.

pairs = [
    ("ca\u0300 phê", "cà phê"),
    ("ma", "má"),
    ("Mã01", "Mã 01"),
    ("ĐÃ GỬI", "đã gửi"),
    ("Không", "Không"),
]

def exact_match(rows, normalizer):
    if not rows:
        raise ValueError("Evaluation set must not be empty")
    return sum(normalizer(p) == normalizer(r) for p, r in rows) / len(rows)

raw_score = exact_match(pairs, lambda text: text)
nfc_score = exact_match(pairs, lambda text: unicodedata.normalize("NFC", text))
print(raw_score, nfc_score)
assert unicodedata.normalize("NFC", "ma") != unicodedata.normalize("NFC", "má")

Kết quả là 0.2 0.4: một cặp khớp khi so nguyên chuỗi, hai cặp khớp khi dùng NFC. Số tăng lên vì định nghĩa phép đo đã thay đổi trên cùng năm cặp giả. Mô hình không được huấn luyện hay sửa trong quá trình này, nên đừng trình bày nó như một cải thiện chất lượng AI.

3. Đừng ghép mọi bước “làm sạch” vào nhau

Bỏ khoảng trắng, chuyển chữ thường và xóa dấu câu là các quyết định khác với chuẩn hóa Unicode. Chúng có thể hợp lý với một loại đáp án, nhưng cũng có thể che mất lỗi ở mã định danh hoặc nội dung cần khớp chính xác.

Ví dụ Mã01 và Mã 01 đang khác nhau theo chính sách trên. Nếu nghiệp vụ cho phép chúng tương đương, hãy thêm quy tắc có tên, kiểm tra riêng và tăng phiên bản metric. Đừng sửa âm thầm một hàm normalize rồi đặt điểm mới cạnh điểm cũ như thể hai lần đo dùng cùng tiêu chuẩn.

Mã nguồn exact match của Hugging Face có các lựa chọn bỏ qua chữ hoa, dấu câu hoặc chữ số. Đọc cấu hình thực tế trước khi dùng kết quả của một thư viện; tên “exact match” chưa mô tả hết các biến đổi được bật. Ví dụ trong bài là hàm tự viết có phạm vi hẹp, không sao chép toàn bộ hành vi của thư viện đó.

4. Giữ dữ liệu gốc để điều tra

Lưu đáp án gốc, dự đoán gốc, phiên bản dataset và tên chính sách metric trong bằng chứng đánh giá. Khi một ca đổi từ sai sang đúng, bạn có thể xác nhận nó chỉ khác biểu diễn dấu, thay vì vô tình mất một ký tự có nghĩa.

Không cần ghi câu trả lời chứa dữ liệu riêng tư vào log công khai. Với fixture phát triển, dùng dữ liệu giả như bài này. Khi nghiên cứu lỗi thật, kiểm tra code point hoặc biểu diễn escape trong môi trường có quyền truy cập phù hợp.

Kiểm tra và giới hạn

Thêm ca dấu tổ hợp, chuỗi rỗng, khoảng trắng đầu cuối, chữ hoa và chữ số. Kiểm tra hàm từ chối tập đánh giá rỗng thay vì chia cho 0. Ghi cả điểm nguyên chuỗi và điểm theo chính sách mới khi cần giải thích sự thay đổi.

NFC không chấm ý nghĩa, tính đúng của thông tin hoặc chất lượng dẫn nguồn. Hai câu diễn đạt khác nhau nhưng cùng ý vẫn có thể không exact match. Với câu trả lời mở, cần một cách đánh giá phù hợp hơn thay vì tiếp tục xóa ký tự cho đến khi điểm trông đẹp.

Hãy xem chuẩn hóa là một phần được định nghĩa của phép đo. Chính sách rõ ràng giúp bạn phân biệt lỗi biểu diễn với lỗi nội dung và so sánh các lần đánh giá có cùng điều kiện.

Nguồn tham khảo

  • Python 3.9: unicodedata và normalize
  • Unicode UAX #15: Normalization Forms
  • Hugging Face Evaluate: mã nguồn exact_match

Tags: AIĐánh giá mô hìnhUnicode
SummarizeShare234
Suong Nguyen

Suong Nguyen

Related Stories

Minh họa các khái niệm AI, mạng nơ-ron và lập trình trên máy tính

Zero-shot classification: multi_label thay đổi ý nghĩa score như thế nào?

by Suong Nguyen
29/10/2026
0

Phân biệt score cạnh tranh giữa các nhãn với score độc lập trong zero-shot NLI qua một phép tính Python có thể tự kiểm tra.

Minh họa các khái niệm AI, mạng nơ-ron và lập trình trên máy tính

Chia tập đánh giá AI theo nhóm: tránh để cùng khách hàng xuất hiện ở cả hai phía

by Suong Nguyen
27/10/2026
0

Dùng ví dụ Python nhỏ để phát hiện nhóm dữ liệu bị chia chéo giữa train và test, rồi lưu một kế hoạch chia có thể kiểm tra...

Minh họa các khái niệm AI, mạng nơ-ron và lập trình trên máy tính

Đánh giá truy hồi RAG bằng Recall@k và MRR trước khi sửa prompt

by Suong Nguyen
26/10/2026
0

Tính Recall@k và MRR trên danh sách ID tự tạo để phân biệt thiếu tài liệu liên quan với xếp hạng tài liệu quá thấp.

Minh họa các khái niệm AI, mạng nơ-ron và lập trình trên máy tính

Cosine similarity và dot product: vì sao cùng vector lại xếp hạng khác?

by Suong Nguyen
25/10/2026
0

Tự tính cosine similarity bằng Python để hiểu ảnh hưởng của độ dài vector và kiểm tra cách xếp hạng trong tìm kiếm embedding.

Next Post
Minh họa kiến trúc backend API gọn gàng cho sản phẩm nhỏ

SQL UNION và UNION ALL: đừng làm mất sự kiện khi hợp nhất dữ liệu

0 0 votes
Article Rating
Subscribe
Login
Notify of
guest
guest
0 Comments
Oldest
Newest Most Voted
AE Dev

AE Dev mang đến các bài viết về lập trình, mobile app, backend, frontend, WordPress và công nghệ, phù hợp cho developer muốn học hỏi và cập nhật kiến thức thực tế.

Recent Posts

  • React Native TextInput: bàn phím numeric không thay thế validation
  • Phỏng vấn JavaScript: vì sao tách method thành callback lại mất this?
  • Android NumberFormat: tách locale, mã tiền tệ và giá trị cần hiển thị

Categories

  • AI
  • Backend
  • Đánh giá
  • DevOps
  • Flutter
  • Hướng dẫn
  • Lập trình Mobile
  • Phỏng vấn
  • React Native
  • Uncategorized

Weekly Newsletter

  • Buy JNews
  • Support Forum
  • Pre-sale Question
  • Contact Us

© 2026 AE Dev - Blog công nghệ, lập trình và chia sẻ kiến thức IT.

Welcome Back!

Login to your account below

Forgotten Password?

Retrieve your password

Please enter your username or email address to reset your password.

Log In
No Result
View All Result
  • Trang chủ
  • AI
  • Mobile
  • React Native
  • Backend
  • DevOps
  • Hướng dẫn
  • Flutter

© 2026 AE Dev - Blog công nghệ, lập trình và chia sẻ kiến thức IT.

wpDiscuz
0
0
Would love your thoughts, please comment.x
()
x
| Reply