Giới thiệu dự án

Công nghệ nhận dạng giọng nói tự động (Automatic Speech Recognition - ASR) và xử lý ngôn ngữ tự nhiên (Natural Language Processing - NLP) đã trở thành trụ cột quan trọng trong kỷ nguyên số hóa. Theo báo cáo từ Cisco Annual Internet Report, nội dung video chiếm hơn 82% tổng lưu lượng truy cập Internet toàn cầu. Sự bùng nổ này kéo theo nhu cầu cấp thiết về việc tạo phụ đề tự động nhằm nâng cao khả năng tiếp cận thông tin cho cộng đồng người khiếm thính, hỗ trợ học tập đa ngôn ngữ và tối ưu hóa SEO video trên các nền tảng số.

Tuy nhiên, phương pháp tạo phụ đề thủ công truyền thống bộc lộ nhiều điểm nghẽn nghiêm trọng:

  • Chi phí thời gian và nhân lực cao: Trung bình một chuyên viên cần từ 4 đến 6 giờ để tạo phụ đề và căn chỉnh thời gian (timestamp synchronization) cho 1 giờ video thô.
  • Độ trễ lớn: Không đáp ứng được các kịch bản thời gian thực như phát sóng trực tiếp, hội thảo trực tuyến hay phụ đề tức thì.
  • Độ biến thiên âm thanh phức tạp: Giọng nói bị ảnh hưởng lớn bởi ngữ điệu vùng miền, tốc độ nói, cao độ $F_0$, tiếng ồn môi trường và hiện tượng đồng cấu âm (homophones).

Nhằm giải quyết triệt để bài toán này, đề tài khóa luận tốt nghiệp kỹ sư ngành Kỹ thuật Dữ liệu tại Trường Đại học Sư phạm Kỹ thuật TP.HCM (HCMUTE) mang tên "Xây dựng ứng dụng tạo phụ đề tự động sử dụng Deep Learning" do sinh viên Đỗ Lê Tiến Đạt thực hiện dưới sự hướng dẫn của TS. Trần Nhật Quang đã được triển khai với các mục tiêu cụ thể:

  1. Nghiên cứu chuyên sâu xử lý tín hiệu âm thanh: Phân tích bản chất vật lý của sóng âm, cơ chế thính giác người và các kỹ thuật trích xuất đặc trưng kinh điển như Spectrogram, Mel Spectrogram và MFCC (Mel-Frequency Cepstral Coefficients).
  2. Khảo sát mô hình ASR truyền thống: Phân tích kiến trúc lai ghép GMM-HMM (Gaussian Mixture Model – Hidden Markov Model) để làm cơ sở đối chuẩn.
  3. Huấn luyện và tối ưu hai kiến trúc Deep Learning hiện đại: Triển khai mô hình học có giám sát Deep Speech 2 (kết hợp ResCNN, BiRNN và CTC Loss) và mô hình học tự giám sát (Self-Supervised Learning) Wav2Vec 2.0 trên tập dữ liệu chuẩn ngữ âm TIMIT.
  4. Đánh giá thực nghiệm: Định lượng hiệu năng nhận dạng dựa trên hai chỉ số chuẩn hóa Word Error Rate (WER) và Character Error Rate (CER).
  5. Xây dựng ứng dụng hoàn chỉnh: Phát triển ứng dụng Web trực quan bằng Streamlit, cho phép người dùng tải lên tệp âm thanh/video, tự động nhận dạng và xuất tệp phụ đề định dạng .srt chính xác theo mốc thời gian.

Phạm vi và giới hạn đề tài: Nghiên cứu tập trung vào bài toán nhận dạng giọng nói tiếng Anh trên tập ngữ liệu chuẩn TIMIT (khoảng 5.4 giờ âm thanh có gán nhãn chi tiết ở mức âm vị). Ứng dụng tập trung vào xử lý tệp ngoại tuyến (offline batch processing) và trích xuất phụ đề tự động chuẩn xác.


Phân tích và thiết kế giải pháp

Phân tích hiện trạng

Trước khi bước vào kỷ nguyên Deep Learning, các hệ thống nhận diện giọng nói chủ yếu dựa trên kiến trúc thống kê kết hợp giữa Mô hình Âm thanh (Acoustic Model) và Mô hình Ngôn ngữ (Language Model).

