1 điểm bởi GN⁺ 2026-02-01 | 1 bình luận | Chia sẻ qua WhatsApp
  • Để hỗ trợ luyện phát âm và thanh điệu tiếng Trung, tác giả đã tự xây dựng một mô hình giọng nói 9M tham số dựa trên CTC được huấn luyện bằng khoảng 300 giờ dữ liệu giọng nói
  • Sử dụng kiến trúc bộ mã hóa Conformer để nắm bắt cả đặc trưng giọng nói cục bộ lẫn ngữ cảnh toàn cục, đồng thời dùng token hóa theo đơn vị Pinyin+kèm thanh điệu để phân biệt rõ lỗi phát âm
  • Thông qua hàm mất mát CTC, hệ thống đánh giá theo từng khung hình những gì người dùng thực sự phát âm, và dùng thuật toán Viterbi để căn chỉnh theo thời gian
  • Ngay cả khi giảm kích thước mô hình từ 75M xuống 9M, mức suy giảm độ chính xác gần như không đáng kể, và sau khi lượng tử hóa INT8, mô hình chỉ còn khoảng 11MB nên có thể chạy ngay trong trình duyệt web
  • Bản demo chạy trong trình duyệt cho thấy tiềm năng của hệ thống sửa phát âm on-device, và việc cải thiện chất lượng dữ liệu sẽ là chìa khóa để nâng cao hiệu năng trong tương lai

Tổng quan mô hình đánh giá phát âm

  • Để giải quyết khó khăn trong việc học phát âm tiếng Trung, tác giả đã trực tiếp huấn luyện một mô hình giọng nói nhỏ dùng để chấm điểm phát âm
    • Sử dụng khoảng 300 giờ dữ liệu giọng nói đã được phiên âm (AISHELL-1, Primewords)
    • Được cung cấp dưới dạng có thể chạy trực tiếp trong trình duyệt
  • Phương pháp trực quan hóa cao độ trước đây thiếu ổn định do nhiễu và khác biệt trong cách phát âm, và cách tiếp cận dựa trên dữ liệu được xác nhận là hiệu quả hơn
  • Mục tiêu là triển khai hệ thống Computer-Assisted Pronunciation Training (CAPT) on-device mà không cần API thương mại

Kiến trúc mô hình và cách huấn luyện

  • Áp dụng kiến trúc bộ mã hóa Conformer + hàm mất mát CTC
    • CNN nắm bắt các đặc trưng âm học trong khoảng thời gian ngắn (ví dụ: zh so với z)
    • Transformer xử lý các mẫu thanh điệu theo ngữ cảnh (ví dụ: tone sandhi)
  • Phương pháp CTC xuất ra phân phối xác suất theo từng khung hình để đánh giá trực tiếp các âm vị thực sự được phát âm
    • Sử dụng token `` để căn chỉnh các lần lặp và khoảng trống
    • Phản ánh nguyên trạng nội dung thực tế được phát âm mà không tự động hiệu chỉnh

Token hóa và căn chỉnh

  • Định nghĩa tổ hợp Pinyin+kèm thanh điệu thành một token duy nhất
    • Ví dụ: zhong1zhong4 là hai token khác nhau
    • Thanh nhẹ được thống nhất thành tone 5 (ma5)
    • Tổng cộng 1.254 token + ,
  • Dùng thuật toán Viterbi để tính đường đi tối ưu giữa các khung hình âm thanh và token
    • Ví dụ: khi phát âm “Nǐ hǎo”, hệ thống phân biệt được các đoạn ni3hao3

Tối ưu kích thước mô hình và hiệu năng

  • Từ mô hình ban đầu 75M tham số, tác giả đã thu gọn xuống 9M
    • 75M: TER 4,83%, Tone Accuracy 98,47%
    • 9M: TER 5,27%, Tone Accuracy 98,29%
    • Mức suy giảm độ chính xác là rất nhỏ, cho thấy đây là một bài toán phụ thuộc dữ liệu (data-bound)
  • Mô hình FP32 (37MB) được thu gọn còn 11MB bằng lượng tử hóa INT8
    • Có thể tải ngay trong trình duyệt thông qua onnxruntime-web

