Vì sao một mô hình ASR “tốt trên giấy” vẫn sai ngoài đời

Speech-to-Text (STT), hay nhận dạng tiếng nói tự động (Automatic Speech Recognition, ASR), là bước đầu tiên và cũng là nút thắt cổ chai lớn nhất của mọi hệ thống Voice AI. Một đội kỹ thuật thường đo chất lượng mô hình bằng Word Error Rate trên một tập dữ liệu kiểm thử công khai, ghi âm trong phòng thu, phát âm chuẩn, không tạp âm. Con số đẹp trên giấy đó có thể tụt dốc không phanh khi mô hình gặp một cuộc gọi thật: khách đứng ngoài đường gọi tới quán ăn, tiếng xe máy, tiếng quạt, giọng Quảng Nam hay giọng Cà Mau phát âm những âm khó nghe ngay cả với người Việt vùng khác.

Với tổng đài chăm sóc khách hàng, sai sót ở lớp ASR không chỉ là lỗi chính tả. Một số điện thoại bị nhận sai một chữ số khiến cuộc gọi lại thất bại. Một tên sản phẩm bị nhận sai khiến AI tư vấn nhầm dịch vụ. Bài viết này trình bày kiến trúc streaming ASR tiếng Việt mà BEEDONI xây dựng để thu hẹp khoảng cách giữa phòng thí nghiệm và cuộc gọi thực, qua bốn trụ cột: kiến trúc mô hình, dữ liệu huấn luyện, cơ chế thiên lệch ngữ cảnh (contextual biasing) và vòng lặp cải thiện liên tục.

Đặc thù tiếng Việt khiến bài toán khó hơn phần lớn ngôn ngữ

Tiếng Việt là ngôn ngữ đơn lập, có thanh điệu: mỗi âm tiết mang một trong sáu thanh (ngang, huyền, sắc, hỏi, ngã, nặng), và thanh điệu đổi nghĩa hoàn toàn của từ. “Ma”, “má”, “mà”, “mả”, “mã”, “mạ” là sáu từ khác nhau phát âm gần giống nhau về phụ âm, nguyên âm, chỉ khác đường nét cao độ. Mô hình âm học huấn luyện trên tiếng Anh hay các ngôn ngữ châu Âu không có khái niệm này, nên không thể dùng nguyên bản, phải huấn luyện lại từ đầu trên dữ liệu tiếng Việt.

Thêm vào đó là ba lớp khó khác chồng lên nhau. Thứ nhất, phương ngữ: thanh hỏi và thanh ngã gần như hòa làm một trong giọng miền Nam và miền Trung, trong khi phụ âm đầu “tr/ch”, “s/x”, “d/gi/r” được phát âm khác nhau theo vùng miền. Thứ hai, code-switching: người Việt chêm tiếng Anh tự nhiên trong câu nói hàng ngày (“book lịch”, “check giá”, “ship COD”, “oke để anh confirm”). Thứ ba, thực thể riêng dày đặc và luôn thay đổi: tên dự án bất động sản, tên bác sĩ, tên món ăn, mã sản phẩm, những cụm từ không nằm trong bất kỳ bộ từ vựng tổng quát nào.

Thách thứcHệ quả nếu bỏ quaCách BEEDONI xử lý
6 thanh điệu, đồng âm dày đặcNhận sai nghĩa dù phát âm gần giốngĐặc trưng âm học log-Mel giữ đủ thông tin cao độ, huấn luyện trên dữ liệu đa phương ngữ
Giọng vùng miền (Bắc/Trung/Nam)WER tăng vọt với giọng không phải Hà NộiData augmentation theo vùng miền, cân bằng tỷ lệ mẫu khi huấn luyện
Code-switching Anh-ViệtTừ tiếng Anh bị phiên âm sai hoặc bỏ sótBộ từ vựng con (subword) dùng chung cho cả hai ngôn ngữ
Tên riêng, thuật ngữ ngànhNhận sai tên sản phẩm, tên người, địa chỉContextual biasing theo kho tri thức từng doanh nghiệp

Lớp 1. Kiến trúc mô hình: Conformer Encoder và RNN-Transducer Decoder