Tiêu chí GMM-HMM Truyền thống Deep Speech 2 (Baidu) Wav2Vec 2.0 (Meta AI)
Kiến trúc Gaussian Mixture Model + Hidden Markov Model ResCNN + BiRNN (BiGRU/BiLSTM) + CTC Temporal CNN Encoder + Vector Quantizer + Transformer
Phương thức học Thống kê tham số, căn chỉnh cưỡng bức (Forced Alignment) Học sâu có giám sát (Supervised End-to-End) Học tự giám sát (Self-Supervised Pretraining) + CTC Fine-tuning
Đặc trưng đầu vào 39 chiều MFCC ($12 \text{ Cepstral} + 1 \text{ Energy} + 13\Delta + 13\Delta\Delta$) Log Mel Spectrogram (80 bins) Dạng sóng thô (Raw Audio Waveform, 16kHz)
Khả năng khái quát Kém khi gặp nhiễu hoặc giọng đọc ngoài tập mẫu Tốt trên tập dữ liệu lớn, phụ thuộc nhiều nhãn Vượt trội nhờ biểu diễn ngữ cảnh tiền huấn luyện
Chi phí gán nhãn Cực cao (cần gán nhãn mức frame/phone) Cao (cần cặp audio - text chính xác) Rất thấp (Pretrain trên dữ liệu không nhãn)
                       BẢNG ĐỐI SOÁNH CÔNG NGHỆ THỊ TRƯỜNG
┌──────────────────────┬────────────────────────┬────────────────────────┐
│ Giải pháp            │ Ưu điểm                │ Nhược điểm             │
├──────────────────────┼────────────────────────┼────────────────────────┤
│ Google Cloud Speech  │ Độ chính xác cao, đa   │ Chi phí bản quyền cao, │
│ to Text API          │ ngôn ngữ, hỗ trợ Cloud │ phụ thuộc Internet     │
├──────────────────────┼────────────────────────┼────────────────────────┤
│ OpenAI Whisper       │ Khả năng tổng quát hóa │ Kích thước model lớn,  │
│                      │ mạnh mẽ                │ suy luận chậm trên CPU │
├──────────────────────┼────────────────────────┼────────────────────────┤
│ Giải pháp Đề tài     │ Nhẹ, tùy biến cao, mã  │ Giới hạn tập dữ liệu   │
│ (Wav2Vec2 + Web UI)  │ nguồn mở, chạy offline │ huấn luyện ban đầu     │
└──────────────────────┴────────────────────────┴────────────────────────┘

Yêu cầu người dùng theo mô hình MoSCoW:

  • Must have: Tải lên tệp âm thanh (WAV, MP3), chuyển đổi giọng nói thành chuỗi văn bản, đồng bộ thời gian và trích xuất file phụ đề .srt.
  • Should have: Giao diện trực quan trên nền Web (Streamlit), hiển thị dạng sóng (Waveform) và Mel Spectrogram, thông báo tiến trình xử lý.
  • Could have: Tự động chuẩn hóa văn bản (loại bỏ ký tự đặc biệt, viết thường/viết hoa), hỗ trợ trích xuất âm thanh trực tiếp từ video (MP4, MKV).
  • Won't have: Phân tách giọng người nói (Speaker Diarization) đa kênh phức tạp, dịch thuật tức thời sang nhiều ngôn ngữ trong phiên bản hiện tại.

Thiết kế hệ thống

Kiến trúc hệ thống được thiết kế theo dạng Module hóa (Modular Architecture) nhằm đảm bảo tính độc lập và khả năng mở rộng:

[User Interface (Streamlit Web App)]
                 │
                 ▼
[Audio Preprocessing & Extraction Module]
  ├── Format Conversion & Resampling (16kHz Mono via Librosa/FFmpeg)
  └── Feature Engineering (Raw Waveform / Log-Mel Spectrogram)
                 │
                 ▼
[Deep Learning Inference Engine]
  ├── Option A: Deep Speech 2 (ResCNN + BiGRU + CTC Decoder)
  └── Option B: Wav2Vec 2.0 (Transformer Encoder + CTC Tokenizer)
                 │
                 ▼
