Speech-to-Text
Chuyển giọng nói thành văn bản (STT), hay nhận dạng giọng nói tự động, phiên âm âm thanh lời nói thành văn bản bằng các model neural như Whisper; hiệu quả được đánh giá bằng tỷ lệ lỗi từ.
Chuyển giọng nói thành văn bản (STT), còn gọi là nhận dạng giọng nói tự động (ASR) hoặc đơn giản là nhận dạng giọng nói, chuyển âm thanh lời nói thành văn bản. Model STT biến dạng sóng thành biểu diễn thời gian–tần số, ánh xạ biểu diễn đó thành ký tự hoặc đơn vị từ con bằng mạng nơ-ron, rồi tạo bản chép lời, thường kèm dấu câu, dấu thời gian và nhãn người nói. Đây là lớp đầu vào của trợ lý giọng nói, phụ đề trực tiếp, ghi chú cuộc họp và phân tích cuộc gọi; bản chép lời từ STT được đưa vào xử lý ngôn ngữ tự nhiên (NLP) để phục vụ tìm kiếm, tóm tắt và phát hiện ý định. Tiền huấn luyện tự giám sát trên âm thanh chưa gán nhãn và huấn luyện bán giám sát ở quy mô lớn, chẳng hạn như Whisper của OpenAI được huấn luyện trên 680.000 giờ âm thanh đa ngôn ngữ từ internet, đã giúp các hệ thống hiện đại đạt độ chính xác cao với nhiều giọng địa phương, tiếng ồn nền và hàng chục ngôn ngữ.
Cách chuyển giọng nói thành văn bản hoạt động#
Đầu tiên, âm thanh được lấy mẫu lại — Whisper dùng 16 kHz — rồi chuyển thành phổ mel log, một lưới thể hiện năng lượng theo từng dải tần số theo thời gian. Whisper tính 80 dải mel trên các cửa sổ 25 mili giây cách nhau 10 mili giây; model large-v3 sử dụng 128 dải. Bộ mã hóa âm học, được xây dựng từ các lớp tích chập và transformer, biến các khung này thành đặc trưng. Encoder Conformer đan xen tích chập, giúp nắm bắt các mẫu âm thanh cục bộ, với self-attention, giúp liên kết các phần cách xa nhau trong một phát ngôn; encoder đạt tỷ lệ lỗi từ 2.1% và 4.3% trên các tập LibriSpeech test-clean và test-other mà không cần model ngôn ngữ bên ngoài. Ba họ decoder chuyển đặc trưng encoder thành văn bản:
- Phân loại thời gian kết nối (CTC): Dự đoán một ký tự, mảnh từ hoặc ký hiệu trống cho mỗi khung âm thanh, sau đó gộp các phần lặp lại và loại bỏ ký hiệu trống. Tất cả các khung được giải mã song song, giúp CTC nhanh.
- Transducer: RNN-T và các thế hệ kế tiếp xuất token khi các khung âm thanh đến, nên phù hợp với nhận dạng trực tuyến trên điện thoại và tạo phụ đề trực tiếp.
- Encoder-decoder dựa trên attention: Decoder văn bản sinh từng token một trong khi tập trung vào âm thanh đã mã hóa. Whisper giải mã các cửa sổ 30 giây theo cách này và dùng token đặc biệt để xác định ngôn ngữ, dự đoán dấu thời gian hoặc dịch sang tiếng Anh.
Các hệ thống xử lý trực tuyến hiển thị bản chép lời tạm thời thay đổi khi có thêm âm thanh, rồi hoàn tất một đoạn khi người nói ngừng lại:
Sau khi giải mã, chuẩn hóa văn bản ngược chuyển các cách đọc thành chữ viết, chẳng hạn "twenty five dollars" thành "$25," còn phân đoạn người nói chia bản chép lời theo thời điểm và người nói.
Dữ liệu huấn luyện và model#
- Tiền huấn luyện tự giám sát: wav2vec 2.0 của Meta học biểu diễn lời nói bằng cách che các phần của âm thanh chưa gán nhãn. Được tiền huấn luyện trên 53,000 giờ lời nói chưa gán nhãn và fine-tune chỉ với 10 phút âm thanh đã chép lời, model đạt tỷ lệ lỗi từ 4.8% và 8.2% trên các tập kiểm thử clean và other của LibriSpeech.
- Giám sát yếu ở quy mô lớn: Whisper được huấn luyện trên âm thanh ghép cặp với các bản chép lời không hoàn hảo tìm thấy trên mạng. Các model của Whisper có kích thước từ 39 triệu tham số cho bản tiny đến 1.55 tỷ cho bản large; model turbo, phiên bản large-v3 được tối ưu với 809 triệu tham số, chạy nhanh hơn large khoảng 8 lần.
- Ảo giác: Các decoder dùng attention hoạt động giống model ngôn ngữ, nên sự im lặng hoặc tiếng ồn có thể khiến chúng bịa ra văn bản trôi chảy. Nghiên cứu Careless Whisper phát hiện khoảng 1% bản chép lời của Whisper chứa cả cụm từ hoặc câu không có trong âm thanh, thường xảy ra hơn với người nói có những khoảng ngừng dài.
Chuyển giọng nói thành văn bản so với các thuật ngữ liên quan#
- Nhận dạng giọng nói và ASR: Các từ đồng nghĩa với chuyển giọng nói thành văn bản.
- Nhận dạng người nói và phân đoạn người nói: Xác định ai đang nói thay vì nội dung được nói. Phân đoạn người nói gắn nhãn người nói cho từng đoạn trong bản ghi âm, nhờ đó bản chép lời cuộc họp có thể quy từng câu cho đúng người.
- Hiểu ngôn ngữ tự nhiên (NLU): Diễn giải ý nghĩa của bản chép lời, chẳng hạn ý định và thực thể trong câu "đặt bàn cho hai người lúc bảy giờ."
- Chuyển văn bản thành giọng nói (TTS): Chiều ngược lại, tạo giọng nói từ văn bản. Trợ lý giọng nói kết hợp STT, model ngôn ngữ lớn và TTS.
Ứng dụng thực tế#
- Phụ đề và khả năng tiếp cận: Phụ đề trực tiếp trên điện thoại, nền tảng video và phần mềm họp giúp người khiếm thính hoặc nghe kém tiếp cận lời nói; đồng thời giúp mọi người tìm kiếm nội dung.
- Tài liệu lâm sàng: Các trợ lý ghi chép môi trường chép lại hội thoại giữa bác sĩ và bệnh nhân, rồi soạn ghi chú lâm sàng cho hồ sơ sức khỏe điện tử.
- Trung tâm liên hệ: Các cuộc gọi được chép lời là đầu vào cho tìm kiếm, kiểm tra tuân thủ và phân tích cảm xúc.
- Điều khiển hệ thống thị giác bằng giọng nói: Một lệnh được chép lời như "tìm chiếc ba lô màu đỏ" trở thành prompt văn bản cho YOLOE-26, phiên bản từ vựng mở của Ultralytics YOLO26, có thể phát hiện và phân đoạn các lớp được chỉ định tại thời điểm suy luận, ngay cả khi chúng chưa từng có trong các lớp huấn luyện.
Đo độ chính xác#
Tỷ lệ lỗi từ (WER) đếm số phép thay thế, xóa và chèn cần thiết để biến bản chép lời thành bản tham chiếu, rồi chia cho số từ trong bản tham chiếu. Đoạn code này tính WER bằng khoảng cách chỉnh sửa ở cấp từ:
import numpy as np
reference = ["turn", "on", "the", "kitchen", "lights"]
hypothesis = ["turn", "of", "the", "kitchen", "light", "please"]
# Edit distance over words: d[i, j] is the cheapest way to turn the first i reference words into the first j hypothesis words
d = np.zeros((len(reference) + 1, len(hypothesis) + 1), dtype=int)
d[:, 0] = np.arange(len(reference) + 1) # deletions
d[0, :] = np.arange(len(hypothesis) + 1) # insertions
for i in range(1, len(reference) + 1):
for j in range(1, len(hypothesis) + 1):
substitution = d[i - 1, j - 1] + (reference[i - 1] != hypothesis[j - 1])
d[i, j] = min(substitution, d[i - 1, j] + 1, d[i, j - 1] + 1)
# Word error rate: (substitutions + deletions + insertions) / words in the reference
print(f"{d[-1, -1]} errors / {len(reference)} words = WER {d[-1, -1] / len(reference):.0%}")Kết quả in ra là 3 errors / 5 words = WER 60%: "of" thay cho "on" và "light" thay cho "lights" là các phép thay thế, còn "please" là từ được chèn thêm. Vì phép chèn cũng được tính, WER có thể vượt quá 100%; các benchmark như Open ASR Leaderboard chuẩn hóa chữ hoa, dấu câu và biến thể chính tả trước khi chấm điểm để "Lights." và "lights" được xem là khớp. Các ngôn ngữ không dùng dấu cách giữa các từ, chẳng hạn tiếng Trung và tiếng Nhật, được chấm bằng tỷ lệ lỗi ký tự.