Một hệ thống ASR hiện đại có ba thành phần: bộ trích xuất đặc trưng, bộ mã hóa (encoder) và bộ giải mã (decoder). Đầu vào âm thanh 16kHz được chuyển thành đặc trưng log-Mel filterbank 80 chiều mỗi 10ms, mô phỏng cách tai người cảm nhận tần số.

Vì sao chọn Conformer thay vì Transformer thuần hoặc CNN thuần

Transformer thuần dùng self-attention nắm bắt tốt phụ thuộc xa (ví dụ ngữ điệu toàn câu quyết định đó là câu hỏi hay câu khẳng định) nhưng yếu với đặc trưng âm học cục bộ ngắn hạn như hình dạng formant của một âm tiết. Mạng tích chập (CNN) thuần thì ngược lại. Conformer ghép hai khối này tuần tự trong mỗi lớp: convolution module bắt đặc trưng cục bộ, self-attention module bắt ngữ cảnh dài, cho kết quả vượt trội so với dùng riêng lẻ, đặc biệt quan trọng với ngôn ngữ có thanh điệu, nơi đường nét cao độ vừa mang thông tin cục bộ (hình dạng thanh) vừa mang thông tin theo ngữ cảnh câu.

RNN-Transducer: phát token ngay khi đủ bằng chứng

Mô hình attention-based encoder-decoder cổ điển phải thấy toàn bộ câu nói mới bắt đầu giải mã, không phù hợp cho hội thoại thời gian thực. RNN-Transducer (RNN-T) giải quyết bằng một bộ dự đoán (prediction network) hoạt động như mô hình ngôn ngữ nội tại, kết hợp với đầu ra encoder qua một mạng joint network, cho phép phát từng token ngay khi đủ bằng chứng âm học, không cần chờ hết câu. Đây là lý do RNN-T là lựa chọn chủ đạo cho streaming ASR trong công nghiệp, từ Google tới các hệ thống tổng đài.

text
Audio frame (10ms) ──▶ Conformer Encoder ──▶ h_t
                                                   │
Previous tokens ──▶ Prediction Network ──▶ p_u ──┴──▶ Joint Network ──▶ P(token | h_t, p_u)
                                                        (softmax, bao gồm nhãn <blank>)

Look-ahead: đánh đổi giữa độ trễ và độ chính xác

Để streaming thật sự, self-attention trong Conformer không được nhìn toàn bộ câu về phía tương lai, mà chỉ một cửa sổ look-ahead giới hạn, thường vài khung hình tương đương vài trăm mili-giây. Look-ahead càng lớn, mô hình càng có nhiều ngữ cảnh để phân biệt từ đồng âm, nhưng độ trễ phát token càng tăng. BEEDONI cấu hình look-ahead theo từng use case: tổng đài thoại cần độ trễ thấp nên look-ahead ngắn, trong khi chép lời sau cuộc gọi (để phân tích) chạy chế độ offline với look-ahead toàn câu, cho WER thấp nhất có thể.

Lớp 2. Dữ liệu huấn luyện: đòn bẩy giảm WER lớn nhất, không phải kiến trúc

Kinh nghiệm phổ biến trong ngành xử lý tiếng nói: đổi từ kiến trúc A sang kiến trúc B hiện đại hơn thường chỉ giảm WER vài phần trăm tương đối, trong khi mở rộng và làm sạch đúng dữ liệu huấn luyện có thể giảm WER tới vài chục phần trăm. Với tiếng Việt, nguồn dữ liệu công khai có sẵn thường thiên lệch về giọng miền Bắc, phát âm chuẩn, phòng thu yên tĩnh, khác xa phân phối thật của một cuộc gọi tổng đài.

SpecAugment và giả lập kênh thoại