[Post-Processing & Subtitle Formatter]
  ├── Timestamp Alignment & Chunk Processing
  └── SRT File Builder (Sequence ID, Start-End Time, Text)

Tech Stack và phiên bản công nghệ sử dụng:

  • Ngôn ngữ lập trình: Python 3.10.12
  • Deep Learning Framework: PyTorch 2.1.2, TorchAudio 2.1.2
  • Thư viện Transformer & ASR: Hugging Face transformers 4.38.2, datasets 2.18.0
  • Xử lý âm thanh: librosa 0.10.1, soundfile 0.12.1
  • Đánh giá mô hình: jiwer 3.0.3 (tính toán Word Error Rate và Character Error Rate)
  • Web Framework: Streamlit 1.32.0
  • Xử lý đa phương tiện: FFmpeg 6.0

Methodology

Quy trình phát triển được xây dựng dựa trên phương pháp nghiên cứu thực nghiệm lặp (Iterative Experimental Methodology):

  • Giai đoạn 1 (Tuần 1-2): Khảo sát lý thuyết xử lý tín hiệu âm thanh, cơ chế sinh âm và cảm nhận qua ốc tai.
  • Giai đoạn 2 (Tuần 3-4): Xây dựng pipeline xử lý đặc trưng: Pre-emphasis, Windowing (Hamming Window 25ms, hop length 10ms), STFT và Mel-Filterbank.
  • Giai đoạn 3 (Tuần 5-6): Xây dựng, huấn luyện và tối ưu hóa mô hình Deep Speech 2 với kỹ thuật tăng cường dữ liệu SpecAugment (Time/Frequency Masking).
  • Giai đoạn 4 (Tuần 7-8): Cấu hình Wav2Vec2CTCTokenizer, Wav2Vec2FeatureExtractor, Wav2Vec2Processor và tiến hành fine-tune Wav2Vec 2.0 trên TIMIT.
  • Giai đoạn 5 (Tuần 9-10): Benchmark so sánh hiệu năng, tích hợp mô hình tốt nhất vào ứng dụng Streamlit và đóng gói sản phẩm.

Implementation và kết quả

Development process

1. Xử lý dữ liệu âm thanh và trích xuất đặc trưng

Dữ liệu sóng âm liên tục được số hóa ở tần số lấy mẫu $f_s = 16\text{ kHz}$ theo định lý Nyquist-Shannon. Tín hiệu được đưa qua bộ lọc tiền nhấn mạnh (Pre-emphasis filter) để tăng cường năng lượng cho các dải tần số cao:

$$y[n] = x[n] - \alpha \cdot x[n-1] \quad (\text{với } \alpha = 0.97)$$

Tín hiệu sau đó được phân khung (Windowing) bằng cửa sổ Hamming nhằm hạn chế hiện tượng rò rỉ phổ (Spectral Leakage):

$$w[n] = 0.54 - 0.46 \cos\left(\frac{2\pi n}{N-1}\right), \quad 0 \le n \le N-1$$

import torch
import torchaudio
import torchaudio.transforms as T

class AudioFeaturePipeline:
    def __init__(self, sample_rate=16000, n_mels=80, n_fft=400, hop_length=160):
        self.sample_rate = sample_rate
        # Biến đổi Mel Spectrogram với tham số tối ưu cho ASR
        self.mel_spectrogram = T.MelSpectrogram(
            sample_rate=sample_rate,
            n_fft=n_fft,
            win_length=n_fft,
            hop_length=hop_length,
            n_mels=n_mels,
            power=2.0
        )
        self.amplitude_to_db = T.AmplitudeToDB()

    def extract_features(self, waveform: torch.Tensor) -> torch.Tensor:
        # Pre-emphasis filter: y[n] = x[n] - 0.97 * x[n-1]
        emphasized_waveform = waveform[:, 1:] - 0.97 * waveform[:, :-1]
        mel_spec = self.mel_spectrogram(emphasized_waveform)
        log_mel_spec = self.amplitude_to_db(mel_spec)
        return log_mel_spec

2. Kỹ thuật tăng cường dữ liệu (SpecAugment)

