VietASI.comVietASI
Tổng hợp giọng nói và nhân bản giọng

Chuẩn hoá văn bản cho máy đọc tiếng Việt: số, ngày tháng, đơn vị và chữ viết tắt

Vì sao máy đọc "2/9" thành "hai phần chín", "1.500" thành "một chấm năm trăm": bước chuẩn hoá văn bản trong tổng hợp giọng nói tiếng Việt và cách tự kiểm.

Close-up of a young Vietnamese engineer wearing headphones at a wooden desk, listening carefully with eyes closed, laptop screen blank and softly blurred, warm afternoon window light

Chuẩn hoá văn bản là bước biến mọi thứ không phải chữ thường trong câu, như con số, ngày tháng, đơn vị đo, ký hiệu tiền, chữ viết tắt, thành đúng chuỗi tiếng mà người Việt sẽ đọc thành lời, trước khi mô hình tạo âm thanh. Máy đọc "2/9" thành "hai phần chín" hay "ngày hai tháng chín", đọc "1.500" là "một nghìn năm trăm" hay "một chấm năm trăm", hoàn toàn do bước này quyết định, chứ không phải do giọng hay hay dở.

Phần lớn lỗi khiến người nghe bật cười với giọng đọc máy tiếng Việt không nằm ở chất giọng mà nằm ở đây. Một hệ thống có giọng rất tự nhiên vẫn có thể đọc "thế kỷ XXI" thành "thế kỷ ích ích i" nếu khâu chuẩn hoá yếu. Bài này đi qua từng nhóm khó của tiếng Việt, cách các hệ thống thường xử lý, chỗ nào vẫn phải nhờ người, và một bộ câu thử để bạn tự kiểm bất kỳ công cụ đọc nào.

Chuẩn hoá văn bản nằm ở đâu trong một hệ thống đọc

Một hệ thống tổng hợp giọng nói (thường gọi tắt TTS, từ text-to-speech) gồm hai nửa. Nửa đầu là xử lý ngôn ngữ: nhận văn bản thô, làm sạch, chuẩn hoá, tách câu, có khi tách từ, rồi chuyển chữ thành chuỗi âm vị kèm thông tin thanh điệu và chỗ ngắt. Nửa sau là phần âm học: biến chuỗi ấy thành phổ âm thanh rồi thành sóng âm. Các bài giới thiệu thường nói nhiều về nửa sau vì nó làm nên độ tự nhiên, nhưng nửa đầu mới quyết định máy có đọc đúng hay không.

Ở các hệ thống đời cũ, chuẩn hoá là một tầng luật viết tay riêng biệt. Ở các mô hình đầu-cuối mới, một phần việc được mô hình tự học từ dữ liệu: nếu trong dữ liệu huấn luyện có đủ câu chứa số và bản ghi âm tương ứng, mô hình có thể tự đọc đúng một số dạng. Nhưng tự học chỉ đáng tin với dạng phổ biến. Số điện thoại, mã hàng, biển số xe, phân số, số La Mã xuất hiện quá ít trong vài chục giờ ghi âm, nên hầu hết sản phẩm nghiêm túc vẫn giữ một tầng chuẩn hoá rõ ràng phía trước, có khi kết hợp luật với một mô hình phân loại nhỏ để đoán ngữ cảnh.

Lý do thứ hai để giữ tầng này là khả năng sửa. Khi khách hàng báo "máy đọc sai tên sản phẩm bên mình", một bảng luật hay một từ điển cho phép sửa trong vài phút và biết chắc đã sửa. Còn nếu mọi thứ nằm trong trọng số mô hình, cách sửa duy nhất là thêm dữ liệu và huấn luyện lại, chậm và khó đoán.

Con số: cùng một dãy chữ số, nhiều cách đọc

Con số là nhóm khó nhất vì tiếng Việt có nhiều cách đọc tuỳ ngữ cảnh và tuỳ vùng. Bảng dưới liệt kê các trường hợp một bộ chuẩn hoá phải phân biệt.

ViếtNgữ cảnhCách đọc mong muốnLỗi hay gặp
1.500số lượng, dấu chấm phân cách hàng nghìnmột nghìn năm trăm (hoặc một ngàn năm trăm)một chấm năm trăm, đọc theo kiểu số thập phân tiếng Anh
1,5số thập phân kiểu Việtmột phẩy nămmột nghìn năm trăm, do nhầm dấu phẩy là phân cách hàng nghìn
105số đếmmột trăm linh năm (Bắc) hoặc một trăm lẻ năm (Nam)một trăm không năm, hoặc trộn vùng trong cùng bài
15, 25hàng đơn vị là 5mười lăm, hai mươi lăm (hoặc hai lăm)mười năm, hai mươi năm
21, 24hàng đơn vị là 1 và 4 sau hàng chụchai mươi mốt, hai mươi tư (hoặc hai mươi bốn)hai mươi một
dãy mười chữ số bắt đầu bằng 0số điện thoại, mã sốđọc từng chữ số, có nhịp ngắt theo nhómđọc thành một số khổng lồ hàng trăm triệu
2025nămhai nghìn không trăm hai mươi lămhai không hai lăm, kiểu đọc năm của tiếng Anh
XXIsố La Mã sau "thế kỷ", "khoá"hai mươi mốtđánh vần ích ích i

