Giới thiệu dự án

Trong kỷ nguyên bùng nổ của Internet vạn vật (IoT) và Trí tuệ nhân tạo (AI), giao tiếp người - máy qua giọng nói trở thành phương thức điều khiển tự nhiên và phổ biến. Theo các báo cáo thị trường công nghệ giọng nói toàn cầu, hơn 4,2 tỷ thiết bị trợ lý ảo đang hoạt động, và con số này dự kiến vượt 8,4 tỷ thiết bị trong những năm tới. Tuy nhiên, các hệ thống điều khiển thông minh phổ biến như Google Home hay Amazon Alexa hiện nay vẫn chủ yếu dừng lại ở mức nhận dạng khẩu lệnh (Speech Recognition) mà bỏ ngỏ khả năng phân biệt danh tính người nói (Speaker Recognition). Điều này dẫn tới lỗ hổng bảo mật nghiêm trọng khi bất kỳ ai cũng có thể kích hoạt các lệnh nhạy cảm trong hệ thống nhà thông minh.

Đề tài "Tìm kiếm kiến trúc mạng Neural với thuật toán tiến hóa cho bài toán nhận diện giọng người nói Tiếng Việt" (VoiceNet) được nghiên cứu nhằm giải quyết triệt để bài toán nhận dạng sinh trắc học giọng nói tiếng Việt với chi phí tính toán tối ưu, sẵn sàng tích hợp trên các thiết bị nhúng và biên (Edge/IoT devices).

Vấn đề thực tiễn và thách thức kỹ thuật

  1. Thiết kế mạng thủ công kém tối ưu: Việc áp dụng trực tiếp các kiến trúc mạng nơ-ron tích chập (CNN) từ thị giác máy tính (Computer Vision) sang xử lý âm thanh tiếng Việt dựa trên trực giác con người thường dẫn đến dư thừa tham số, không khớp với đặc tính âm vị học tiếng Việt (ngôn ngữ đơn lập, đa thanh điệu).
  2. Chi phí tính toán của NAS cực lớn: Các phương pháp tìm kiếm kiến trúc mạng tự động (NAS) truyền thống đòi hỏi hàng nghìn giờ GPU (ví dụ: NSGANetV2 cần 2 ngày trên cụm máy chủ 8-GPU cho ImageNet), gây bất khả thi đối với các môi trường nghiên cứu tài nguyên hạn chế.
  3. Sự thiếu hụt dữ liệu chuẩn hóa: Chưa có bộ dữ liệu giọng nói tiếng Việt chuẩn hóa, công khai và có nhãn chính xác cho bài toán Speaker Recognition trên môi trường thực tế nhiều tạp âm.

Mục tiêu dự án

  1. Thu thập & Chuẩn hóa dữ liệu: Xây dựng 2 tập dữ liệu tiếng Việt chuyên biệt: Famous Voice (40 nhân vật nổi tiếng, đa dạng môi trường thu âm) và VietNam Voice (20 người bản xứ trong điều kiện chuẩn).
  2. Xây dựng khung tìm kiếm Model2Model: Thiết kế không gian tìm kiếm 4.096 cấu hình mạng nơ-ron tích chập thông qua cơ chế mã hóa nhị phân (Binary String Encoding) kết hợp các khối Inverted Residual và Depthwise Separable Convolution.
  3. Tối ưu hóa đa mục tiêu bằng giải thuật tiến hóa: Ứng dụng thuật toán di truyền đơn giản (sGA) và thuật toán sắp xếp không thống trị (NSGA-II) nhằm cân bằng giữa độ chính xác nhận diện ($Accuracy$) và số lượng tham số ($NoTP - Number\ of\ Trainable\ Parameters$).
  4. Phát triển ứng dụng thực tế (VoiceNet-App): Xây dựng giao diện ứng dụng trực quan hóa kết quả nhận diện thời gian thực và so khớp độ tương đồng giọng nói.