Nhằm chống hiện tượng quá khớp (overfitting) trên tập dữ liệu TIMIT nhỏ, phương pháp SpecAugment được áp dụng trực tiếp trên ảnh phổ Mel:

  • Frequency Masking: Che ngẫu nhiên $f$ kênh tần số liên tiếp với $f \sim U(0, F)$ (với $F = 27$).
  • Time Masking: Che ngẫu nhiên $t$ bước thời gian liên tiếp với $t \sim U(0, T)$ (với $T = 100$).
# Cài đặt SpecAugment cho Mel Spectrogram
freq_masking = T.FrequencyMasking(freq_mask_param=27)
time_masking = T.TimeMasking(time_mask_param=100)

def augment_spectrogram(spec: torch.Tensor) -> torch.Tensor:
    spec = freq_masking(spec)
    spec = time_masking(spec)
    return spec

3. Huấn luyện mô hình Deep Speech 2

Mô hình Deep Speech 2 được xây dựng với khoảng 23 triệu tham số (23M parameters), bao gồm:

  • 2 lớp 2D Residual Convolutional Neural Network (ResCNN): Trích xuất cấu trúc không gian - thời gian từ Mel Spectrogram, giảm chiều dữ liệu.
  • 5 lớp Bidirectional Gated Recurrent Unit (BiGRU): Với hidden_size = 512, xử lý phụ thuộc ngữ cảnh hai chiều trong chuỗi thời gian.
  • Lớp Linear kết hợp Connectionist Temporal Classification (CTC Loss): Ánh xạ trực tiếp vector ẩn sang xác suất của 29 ký tự (a-z, space, apostrophe, blank token).
  • Bộ tối ưu hóa & Lịch trình học: Sử dụng AdamW kết hợp chính sách OneCycleLR (Siêu hội tụ - Super-convergence) với learning rate cực đại $5 \times 10^{-4}$.
import torch.nn as nn

class DeepSpeech2(nn.Module):
    def __init__(self, num_classes=29, hidden_size=512, num_rnn_layers=5):
        super(DeepSpeech2, self).__init__()
        # 2D ResCNN Layers
        self.conv = nn.Sequential(
            nn.Conv2d(1, 32, kernel_size=(41, 11), stride=(2, 2), padding=(20, 5)),
            nn.BatchNorm2d(32),
            nn.Hardtanh(0, 20, inplace=True),
            nn.Conv2d(32, 32, kernel_size=(21, 11), stride=(2, 1), padding=(10, 5)),
            nn.BatchNorm2d(32),
            nn.Hardtanh(0, 20, inplace=True)
        )
        # Bi-directional RNN Layers
        self.rnn = nn.GRU(
            input_size=672,  # Sau khi flatten từ conv
            hidden_size=hidden_size,
            num_layers=num_rnn_layers,
            bidirectional=True,
            batch_first=True
        )
        self.fc = nn.Linear(hidden_size * 2, num_classes)

    def forward(self, x):
        # x shape: [batch, 1, n_mels, time]
        x = self.conv(x)
        sizes = x.size()
        x = x.view(sizes[0], sizes[1] * sizes[2], sizes[3])  # Flatten channels & freq
        x = x.transpose(1, 2)  # [batch, time, features]
        x, _ = self.rnn(x)
        logits = self.fc(x)
        return logits

4. Huấn luyện và Fine-tuning mô hình Wav2Vec 2.0

Mô hình facebook/wav2vec2-base được tinh chỉnh trên tập TIMIT:

  • Khởi tạo Wav2Vec2CTCTokenizer từ từ điển ký tự vocab.json tự trích xuất từ tập phiên âm chuẩn hóa.
  • Cấu hình Wav2Vec2FeatureExtractor chuẩn hóa tín hiệu waveform 1D về phân phối chuẩn $(\mu=0, \sigma=1)$.
  • Sử dụng Wav2Vec2ForCTC với ctc_loss_reduction="mean"pad_token_id = tokenizer.pad_token_id.
from transformers import Wav2Vec2ForCTC, Wav2Vec2Processor, Trainer, TrainingArguments

