Speech Recognition
Nhận dạng giọng nói — Tai nghe AI
Khi bạn nói 'Xin chào Việt Nam' vào microphone, AI nhận dạng giọng nói 'nghe' được gì?
Nhấp vào từng bước trong pipeline để hiểu cách sóng âm biến thành văn bản. Mỗi bước biến đổi dữ liệu sang dạng khác.
Hình minh họa
Sóng âm: Thu nhận tín hiệu âm thanh thô từ microphone
Sóng âm liên tục được số hoá (sampling) thành chuỗi số — thường 16.000 mẫu/giây (16kHz). Mỗi mẫu là một giá trị biên độ.
Bạn dùng Whisper để ghi chú cuộc họp tiếng Việt. Kết quả có nhiều lỗi thanh điệu ('ma' thay vì 'mã'). Giải pháp tốt nhất là gì?
Giải thích
Nhận dạng giọng nói (ASR — Automatic Speech Recognition) chuyển đổi tín hiệu âm thanh thành văn bản. Đây là nền tảng cho trợ lý ảo (Siri, Alexa), phụ đề tự động, và ghi chú cuộc họp — ngược lại với bài toán tổng hợp giọng nói (TTS) chuyển văn bản thành âm thanh.
Tiền xử lý: Sóng âm 16kHz chuyển thành Mel-spectrogram 80 kênh, cửa sổ 25ms, bước nhảy 10ms.
Encoder: Transformer encoder với 2 lớp CNN ban đầu, xử lý spectrogram thành chuỗi hidden states.
Decoder: Transformer decoder sinh token tuần tự, sử dụng cross-attention với encoder output.
Multitask: Cùng một mô hình làm được: nhận dạng, dịch, phát hiện ngôn ngữ, thêm timestamp.
Quá trình chuyển đổi tần số bằng Mel-spectrogram:
Công thức Mel scale chuyển tần số Hz sang thang Mel, mô phỏng cảm nhận phi tuyến tính của tai người: khoảng cách từ 100Hz đến 200Hz nghe xa hơn nhiều so với 5000Hz đến 5100Hz.
import whisper
# Tải mô hình Whisper
model = whisper.load_model("large-v3")
# Nhận dạng tiếng Việt
result = model.transcribe(
"cuoc-hop-vnexpress.wav",
language="vi", # Chỉ định tiếng Việt
task="transcribe", # Hoặc "translate" để dịch sang Anh
word_timestamps=True, # Timestamp từng từ
)
print(result["text"])
# "Xin chào các bạn, hôm nay chúng ta sẽ thảo luận
# về chiến lược marketing quý 4..."
# Truy cập timestamp từng segment
for seg in result["segments"]:
print(f"[{seg['start']:.1f}s - {seg['end']:.1f}s] {seg['text']}")Thanh điệu: Tiếng Việt có 6 thanh (ngang, huyền, sắc, hỏi, ngã, nặng). Nhầm thanh = nhầm nghĩa hoàn toàn ("ma" vs "mã" vs "mả").
Phương ngữ: Giọng Bắc ("s" vs "x"), Trung ("tr" = "t"), Nam ("v" = "d") rất khác nhau. Mô hình cần dữ liệu đa vùng miền.
Từ ghép: "Việt Nam" là 1 từ nhưng 2 âm tiết. ASR cần hiểu ngữ cảnh để không tách nhầm.
Whisper (OpenAI): Encoder-decoder, 99 ngôn ngữ, miễn phí. Chất lượng tiếng Việt khá (WER ~15-20% tùy điều kiện).
Wav2Vec2 (Meta): CTC-based, self-supervised learning. Nhanh hơn Whisper, nhưng cần fine-tune riêng cho tiếng Việt.
Google Speech-to-Text: API thương mại, hỗ trợ streaming real-time. Tốt cho tiếng Việt phổ thông, yếu với phương ngữ.
PhoWhisper (VinAI): Whisper fine-tuned riêng cho tiếng Việt, cải thiện đáng kể với thanh điệu và phương ngữ.
- ASR = dịch từ sóng âm sang văn bản. Kiến trúc encoder-decoder (Whisper) là chuẩn hiện đại.
- Pipeline: Sóng âm → Mel-spectrogram → Encoder → Decoder → Văn bản có dấu câu.
- Mel scale mô phỏng tai người — lý do spectrogram hiệu quả hơn sóng âm thô.
- Tiếng Việt thách thức vì 6 thanh điệu và 3 phương ngữ chính (Bắc/Trung/Nam).
- Fine-tune trên dữ liệu đa phương ngữ là bắt buộc để đạt chất lượng tốt cho tiếng Việt.
Kiểm tra hiểu biết
Tại sao Whisper dùng Mel-spectrogram thay vì sóng âm thô (raw waveform)?