Trong những năm gần đây, khả năng của AI ngày càng được chứng minh là cực kì tốt trong rất nhiều lĩnh vực. Một trong số chúng là việc giao tiếp với con người. Chuỗi bài viết này sẽ tóm tắt một số kiến thức cực kì cơ bản (thường bị bỏ qua) trong việc xử lý tiếng nói. Các kiến thức này sẽ là nền tảng cho các bạn mới tiếp cận với xử lý giọng nói nói riêng và xử lý âm thanh nói chung trong thế giới của Deep Learning. Các kiến thức này được viết và đúc kết từ năm 2022. Song, vì là các kiến thức cơ bản nên hầu như ít phải cập nhật. Tuy vậy, hãy comment hoặc contact với tôi để góp ý và sửa đổi khi bạn thấy bất cứ một lỗi sai nhỏ nào. *Disclaimer: Tôi không thể đảm bảo chỉn chu hết các lỗi dịch, lỗi chính tả. *Disclaimer: Spiderum không hỗ trợ các toán, nên tôi sẽ phải dùng cách khác. *Disclaimer: Trong này không có kiến thức thú vị, chỉ có kiến thức cơ bình thường. Bài này rất dài nhưng thứ quan trọng nhất các bạn cần nhớ: mel-spectrogram
Trong phần 2 này, tôi sẽ trình bày các vấn đề cần thiết để đọc hiểu các nghiên cứu hiện đại trong xử lý tiếng nói nói chung và sinh giọng nói nói riêng.

Xử lý dữ liệu tiếng nói trên máy tính

Phần này sẽ giới thiệu về cách xử lý tín hiệu rời rạc hay tín hiệu số trên miền tần số. Tín hiệu số (Digital signal) là tín hiệu mà biểu diễn của nó là một chuỗi các giá trị nguyên. Loại biểu diễn tín hiệu này phổ biến trên máy tính phù hợp với các tính toán trên máy tính.
Tín hiệu rời rạc là cách máy tính nhìn nhận thế giới.
Tín hiệu rời rạc là cách máy tính nhìn nhận thế giới.
Tại mỗi điểm n ∈ Z, giá trị nguyên tại đó được gọi là mẫu ghi lại biên độ của tín hiệu tại thời điểm đó. Việc ghi nhận tín hiệu rời rạc này vẫn đảm bảo thông tin tín hiệu được đầy đủ nhờ vàođịnh lý Nyquist [1]. Theo đó, một tín hiệu rời rạc muốn biểu diễn được đầy đủ thông tin của tín hiệu liên tục trên miền thời gian thì tần số lấy mẫu Fs phải ít nhất gấp đôi tần số của tín hiệu F. Tần số âm trong ngưỡng nghe của con người trên thực nghiệm ghi nhận được là vào khoảng 20000 Hz, tức là tần số lấy mẫu phải lớn hơn ngưỡng 40000 Hz. Trên thực tế, tần số lấy mẫu phổ biến là 44100 Hz, tuy nhiên trong một số trường hợp ví dụ như viễn thông chỉ sử dụng tần số lấy mẫu 8000 Hz đến 16000 Hz. Một khái niệm nữa cũng liên quan đến lưu trữ dữ liệu âm thanh trên máy tính đó là khoảng bit (bit range). Con số này dùng để biểu thị số bit lưu một giá trị tín hiệu, thường là 8 hoặc 16, nghĩa là khoảng giá trị khả dĩ của mỗi mẫu trong tệp dữ liệu âm thanh là là [−128, 127] hoặc [−32768, 32767] tương ứng.
Các datasets tiếng nói hiện đại nói riêng và âm thanh nói chung có tần số lấy mẫu rất đa dạng. Theo hiểu biết hiện tại của tác giả, chúng ta có thể có các giá trị F là phổ biến: 8000, 16000, 22010, 48000, 44000. Các datasets âm thanh nổi tiếng: VGGSound, AudioSets, VoxCeleb1/2, LJSpeech-1.1, CommonVoice, LibriTTS, LibriSpeech, LibriLight, LibriHeavy.
Như vậy, đối với các thiết bị điện tử, từ dạng dữ liệu và mục tiêu giảm chi phí tính toán, các tính toán trên dữ liệu tín hiệu rời rạc trên thời gian cần được công thức hoá nhằm phục vụ các tác vụ trong xử lý tín hiệu số. Như đã đề cập ở phần trước, với mục đích phân tính tín hiệu, cụ thể là tín hiệu tiếng nói, việc chuyển dữ liệu từ miền thời gian sang miền tần số mang lại những tiện ích to lớn. Vì thế, từ dạng liên tục của biến đổi Fourier trong phương trình trong phần trước, người ta chuyển công thức này sang dạng rời rạc và gọi nó là biến đổi Fourier rời rạc trên miền thời gian (discrete-time Fourier Transform hay DFT):
Discrete Fourier Transform
Discrete Fourier Transform
Trong đó, ˆω = ωTs với Ts = 1 / Fs là chu kỳ lấy mẫu. Tuy vậy, phương trình trên đòi hỏi chi phí tính toán lớn là O(n^2). Vào năm 1965, Jim Cooley và John Turkey đã phát triển một thuật toán để tính toán DFT với chi phí chỉ là O(n log2 n) được biến đến phổ biến với tên biến đổi nhanh Fourier (fast Fourier transform hay FFT) [2].
Theo hiểu biết của tác giả, Fast Fourier Transform là một công trình đã đóng góp vào sự kìm hãm lẫn nhau trong việc phát triển (cụ thể là thử nghiệm) vũ khí hạt nhân của 2 cực trong chiến tranh lạnh.