# Khởi tạo Processor và Mô hình Wav2Vec2 cho CTC
processor = Wav2Vec2Processor(feature_extractor=feature_extractor, tokenizer=tokenizer)
model = Wav2Vec2ForCTC.from_pretrained(
    "facebook/wav2vec2-base",
    ctc_loss_reduction="mean",
    pad_token_id=processor.tokenizer.pad_token_id,
    vocab_size=len(processor.tokenizer)
)
# Đóng băng feature encoder để giữ các đặc trưng âm thanh phổ quát
model.freeze_feature_encoder()

Testing và validation

Hiệu năng của hệ thống được đánh giá chặt chẽ thông qua hai độ đo chuẩn quốc tế:

  • Word Error Rate (WER): Tỉ lệ lỗi từ tính theo khoảng cách Levenshtein: $$\text{WER} = \frac{S + D + I}{N} = \frac{\text{Thay thế} + \text{Xóa} + \text{Chèn}}{\text{Tổng số từ thực tế}}$$
  • Character Error Rate (CER): Tỉ lệ lỗi ký tự, đánh giá độ sai lệch chi tiết ở mức chữ cái.

Quá trình kiểm thử được tiến hành trên tập kiểm tra độc lập (Test Set) của TIMIT:

                  TIẾN TRÌNH HUẤN LUYỆN VÀ HỘI TỤ
┌───────────────┬────────────────────┬────────────────────┬───────────┐
│ Step          │ DeepSpeech 2 Loss  │ Wav2Vec 2.0 Loss   │ Ghi chú   │
├───────────────┼────────────────────┼────────────────────┼───────────┤
│ Step 1,000    │ 2.8420             │ 1.4520             │ Khởi động │
│ Step 5,000    │ 1.1250             │ 0.4120             │ Giảm nhanh│
│ Step 10,032   │ 0.5430             │ 0.1540             │ Tiệm cận  │
│ Step 13,859   │ 0.3820             │ 0.0890             │ Tối ưu    │
└───────────────┴────────────────────┴────────────────────┴───────────┘

Kết quả đạt được

Bảng tổng hợp kết quả đánh giá thực nghiệm trên tập Test của TIMIT:

Mô hình Kích thước tham số Word Error Rate (WER) Character Error Rate (CER) Tốc độ suy luận (RTF - Real Time Factor)
GMM-HMM Baseline - 34.6% 18.2% 0.85x
Deep Speech 2 (ResCNN + BiGRU) ~23M 22.4% 10.8% 0.28x
Wav2Vec 2.0 (Fine-tuned) ~95M 8.2% 3.5% 0.15x
                SO SÁNH WORD ERROR RATE TRÊN TẬP TEST TIMIT
  GMM-HMM           ███████████████████████████████████ 34.6%
  Deep Speech 2     ██████████████████████ 22.4%
  Wav2Vec 2.0       ████████ 8.2%
                    └───────┬───────┬───────┬───────┬───────►
                            10%     20%     30%     40%

Nhận xét:

  • Mô hình Wav2Vec 2.0 vượt trội hoàn toàn so với Deep Speech 2, giúp giảm WER từ 22.4% xuống 8.2% (cải thiện 63.4% độ chính xác nhận diện từ) và CER giảm xuống chỉ còn 3.5%.
  • Nhờ cơ chế tự chú ý (Self-Attention) trong Transformer và khả năng trích xuất biểu diễn ngữ cảnh từ quá trình Pretraining trên hàng nghìn giờ âm thanh không nhãn, Wav2Vec 2.0 học được cấu trúc ngôn ngữ sâu sắc ngay cả khi chỉ được fine-tune trên tập TIMIT nhỏ.
  • Ứng dụng Streamlit tích hợp mô hình Wav2Vec 2.0 hoạt động mượt mà, hỗ trợ tạo tệp .srt với timestamp đồng bộ chuẩn xác theo từng đoạn hội thoại.

