Mel Frequency Cepstral Coefficient (MFCC) Trong ASR (Automatic ...

Kiến thức nền tảng xử lý tiếng nói – Speech Processing – VIBO, jonathan

Tóm tắt:

Nguyên lý hình thành tiếng nói: Không khí đi từ phổi, qua khí quản, lên vòm miệng. Ở vòm miệng, các rung động trong không khí được tổng hợp (cộng hưởng, triệt tiêu, …) và TẠO THÀNH ÂM THANH thoát ra khỏi miệng

Âm, âm tiết, âm vị: Một từ có thể cấu tạo bởi một hoặc nhiều âm tiết. Mỗi âm tiết có thể có cách phát âm khác nhau, gọi là âm vị. VD chữ “ough” trong câu sau có tới 6 kiểu phát âm.

Though I coughed roughly and hiccoughed throughout the lecture, I still thought I could plough through the rest of it.

Tuy nhiên, cùng một âm vị nhưng mỗi người đọc ra lại khác nhau do giọng mỗi người mỗi khác. Âm là khi một người thực hiện hóa việc đọc ra âm tiết. Mỗi người có một cao độ riêng đặc trưng cho người đó, được gọi là F0. Mỗi âm tiết cũng có các tần số đặc trưng cho chúng, được gọi là F1, F2, F3 (> F0).

Cơ chế hoạt động của tai: Tai người cấu tạo theo hình xoắn ốc. Trên thành tai có các sợi lông tơ dùng để cảm nhận âm thanh đi vào tai. Càng vào sâu trong tai, số lượng lông tơ tăng lên; sợi lông tơ mỏng đi. Do đó, từng vùng trong tai đảm nhiệm việc cảm nhận các sóng âm thanh khác nhau. Tai người nhạy với âm thanh có tần số thấp, kém nhạy ở tần số cao. Cơ chế máy móc thu âm thanh khác với cách con người cảm nhận âm thanh, do đó, cần có một cơ chế để mapping (Mel Filterbank).

Fourier Transform: Là một hàm số đối xứng, giúp chuyển một tín hiệu điều hòa, khả tích (ví dụ như âm thanh) từ miền thời gian về miền tần số. Điều này thực hiện được dựa trên lý thuyết chuỗi Fourier: Bất kỳ một hàm số khả tích trên miền điều hòa đều có thể biểu diễn dưới dạng tổng của các sóng sin (tương đương với biểu diễn được dưới dạng tổng các miền tần số thành phần).

Feature Extraction – MFCC cho xử lý tiếng nói

Quá trình từ âm thanh đầu với tới tạo ra các thuộc tính đặc trưng MFCC

MFCC là một thuật toán để trích xuất thông tin từ tín hiệu đầu vào. Ta xét bài toán đơn giản: Đầu vào là các tập audio, mỗi audio là một âm tiết. Tìm các feature tốt để phân biệt các âm vị này. MFCC chính là thuật toán giúp ta tìm các feature kia.

Notes: Bài này chỉ notes lại những ý chính quan trọng, đọc thêm các tài liệu để hiểu rõ hơn.

A/D conversion

Âm thanh là dạng tín hiệu liên tục, trong khi đó máy tính làm việc với các con số rời rạc. Ta cần lấy mẫu tại các khoảng thời gian cách đều nhau với 1 tần số lấy mẫu xác định (sample rate) để chuyển từ dạng tín hiệu liên tục về dạng rời rạc. VD sample_rate = 8000 ⟶ trong 1s lấy 8000 giá trị.

Preemphasis

Các âm ở tần số thấp có năng lượng cao; các âm ở tần số cao có mức năng lượng thấp. Tuy nhiên, do cấu trúc của thanh quản và các bộ phận phát âm nên ở tần số cao vẫn chứa những thông tin quan trọng về âm vị. Do đó, ta phải kích năng lượng ở các tần số cao này lên.

Windows

Thay vì biến đổi Fourier trên cả đoạn âm thanh dài, ta trượt 1 cửa sổ (windows) dọc theo tín hiệu để lấy ra các frame rồi mới áp dụng DFT trên từng frame này ( DFT – Discrete Fourier Transform).

Do trong xử lý âm thanh, ngữ cảnh rất quan trọng do đó, mỗi windows cần được chia thành 3 states: nối với âm trước, âm của chính nó, nối với âm sau. Mỗi giây, trung bình một người nói khoảng 3 từ, mỗi từ có 4 âm, mỗi âm chia ra 3 states –> cần phân biệt 36 states trong 1s. Vậy độ dài mỗi windows=25ms là hợp lý.

Các windows cũng cần overlap với nhau một khoảng 10ms để lưu trữ thông tin overlapping.

Ngoài ra, để lọc nhiễu, người ta cũng nhân tích chập các windows thu được với các hàm lọc nhiễu như Hamming window, Hanning window, …

DFT

Trên từng frame, ta áp dụng DFT – Discrete Fourier Transform. Kết quả thu được là 1 spectrogram.

Hình dưới là các spectrogram của 4 nguyên âm. Quan sát spectrogram lần lượt từ dưới lên, người ta nhận thấy có 1 vài tần số đặc trưng gọi là các formant, gọi là các tần số F1, F2, F3 … Các chuyên gia về ngữ âm học có thể dựa vào vị trí, thời gian, sự thay đổi các formant trên spectrogram để xác định đoạn âm thanh đó là của âm vị nào.

Tuy nhiên trong nhiều bài toán (đặc biệt là speech recognition), spectrogram không phải là sự lựa chọn hoàn hảo. Vì vậy ta cần thêm vài bước tính nữa để thu được dạng MFCC, tốt hơn, phổ biến hơn, hiệu quả hơn spectrogram.

Mel filterbank

Cách cảm nhận của tai người là phi tuyến tính, không giống các thiết bị đo. Tai người cảm nhận tốt ở các tần số thấp, kém nhạy cảm với các tần số cao. Ta cần 1 cơ chế mapping tương tự như vậy.

Trước hết, ta bình phương các giá trị trong spectrogram thu được DFT power spectrum (phổ công suất). Sau đó, ta áp dụng 1 tập các bộ lọc thông dải Mel-scale filter trên từng khoảng tần số (mỗi filter áp dụng trên 1 dải tần xác định). Giá trị output của từng filter là năng lượng dải tần số mà filter đó cover (bao phủ) được. Ta thu được Mel-scale power spectrum. Ngoài ra, các filter dùng cho dải tần thấp thường hẹp hơn các filter dùng cho dải tần cao.

log()

Mel filterbank trả về phổ công suất của âm thanh, hay còn gọi là phổ năng lượng. Thực tế rằng con người kém nhạy cảm trong sự thay đổi năng lượng ở các tần số cao, nhạy cảm hơn ở tần số thấp. Vì vậy ta sẽ tính log trên Mel-scale power spectrum. Điều này còn giúp giảm các biến thể âm thanh không đáng kể để nhận dạng giọng nói.

Chúng ta cần thực hiện hai việc nữa. Thứ nhất, cần loại bỏ F0 (thông tin về cao độ) vì ta không muốn thuật toán xử lý giọng nói (ví dụ ở đây là phân loại âm vị) của mình phụ thuộc vào cao độ của từng người. Thứ hai, ta cần trích xuất các đặc trưng sau khi loại bỏ F0 để làm đặc trưng cho từng âm vị.

IDFT: Loại bỏ thông tin F0.

Như đã mô tả ở phần trước, giọng nói của chúng ta có tần số F0 – tần số cơ bản và các formant F1, F2, F3 … Tần số F0 ở nam giới khoảng 125 Hz, ở nữ là 210 Hz, đặc trưng cho cao độ giọng nói ở từng người. Thông tin về cao độ này không giúp ích trong nhận dạng giọng nói, nên ta cần tìm cách để loại thông tin về F0 đi, giúp các mô hình nhận dạng không bị phụ thuộc vào cao độ giọng từng người. (F1, F2, F3 > F0)

QUESTION: Why don’t we remove F0 in frequency domain???

Chúng ta chuyển qua miền thời gian để loại bỏ F0.

Nhớ lại rằng chu kỳ của các sóng trong miền tần số hay thời gian sẽ bị nghịch đảo sau khi biến đổi DFT.

F0 (pitch information) có chu kỳ ngắn nhất trong miền tần số do đó, khi chuyển qua miền thời gian, chu kỳ của nó là lớn nhất. Do đó, ta có thể dễ dàng tách biệt nó khỏi những thành phần còn lại F1, F2, …

Trong hình này, tín hiệu chúng ta thu được là đồ thị 3, nhưng thông tin quan trọng chúng ta cần là phần 2, thông tin cần loại bỏ là phần 1. Để loại bỏ đi thông tin về F0, ta làm 1 bước biến đổi Fourier ngược (IDFT) về miền thời gian, ta thu được Cepstrum. Nếu để ý kỹ, ta sẽ nhận ra rằng tên gọi “cepstrum” thực ra là đảo ngược 4 chữ cái đầu của “spetrum“.

Khi đó, với Cepstrum thu được, phần thông tin liên quan tới F0 và phần thông tin liên quan tới F1, F2, F3 … nằm tách biệt nhau như 2 phần khoanh tròn trong hình 4. Ta chỉ đơn giản lấy thông tin trong đoạn đầu của cepstrum (phần được khoanh tròn to trong hình 4). Để tính MFCC, ta chỉ cần lấy 12 giá trị đầu tiên.

Phép biến đổi IDFT cũng tương đương với 1 phép biến đổi DCT discrete cosine transformation. DCT là 1 phép biến đổi trực giao. Về mặt toán học, phép biến đổi này tạo ra các uncorrelated features, có thể hiểu là các feature độ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 12 Cepstral features.

Dynamic features (delta)

Như vậy, mỗi frame ta đã extract ra được 12 Cepstral features làm 12 feature đầu tiên của MFCC. feature thứ 13 là năng lượng của frame đó, tính theo công thức bên dưới. Nó giúp ta phân biệt các âm.

Trong nhận dạng tiếng nói, thông tin về bối cảnh và sự thay đổi rất quan trọng. VD tại những điểm mở đầu hoặc kết thúc ở nhiều phụ âm, sự thay đổi này rất rõ rệt, có thể nhận dạng các âm vị dựa vào sự thay đổi này. 13 hệ số tiếp theo chính là đạo hàm bậc 1 (theo thời gian) của 13 feature đầu tiên. Nó chứa thông tin về sự thay đổi từ frame thứ (t) đến frame (t+1). Công thức:

Tương tự như vậy, 13 giá trị cuối của MFCC là sự thay đổi d(t) theo thời gian – đạo hàm của d(t), đồng thời là đạo hàm bậc 2 của c(t). Công thức:

b(t)=1/2[d(t+1)−d(t−1)​]

Vậy, từ 12 cepstral feature và power feature thứ 13, ta đạo hàm 2 lần và thu được 39 feature. Đây chính là MFCC feature. Cùng nhìn lại toàn bộ quá trình để tạo ra MFCC:

REFERENCE

  • https://viblo.asia/p/so-luoc-ve-mel-frequency-cepstral-coefficients-mfccs-1VgZv1m2KAw
  • https://medium.com/@jonathan_hui/speech-recognition-phonetics-d761ea1710c0
  • https://medium.com/@jonathan_hui/speech-recognition-feature-extraction-mfcc-plp-5455f5a69dd9
  • https://viblo.asia/p/feature-extraction-mfcc-cho-xu-ly-tieng-noi-4dbZN2xmZYM
  • https://viblo.asia/p/kien-thuc-nen-tang-xu-ly-tieng-noi-speech-processing-jvElaAL6lkw
  • https://en.wikipedia.org/wiki/Formant

Share this:

  • X
  • Facebook
Like Loading...
  • ML
  • Technical

Từ khóa » đặc Trưng Mfcc