SpecAugment che ngẫu nhiên một số dải tần số và một số đoạn thời gian trên đặc trưng log-Mel trong lúc huấn luyện, buộc mô hình không phụ thuộc quá mức vào một vùng tần số hay thời điểm cụ thể, tương tự dropout nhưng có cấu trúc âm học. Song song đó, BEEDONI giả lập điều kiện kênh thoại thật: nén codec G.711 như cuộc gọi qua SIP trunk, cộng tạp âm nền (quán cà phê, đường phố, gió micro điện thoại), mô phỏng tiếng vọng phòng và độ mất gói mạng. Một mô hình chỉ huấn luyện trên âm thanh sạch 16kHz sẽ suy giảm đáng kể khi gặp âm thanh nén 8kHz qua đường dây điện thoại.

Cân bằng phương ngữ và chuyển giao từ mô hình nền

Dữ liệu được thu thập và gán nhãn có chủ đích theo ba miền, với tỷ lệ áp sát phân phối khách hàng thực tế của từng doanh nghiệp thay vì áp theo tỷ lệ dân số chung, vì một chuỗi phòng khám ở Cần Thơ sẽ nhận phần lớn cuộc gọi giọng miền Tây. Mô hình nền được huấn luyện trước (pretrain) trên tập dữ liệu tiếng Việt quy mô lớn bằng học tự giám sát (self-supervised learning kiểu wav2vec 2.0), sau đó tinh chỉnh (fine-tune) có giám sát trên dữ liệu gán nhãn theo từng ngành, giúp mô hình hội tụ tốt ngay cả khi lượng dữ liệu gán nhãn cho một ngành cụ thể còn khiêm tốn.

Nguồn dữ liệuĐặc điểmVai trò trong huấn luyện
Dữ liệu đọc sẵn (audiobook, tin tức)Phát âm chuẩn, phòng thu sạch, lượng lớnHuấn luyện nền (self-supervised), không dùng trực tiếp cho fine-tune cuối
Cuộc gọi tổng đài đã ẩn danh, gán nhãnTạp âm thật, phương ngữ đa dạng, ngắt quãng tự nhiênFine-tune chính, quyết định WER thực tế
Dữ liệu giả lập augmentationMô phỏng codec, tạp âm, mất góiTăng độ bền (robustness) với điều kiện mạng kém

Lớp 3. Contextual Biasing: dạy mô hình “biết trước” từ vựng của từng doanh nghiệp

Mô hình tổng quát, dù huấn luyện tốt tới đâu, cũng không thể biết trước tên một dự án bất động sản mới ra mắt tuần này, tên một loại implant nha khoa, hay mã sản phẩm nội bộ của một doanh nghiệp. Đây là lớp khác biệt giữa một mô hình ASR “chung chung” và một mô hình phục vụ đúng ngữ cảnh khách hàng.

Contextual biasing tăng xác suất cho một danh sách cụm từ ưu tiên ngay tại thời điểm suy luận (inference), không cần huấn luyện lại mô hình. Hai kỹ thuật phổ biến được kết hợp. Shallow fusion cộng thêm điểm số từ một mô hình ngôn ngữ nhỏ được huấn luyện riêng trên danh sách cụm từ ưu tiên, vào điểm số của RNN-T trong quá trình beam search. Biasing theo cây tiền tố (prefix tree / trie) cho phép mô hình nhận diện sớm khi âm thanh bắt đầu khớp một cụm từ trong danh sách, tăng dần trọng số khi càng khớp nhiều ký tự tiếp theo.

json
{
  "tenant_id": "nha-khoa-abc",
  "bias_phrases": [
    { "text": "Invisalign", "weight": 8 },
    { "text": "bọc răng sứ Cercon", "weight": 6 },
    { "text": "bác sĩ Minh Thư", "weight": 5 },
    { "text": "chi nhánh Nguyễn Văn Cừ", "weight": 5 }
  ]
}

Danh sách cụm từ ưu tiên được trích tự động từ tài liệu sản phẩm, bảng giá và dữ liệu CRM mà doanh nghiệp tải lên BEEDONI, cập nhật định kỳ mà không cần huấn luyện lại mô hình nền. Đây là cơ chế giúp một mô hình ASR dùng chung hạ tầng cho hàng trăm doanh nghiệp vẫn nhận đúng tên riêng đặc thù của từng khách hàng.

Lớp 4. Vòng lặp Active Learning: WER giảm liên tục mà không cần gán nhãn toàn bộ