Đổi mới và đóng góp

  • Chuyển dịch thành công từ Pipeline truyền thống sang Self-Supervised Learning: Chứng minh bằng thực nghiệm sự vượt trội của phương pháp học tự giám sát (Wav2Vec 2.0) so với học giám sát thuần túy (Deep Speech 2) trên tập dữ liệu bị giới hạn về quy mô (TIMIT ~5 giờ).
  • Ứng dụng kỹ thuật OneCycleLR và SpecAugment: Tối ưu hóa quá trình huấn luyện Deep Speech 2, giúp mô hình đạt điểm hội tụ nhanh hơn 35% so với chính sách Learning Rate cố định truyền thống, đồng thời tăng tính bền vững trước biến dạng âm thanh.
  • Đóng gói giải pháp End-to-End hoàn chỉnh: Không chỉ dừng lại ở mô hình học máy trên Notebook, đề tài đã hiện thực hóa thành một sản phẩm phần mềm thực tế với giao diện Web trực quan, giải quyết trọn vẹn bài toán trích xuất phụ đề tự động cho người dùng cuối.

Ứng dụng thực tế và triển khai

Kịch bản ứng dụng thực tế

  1. Sản xuất nội dung số (Content Creation): Tự động tạo phụ đề cho video bài giảng trực tuyến, podcast, video ngắn (TikTok, YouTube Shorts, Reels) giúp tiết kiệm 80% thời gian biên tập.
  2. Hỗ trợ tiếp cận (Accessibility): Hỗ trợ chuyển đổi giọng nói thành văn bản cho người khiếm thính trong các cuộc họp trực tuyến và chương trình truyền hình.
  3. Tự động hóa biên bản cuộc họp (Meeting Transcription): Ghi chép và lưu trữ nội dung trao đổi nội bộ trong các doanh nghiệp.

Hướng dẫn triển khai và Cấu hình hệ thống

                               CẤU HÌNH HỆ THỐNG TỐI THIỂU
┌────────────────────────┬────────────────────────────┬────────────────────────────┐
│ Thành phần             │ Môi trường phát triển      │ Môi trường sản xuất        │
├────────────────────────┼────────────────────────────┼────────────────────────────┤
│ CPU                    │ Intel Core i5 / AMD Ryzen 5│ Intel Xeon / AMD EPYC 8 core│
│ RAM                    │ 8 GB                       │ 16 GB                      │
│ GPU                    │ NVIDIA GTX 1650 (4GB VRAM) │ NVIDIA T4 / RTX 3060 (12GB)│
│ Dung lượng đĩa         │ 10 GB SSD                  │ 50 GB NVMe SSD             │
│ Hệ điều hành           │ Ubuntu 22.04 LTS / Windows │ Linux (Ubuntu / Debian)    │
└────────────────────────┴────────────────────────────┴────────────────────────────┘

Quy trình khởi chạy ứng dụng:

# 1. Khởi tạo môi trường ảo Python
python3 -m venv aenv
source aenv/bin/activate

# 2. Cài đặt các gói thư viện phụ thuộc
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
pip install transformers datasets jiwer librosa soundfile streamlit

# 3. Khởi chạy ứng dụng Streamlit Subtitle Generator
streamlit run myapp.py --server.port 8501 --server.enableCORS false
# myapp.py - Logic cốt lõi xử lý phụ đề tự động trên Streamlit
import streamlit as st
import torch
import librosa
from transformers import Wav2Vec2ForCTC, Wav2Vec2Processor

st.set_page_config(page_title="Hệ Thống Tạo Phụ Đề Tự Động", layout="wide")
st.title("🎙️ Tự Động Tạo Phụ Đề Video Sử Dụng Deep Learning")

@st.cache_resource
def load_asr_model():
    processor = Wav2Vec2Processor.from_pretrained("./saved_wav2vec2_model")
    model = Wav2Vec2ForCTC.from_pretrained("./saved_wav2vec2_model")
    model.eval()
    return processor, model

processor, model = load_asr_model()

uploaded_file = st.file_uploader("Tải lên tệp âm thanh/video (WAV, MP3, MP4):", type=["wav", "mp3", "mp4"])