Nhìn bảng sẽ thấy điểm mấu chốt: không có luật nào áp được cho mọi chỗ. Dấu chấm trong "1.500" là phân cách hàng nghìn theo chuẩn Việt Nam, nhưng trong văn bản dịch vội từ tiếng Anh, "1.5" lại là một phẩy năm. Bộ chuẩn hoá tốt phải nhìn cả câu: có đơn vị tiền phía sau không, có bao nhiêu chữ số sau dấu, văn bản có chỗ nào khác dùng dấu phẩy thập phân không. Cách đọc vùng miền như "linh" hay "lẻ", "nghìn" hay "ngàn" cũng nên đi theo giọng đã chọn, đừng để giọng Nam mà đọc "một trăm linh năm".

Ngày tháng, giờ giấc và những dấu gạch chéo

Dấu gạch chéo mang nhiều nghĩa. "2/9" có thể là ngày Quốc khánh, là phân số hai phần chín, là số nhà, hay tỷ số. Câu "nghỉ lễ 2/9" và câu "chỉ 2/9 số người trả lời đồng ý" phải đọc khác nhau. Dấu hiệu phân biệt thường là từ đứng trước: "ngày", "lễ", "hạn", "từ… đến" kéo về ngày tháng; "chiếm", "số người", "trong" kéo về phân số.

Định dạng ngày đầy đủ. "30/10/2026" đọc "ngày ba mươi tháng mười năm hai nghìn không trăm hai mươi sáu". Trong tin tức, có thể lược "năm" nếu văn cảnh rõ; nhưng một hệ đọc tự động không biết văn cảnh, nên nên đọc đủ. Lưu ý "tháng tư" và "tháng bốn" đều dùng; "tháng 1" thường đọc "tháng một" hoặc "tháng giêng" tuỳ âm lịch hay dương lịch, và máy không có cách nào đoán nếu văn bản không ghi rõ.

Giờ. "7h30", "7:30", "19g" đều cần thành "bảy giờ ba mươi", "mười chín giờ". Kiểu viết "7h30'" có thêm dấu phẩy trên là thói quen của báo chí, dễ làm luật đơn giản bỏ sót. Khoảng thời gian "7h–9h" cần chèn "đến".

Khoảng số và dấu gạch ngang. "10–15%" đọc "từ mười đến mười lăm phần trăm", không phải "mười trừ mười lăm phần trăm". Nhưng "-5 độ C" lại là "âm năm độ xê". Gạch ngang dài, gạch ngắn, dấu trừ trông gần giống nhau trên màn hình nhưng là ba ký tự khác nhau, và văn bản dán từ nhiều nguồn trộn cả ba.

Đơn vị đo, tiền tệ và ký hiệu

Đơn vị đo có hai cách đọc trong tiếng Việt: theo tên Việt ("ki-lô-mét", "ki-lô-gam") và theo tên chữ cái ("ca-em", hiếm hơn). Người nghe chấp nhận cả hai, nhưng cùng một bài nên thống nhất. "km/h" cần thành "ki-lô-mét trên giờ" hoặc "ki-lô-mét một giờ"; "m²" là "mét vuông", dễ bị đọc thành "mét hai" nếu bộ chuẩn hoá không nhận ký tự mũ. "°C" là "độ xê"; "kWh" là "ki-lô-oát giờ".

Tiền tệ: "500.000đ", "500k", "500 nghìn đồng", "VND 500.000" đều là một giá trị, nhưng "500k" là cách viết khẩu ngữ mà một số người muốn máy đọc "năm trăm ca", số khác muốn "năm trăm nghìn". Với sản phẩm phát thanh hay sách nói, nên quy hết về "năm trăm nghìn đồng". Ký hiệu ngoại tệ đứng trước số ("$20") phải đảo trật tự thành "hai mươi đô-la". Phần trăm, phần nghìn, dấu cộng trong số điện thoại quốc tế, dấu # và @ trong văn bản mạng xã hội đều cần luật riêng, hoặc quyết định chủ động là bỏ qua.