Lỗi căn chỉnh và cách khắc phục

  • Xuất hiện vấn đề đoạn im lặng làm sai lệch đánh giá phát âm
    • Ví dụ: 1 giây im lặng trước khi phát âm “我喜欢…” bị căn chỉnh nhầm thành wo3, dẫn đến bị chấm 0 điểm
  • Cách giải quyết: loại các khung hình im lặng khỏi phép tính điểm
    • Lọc các khung hình có xác suất `` lớn hơn hoặc bằng 0,7
    • Sau khi sửa, điểm độ tin cậy của âm tiết đầu tiên được cải thiện từ 0.0 → 0.99

Kết quả và giới hạn

  • Trong quá trình beta test, tác giả cảm nhận rõ hiệu quả của việc sửa phát âm
    • Mô hình chấm điểm rất nghiêm ngặt
  • Giọng nói của người bản ngữ và trẻ em có độ chính xác thấp hơn
    • Dữ liệu AISHELL chủ yếu là giọng đọc nên tồn tại khác biệt về tốc độ và ngữ điệu
    • Về sau cần bổ sung dữ liệu hội thoại như Common Voice
  • Bản demo web có dung lượng khoảng 13MB, mang lại đầy đủ chức năng sửa phát âm trong một kích thước nhẹ hơn phần lớn website