if uploaded_file is not None:
    st.audio(uploaded_file, format='audio/wav')
    if st.button("Bắt đầu tạo phụ đề"):
        with st.spinner("Đang trích xuất đặc trưng và nhận diện giọng nói..."):
            # Load waveform 16kHz
            speech, sr = librosa.load(uploaded_file, sr=16000)
            input_values = processor(speech, return_tensors="pt", sampling_rate=16000).input_values

            with torch.no_grad():
                logits = model(input_values).logits
            
            predicted_ids = torch.argmax(logits, dim=-1)
            transcription = processor.decode(predicted_ids[0])
            
            st.success("Nhận diện hoàn tất!")
            st.subheader("Văn bản phụ đề trích xuất:")
            st.write(transcription.lower())
            
            # Xuất file SRT mẫu
            srt_content = f"1\n00:00:00,000 --> 00:00:05,000\n{transcription.lower()}\n"
            st.download_button(
                label="Tải về tệp phụ đề (.SRT)",
                data=srt_content,
                file_name="subtitle.srt",
                mime="text/plain"
            )

Hạn chế và hướng phát triển

Hạn chế kỹ thuật hiện tại

  • Quy mô dữ liệu huấn luyện: Tập dữ liệu TIMIT chủ yếu gồm các câu đọc chuẩn trong môi trường phòng thu yên tĩnh, chưa phản ánh đầy đủ ngữ cảnh nhiễu thực tế và giọng nói tự nhiên hàng ngày.
  • Ngôn ngữ đơn lẻ: Hệ thống hiện tại mới chỉ được tối ưu hóa cho tiếng Anh, chưa hỗ trợ tiếng Việt (vốn có cấu trúc thanh điệu phức tạp và tập âm tiết lớn).
  • Xử lý ngữ cảnh dài: Việc giải mã CTC độc lập giữa các bước thời gian (conditional independence assumption) đôi khi dẫn đến việc nhận dạng sai các từ đồng âm nếu thiếu Language Model ngoại vi hỗ trợ (Beam Search with N-gram / Neural LM).

Hướng phát triển trong tương lai

  • Tích hợp Language Model nâng cao: Kết hợp mô hình ngôn ngữ lớn (LLM) hoặc 4-gram KenLM thông qua thuật toán giải mã Beam Search để tự động sửa lỗi ngữ pháp và dấu câu.
  • Mở rộng sang Tiếng Việt: Huấn luyện và tinh chỉnh mô hình đa ngôn ngữ Wav2Vec2-XLS-R trên các bộ ngữ liệu tiếng Việt lớn như VIVOS, VLSP và Common Voice.
  • Tối ưu hóa thời gian thực (Real-time Streaming ASR): Chuyển đổi mô hình sang định dạng ONNX Runtime hoặc TensorRT, lượng tử hóa trọng số (INT8 Quantization) để giảm độ trễ xuống dưới 100ms, phục vụ phụ đề trực tiếp.

Đối tượng hưởng lợi

                 GIÁ TRỊ MANG LẠI CHO CÁC NHÓM ĐỐI TƯỢNG
┌──────────────────────┬────────────────────────────────────────────────────────┐
│ Đối tượng            │ Giá trị và Lợi ích cụ thể                              │
├──────────────────────┼────────────────────────────────────────────────────────┤
│ Sinh viên & Người học│ Cung cấp tài liệu tham khảo chi tiết từ lý thuyết xử lý│
│                      │ tín hiệu (STFT, MFCC) đến mã nguồn PyTorch/Transformer │
├──────────────────────┼────────────────────────────────────────────────────────┤
│ Kỹ sư AI & Developer │ Khung kiến trúc hoàn chỉnh để tích hợp ASR vào các hệ  │
│                      │ thống phần mềm thực tế với Streamlit & Hugging Face    │
├──────────────────────┼────────────────────────────────────────────────────────┤
│ Doanh nghiệp         │ Cắt giảm 75-85% chi phí sản xuất phụ đề video, tăng tốc│
│                      │ quy trình phân phối nội dung đa phương tiện            │
├──────────────────────┼────────────────────────────────────────────────────────┤
│ Nhà nghiên cứu       │ Bộ dữ liệu thực nghiệm đối chuẩn chuẩn xác giữa mô hình│
│                      │ supervised (DeepSpeech2) và self-supervised (Wav2Vec2) │
└──────────────────────┴────────────────────────────────────────────────────────┘

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

1. Yêu cầu phần cứng tối thiểu để triển khai và chạy suy luận mô hình là gì?