Một trường hợp dễ quên là biểu tượng cảm xúc. Văn bản lấy từ bình luận hay tin nhắn thường có mặt cười, trái tim. Trình đọc màn hình cho người khiếm thị cần đọc tên biểu tượng vì đó là thông tin; còn giọng đọc tin tức thì nên lược bỏ. Cùng một ký tự, hai yêu cầu ngược nhau, nên đây là tuỳ chọn cấu hình chứ không phải một luật cứng.

Chữ viết tắt: đọc thành chữ, đánh vần hay mở rộng

Viết tắt đánh vần. Các tên tổ chức, đài, trường thường đánh vần theo tên chữ cái kiểu Việt: "VTV" là "vê tê vê", "THPT" là "tê hát pê tê" hoặc mở rộng thành "trung học phổ thông". Tên chữ cái tiếng Việt cũng có biến thể: "pê" hay "pờ", "en-nờ" hay "nờ", và người Nam, người Bắc gọi khác nhau.

Viết tắt đọc như một từ. Một số viết tắt đã thành từ, đọc liền: "COVID" đọc "cô-vít", "ASEAN" đọc "a-xê-an", "UNESCO" đọc "u-nét-xcô". Đánh vần những từ này nghe rất lạ. Không có luật hình thức nào phân biệt được, phải có từ điển.

Viết tắt nên mở rộng. "TP" trước "Hồ Chí Minh" nên thành "thành phố"; "UBND" nên thành "Ủy ban nhân dân" trong văn bản hành chính đọc cho người nghe; "GS.TS" thành "giáo sư, tiến sĩ". Đọc "u bê en đê" vẫn hiểu được nhưng mệt tai khi lặp nhiều lần.

Viết tắt mơ hồ. "CT" là công ty, chủ tịch hay chương trình? "BS" là bác sĩ hay bổ sung? Gặp những chữ này, hệ thống tự động chỉ đoán được dựa vào chữ xung quanh, và đoán sai khá thường. Với sản phẩm cụ thể, cách chắc nhất là cho người dùng một từ điển riêng để khai báo.

Bộ câu thử để tự kiểm một công cụ đọc tiếng Việt

Trước khi chọn một công cụ đọc cho video, tổng đài hay sách nói, bạn nên tự soạn một bộ câu thử thay vì nghe đoạn mẫu do nhà cung cấp chọn. Dưới đây là cách làm trong khoảng một giờ.

  1. Gom 30–50 câu thật từ chính tài liệu bạn sẽ cho máy đọc: tin nội bộ, kịch bản tổng đài, chương sách. Câu thật bao giờ cũng có dạng lạ mà câu mẫu không có.
  2. Thêm một nhóm câu "bẫy" tự viết: "Hạn nộp 2/9, chỉ 2/9 hồ sơ đạt"; "Giá 1.500 đồng, tăng 1,5%"; "Thế kỷ XXI, khoá XV"; một số điện thoại mười chữ số viết cách nhóm; "Nhiệt độ -3°C đến 5°C"; "Tốc độ 60km/h"; "TP.HCM, UBND phường". Đây là ví dụ giả định, bạn thay bằng số liệu trong nghề của mình.
  3. Cho công cụ đọc từng câu, ghi lại kết quả. Nếu công cụ có chức năng xem văn bản sau chuẩn hoá thì càng tốt, vì nhìn chữ nhanh hơn nghe.
  4. Chấm theo ba mức: đúng, chấp nhận được (hiểu được nhưng không tự nhiên, ví dụ đọc "hai mươi một"), sai nghĩa (đọc nhầm ngày thành phân số). Mức sai nghĩa mới là mức nguy hiểm.
  5. Thử các cách sửa công cụ cho phép: từ điển phát âm riêng, thẻ đánh dấu kiểu SSML (chuẩn ngôn ngữ đánh dấu tổng hợp giọng nói của W3C, có thẻ say-as để báo "đây là ngày", "đây là dãy số"), hoặc đơn giản là viết lại văn bản đầu vào.
  6. Ghi lại những lỗi không sửa được bằng cấu hình. Nếu chúng rơi đúng loại câu bạn dùng nhiều, công cụ ấy không hợp với bạn, dù giọng nghe hay đến đâu.

Thử lại bộ câu này mỗi khi công cụ cập nhật phiên bản. Tính năng các dịch vụ thay đổi nhanh; chuyện một phiên bản mới đọc tốt hơn câu này nhưng kém đi câu khác không hiếm.

Khi nào nên sửa ở đầu vào thay vì đợi máy thông minh hơn

