Bài viết này là kết quả nghiên cứu của tôi nhằm cố gắng tạo ra một hệ thống nhận diện giọng nói tiếng Việt offline trước thực trạng các công nghệ hiện tại chưa có hoặc chưa đủ đáp ứng nhu cầu nhận diện giọng nói sử dụng khi không có kết nối Internet.
Thực trạng
Trước đây, mình tìm kiếm một hệ thống nhận dạng giọng nói Tiếng Việt miễn phí để nghiên cứu. Các hệ thống này hầu hết đều cho dùng thử hoặc bị giới hạn và hầu hết chúng đều thông qua API dưới dạng JSON. Tuy nhiên, thời gian phản hồi trả lại kết quả từ các API này khá chậm. Nếu mà so sánh với Google Translate thì tốc độ nhận dạng chênh lệch rất lớn. Hơn nữa, chúng đều hoạt động online.
Bây giờ, mình cần một hệ thống nhận diện giọng nói tiếng Việt offline không sử dụng Internet và ai, công cụ nào sẽ đáp ứng được việc đó? Mình đã không tìm được các giải pháp phù hợp và hầu hết các hệ thống này đều nhận dạng giọng nói dùng cho ngôn ngữ tiếng Anh và một số ngôn ngữ khác.
Một thời gian khá dài tìm kiếm mà vẫn không có giải pháp và cũng không biết hỏi ai nên mình quyết định tự nghiên cứu một hệ thống nhận diện giọng nói tiếng Việt cá nhân để bản thân sử dụng nhận diện Offline. Tất nhiên nếu bạn có tiền thì sẽ có nhiều công cụ hỗ trợ bạn nhận diện giọng nói tiếng Việt offline, còn trong trường hợp này mình là sinh viên nên sẽ làm nghiên cứu luôn để tự dùng và đáp ứng các nhu cầu cá nhân.
Sơ đồ Spectrogram “Xin chào”
Nhật ký nghiên cứu
Nghiên cứu và chuẩn bị trước đó 1 tuần trước ngày 15/05/2021
Bài ghi chú lúc 10:56 phút sáng 16/5/2021.
Ghi chú quá trình nghiên cứu chương trình bot command, nhận lệnh xử lý bằng tiếng Việt offline. Mình đã bắt đầu nghiên cứu được khoảng 1 tuần nay và quyết liệt nhất từ hôm 15/5 hầu như cả ngày ngồi research và hôm nay là 16/5.
Ý tưởng này mình đã nghĩ ra được khá lâu sau khi đã thực hiện dự án FaceDia, lúc đầu thử nghiên cứu nhưng thất bại và không thành công, tỉ lệ tranning ML (Machine Learning) vô cùng thấp. Song, không bỏ cuộc, quyết biến nó thành đồ án nghiên cứu đầu tiên của bản thân.
Mình tiến hành nghiên cứu các đồ thị âm thanh, lúc đầu không biết từ khóa là gì nên cứ mò và rồi tra cứu ra từ khóa waveform, từ đó làm nền tảng để tra cứu ra thêm nhiều loại biểu đồ âm thanh khác.
Biểu đồ Waveform
Lúc bắt đầu mình đã thực hiện với Javascirpt để hiển thị biểu đồ Waveform lúc này thử nghiệm khá ổn nhưng vì ở dạng Javascipt nên khó xử lý sâu nên tạm gác lại và tìm giải pháp trên phần mềm bằng C# hoặc VB.NET.
Cuối cùng, tìm ra được cách vẽ đồ thị dạng Waveform trên VB.NET không dùng thư viện. Tuy nhiên, độ chi tiết của nó không đủ để đáp ứng quá trình ML Tranning so với bên Javascript. Nên quyết định tìm kiếm giải pháp khác và tìm ra thư viện NAudio trên với nhiều mẫu đồ thị do thư viên cung cấp. Tuy nhiên, đó là các kiểu khác nhau của Waveform nên vẫn không phù hợp lắm. Mình đã thử các kiểu đồ thị đó để tranning nhưng kết quả không khả thi và kết quả nhận dạng sai cao nên mình quyết định tìm cách khác (biểu đồ khác) và cuối cùng tìm ra được một loại biểu đồ quan trọng trong thư viện NAudio.
Lựa chọn tiếp theo là sơ đồ Spectrogram, nó đã đập vào mắt mình (mình đã nghĩ mày là thứ tao đang tìm) và mình đã chọn nó vì nhìn nó khả thi hơn các loại sơ đồ khác và tiến hành nghiên cứu thử nghiệm. Mình quên đề cập đến ứng dụng com.fragileheart.recorder, nó đã hỗ trợ mình ghi âm giọng nói với bộ lọc tạp âm để mình dung làm âm thanh gốc để tranning dữ liệu.
Biểu đồ Spectrogram
Tiến hành tạo dataset (thật ra các bước thử nghiệm trên đã tạo và cái này mới mãnh liệt nhất), ban đầu cho mỗi mục đào tạo khoảng 25 file (đã thử cách cải tiến dữ liệu như bên FaceDia nhưng không phù hợp với giải pháp này) rồi lên 50 files 125 rồi lên đến 180 files đến bây giờ.
Các file âm thanh sau khi ghi sẽ được chuyển sang máy tính và dùng tool đã tạo chuyển sang sơ đồ dạng Spectrogram. Chúng ta tiến hành chuyển âm thanh sang dạng ảnh để tiến hành tranning cho máy học, cuối cùng kết quả đạt được đáng kinh ngạc. Tỉ lể nhận dạng đến 95%!! Cao nhất trong tất cả các loại biểu đồ khác đã thử nghiệm. Sau khi thử nghiệm xong, tiến hành tạo các file âm thanh mới và chuyển thành sơ đồ Spectrogram để nhận dạng và kết quả thành công. Nhưng đến đây lại gặp một vấn đề khác.
Mình cảm thấy không thể phụ thuộc mãi vào ứng dụng bên thứ 3 là com.fragileheart.recorder nên mình quyết định viết một chương trình riêng để tự phục vụ tốt hơn.
Sử dụng tool đã viết để ghi âm và tạo ảnh sơ đồ Spectrogram không cùng định dạng nên tỉ lệ nhận dạng sai cao, không lẽ bây giờ phụ thuộc vào ứng dụng com.fragileheart.recorder để ghi âm và lấy âm thanh từ nó để xử lý, quá rườm rà đi?
Cảm thấy không được, nên quyết định phân tích file âm thanh tạo ra từ ứng dụng kia và phân tích tích các thông số để record tạo ra file có cùng định dạng, khi tìm kiếm mình đã search từ khóa “bit rates 705kbps” và cuối cùng cũng có kết quả, mình đã tìm ra cách ghi âm ở cùng định dang bit rates đó, vì mình đã thử trước đó là 88kbps, 1145kbps, nhưng vẫn chưa hiểu sao cho ra 705kbps đúng kiểu ứng dụng kia tạo ra và search phía trên đã ra được cách nhờ một trang web forum của Nga.
Cuối cùng thành công và đạt được kết quả nghiên cứu như mong đợi, bây giờ từ phần lõi này tiến hành nghiên cứu nâng cao lên.
Bản ghi chú lúc 5:15 chiều ngày 18/05.2021.
Sau khi nghiên cứu thành công các bước trước, ngày 17, 18 tiếp tục thêm dataset và cải tiến chất lượng dữ liệu để nâng cao mức độ nhận dạng. Do Machine Learning phụ thuộc vào cấu hình máy tính nên quá trình tranning dữ liệu diễn ra chậm. Vì vậy, quá trình kiểm tra thử dữ liệu cũng trì hoãn theo.
Bài ghi chú lúc 9h40 pm gày 20/05/2021
Tiếp tục tranning để cải tiến bộ dữ liệu, kết quả nhận thấy dữ liệu thêm nhiều nhưng quá trình tranning thời đã giảm đi đáng kể so với các ngày trước đó, thay vì lúc trước training dữ liệu mất từ 7 đén 8 giờ thì nay còn chưa đến một giờ với hơn 17 nghìn tấm ảnh dataset. Gần như kết quả nhận dạng và test gần như đúng đạt mức cao trên 90% (đạt yêu cầu).
Bài ghi chú lúc 9:33 am 22/05/2021
Đã hiểu được cách hoạt động và nghiên cứu thành công, bây giờ chỉ cần cải tiến dataset để nâng cáo khả năng nhận dạng. Bài nghiên cứu tạm dừng tại đây.
Kết thúc nhật ký nghiên cứu.
Kết quả sản phẩm nghiên cứu
Tóm tắt nghiên cứu
Công nghệ sử dụng chủ yếu trong nghiên cứu: Tensorflow, .NET, NAudio Library.
Số dataset sử dụng: >30.000 files ~ 2.07GB
Thời gian nghiên cứu: Khoảng 1,5 tuần (hoạt động với công suất cao)
Nhận xét và tự đánh giá:
Thay vì sử dụng tệp nhị phân để training thì với khả năng của sinh viên, sử dụng hình ảnh để dễ dàng phân loại và traning dữ liệu cho hệ thống nhận diện tiếng Việt offline bằng cách sử dụng Tensorflow để học máy. Kết quả nghiên cứu đạt được là một hệ thống nhận diện được tiếng Việt theo các câu chữ được đào tạo theo mẫu và có thể áp dụng cho nhiều ngôn ngữ khác ngoài tiếng Việt. Sản phẩm nghiên cứu cho thấy độ nhạy cao khi nhận diện dao động từ 80-90%.
Bài nghiên cứu này được thực hiện với tư cách là một sinh viên và nó không đáng là bao so với những nghiên cứu về giọng nói và các công nghệ hiện có. Tôi chỉ muốn chia sẻ thành quả nghiên cứu của mình để nhiều người tham khảo và phục vụ cho các yêu cầu khác nhau của họ.
Vài tháng sau đó, sản phẩm này tôi đã đi mang tham gia cuộc thi nghiên cứu khoa học FPT Edu Research Festival 2021, bạn có thể xem thành quả của nghiên cứu tại đây: Thư viện VoiceNET dễ dàng tạo chức năng Voice Command Control C#
Cảm ơn bạn đã đọc bài nghiên cứu của tôi.
Xem thêm: Hướng dẫn triển khai ASP.NET lên Heroku bằng Docker