Để chạy suy luận (Inference) mô hình Wav2Vec 2.0 trên ứng dụng Streamlit, hệ thống chỉ cần CPU 4 nhân và 8GB RAM. Tuy nhiên, để đạt tốc độ suy luận dưới thời gian thực (RTF < 0.2x), khuyến nghị sử dụng GPU có tối thiểu 4GB VRAM (như NVIDIA GTX 1650 trở lên).

2. Sự khác biệt cốt lõi giữa Mel Spectrogram và MFCC là gì?

Mel Spectrogram giữ lại thông tin phổ đầy đủ trên thang đo Mel phi tuyến tính của con người và thường được dùng làm đầu vào cho các mạng Deep Learning (CNN/RNN). Trong khi đó, MFCC thực hiện thêm bước biến đổi Fourier ngược (IDFT/DCT) để loại bỏ thông tin tần số cơ bản $F_0$ (cao độ giọng nói) và trích xuất các hệ số không tương quan (uncorrelated features), rất phù hợp cho các mô hình thống kê truyền thống như GMM-HMM.

3. CTC Loss giải quyết vấn đề gì trong bài toán nhận diện giọng nói?

Trong bài toán ASR, độ dài của chuỗi âm thanh đầu vào (hàng trăm frames) luôn lớn hơn rất nhiều so với độ dài của chuỗi văn bản đầu ra (vài chục ký tự) và vị trí căn chỉnh thời gian chính xác giữa chúng không được biết trước. CTC Loss đưa vào ký tự rỗng (blank token) và tính tổng xác suất của tất cả các đường căn chỉnh hợp lệ, cho phép mô hình huấn luyện End-to-End mà không cần gán nhãn thủ công từng khung thời gian.

4. Hệ thống xử lý các tệp âm thanh có nhiều tạp âm như thế nào?

Mô hình đã được tích hợp kỹ thuật tăng cường dữ liệu SpecAugment (Time Masking và Frequency Masking) trong quá trình huấn luyện giúp mô hình học cách khôi phục thông tin bị che khuất. Đối với môi trường thực tế quá ồn, âm thanh đầu vào có thể được xử lý qua bộ lọc tiền xử lý khử nhiễu (Spectral Gating hoặc Deep Filtering) trước khi đưa vào mô hình nhận dạng.

5. Chi phí ước tính khi triển khai hệ thống này trên môi trường đám mây?

Nếu triển khai trên các dịch vụ Cloud như AWS EC2 (Instance g4dn.xlarge với GPU NVIDIA T4) hoặc Google Cloud Run, chi phí vận hành ước tính khoảng $0.526/giờ. Với tốc độ xử lý của mô hình (1 giờ âm thanh xử lý trong 3-5 phút), chi phí để tạo phụ đề cho 100 giờ video chỉ rơi vào khoảng $2.5 - $4 USD, rẻ hơn hơn 95% so với thuê dịch vụ phiên âm thủ công hoặc sử dụng API thương mại độc quyền.


Kết luận

Đề tài tốt nghiệp "Xây dựng ứng dụng tạo phụ đề tự động sử dụng Deep Learning" của tác giả Đỗ Lê Tiến Đạt đã giải quyết trọn vẹn chu trình từ nghiên cứu lý thuyết nền tảng về tín hiệu âm thanh, phân tích mô hình truyền thống GMM-HMM đến việc cài đặt, huấn luyện và đánh giá thực nghiệm hai kiến trúc học sâu tiên tiến: Deep Speech 2 và Wav2Vec 2.0.

Kết quả thực nghiệm đã khẳng định tính ưu việt vượt bậc của mô hình Wav2Vec 2.0 với chỉ số WER đạt 8.2% và CER đạt 3.5%, vượt trội so với Deep Speech 2 (WER 22.4%) và mô hình truyền thống (WER 34.6%). Ứng dụng Streamlit được xây dựng thành công đã chứng minh tính khả thi cao trong việc chuyển giao nghiên cứu thành sản phẩm phần mềm thực tiễn, mở ra tiềm năng lớn trong việc tự động hóa sản xuất nội dung số và nâng cao khả năng tiếp cận thông tin cho cộng đồng. Các lập trình viên và nhà nghiên cứu có thể kế thừa pipeline này để mở rộng fine-tune cho tiếng Việt và phát triển các hệ thống ASR thời gian thực hiệu năng cao trong tương lai.