Đây là bài cuối cùng trong chuỗi 5 bài về Audio Deep Learning. Trong bài này, chúng ta sẽ tìm hiểu về bài toán Automatic Speech Recognition (ASR) hay Speech-to-Text: kiến trúc, cách thức làm việc, …
Có lẽ chúng ta không còn quá xa lạ với một số ứng dụng như Siri, Alexa, Google Home, Cortana, … Chúng đều là các ứng dụng dựa trên bài toán ASR.
1. Speech to Text
Như chúng ta đều biết, tiếng nói của con người là một thứ tồn tại hàng ngày xung quanh chúng ta. Trong một số trường hợp, chúng ta cần phải chuyển đổi những giọng nói đó thành văn bản (transcribe) đề có thể xử lý tốt hơn. Ví dụ: ghi chép nội dụng trong một cuộc họp, tổng đài hỗ trợ tự động, …
Tương tự như bài toán Audio Classification, đối với bài toán Speech-to-Text cũng yêu cầu dữ liệu huấn luyện gồm 2 phần:
ASR model sẽ nhận vào X và đưa ra dự đoán Y.
2. Data Preprocessing
Các bước tiền xử lý dữ liệu của bài toán này cũng tương tự như bài trước.
2.1 Load Audio Files
2.2 Normalization = Convert to uniform dimensions: sample rate, channels, and duration
2.3 Mel Spectrogram
Mảng Numpy của các file Audio (gọi là Raw Audio) được chuyển sang Mel Spectrogram. Mel Spectrogram chứa đầy đủ thông tin của Audio trong cả miền thời gian và không gian và thể hiện chúng dưới dạng ảnh phổ.
2.4 Data Augmentation
Chúng ta có thể áp dụng một số kỹ thuật Augmentation để làm phong phú thêm dữ liệu huấn luyện model. Có 2 thời điểm thích hợp mà ta có thể sử dụng các kỹ thuật này:
2.5 MFCC
MFCC là một dạng “nén” của Mel Spectrogram, được chứng mình rằng phù hợp hơn Mel Spectrogram đối với dữ liệu là giọng nói của người.
2.6 Prepare Target Label
Để chuẩn bị nhãn cho model, chúng ta cần xây dựng một từ điển (Vocabulary) các ký tự trong các Target Labels Y, sau đó chuyển mỗi ký tự đó sang ID tương ứng của chúng trong từ điển.
3. Kiến trúc
Có một vài kiến trúc DL model khác nhau cho ASR, trong đó có 2 kiến trúc phổ biến là:
3.1 CRNN-CTC Tương tự như bài toán OCR, kiến trúc này cũng bao gồm một mạng CNN để trích xuất đặc trưng (feature maps) từ MFCC, mạng RCNN để xử lý các Feature Maps dạng chuỗi, và cuối cùng là CTC Loss để decode ra các ký tự cụ thể. Baidu’s Deep Speech là một model nổi bật sử dụng kiến trúc này.
Cách thức hoạt động của nó như sau:
Mạng CNN (thường là ResNet) xử lý các MFCC Images và Output ra Feature Maps của mỗi Image đó.
Tiếp theo, mạng RNN (thường là Bidirectional LSTM) xử lý các Feature Maps như là một chuỗi các TimeSteps/Frames liên tiếp, mỗi TimeStep này tương ứng với một/nhiều ký tự ở chuỗi đầu ra mong muốn.
Một Linear Layer kết hợp với Softmax, sử dụng Output từ LSTM để sinh ra xác suất của mỗi ký tự, tương ứng với mỗi TimeStep.
Ngoài ra, cũng có thể có một vài Linear Layers khác nằm giữa CNN và RNN để chuyển đổi kích thước giữa 2 mạng cho phù hợp với nhau.
CTC Loss: Xem lại bài này
3.2 RNN Kiến trúc này chỉ sử dụng mạng RNN SeqSeq, sử dụng Input là các slices được chia ra từ MFCC. Google’s Listen Attend Spell (LAS) là một model nột bật sử dụng kiến trúc này.
4. Metrics - Word Error Rate (WER)
Sau khi dựng được kiến trúc và huấn luyện model, bước tiếp theo cần làm là đánh giá model đó xem nó hoạt động hiệu quả như thế nào. Mỗi dạng bài toán đều có các Metrics để đánh giá model khác nhau. Đối với bài toán ASR, Word Error Rate (WER) thường được sử dụng. Về bản chất, WER dựa vào việc so sánh kết quả dự đoán của model và nhãn thực tế theo từng ký tự (Character by Character) hoặc từ (Word by Word).
Sự khác nhau giữa kết quả dự đoán và nhãn thực tế có thể là các ký tự/từ có trong nhãn nhưng khồn có trong dự đoán (gọi là Deletion), hoặc ký tự/từ có trong dự đoán nhưng không có trong nhãn (gọi là Insertion), hoặc ký tự/từ có trong dự đoán/nhãn nhưng trong nhãn/dự đoán, nó bị biến đổi thành ký tự/từ khác mà vẫn giữ nguyên ý nghĩa (gọi là Substitution).
Công thức tính WER khá đơn giản, nó là tỉ lệ giữa số lượng các ký tự/từ khác nhau (cả 3 loại) và tổng số ký tự/từ.
Ví dụ, trong hình bên trên thì:
$WER = \frac{Detetion + Insertion + Substitution}{\sum{Characters/Words}} = \frac{1 + 1 + 1}{6} = 0.5$
5. Beam Search
Trong cách làm việc của CTC Decoder, mặc dù không nói rõ nhưng chúng ta đều ngầm hiểu rằng ký tự với xác sủất cao nhất sẽ được chọn. Cách này được gọi bằng cái tên Greedy Search.
Một sự thay thế khác là Beam Seach, mà trong một số trường hợp mang lại kết quả tốt hơn so với Greedy Search, đặc biệt là trong các bài toán NLP. Nếu có thể thì bạn hãy thử nó trong các dự án của mình.
6. Mở rộng
Nói chung, sau khi đánh giá model, WER đã thỏa mãn yêu cầu (> giá trị ngưỡng, 0.8 chẳng hạn) thì bài toán ASR coi như đã được giải quyết xong. ASR mặc dù đã sinh ra văn bản từ giọng nói nhưng nó không hiểu gì về ngữ nghĩa của văn bản đó cả. Kết quả của ASR thường được sử dụng làm Input cho các bài toán khác trong lĩnh vực NLP: sinh văn bản mới, phân loại văn bản, tự động trả lời, …
7. Kết luận
Như vậy là chúng ta đã kết thúc bài thứ 5 tại đây. Qua bài này, chúng ta đã hiểu được phần nào rõ hơn về bài toán ASR, từ kiến trúc cho đến cách làm việc
Trong bài tiếp theo, chúng ta sẽ chuyển sang một chủ đề mới, đó là bài toán Recommender System. Mời các bạn đón đọc.
8. Tham khảo
[1] Ketan Doshi, “Audio Deep Learning Made Simple: Automatic Speech Recognition (ASR), How it Works”, Available online: https://towardsdatascience.com/audio-deep-learning-made-simple-automatic-speech-recognition-asr-how-it-works-716cfce4c706 (Accessed on 05 Jun 2021).
[2] Scott Duda, “Urban Environmental Audio Classification Using Mel Spectrograms”, Available online: https://scottmduda.medium.com/urban-environmental-audio-classification-using-mel-spectrograms-706ee6f8dcc1 (Accessed on 05 Jun 2021).