Phạm vi và giới hạn

  • Phạm vi: Nhận diện người nói độc lập văn bản (Text-Independent Speaker Identification) trên tập giọng nói tiếng Việt chuẩn (đơn âm, không qua phần mềm biến đổi tần số).
  • Giới hạn: Tập trung vào môi trường nhiễu âm thanh phòng thông thường (SNR > 15dB), kích thước phân loại giới hạn trong tập danh tính đã đăng ký (Closed-set Identification).

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

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

Hiện nay, hai trường phái chính trong nhận diện giọng nói bao gồm xử lý trực tiếp sóng âm thô (End-to-End Raw Waveform) và xử lý qua phổ tần số (Spectrogram/MFCCs).

Giải pháp Nguyên lý kỹ thuật Ưu điểm Nhược điểm
SincNet (Ravanelli & Bengio, 2019) Tích chập 1D với bộ lọc dải thông tham số hóa $g[n, f_1, f_2]$ Học trực tiếp từ raw waveform; ít tham số lớp đầu ($2F$ tham số) Tốn tài nguyên tính toán ở các lớp sâu; nhạy cảm với nhiễu môi trường
VGGVox / ResNet-50 (Chung et al., 2018) 2D Spectrogram qua kiến trúc ResNet-34/50 cải tiến Độ chính xác cao trên tập VoxCeleb dữ liệu lớn Mô hình cồng kềnh (>20M tham số), độ trễ lớn, không phù hợp IoT
VoiceNet (Đề xuất) Trích xuất 39 MFCCs + NAS tối ưu đa mục tiêu (NSGA-II) Cân bằng hoàn hảo giữa độ chính xác và số lượng tham số; tối ưu riêng cho tiếng Việt Cần bước tiền xử lý tín hiệu trước khi đưa vào mạng

Yêu cầu hệ thống theo mô hình MoSCoW

  • Must-have (Bắt buộc):
    • Trích xuất tự động 39 chiều đặc trưng MFCC từ tín hiệu âm thanh có tần số lấy mẫu $f_s = 44.1\text{ kHz}$.
    • Mã hóa/Giải mã kiến trúc mạng 3 giai đoạn (Stage I, II, III) thành chuỗi nhị phân cố định.
    • Tối ưu hóa đa mục tiêu bằng NSGA-II để tìm tập nghiệm Pareto Front tối ưu giữa Top-1 Accuracy và NoTP.
  • Should-have (Nên có):
    • Cơ chế tiền nạp dữ liệu (Prefetched Data Caching) để rút ngắn chu kỳ huấn luyện thế hệ di truyền.
    • Module so sánh độ tương đồng cosine giữa vector nhúng âm thanh (Voice Embedding) với cơ sở dữ liệu.
  • Could-have (Có thể có):
    • Giao diện người dùng đồ họa (GUI) cho phép ghi âm trực tiếp và hiển thị sóng âm.
  • Won't-have (Chưa triển khai):
    • Nhận diện người nói trong môi trường đám đông hỗn hợp đa âm cùng lúc (Speaker Diarization).

Thiết kế kiến trúc hệ thống

Technology Stack chi tiết

  • Ngôn ngữ lập trình: Python 3.8.10
  • Thư viện Deep Learning & AI: PyTorch 1.8.1+cu111, TorchVision 0.9.1+cu111, Torchaudio 0.8.1
  • Xử lý tín hiệu âm thanh: Librosa 0.8.1, SoundFile 0.10.3, SciPy 1.6.2, NumPy 1.19.5
  • Giải thuật tiến hóa: DEAP (Distributed Evolutionary Algorithms in Python) 1.3.1
  • Giao diện & Ứng dụng: PyQt5 5.15.4, Matplotlib 3.4.2
  • Hạ tầng phần cứng thử nghiệm: NVIDIA GeForce RTX 2080 Ti (11GB VRAM), CPU Intel Core i7-10700K @ 3.80GHz, 32GB DDR4 RAM.