1 bình luận

 
GN⁺ 2026-02-01
Ý kiến trên Hacker News
  • Cảm ơn vì đây là một dự án thật sự rất tuyệt
    Tuy vậy, việc trong câu “我想学中文” mà “wén” bị nhận thành “guó” thì khá lạ
    Có vẻ đây là kết quả của việc mô hình học cấu trúc từ hơn là thanh điệu. Có lẽ do “Zhōng guó” xuất hiện rất nhiều trong dữ liệu huấn luyện nên sinh ra thiên lệch như vậy
    Đúng như bài blog nói, có vẻ đây không phải là “mô hình cho biết chính xác tôi đã phát âm gì”, mà là cấu trúc ánh xạ sang âm tiết gần nhất trong số 1254 âm tiết có thể có

    • Tôi đã thử lặp lại “guó” nhiều lần nhưng nó không nhận ra là lặp
      Dù vậy tôi vẫn thích cách tiếp cận học tập xoay quanh âm thanh này. Học dựa trên chữ viết dễ gây rối vì mỗi nước lại có cách ký âm khác nhau. Với người mới học, ngay cả pinyin cũng có nhiều ký hiệu gây nhầm lẫn
  • Ý tưởng và UI rất trực quan nên khá ấn tượng
    Nhưng ngay cả tôi là người Bắc Kinh và nói tiếng Phổ thông chuẩn hoàn hảo cũng khó vượt qua các câu dễ
    Ở ví dụ “你好吃饭了吗”, phần nhận diện thanh điệu bị sai, và “了” theo ngữ cảnh phải là “le” chứ không phải “liǎo”
    Có nhiều ý kiến lo lắng về thanh điệu, nhưng thực tế ngay cả khi thanh điệu không hoàn hảo thì giao tiếp vẫn thường không gặp vấn đề lớn
    Mỗi vùng có ngữ điệu khác nhau nên dù thanh điệu bị trộn, mọi người vẫn hiểu nhau khá tốt. Đừng quá ám ảnh với thanh điệu, tôi khuyên nên học theo ngữ cảnh

    • Nếu phản biện với tư cách người bản ngữ, thì thanh điệu cực kỳ quan trọng
      Lý do người ta vẫn giao tiếp được dù khác phương ngữ là vì 1) khác biệt thanh điệu giữa các vùng lân cận không quá lớn, và 2) khi không hiểu nhau thì họ chuyển sang chuẩn ngữ (Phổ thông)
      Chính hệ thống thanh điệu là một phần lý do khiến tiếng Trung tồn tại như hiện nay. Sai thanh điệu thì gần như không thể giao tiếp được
    • Với góc nhìn của người đã học đến trình độ C1 ở Đài Loan, thanh điệu quan trọng ở giai đoạn đầu, nhưng khi khả năng biểu đạt tăng lên thì ngữ cảnh sẽ bù đắp
      Tuy vậy, một lý do khiến Trung Quốc giao tiếp thiên về chữ viết là vì mỗi vùng có cách phát âm và thanh điệu khác nhau, nên chỉ dựa vào lời nói thì không phải lúc nào cũng hiểu nhau
    • Người bản ngữ vẫn có thể hiểu nhau dù mẫu thanh điệu khác nhau vì ngữ pháp và ngữ điệu có thể dự đoán được, còn người học thì không như vậy
      Cổ vũ việc bỏ qua thanh điệu là nguy hiểm. Nếu thanh điệu thực sự không quan trọng thì chúng đã biến mất từ lâu rồi
    • Vấn đề với “了” là bug JavaScript và đã được sửa. Phần còn lại có thể cải thiện bằng bộ dữ liệu đa dạng hơn
    • Dù nói thanh điệu không quan trọng, vẫn có rất nhiều trường hợp như 熊猫(xióngmāo)胸毛(xiōngmáo) có nghĩa hoàn toàn khác nhau chỉ vì khác thanh điệu
      Khi ngữ cảnh hẹp thì rất dễ gây nhầm lẫn, nên thanh điệu vẫn là yếu tố cốt lõi. Ngoài ra còn cần bổ sung dữ liệu vì có trường hợp “吃” bị nhận thành “shi2”
  • Là một người học trình độ trung cấp, tôi đã tạo tài khoản mới chỉ để lại phản hồi
    Khi nói nhanh thì theo dõi âm vị không tốt và nhận diện thanh điệu bị lệch
    Ví dụ, nếu nói “他是我的朋友” ở tốc độ tự nhiên thì “我” có thể bị nhận thành “de”, hoặc “是” bị xử lý thành “si”
    Nếu nói chậm và rõ từng tiếng thì hệ thống nhận đúng
    Cũng cần tính đến hiện tượng như biến điệu liên tiếp của thanh 3 (tone sandhi). Cần có tính năng xử lý cách phát âm trong hội thoại tự nhiên

    • Biến điệu là cốt lõi trong phát âm tiếng Trung. Hiện tại vẫn ở mức dành cho người mới bắt đầu nên cần cải thiện
    • Nhờ phản hồi này mà tôi đã thêm hỗ trợ sandhi (biến điệu). Mong mọi người cho biết nó có hoạt động tốt không
    • Tôi cũng thấy có vẻ chưa xử lý được biến điệu. Dù vậy ý tưởng thật sự rất hay
    • Tôi cũng gặp đúng vấn đề đó. Hay là vì tôi là kiểu “dapangzi” nên vậy, nói đùa thôi
  • Với người nói các ngôn ngữ châu Âu, học tiếng Trung hay các ngôn ngữ có thanh điệu khác là cực kỳ khó
    Tai không quen với thanh điệu nên bản thân nghĩ là mình nói đúng nhưng người bản ngữ lại không hiểu

    • Là người bản ngữ tiếng Trung, tôi lại thấy hệ thống nguyên âm của tiếng Anh còn khó hơn nhiều
      Trong tiếng Anh, nguyên âm thay đổi theo từng vùng, và rất khó phân biệt các cặp như “done vs down”, “beat vs bit”
      Ngược lại, tiếng Tây Ban Nha có hệ nguyên âm đơn giản nên dễ học hơn nhiều
    • Vì thế tôi hiểu tại sao người Trung Quốc hay mắc lỗi khi phát âm tiếng Anh hoặc tiếng Đức. Trọng tâm chú ý khác nhau nên vậy
    • Với người không quen thanh điệu hay độ cao âm, chuyện này khó đến phát điên, nhưng những công cụ như thế này giúp quá trình đó bớt đau đớn hơn
      Khi học pitch accent của tiếng Nhật, ban đầu tôi hoàn toàn không nghe ra khác biệt, nhưng nhờ luyện lặp đi lặp lại mà dần bắt đầu nghe được
      Sau khi nhận ra ngay cả tiếng Anh cũng có mẫu cao độ như trong “uh-oh”, tôi mới bắt đầu cảm được vấn đề
    • Đôi khi tôi nói những câu đơn giản mà người ta vẫn không hiểu.
      Đặc biệt, thói quen dùng ngữ điệu kiểu tiếng Anh để thể hiện sự không chắc chắn là một vấn đề
    • Nhưng thanh điệu không khó đến thế. Thứ thật sự khó là vốn từ vựng
      Thanh điệu và ngữ pháp là nền tảng học ở giai đoạn đầu, còn trong nhiều năm sau đó phần lớn công sức sẽ đổ vào việc ghi nhớ từ vựng
      Cái khó thật sự của tiếng Trung là thiếu từ vựng chung với các ngôn ngữ kháchệ chữ viết không mang tính âm vị
  • Nó chỉ hoạt động tốt khi nói theo từng từ, còn ở cấp độ câu hay tốc độ tự nhiên thì nhận sai rất nhiều
    Tôi là người bản ngữ có chứng chỉ Phổ thông cấp 2A mà nói kiểu đời thường vẫn bị lỗi
    Mô hình chưa phân biệt được giữa hội thoại hằng ngày và phát âm chuẩn mực

  • Khi học ở Đài Loan, tôi đã vẽ đường cong thanh điệu bằng tay để luyện nhớ
    Trông như một người nước ngoài điên rồ, nhưng hiệu quả thì rất rõ rệt
    Khác biệt ngữ điệu vùng miền cũng lớn, nên sẽ tốt hơn nếu thu thập dữ liệu chuẩn theo từng người bản ngữ

    • Trong lớp tôi cũng từng có một học sinh nói thanh điệu rất cường điệu, nhưng sau này lại có phát âm chính xác nhất
      Tôi tiếc là hồi đó mình đã không bắt chước theo
    • Tôi đề xuất bài giảng YouTube của Mike Laoshi
    • Tôi cũng mới chỉ thử với vài người bạn, và đang cân nhắc có nên đặt vùng miền làm tham số hay không. Nếu học hết mọi phương ngữ thì có thể hệ thống sẽ quá dễ dãi
    • Cái này giống như luyện solfeggio dùng động tác tay để biểu diễn cao độ
    • Động tác tay đặc biệt hữu ích khi ghi nhớ từ mới. Dùng ngón tay chỉ thanh điệu giúp nhớ lâu hơn
  • Tôi là người bản ngữ nhưng bản demo không nhận ra cách phát âm của tôi
    Có lẽ là do tiếng ồn nền. Lúc đó con gái tôi đang ngồi cạnh xem hoạt hình

    • Hiện tại hệ thống vẫn nhạy với tiếng ồn nền, nhưng đang huấn luyện phiên bản cải thiện bằng tăng cường dữ liệu
  • Đây là một dự án rất tuyệt, nhưng tôi muốn khuyên rằng đừng phụ thuộc quá nhiều vào phản hồi từ bên ngoài
    Cốt lõi của sửa phát âm là luyện tai. Ngay cả người học trưởng thành vẫn còn tính dẻo thần kinh, nên cần rèn tai bằng các bài tập nghe cặp tối thiểu chẳng hạn
    Làm như vậy không chỉ cải thiện phát âm mà còn tăng mạnh khả năng nghe hiểu và tốc độ tiếp thu từ vựng

    • Tôi đang phát triển Phrasing.app và hoàn toàn đồng ý với lời khuyên này
      So với SST, đồng bộ văn bản-âm thanh (kiểu karaoke) hiệu quả hơn nhiều
      Cách để người dùng nghe chồng giọng của mình với bản gốc rồi tự nhận ra khác biệt rất hữu ích cho việc học
    • Tôi cũng nghĩ vậy. Nghe chính là cốt lõi của nói
      Thay vì cố nhớ thanh điệu của từng từ, bắt chước nguyên vẹn cách phát âm của người bản ngữ sẽ tự nhiên hơn nhiều
  • Điểm ấn tượng là mọi thứ đều chạy ngay trong trình duyệt bằng ONNX Runtime Web
    Cách dùng forced alignment để loại bỏ việc đoán nghĩa và tách riêng vấn đề thanh điệu là rất thông minh
    Ở các phiên bản sau, nếu thêm biến điệu (sandhi) ở bước hậu xử lý thì sẽ hữu ích hơn nhiều cho việc luyện tốc độ hội thoại

  • Giá mà có chế độ pinyin. Tôi chỉ học nói chứ không học đọc chữ
    Tôi đang sắp xếp từ vựng bằng webapp flashcard do mình làm

    • Đây là một gợi ý hay nên tôi đã thêm tính năng bật/tắt pinyin
    • Tôi cũng nghĩ vậy. Tuy nhiên phần nhận diện phụ âm không tốt nên hơi bực. Tôi đâu đến mức phát âm tệ như thế
    • Tôi cũng bỏ một phiếu cho chế độ pinyin