Mô hình được thực hiện bởi sự kết hợp nhiều lớp mạng CNN, các lớp mạng hồi quy (GRU, LSTM), và cuối cùng là lớp Fully Connected, xen kẻ các lớp gắn thêm lớp chuẩn hoá LayerNorm, và gắn thêm Dropout, sơ đồ mô tả các lớp mạng được cài đặt trong quá trình xây dựng mô hình ở luận văn này trình bày ở hình 3.7.
Hình 3.7 Sơ đồ tổng quát các lớp mạng nơ-ron mô hình nhận dạng v Chi tiết thông số các lớp mạng:
Ở nghiên cứu này em đã lựa chọn cấu trúc mô hình như sau: ü Số lượng Features ngõ vào mô hình là 128,
ü Số lớp ngõ ra là 96 (95 kí tự cần nhận dạng + kí tự rỗng NULL). ü Hệ số learning rate = 0.0005
ü Batch size được lựa chọn từ 3, 5, 20, 32 tuỳ theo số lượng dữ liệu và cấu hình máy tính lúc làm thí nghiệm.
Mô hình các lớp mạng nơ-ron theo thứ tự:
Ø Một lớp CNN thuần (ngõ vào: 1; ngõ ra:32, kernel: 3x3, stride=2) Ø Tiếp theo là 3 lớp Residual Networks, mỗi lớp ResNet gồm:
• Hai lớp CNN (ngõ vào là: 32, ngõ ra: 32, kernel: 3x3, stride=1) • Gắn thêm 2 Dropout với p=0.1 tương ứng với hai lớp CNN. • Hai lớp chuẩn hoá LayerNorm tương ứng với hai lớp CNN.
Ø Tiếp đến là một lớp Full Connected (với ngõ ra 512 hoặc 1024 tuỳ vào lúc thử nghiệm trong lúc xây dựng mô hình, phù hợp vối số kênh ngõ vào của lớp RNN tiếp theo)
Ø Tới 5 lớp mạng Bidirectional GRU hoặc LSTM, với mỗi lớp là: • Một lớp Bidirectional GRU hoặc Bidirectional LSTM • LayerNorm
• Dropout (p=0.1) Ø Cuối cùng là lớp phân loại gồm:
• 1 lớp Full Connected
• GELU (Gaussian Error Linear Units function); • Dropout(p=0.1);
• và một Full Connected cuối cùng (ngõ ra là 96 – tương ứng 95 kí tự cần nhận dạng và một kí tự rỗng “NULL”).
v Hoạt động của mô hình
Mô hình gồm 2 khối chính đó là khối mạng CNN và khối mạng RNN, mạng nơ-ron CNN rất thích hợp để phân tách trích xuất các dữ liệu trừu tượng như hình ảnh, âm thanh. Thay vì sử dụng lớp mạng CNN cơ bản (CNN Vanila), chúng ta sử dụng các lớp Residual CNN, được mô tả ở bài báo “Deep Residual Learning for Image Recognition” [10] được xuất bản 2016 của nhóm tác giả Kaiming He,.. , nhóm
tác giả cho thấy có kết nối Residual bên trọng các mạng CNN sẽ tăng tính chính xác của mô hình.
Sau khối CNN sẽ cho ra bộ vec tơ là các feature của tín hiệu âm thanh, dữ liệu này là ngõ vào của khối RNN tiếp theo.
Khối RNN được thực hiện sử dụng mạng hồi quy hai chiều (Bidirectional RNN – BiRNN) việc này sẽ hữu ích khi thông tin tại thời điểm t không những phụ thuộc vào các thời điểm trước đó, mà cả phụ thuộc vào các thời điểm sau đó, khi đó mô hình Bi-RNN sẽ có hai mạng RNN chồng ngược hướng lên nhau, và việc tính toán sẽ dựa vào hai trạng thái ẩn của cả hai mạng RNN này. Nghiên cứu trong luận văn sử dụng thử nghiệm 2 kiến trúc mạng mở rộng của RNN là GRU và LSTM. Mạng GRU thực thi nhanh hơn, ít tốn tài nguyên; và mạng LSTM tính toán phức tạp hơn, cần nhiều tài nguyên vào thời gian tính toán và cho ra độ chính xác mô hình tốt hơn mạng GRU.
Xen kẻ các lớp mạng CNN là các lớp chuẩn hoá các feature LayerNorm và áp dụng kỹ thuật Dropout với p=0.1. Gắn Dropout nhằm loại bỏ ngẫu nhiên số nơ-ron trong lớp ẩn, loại bỏ chúng khỏi quá trình forward và backward, giúp giảm vấn đề quá phù hợp (overfitting). Đồng nghĩa với việc tăng số lượng epoch để hội tụ và giảm số lượng tính toán trên mỗi epoch.
3.5. Hiệu chỉnh văn bản đầu ra
Sơ đồ khối của toàn mô hình được trình bày ở hình 6.2, sau khi mô hình dự đoán được chuỗi từ sẽ được chuyển qua mô-đun hiệu chỉnh nhằm khắc phục sự thiếu chính xác của mô hình.
Beam Search được áp dụng trong quá trình huấn luyện và kiểm thử mô hình nhận dạng. Lựa chọn giới hạn tìm kiếm cho thuật toán Beam Search là 10, tại mỗi thời điểm nhận dạng, thuật toán sẽ đưa ra tối đa 10 câu có tỉ lệ xác suất xuất hiện các từ lớn nhất và ghép nối chúng với nhau, số lượng câu cuối cùng sẽ được loại bỏ các câu trùng nhau.
Tương ứng với 10 câu được đưa ra này, sẽ lần lượt tạo ra các bộ 2-gram, bởi vì trong tiếng Việt từ ghép có ý nghĩa hơn là từ đơn.
Quá trình tạo 2-gram tổ hợp tất cả các cặp từ có thể kết hợp được từ 10 câu này theo từng cụm riêng, mỗi cụm là tổ hợp các 2-gram. Khi đó, nếu câu có độ dài L
thì sẽ có (L-1) số cụm, được tạo ra bởi từ ở vị trí thứ n kết hợp với từ ở vị trí thứ n+1, (n bắt đầu bằng 0).Bên trong mỗi cụm là tổ hợp các 2-gram tạo ra từ các câu, loại bỏ những 2-gram trùng nhau.
Gọi X là số câu, Y là số từ trên mỗi câu thì số cụm là (Y-1). Mỗi cụm, sẽ có số tổ hợp 2-gram là (X^2), và lúc này tổng số 2-gram là: (Y-1) * (X^2).
Ví dụ: Có 3 câu được Beam Search đưa ra, mỗi câu gồm 6 từ như sau: Câu 1: “húng ta làm việc hăm chỉ”.
Câu 2: “chúng ca làm diệc chăm chi”. Câu 3: “chúng ta lam viêc hăm hỉ”.
Khi đó, sẽ có các tổ hợp 2-gram như sau: “húng ta”, “húng ca”, “chúng ta”, “chúng ca”, “ta làm”, “ta lam”, “làm việc”, “làm diệc”, “làm viêc”, “lam viêc” ,…
v Chuẩn bị bộ từ điển 2-gram: Dữ liệu được lấy ra từ các trang báo mạng, trang wiki tiếng việt, số lượng từ sưu tập từ các chủ đề: kinh tế, văn hoá, xã hội, đời sống, giải trí. Từ đó, sẽ phân rã thành các cụm từ ghép có nghĩa sử dụng công cụ mã nguồn mở Word Tokenize [12], song song với việc tách từ là tính xác suất xuất hiện từ ghép này trong bộ dữ liệu. Cụ thể, bộ từ điển 2-gram được chuẩn bị có 20.217 cụm từ ghép trên tổng số 2,514 tỉ từ được sưu tập. Mỗi cụm từ ghép đi kèm với xác suất xuất hiện hay sự phổ biến của cụm từ này. Ví dụ:
“đoàn thể,0.0001000418” => xác suất xuất hiện, phổ biến là: “0.0001000418”; “nguyên tắc,0.00010016” => xác suất xuất hiện, phổ biến là: “0.00010016”; “phụ huynh,0.00001404” => xác suất xuất hiện, phổ biến là: “0.00001404”;
Mô-đun hiệu chỉnh sẽ xem xét trên từng cụm, các tổ hợp 2-gram sẽ so sánh với bộ từ điển và các giải thuật khác nhau để tìm ra 2-gram mới có mức độ thích hợp nhất để hiệu chỉnh, quá trình này được thực hiện bởi 3 công đoạn sau:
Công đoạn 1: Lấy từng 2-gram trong mỗi cụm đi so sánh với bộ từ điển, tính khoảng cách giữa chúng sử dụng thuật toán Levenshtein, 2-gram nào khoảng cách bé nhất tức có độ tương đồng lớn nhất sẽ được chọn ra để xem xét thay thế cho 2-gram cần hiệu chỉnh. Số lượng tối đa được chọn ra là 10 bộ 2-gram.
Công đoạn 2: Lấy các bộ 2-gram từ bước 1, so sánh với 2-gram cần hiệu chỉnh theo thuật toán Cosine Similarity [13] để ra chọn ra các 2-gram từ có mức độ tương đồng trong ngưỡng > 0.45;
Công đoạn 3: Sẽ lọc một lần nữa 2-gram từ nào có xác suất xuất hiện, hay phổ biến cao nhất để chọn ra là 2-gram phù hợp để thay thế. Nếu cuối cùng không tìm được cụm từ ghép phù hợp thì từ gốc vẫn giữ nguyên.
Hình 3.8: Mô hình hiệu chỉnh văn bản
Vấn đề chính của mô đun hiệu chỉnh là bộ từ điển 2-gram, và kỹ thuật tính độ tương đồng bởi khoảng cách giữa các 2-gram.
CHƯƠNG 4. HUẤN LUYỆN MÔ HÌNH VÀ KẾT QUẢ ĐẠT ĐƯỢC 4.1. Quá trình huấn luyện
Mô hình được huấn luyện trên cấu hình máy tính: hệ điều hành Ubuntu, Card đồ hoạ NVIDIA GeForce GTX 1080 Ti, Graphics Card Ram 11GB GDDR5X, ổ cứng 1TB. Mô tả về bộ dữ liệu VIVOS, FPT, VINDATA:
Tên bộ dữ liệu Số lượng mẫu Train Số lượng mẫu Test Định dạng/ Tần số lấy mẫu Độ dài audio Độ dài nhãn VIVOS 9.263 726 wav/ 16Khz 1.3s đến 15s 5 đến 20 từ FPT 15.700 7.213 wav/ 16Khz 1.3s đến 15s 5 đến 20 từ VINDATA 20.000 6.426 wav/ 16Khz 1.3s đến 15s 5 đến 20 từ
Bảng 1: Thông tin về bộ dữ liệu huấn luyện
Nhìn chung, bộ dữ liệu được chia sẻ của VIVOS, FPT, VINDATA khá nhiều, tuy nhiên về chất lượng thì bộ dữ liệu VIVOS là tốt nhất, bộ dữ liệu FPT và VIN lớn hơn nhiều, sau khi sàng lọc thì số lượng tập train và test bị giảm xuống, số lượng chi tiết mô tả ở bảng 1, tuy vậy vẫn có thể xem xét để thử nghiệm độ chính xác mô hình đang xây dựng.
Bộ dữ liệu train VIVOS gồm 46 người đọc trong đó có 22 giọng nam và 24 giọng nữ; bộ test có 19 người đọc trong đó có 12 giọng nam và 7 giọng nữ, tất cả được thu âm trong môi trường yên tĩnh, được ghi âm qua micro.
Bộ dữ liệu của FPT và VIN đa dạng hơn rất nhiều, gồm cả môi trường yên tĩnh và ồn ào, giọng nam lẫn nữ, âm thanh được thu thập đủ lĩnh vực và môi trường gồm có bài nhạc, tiếng radio, tiếng điện thoại viên tổng đài, tiếng âm thanh ngoài đường phố, … Độ dài ngắn khác nhau, độ nhiễu nhiều.
Quá trình huấn luyện mô hình trải qua thời gian dài; công việc huấn luyện mô hình được thực hiện liên tục để đẩy nhanh tiến độ vì giới hạn thời gian của đề tài.
Đầu tiên mô hình được huấn luyện thử một số lượng mẫu ít trên tập VIVOS để kiểm trả sự sai sót nếu có của mô hình, các thông tin được ghi log để kiểm chứng. Sau khi mọi thứ hoạt động đúng theo dự đoán tiến hành huấn luyện trên đầy đủ tập dữ liệu nhỏ VIVOS.
Trong quá trình train và test dữ liệu được cài đặt tự động xáo trộn để tăng sự chính xác của mô hình.
Train trở lại 2,3 lần dựa trên mô hình đã được train trước trên tập VIVOS để đánh giá sự cải thiện, nhưng kết quả không thay đổi nhiều, và thử nghiệm tăng epoch lên từ 50 lên 100, kết quả cũng không so lệch là mấy, từ epoch 45, trở đi kết quả gần như không thay đổi nhiều (được mô tả trong phần kết quả). Vì vậy, chọn epoch 50 để huấn luyện cho các tập lớn FPT, VIN.
Sau khi có mô hình train từ tập VIVOS, tiến hành sử dụng lại và train tiếp trên các bộ dữ liệu VIN, FPT, nhằm kế thừa từ bộ trọng số giúp tăng thời gian hội tụ và giảm thời gian huấn luyện.
Batch-size được lựa chọn không cố định, số lượng batch-size lớn thì mô hình train nhanh nhưng khả năng máy tính với lượng bộ nhớ RAM hạn chế nên nhiều lần gẫy lỗi, độ dài audio không cố định nên khi số lượng audio được train trên mỗi batch- size quá lớn sẽ gây lỗi, vì vậy em đã lựa chọn batch-size nhỏ cho tập dữ liệu FPT, VIN từ 5 -> 20, chọn batch-size là 32 cho tập VIVOS.
Trên mỗi epoch, sau trình huấn luyện sẽ được chuyển qua công đoạn test trên tập dữ liệu test, và đánh giá tổng lỗi dựa trên hệ số WER.
Sau khi hoàn tất công đoạn huấn luyện mô hình, sẽ chọn được mô hình tại epoch nào có độ chính xác tốt nhất, hiện tại em chọn epoch cuối cùng, vì độ giảm lỗi ở những epoch cuối thường tốt nhất. Mô hình này, sẽ được test trên tập dữ liệu test, kết quả văn bản dự đoán được được chuyển qua mô-đun hiệu chỉnh để có được văn bản cuối cùng, rồi chuyển qua đánh giá WER. Kết quả WER giữa có hoặc không có mô-đun hiệu chỉnh được thống kê trong phần 4.2.
v Ngôn ngữ và các thư viện lập trình: Mô hình được xây dựng trên ngôn ngữ lập trình Python; học viên hoàn toàn tự xây dựng các lớp mô hình theo kiến trúc Deep Speech 2, với sự hỗ trợ của các hàm chuẩn từ thư viện Pytorch (như rút trích đặc trưng MFCC, cấu trúc lớp mạng RNN, LSTM, GRU, hàm đánh giá lỗi CTC).
4.2. Kết quả đạt được
Kết quả huấn luyện và độ chính xác qua các lần huấn luyện mô hình trên các tập dữ liệu khác nhau; huấn luyện với Epoch = 50, batch-size từ 3, 5, 10, 32, … linh hoạt theo từng dataset và khả năng tính toán của máy tính.
Tên Model Dataset Cấu trúc
mạng RNN trong model Trung bình WER Trung bình WER (có mô-đun hiệu chỉnh) Thời gian Train Thời gian Test M1.1_vivos_ _gru_RNN_512 VIVOS GRU, RNN dim=512, batch-size: 32 0.5476 0.3475 ~8 giờ ~16 phút M1.1_vivos_ _LSTM_512 VIVOS LSTM, RNN-dim: 512, batch- size: 20 0.5333 0.4092 ~12 giờ ~30 phút M1.3_vivos_ _LSTM_RNN_ 1024 VIVOS LSTM, RNN-dim: 1024, batch-size: 20 0.4131 0.2596 ~19 giờ ~43 phút M2.1_vin_GRU _RNN_512 VIN GRU, RNN-dim: 0.5315 0.4703 ~25 giờ ~1,3 giờ
512, batch- size: 10 M2.2_vin_ LSTM_RNN_512 VIN LSTM, RNN-dim: 512, batch- size: 10 0.5654 0.4911 ~31 giờ ~1,8 giờ M3_fpt_GRU _RNN_512 FPT GRU, RNN-dim: 512, batch- size: 10 0.4403 0.3201 ~20 giờ ~1,4 giờ
Bảng 2: Thông tin về kết quả huấn luyện và thử nghiệm
Chỉ số trung bình WER được đưa ra ở bảng 2 là đánh giá trên việc sử dụng mô tại epoch có bộ trọng số tối ưu nhất.
Quan sát kết quả thống kê thay đổi tập dữ liệu, các thông số mô hình, và kết quả đạt được trình bày ở bảng 2 nhận thấy rằng:
Mô hình được huấn luyện cho kết quả chính xác dao động 50-60%, nếu tích hợp mô đun hiệu chỉnh thì độ chính xác của mô hình tăng lên 60-75%.
Khi thay đổi cấu trúc mạng RNN từ GRU sang LSTM kết quả cho thấy huấn luyện với mạng LSTM thời gian lâu hơn, tốn kém thời gian nhiều hơn (cũng từ bản chất và số lượng tính toán bên trong mỗi cấu trúc), và cho kết quả tốt hơn so với cấu trúc GRU, ví như tập dữ liệu VIVOS – dữ liệu khá tốt nên khi đổi mô hình sang LSTM hệ số lỗi WER giảm rõ rệt. Tuy nhiên, sự giảm hệ số WER trên tập dữ liệu VIN không quá lớn.
Khi thay đổi kích thước mạng RNN từ 512 lên 1024, kết quả cũng khả thi hơn (thử nghiệm trên bộ dữ liệu nhỏ VIVOS).
Chỉ số WER giảm 13-20% khi có tích hợp mô-đun hiệu chỉnh, điều này chứng tỏ khả năng hiệu chỉnh từ, cụm từ sau khi nhận dạng giúp cải thiện độ chính xác từ mô hình. Không phải tất cả các từ được hiệu chỉnh đúng, nhưng tương đối cải thiện sai lệch so với ngõ ra của mô hình, cho thấy sự hữu ích của mô-đun. Việc tích hợp
mô-đun hiệu chỉnh sẽ gây ra chậm hơn trong quá trình dự đoán kết quả vì phải so sánh với từ, cụm từ trong bộ dữ liệu mẫu, tuy nhiên với hạ tầng máy tính mạnh thì độ trễ không đáng kể. Một số hình ảnh về biểu đồ tốc độ giảm lỗi WER trên các lần huấn luyện trên các tập dữ liệu khác nhau:
Hình 3.9: Một số hình ảnh mô tả độ giảm lỗi WER trong quá trình huấn luyện Các biểu đồ trình bày ở hình 3.9 mô tả sự thay đổi của WER suốt quá trình huấn luyện, hệ số lỗi này có khi vọt lên cao bất thường là điều không tránh khỏi trong huấn luyện mới mô hình, hay huấn luyện theo kiểu kế thừa, tuy nhiên sẽ giảm dần khi số lượng epoch tăng lên.
Như trình bày ở phần đầu, tại từng epoch của quá trình huấn luyện, mô hình sử dụng tối ưu AdamW kết hợp với OneCycleLR, theo bản chất trình tối ưu sẽ đẩy learning rate lên cao nhất, rồi giảm tuyến tính, sẽ dẫn đến có thể vượt qua quá điểm hội tụ, cộng với mô hình có gắn các Dropout sau các lớp mạng, điều này dẫn đến gây ra mô hình ở những epoch đầu không được tối ưu, hay khi đánh giá lỗi WER sẽ rất lớn, hoặc tăng đột biến. Tuy nhiên, khi lượng epoch tăng lên thì giảm thời gian tính toán và mô hình được nhanh chóng hội tụ kéo theo hệ số WER sẽ giảm, độ chính xác mô hình được tăng lên.
Từ epoch 45 trở lên các chỉ số lỗi WER gần như không khác nhau, việc này