Quá trình sinh MFCC (ai cũng nên biết nếu làm việc với tiếng nói, nhất là engineering)

Quá trình sinh Mel-Frequenct Cepstral Coefficient (MFCC). MFCC là một biểu dạng biểu diễn dữ liệu tiếng nói được sử dụng phổ biến trong xử lý tiếng nói. Quá trình trên bắt đầu bằng việc cắt tín hiệu tiếng nói thành các khung nhỏ, đi qua một chuỗi các xử lý sau đó thu về một lượng hệ số mel-frequency cepstral đủ nhỏ để phù hợp tính toán, đủ độc lập, ít nhiễu, đủ thông tin để có quá trình tính toán có nghĩa.
Quá trình sinh Mel-Frequenct Cepstral Coefficient (MFCC). MFCC là một biểu dạng biểu diễn dữ liệu tiếng nói được sử dụng phổ biến trong xử lý tiếng nói. Quá trình trên bắt đầu bằng việc cắt tín hiệu tiếng nói thành các khung nhỏ, đi qua một chuỗi các xử lý sau đó thu về một lượng hệ số mel-frequency cepstral đủ nhỏ để phù hợp tính toán, đủ độc lập, ít nhiễu, đủ thông tin để có quá trình tính toán có nghĩa.

Quá trình sinh MFFC là một bước quan trọng trong xử lý tín hiệu nói chung và xử lý tiếng nói nói riêng. Qúa trình này gần như quyết định chất lượng của kết quả bài toán. Vì giới hạn đối tượng của mà đề cương hướng đến, trong phần sau tôi sẽ chỉ trình bày quá trình được biểu diễn trong hình là quá trình được sử dụng rộng rãi trong cộng đồng và cũng là phần tiền xử lý trong bài toán của tôi. Như đã trình bày trong hình, tại bước đầu tiên, tín hiệu số của giọng nói sẽ đi qua bước Pre-emphais với mục đích giải quyết vấn đề năng lượng thấp của các âm có tần số cao. Đây là một đặc trưng trong cách con người tạo ra tiếng nói, khi mà các âm có tần số thấp có mức năng lượng cao và ngược lại. Các âm có tần số cao dù mang mức năng lượng nhỏ hơn nhưng vẫn chứa các thông tin về ngữ âm, âm sắc . . . . Vì thế, quá trình pre-emphasis này sẽ thực hiện nhiệm vụ tăng năng lượng cho các âm này:
Pre-emphasis
Pre-emphasis
trong đó, 0.99 > α > 0.95. Sau đó, dữ liệu này sẽ đi qua quá trình windowing, tại đó, đoạn âm thanh bị cắt thành các đoạn nhỏ có độ dài frame length, để phục vụ quá trình DFT. Để tính được độ dài một frame, người ta dựa vào khả cách đọc phổ biến của con người. Mỗi người bình thường có thể phát âm 3-4 từ mỗi giây, mỗi từ có khoảng 3-4 âm, mỗi âm lại chia làm 3-4 phần, từ đó, người ta ước lượng con số vào khoảng 20-25 ms cho một frame. Các frame sẽ phải chồng lên nhau nhằm ghi lại các thay đổi giữa các frame, đoạng chồng lấn này có kích thước hop size khoảng 10 ms. Tuy vậy, việc cắt các của sổ độ ngột sẽ làm âm thanh ở đầu và cuối một frame thay đổi đột ngột nên người ta thường chọn các window đặc biệt, theo nghiên cứu, phổ biến hơn cả trong bài toán xử lý giọng nói là Hanning [3]:
Hanning window
Hanning window
với 0 ≤ n ≤ M − 1, M là số giá trị đầu ra của hàm sau khi thực hiện. Đoạn dữ liệu này sẽ được đưa vào tính toán DFT như trình bày ở phương trình (2.12) để thu được Xt (k). Quá trình này cho ta một spectrogram như hình sau.
Một waveform (a) và spectrogram (b) tương ứng. Trong hình trên, từ trái qua phải là chiều thời gian. Ở hình trên, dữ liệu các vùng có màu đậm hơn là các vùng có giá trị cao hơn tuỳ vào loại dữ liệu.
Một waveform (a) và spectrogram (b) tương ứng. Trong hình trên, từ trái qua phải là chiều thời gian. Ở hình trên, dữ liệu các vùng có màu đậm hơn là các vùng có giá trị cao hơn tuỳ vào loại dữ liệu.
Con người nghe rõ ràng hơn các âm thanh có tần số thấp và ngược lại đối với các âm có tần số cao. Từ đó, người ta giả lập lại cách hoạt động này của tai người bằng cách áp dụng một lớp lọc có tên là Mel filter-bank. Qua bộ lọc này, các âm thanh có tần số thấp được đưa vào kết quả đầu ra nhiều hơn so với các âm thanh có tần số cao nhờ vào các filter hẹp hơn ở vùng tần số thấp. Kết quả thu được là phổ năng lượng theo tỉ lệ mel (Mel-scale power spectrum). Ngoài việc lọc, quy trình này còn sử dụng hàm log lên Mel-scaled power spectrum để giả lập tính nghe phi tuyến tính của tai người.
Như biểu diễn trong hình trên, mỗi âm là một mẫu các đường năng lượng cao. Các đường này gọi là formant sẽ được trình bãy rõ hơn ở phần sau. Tuy nhiên, cần chú ý rằng các âm giống nhau thì đường đi của các đường này khá giống nhau. Nên trên thực tế, để tạo ra tiếng nói có nghĩa, ta chỉ cần quan tâm đến các formant này mà thôi. Vì thế, người ta dùng quá trình biến đổi Fourier đảo để thu được cái gọi là cepstrum. Cái mà sẽ tách biệt thông tin của F0 và các tần số harmonic. Phép biến đổi Fourier đảo cũng tương đương với 1 phép biến đổi cosin rời rạc, vốn là 1 phép biến đổi trực giao. Nghĩa là, phép biến đổi này tạo ra các đặc điểm không tương quan, có thể hiểu là các đặc điểm độc lập hoặc có độ tương quan kém với nhau. Trong các thuật toán Machine learning, uncorrelated features thường cho hiểu quả tốt hơn. Như vậy sau bước này, ta thu được MFCC là 12 hệ số đầu tiên và thêm một giá trị thứ 13 là năng lượng là e_t, để thực hiện qúa trình sinh MFCC.
Năng lượng mỗi frame trên thời gian.
Năng lượng mỗi frame trên thời gian.
Như vậy, tôi vừa trình bày sơ lược vấn đề biến đổi một dữ liệu âm thanh thường thấy ở dạng waveform về dạng dữ liệu đặc hơn, phù hợp hơn cho các tính toán là MFCC. Đây là dạng dữ liệu được dùng phổ biến trong các bài toán nhận dạng giọng nói, vốn có mục đích chỉ là hiểu nội dung của câu nói. Song, đối với bài toán tổng hợp giọng nói, yêu cầu đặt ra khắt khe hơn là giọng nói được sinh ra phải có độ tự nhiên cao, độ thông minh, âm sắc, trường độ . . . phù hợp với nội dung, ngữ cảnh. Khi đó, dạng dữ liệu MFCC dường như quá thiếu thông tin để phục vụ các mô hình sinh giọng nhờ mô hình tham số thống kê, hay các mô hình máy học. Vì thế, trong tổng hợp tiếng nói, dạng dữ liệu được ưu tiên hơn là Mel-scale power spectrum, gọi tắt là mel-spectrogram. Dạng dữ liệu này mang đầy đủ thông tin hơn từ tín hiệu tiếng nói, đặc biệt là các thông tin liên quan đến cao độ, trường độ, âm sắc, năng lượng . . . ở mức tinh vi hơn.
Tóm lại, phần trên vừa trình bày các kiến thức nền tảng về xứ lý tín hiệu số và tiền xử lý dữ liệu trong bài toán tổng hợp giọng nói. Tuy nhiên, sau khi có được một dạng thông tin đặc hơn này, việc tổng hợp giọng nói sẽ còn gặp rất nhiều khó khăn nếu chúng ta bỏ qua các kiến thức về âm học.

References

[1] C. Shannon, “Communication in the presence of noise,” Proceedings of the IRE, vol. 37, no. 1, pp. 10–21, Jan. 1949
[2] J. W. Cooley and J. W. Tukey, “An algorithm for the machine calculation of complex fourier series,” Mathematics of Computation, vol. 19, pp. 297–301, 1965.
[3] R. B. Blackman and J. W. Tukey, “The measurement of power spectra from the point of view of communications engineering — part i,” The Bell System Technical Journal, vol. 37, no. 1, pp. 185–282, 1958