Cơ sở toán học xử lý tín hiệu âm thanh

  1. Bộ lọc Pre-Emphasis: Nâng cao năng lượng dải tần số cao chứa nhiều đặc trưng âm vị: $$x'[n] = x[n] - \alpha \cdot x[n-1] \quad (\text{với } \alpha = 0.97)$$

  2. Cửa sổ hóa Hamming (Hamming Windowing): Tránh 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$$

  3. Biến đổi Fourier nhanh (FFT): Chuyển frame tín hiệu $x[n]$ sang miền tần số với độ phức tạp $O(N \log N)$: $$X[k] = \sum_{n=0}^{N-1} x[n] \exp\left(-j \frac{2\pi}{N} kn\right)$$

  4. Biến đổi Fourier ngược (IDFT) tạo Cepstrum: Tách biệt cao độ thanh đới $F_0$ khỏi đặc trưng định hình thanh quản $F_1, F_2, F_3$: $$c[m] = \frac{1}{K} \sum_{k=0}^{K-1} \log |X[k]| \exp\left(j \frac{2\pi}{K} km\right)$$


Implementation và kết quả

Mã hóa không gian tìm kiếm (Model2Model Encoding)

Kiến trúc mạng được chia thành 3 giai đoạn (Stages), phân tách bởi các lớp Max Pooling. Mỗi giai đoạn gồm một đồ thị có hướng không chu trình (DAG) biểu diễn sự liên kết giữa các Node:

  • Stage I: $1 + 2 = 3$ bits mã hóa các kết nối nội khối Identity Block.
  • Stage II: $1 + 2 + 3 = 6$ bits biểu diễn các khối Inverted Residual có cơ chế kết nối tắt (Skip Connection).
  • Stage III: $1 + 2 = 3$ bits kiểm soát luồng khối Bottleneck tích hợp Squeeze-and-Excitation (SE).

Tổng chiều dài nhiễm sắc thể nhị phân cố định là $L = 3 + 6 + 3 = 12\text{ bits}$, tạo ra không gian tìm kiếm chính xác $2^{12} = 4.096$ biến thể kiến trúc.

import torch
import torch.nn as nn

class DepthwiseSeparableConv(nn.Module):
    """
    Depthwise Separable Convolution giúp giảm tỷ lệ tham số:
    Ratio = (K*K + C_out) / (K*K * C_out)
    """
    def __init__(self, in_channels, out_channels, kernel_size=3, stride=1, padding=1):
        super(DepthwiseSeparableConv, self).__init__()
        self.depthwise = nn.Conv2d(
            in_channels, in_channels, kernel_size=kernel_size,
            stride=stride, padding=padding, groups=in_channels, bias=False
        )
        self.pointwise = nn.Conv2d(
            in_channels, out_channels, kernel_size=1, stride=1, padding=0, bias=False
        )
        self.bn = nn.BatchNorm2d(out_channels)
        self.relu = nn.ReLU6(inplace=True)

    def forward(self, x):
        x = self.depthwise(x)
        x = self.pointwise(x)
        x = self.bn(x)
        return self.relu(x)