Với người làm nội dung, cách rẻ và chắc nhất thường là viết văn bản sẵn cho tai: viết "ngày 2 tháng 9" thay vì "2/9", "khoảng một nghìn rưỡi" thay vì "~1.500". Kịch bản đọc khác văn bản để mắt đọc, và các phát thanh viên lâu năm vẫn soạn lại bản tin trước khi lên sóng vì lý do này. Máy đọc chỉ làm lộ rõ hơn một việc vốn phải làm.

Với người làm sản phẩm, nơi văn bản đến từ người dùng hay từ cơ sở dữ liệu và không ai soạn lại được, đầu tư vào tầng chuẩn hoá là bắt buộc. Một cách làm phổ biến là kết hợp ba lớp: luật cho các dạng có cấu trúc rõ (số điện thoại, ngày đầy đủ, tiền tệ), từ điển cho viết tắt và tên riêng của lĩnh vực, và một mô hình phân loại ngữ cảnh cho các ca mơ hồ như dấu gạch chéo. Mỗi lần người dùng báo lỗi, lỗi đó nên được biến thành một câu thử cố định để không tái phát.

Cuối cùng là chuyện dữ liệu: các câu thử và nhật ký lỗi lấy từ văn bản thật của khách hàng có thể chứa tên, số điện thoại, địa chỉ. Trước khi lưu hay chia sẻ cho đội khác, hãy thay bằng dữ liệu giả có cùng định dạng. Bộ chuẩn hoá chỉ cần biết "đây là một số điện thoại mười chữ số", không cần biết số của ai.

Câu hỏi thường gặp

Mô hình tổng hợp giọng nói mới có còn cần bước chuẩn hoá văn bản không?

Vẫn cần với hầu hết ứng dụng thực tế. Mô hình đầu-cuối tự học được các dạng phổ biến, nhưng với số điện thoại, mã số, phân số, số La Mã hay viết tắt chuyên ngành, dữ liệu huấn luyện quá ít nên dễ đọc sai. Tầng chuẩn hoá riêng còn giúp sửa lỗi nhanh và biết chắc đã sửa.

Vì sao máy đọc "hai mươi một" thay vì "hai mươi mốt"?

Bộ chuẩn hoá đơn giản đọc từng chữ số theo tên gốc rồi ghép lại, không áp luật biến âm của tiếng Việt: sau hàng chục, "một" thành "mốt", "năm" thành "lăm", "bốn" có thể thành "tư". Đây là lỗi dễ sửa bằng luật, nên gặp lỗi này thường là dấu hiệu khâu chuẩn hoá của công cụ còn sơ sài.

SSML là gì và có dùng được với tiếng Việt không?

SSML là ngôn ngữ đánh dấu của W3C để chỉ dẫn máy đọc: chèn khoảng ngừng, báo một chuỗi là ngày hay dãy số, thay cách đọc một từ. Nhiều dịch vụ lớn hỗ trợ SSML ở mức khác nhau cho tiếng Việt; thẻ nào được hỗ trợ cần kiểm tài liệu phiên bản hiện hành của từng dịch vụ.

Nên đọc "nghìn" hay "ngàn", "linh" hay "lẻ"?

Cả hai đều đúng tiếng Việt; "nghìn" và "linh" phổ biến ở miền Bắc, "ngàn" và "lẻ" ở miền Nam. Nguyên tắc là đi theo giọng đọc đã chọn và thống nhất trong một sản phẩm. Trộn hai kiểu trong cùng một bài nghe rất lạ tai với người bản ngữ.

Làm sao để máy đọc đúng tên sản phẩm hay thương hiệu riêng?

Cách nhanh nhất là từ điển phát âm riêng nếu công cụ cho phép: khai báo chữ viết và cách đọc mong muốn bằng chữ Việt phiên âm. Nếu không có, viết lại tên theo cách đọc ngay trong kịch bản. Sau mỗi lần cập nhật công cụ nên nghe lại vì từ điển đôi khi bị bỏ qua.

Văn bản đầu vào có chứa thông tin khách hàng thì có nên gửi lên dịch vụ đọc trực tuyến không?

Cần cân nhắc như gửi dữ liệu cho bất kỳ dịch vụ bên ngoài nào: đọc điều khoản lưu trữ, xem dữ liệu có bị dùng để huấn luyện không, và che hoặc thay thông tin cá nhân khi có thể. Với thông tin nhạy cảm, nên chọn giải pháp chạy nội bộ hoặc có cam kết xử lý dữ liệu rõ ràng.

Cần tư vấn cụ thể cho trường hợp của bạn?

Chúng tôi sẽ liên hệ trong vòng 24 giờ.

Đăng ký tư vấn ngay

Bài viết liên quan

Bạn cần hỗ trợ thêm?

Để lại thông tin, chúng tôi sẽ liên hệ trong 24 giờ.

hoặc
Gọi ngay 0926 138 138