Gán nhãn thủ công toàn bộ dữ liệu cuộc gọi mới mỗi tuần là không khả thi về chi phí. Active learning chọn lọc thông minh: hệ thống tự động đánh dấu các đoạn hội thoại mà mô hình có độ tin cậy thấp (dựa trên entropy của phân phối xác suất đầu ra hoặc độ bất đồng giữa nhiều bản chạy decode khác nhau), và chỉ những đoạn này được đưa cho người gán nhãn kiểm tra.

  1. Thu thập: mọi cuộc gọi sản xuất được chạy qua mô hình hiện tại, log lại điểm tin cậy theo từng đoạn.
  2. Lọc: đoạn có điểm tin cậy thấp hoặc nằm trong danh sách từ bị sửa thủ công bởi nhân viên được đưa vào hàng đợi gán nhãn.
  3. Gán nhãn: người gán nhãn nghe lại, sửa bản chép lời, đặc biệt chú ý thực thể (tên, số điện thoại, ngày giờ).
  4. Huấn luyện lại: dữ liệu mới được gộp vào tập fine-tune định kỳ, mô hình mới được đánh giá trên bộ kiểm thử cố định (golden set) trước khi thay thế mô hình đang chạy.

Một chi tiết dễ bị bỏ sót: thay mô hình mới không nên làm theo kiểu “thay toàn bộ ngay lập tức”. BEEDONI áp dụng shadow deployment, tức mô hình mới chạy song song âm thầm trên lưu lượng thật, so sánh kết quả với mô hình đang phục vụ, trước khi chuyển lưu lượng dần dần (canary rollout). Cách này phát hiện sớm trường hợp mô hình mới tốt hơn trên benchmark nhưng lại kém hơn trên một phân khúc khách hàng cụ thể, điều hoàn toàn có thể xảy ra khi tỷ lệ dữ liệu huấn luyện thay đổi.

“Không có mô hình ASR nào “xong việc” mãi mãi. Ngôn ngữ nói luôn có từ mới, sản phẩm mới, cách diễn đạt mới. Một hệ thống STT tốt là một hệ thống có vòng lặp học liên tục, không phải một lần huấn luyện rồi đóng băng.”

Kết nối với phần còn lại của pipeline Voice AI

STT không đứng một mình. Bản nhận dạng tạm thời (partial hypothesis) được gửi song song cho mô hình ngôn ngữ để bắt đầu suy nghĩ trước khi khách nói xong, và module semantic endpointing dùng chính nội dung nhận dạng để quyết định khách đã nói hết ý hay chưa, như đã phân tích trong bài viết về pipeline Voice AI tiếng Việt thời gian thực. Chất lượng của tầng STT vì vậy ảnh hưởng dây chuyền tới mọi tầng phía sau: một từ bị nhận sai có thể khiến mô hình ngôn ngữ hiểu sai toàn bộ yêu cầu, hoặc khiến endpointing cắt lời khách quá sớm.

Kết luận: đầu tư vào STT là đầu tư vào toàn bộ trải nghiệm thoại

Xây một mô hình ASR tiếng Việt đạt mức WER chấp nhận được trên dữ liệu công khai là bài toán khó nhưng đã có lời giải phổ biến. Xây một mô hình giữ được chất lượng đó trên cuộc gọi thật, với tiếng ồn, phương ngữ, tên riêng luôn thay đổi của hàng trăm doanh nghiệp khác nhau, và tiếp tục cải thiện theo thời gian, là bài toán kỹ thuật vận hành liên tục đòi hỏi cả hạ tầng huấn luyện, hạ tầng gán nhãn lẫn quy trình triển khai an toàn.

BEEDONI được xây dựng bởi đội ngũ có nền tảng nghiên cứu Speech-to-Text và Text-to-Speech trực tiếp cho đối tác tại Úc và Singapore, đóng gói toàn bộ pipeline STT này vào Tổng đài Voice AI sẵn sàng vận hành, để doanh nghiệp không cần tự xây và vận hành hạ tầng nhận dạng tiếng nói từ đầu.