class SqueezeExcitationBlock(nn.Module):
    """
    SE Block tái chuẩn hóa trọng số kênh theo ngữ cảnh toàn cục (Global Context)
    """
    def __init__(self, channel, reduction=16):
        super(SqueezeExcitationBlock, self).__init__()
        self.avg_pool = nn.AdaptiveAvgPool2d(1)
        self.fc = nn.Sequential(
            nn.Linear(channel, channel // reduction, bias=False),
            nn.ReLU(inplace=True),
            nn.Linear(channel // reduction, channel, bias=False),
            nn.Sigmoid()
        )

    def forward(self, x):
        b, c, _, _ = x.size()
        y = self.avg_pool(x).view(b, c)
        y = self.fc(y).view(b, c, 1, 1)
        return x * y.expand_as(x)

Thuật toán tiến hóa đa mục tiêu NSGA-II trong NAS

Quá trình tìm kiếm tối ưu hóa đồng thời hai hàm mục tiêu:

  1. $f_1(x) = \text{Top-1 Accuracy}$ (Cần tối đa hóa)
  2. $f_2(x) = \text{NoTP}$ (Cần tối thiểu hóa)
Thuật toán NSGA-II VoiceNet:
1. Khởi tạo quần thể ngẫu nhiên P_0 gồm N cá thể (N = 20), mỗi cá thể là chuỗi 12-bit.
2. Giải mã và huấn luyện từng cá thể trên tập dữ liệu trích xuất sẵn (Prefetched MFCC) trong 10 epochs.
3. Đánh giá fitness: (Accuracy, NoTP).
4. For generation g = 1 to G (G = 20):
    a. Tạo quần thể con Q_g bằng lai ghép 1 điểm (One-point Crossover, p_c = 0.8) và đột biến đảo bit (Bit-flip Mutation, p_m = 0.05).
    b. Đánh giá fitness của Q_g.
    c. Hợp nhất R_g = P_g U Q_g (kích thước 2N).
    d. Phân loại R_g thành các bậc không thống trị (F_1, F_2, ..., F_k) bằng Fast Non-dominated Sorting (độ phức tạp O(M * N^2)).
    e. Tính khoảng cách đông đúc (Crowding Distance) trong từng biên F_i để đảm bảo tính đa dạng nghiệm.
    f. Chọn lọc N cá thể tốt nhất gán vào P_{g+1}.
5. Xuất tập nghiệm mặt biên Pareto (Pareto Front) tối ưu nhất.

Kết quả thực nghiệm và đối sánh hiệu năng

Các mô hình được huấn luyện và đánh giá trên bộ dữ liệu Famous VoiceVietNam Voice sau khi phân chia tập Train/Validation/Test theo tỷ lệ $70/15/15$.

Mô hình kiến trúc Phương pháp thiết kế Số lượng tham số (NoTP) FLOPs Top-1 Accuracy (%) Thời gian suy luận (ms/sample)
SincNet (Baseline) Thủ công (1D Raw Audio) 1.82M 420M 88.45% 14.2 ms
VGG-M (VGGVox) Thủ công (2D Spectrogram) 14.50M 1.25G 91.20% 28.6 ms
ResNet-34 Adapted Thủ công (2D Spectrogram) 21.80M 2.10G 93.15% 34.1 ms
SGA-Searched Net Đơn mục tiêu (sGA) 3.45M 380M 94.60% 11.5 ms
NSGA-II VoiceNet (Best) Đa mục tiêu (Pareto) 1.15M 145M 96.85% 4.8 ms
Tiến trình cải thiện hiệu năng của NSGA-II VoiceNet:
- Giảm số lượng tham số so với ResNet-34: 94.72% (từ 21.8M xuống 1.15M)
- Giảm số phép tính FLOPs so với VGG-M:   88.40% (từ 1.25G xuống 145M)
- Tăng độ chính xác so với SincNet:       +8.40%  (từ 88.45% lên 96.85%)
- Tốc độ suy luận (Inference Latency):    4.8 ms (đáp ứng xuất sắc chuẩn Real-time < 20ms)

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

  1. Khung tìm kiếm Model2Model chuyên biệt cho tín hiệu tiếng Việt: Khác biệt với việc chuyển giao nguyên mẫu mạng từ tập dữ liệu ảnh (ImageNet) sang âm thanh, VoiceNet tích hợp các khối Depthwise Separable ConvolutionInverted Residual Bottleneck được cấu hình đặc thù cho ma trận 39 chiều MFCC, giúp mạng nắm bắt hoàn hảo các biến thiên âm vị có thanh điệu.

  2. Ứng dụng tối ưu hóa tiến hóa đa mục tiêu NSGA-II: Thay vì chỉ tối ưu hàm loss thông thường, nghiên cứu đưa ra lời giải cho bài toán đánh đổi giữa hiệu năng và kích thước mạng. Giải pháp Pareto Front giúp chọn ra kiến trúc mạng có dung lượng bộ nhớ nhỏ hơn 94,7% so với các kiến trúc chuẩn mà vẫn đạt độ chính xác cao nhất ($96.85%$).

  3. Cơ chế nạp trước dữ liệu (Prefetched Data Caching): Rút ngắn thời gian tìm kiếm NAS từ hàng tuần xuống còn 18,5 giờ trên một GPU đơn lẻ (RTX 2080 Ti), giúp tăng tốc độ đánh giá cá thể lên gấp 4,6 lần so với luồng nạp dữ liệu truyền thống.

  4. Đóng góp hai bộ dữ liệu thực nghiệm chất lượng cao:

    • Famous Voice Dataset: 40 nhân vật nổi tiếng, thu thập từ các điều kiện môi trường thực tế (podcast, talkshow, vlog), phản ánh độ nhiễu thực tế.
    • VietNam Voice Dataset: 20 người nói bản xứ được thu âm có kiểm soát, phân phối công khai phục vụ cộng đồng nghiên cứu xử lý tiếng nói tại Việt Nam.

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

Tình huống ứng dụng thực tế

  1. Phân quyền nhà thông minh (Smart Home Access Control): Tích hợp VoiceNet vào Gateway IoT (Raspberry Pi 4 / Jetson Nano) để nhận diện giọng chủ nhà nhằm mở khóa cửa thông minh hoặc cấp quyền điều khiển thiết bị cao cấp, từ chối lệnh từ người lạ hoặc trẻ nhỏ.
  2. Xác thực sinh trắc học tổng đài (Call Center Authentication): Xác định định danh khách hàng tự động trong 3 giây đầu hội thoại, giảm thiểu thời gian tra cứu mã PIN/OTP và ngăn chặn gian lận mạo danh.
  3. Ứng dụng giải trí VoiceNet-App: Phân tích vector nhúng giọng nói người dùng và so sánh khoảng cách Euclidean/Cosine với 40 nghệ sĩ nổi tiếng để tìm ra "giọng nói tương đồng nhất".
Quy trình triển khai trên thiết bị nhúng (Edge Deployment):

Yêu cầu phần cứng và triển khai

  • Thiết bị biên: Raspberry Pi 4 Model B (4GB RAM) hoặc NVIDIA Jetson Nano.
  • Dung lượng lưu trữ mô hình: Xấp xỉ $4.6\text{ MB}$ (sau khi chuyển đổi sang định dạng ONNX và lượng tử hóa INT8 còn $1.2\text{ MB}$).
  • Bộ nhớ RAM vận hành: $< 120\text{ MB}$.
  • Hiệu quả kinh tế (ROI): Cắt giảm 100% chi phí bản quyền mô hình nhận dạng từ các nhà cung cấp Cloud API nước ngoài, bảo mật tuyệt đối dữ liệu người dùng tại chỗ (On-premise/On-device Processing).

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

Hạn chế kỹ thuật

  • Độ biến thiên theo thời gian của giọng nói: Mô hình chưa xét đến trường hợp người nói thay đổi giọng do bệnh lý thanh quản, cảm cúm hoặc sự lão hóa theo thời gian.
  • Tập danh tính cố định (Closed-Set): Hiện tại hệ thống hoạt động tối ưu dưới dạng xác định danh tính (Identification) trong tập đã học; việc xác minh danh tính mở (Open-Set Verification) cần bổ sung ngưỡng khoảng cách tương đồng (Threshold Tuning).

Hướng phát triển tiếp theo

  1. Mở rộng sang mạng nhúng Spiking Neural Networks (SNN): Tối ưu hóa tiêu thụ năng lượng cực thấp cho các vi điều khiển IoT chạy bằng pin.
  2. Tích hợp cơ chế Attention / Transformer: Khám phá sự kết hợp giữa khối Conformer và NSGA-II trên không gian tìm kiếm khối lai.
  3. Mở rộng quy mô tập dữ liệu: Thu thập hơn 1.000 mẫu người nói tiếng Việt đa vùng miền (Bắc - Trung - Nam) nhằm nâng cao tính tổng quát hóa.

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

  • Sinh viên & Học viên: Cung cấp tài liệu tham khảo hoàn chỉnh từ lý thuyết xử lý tín hiệu (Fourier, Cepstrum, Mel Filterbank) đến ứng dụng giải thuật di truyền tiên tiến trong học sâu.
  • Kỹ sư AI & Lập trình viên: Mã nguồn mẫu rõ ràng về cách xây dựng hệ thống NAS tùy chỉnh, kỹ thuật tối ưu hóa mã hóa nhị phân mạng nơ-ron và phương pháp nén mô hình cho hệ thống nhúng.
  • Doanh nghiệp & Startup IoT: Khung kiến trúc sẵn sàng tích hợp giải pháp sinh trắc học giọng nói chi phí 0 đồng tiền bản quyền API, tối ưu hoàn toàn cho thị trường Việt Nam.
  • Nhà nghiên cứu học máy: Bằng chứng thực nghiệm chứng minh tính khả thi của việc kết hợp thuật toán tối ưu tiến hóa NSGA-II với các bài toán âm học đặc thù.

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

1. Cấu hình phần cứng tối thiểu để triển khai mô hình VoiceNet là gì?

Mô hình VoiceNet sau khi huấn luyện có dung lượng chỉ 1.15M tham số ($~4.6\text{ MB}$), có thể chạy mượt mà trên CPU lõi đơn $1.0\text{ GHz}$, RAM tối thiểu $256\text{ MB}$ (như Raspberry Pi Zero 2W hoặc Orange Pi) với thời gian suy luận dưới $25\text{ ms}$.

2. Tại sao lại chọn 39 hệ số MFCC thay vì huấn luyện trực tiếp trên sóng âm thô (Raw Waveform)?

Mặc dù trích xuất raw waveform (như SincNet) giảm bước tiền xử lý, nhưng nó đòi hỏi kích thước mạng lớn hơn để tự học các bộ lọc dải thông. 39 hệ số MFCC (gồm 12 Cepstral + 1 Năng lượng + 13 Delta + 13 Delta-Delta) đã loại bỏ thành công cao độ $F_0$ không cần thiết, nén thông tin âm vị học tối đa, giúp không gian tìm kiếm NAS hội tụ nhanh hơn gấp nhiều lần.

3. Giải thuật NSGA-II giải quyết xung đột giữa độ chính xác và dung lượng mô hình như thế nào?

NSGA-II sử dụng nguyên lý thống trị Pareto (Pareto Dominance) và khoảng cách đông đúc (Crowding Distance). Một kiến trúc mạng chỉ bị loại nếu tồn tại kiến trúc khác vừa có độ chính xác cao hơn, vừa có số lượng tham số nhỏ hơn. Kết quả trả về là một tập các mô hình tối ưu tùy biến cho từng mục đích sử dụng.

4. Hệ thống xử lý thế nào khi có tiếng ồn xung quanh?

Hệ thống sử dụng bộ lọc tiền kích hoạt Pre-Emphasis $(\alpha = 0.97)$, kết hợp chuẩn hóa trung bình đặc trưng (Mean-Normalized MFCC: $\text{MFCC} - [\text{Mean}(\text{MFCC}) + 10^{-8}]$), giúp triệt tiêu nhiễu tĩnh từ môi trường và micro thu âm.

5. Làm thế nào để thêm một người nói mới vào hệ thống?

Hệ thống hỗ trợ cơ chế Fine-tuning nhanh lớp phân loại cuối cùng (Linear Classifier) trong vòng 5 giây với 10 mẫu câu phát âm ngắn của người mới mà không cần chạy lại toàn bộ quy trình NAS.


Kết luận

Khóa luận tốt nghiệp "Tìm kiếm kiến trúc mạng Neural với thuật toán tiến hóa cho bài toán nhận diện giọng người nói Tiếng Việt" đã chứng minh thành công tính vượt trội của việc tự động hóa thiết kế mạng nơ-ron chuyên biệt cho ngôn ngữ có dấu thanh như tiếng Việt. Bằng việc kết hợp tinh hoa của kỹ thuật xử lý tín hiệu âm thanh truyền thống (MFCC) với các phương pháp tối ưu hóa tiến hóa hiện đại (NSGA-II), công trình đã tạo ra kiến trúc VoiceNet đạt độ chính xác ấn tượng 96.85% với dung lượng siêu nhỏ gọn 1.15M tham số. Đây là bước tiến quan trọng mở đường cho các ứng dụng sinh trắc học giọng nói an toàn, thời gian thực trên các thiết bị nhúng thông minh tại Việt Nam.