Để giúp anh/chị quyết định có đọc tiếp hay không, tôi xin phép cung cấp các thông tin liên quan đến bài post này như sau:
- Chủ đề: Machine Learning.
- Tính thời sự: Tháng 09/2022.
- Thời gian đọc: đọc ý chính: 5 phút, đọc hết: 12 phút.
⓪ Vì sao đặt tiêu đề là Speech_To_Text++?
Tôi tin rằng trên diễn đàn này, tất cả chúng ta đã từng ít nhất một lần lập trình bằng ngôn ngữ C (ngôn ngữ do Dennis Ritchie sáng tạo ra vào những năm 1970). Và tất nhiên chúng ta biết rõ phép toán ++, bao gồm phép toán tiền tố (prefix) ++var và phép toán hậu tố (postfix) var++. Nếu anh/chị đã biết C thì hẳn nhiên là anh/chị biết ngôn ngữ lập trình C++ do Bjarne Stroustrup tạo ra từ những năm 1980. Cái làm tôi chú ý đến là cách đặt tên ngôn ngữ C++. Quả thực cách đặt tên này rất ấn tượng! ‘C++’ gồm ‘C’ và ‘++’. Nghĩa là ngôn ngữ ‘C++’ gồm gốc là ‘C’, thêm vào hậu tố ‘++’. Chúng ta ai cũng biết ngôn ngữ C++ gồm tất cả các đặc tính của C, phần thêm vào chủ yếu là cấu trúc ‘Class’ (Lúc đầu Bjarne Stroustrup định đặt tên ngôn ngữ là “C with Classes“.)
–
Bắt chước các bậc tiền bối lừng danh, tôi đặt tiêu đề bài post này là Speech_To_Text++. Vì sao vậy? Lý do là trước đây tôi đã post một đàm luận với tựa đề Speech-to-text (Giọng nói-thành-văn bản) vào ngày 30/06/2021 (anh/chị có thể đọc lại bài đó ở đây). Bài post lần này tôi chỉ cập nhật thêm một vài xu hướng mới xuất hiện gần đây về cùng chủ đề, chưa được cập nhật lần trước. Để cho chặt chẽ, không bị bug khi “run” chương trình, tôi đổi Speech-to-text thành Speech_To_Text (dấu ‘-‘ được đổi thành gạch dưới ‘_’) để đảm bảo chắc chắn Speech_To_Text là một biến (variable) chứ không phải là một biểu thức (expression) Speech-to-text. Tôi không sử dụng tên viết tắt STT, vì trong lập trình, việc đặt tên biến quá ngắn dễ gây hiểu nhầm, thường được coi là bad naming convention!
→🗎
① Reminders
Trước khi đi vào chủ đề chính, tôi xin phép anh/chị nhắc lại một vài điểm cơ bản về nghiên cứu chuyển đổi “giọng nói-thành-văn bản” (speech-to-text) và một số xu hướng mới xuất hiện gần đây về mạng nơ-ron (neural networks).
◉ Hướng tiếp cận. Đối với Speech-to-text, một cách nôm na tôi chia thành 2 hướng tiếp cận gọi là “kinh điển” và “tân tiến”.
Kinh điển: Người ta tìm cách tối ưu hóa mô hình âm thanh (acoustic model), mô hình phát âm (pronunciation model) và mô hình ngôn ngữ (language model). Các mô hình này được tối ưu hóa một cách độc lập. Điển hình cho cách tiếp cận này là mô hình Markov ẩn (Hidden Markov Model – HMM).
Tân tiến (sequence-to-sequence): Cách tiếp cận này lấy đầu vào là “chuỗi tín hiệu âm thanh” và đầu ra là “chuỗi văn bản”. Chú ý rằng “tín hiệu âm thanh” là một chuỗi các tín hiệu theo thứ tự âm thanh giọng nói phát ra (x1, x2, …, xN) và văn bản cũng là một chuỗi các từ (y1, y2, …, yM) phiên âm từ chuỗi âm thanh.
Đối với các anh/chị có thời gian theo dõi các nghiên cứu về Machine Translation (dịch máy) trong khoảng thời gian 2012-2015, sau một vài thử nghiệm và mày mò, cộng đồng Machine Learning nhanh chóng nhận ra một cơ chế rất đơn giản nhưng đem lại hiệu quả bất ngờ, đó là:
Mã hóa(x1, x2, …, xN) → [Context] → Giải mã(Context) → (y1, y2, …, yM)
Context là gì mà thần kỳ vậy? Rất đơn giản và dễ hiểu: context chỉ là véc-tơ (mảng) d chiều! Đặc biệt, sau khi bài báo về cơ chế attention (đăng tháng 9/2014, “dóng hàng” yj với xi) thì gần như hầu hết các nghiên cứu “đổ xô” vào hướng nghiên cứu này (sequence-to-sequence).
Ưu điểm nổi bật của cách tiếp cận sequence-to-sequence là “thuật toán” chỉ phụ thuộc duy nhất vào “dữ liệu”. Khi dung lượng dữ liệu đủ lớn, đủ bao phủ thì bản thân nó chứa nội hàm của vấn đề, không cần đến các nghiên cứu phức tạp khác. Đây là điểm bất ngờ nhưng vô cùng thú vị đối với cộng đồng Machine Learning.
–
◉ Thước đo chất lượng mô hình. Trong nghiên cứu các mô hình nói chung và trong nghiên cứu speech-to-text nói riêng, người ta cần một thước đo chất lượng mô hình. Cộng đồng nghiên cứu đề xuất khá nhiều thước đo khác nhau nhưng cho đến thời điểm của bài viết này thì chỉ có thước đo WER là được chấp nhận một cách rộng rãi.
Vậy thước đo WER là gì? WER là viết tắt của Word Error Rate (Tỷ lệ từ lỗi). Về bản chất, thước đo này đo mức độ chênh lệch của “văn bản do mô hình dự đoán” so với “văn bản phiên âm của kho ngữ liệu”. Chúng ta phải coi “văn bản phiên âm của kho ngữ liệu” là đúng 100%.
Thước đo này được tính theo công thức: WER = (S + D + I) / N
Trong đó:
S: là số lượng các từ bị thay thế (bản dự đoán so với bản gốc)
D: là số lượng các từ bị hủy (tức là bản dự đoán không có các từ này, vốn phải có trong bản gốc)
I: là số lượng các từ thêm vào (không có trong bản gốc)
N: số các từ trong bản gốc
Một cách cô đọng: WER là tỷ lệ “số từ lỗi” trên “tổng số từ đúng” trong bản gốc. WER càng thấp (ít lỗi) thì chất lượng mô hình càng cao.
–
◉ Pre-training / Fine-tuning. Lại nói về việc huấn luyện các mô hình: trong thời gian gần đây, người ta chia việc huấn luyện mô hình thành 2 bước: Pre-training và Fine-tuning.
Pre-training: Người ta chọn một mô hình có tính bao quát nhất về vấn đề cần quan tâm và huấn luyện mô hình với tập dữ liệu mẫu cực lớn. Mô hình Upstream (thượng nguồn) này mang tính tổng quan có thể áp dụng cho nhiều tác vụ khác nhau.
Fine-tuning: Đối với từng tác vụ (task) người ta lấy một bộ mẫu dữ liệu dán nhãn (mang đặc trưng của tác vụ đó) rồi huấn luyện tiếp. Bước này gọi là tinh chỉnh (fine-tuning).
Có thể hiểu Pre-training là học kiến thức phổ thông, cơ bản còn Fine-tuning là học kiến thức đặc thù riêng theo từng lĩnh vực.
–
◉ In-context learning (xem GPT-3). Chúng ta có thể hiểu khái niệm này là học (huấn luyện) theo ngữ cảnh. Có cả thảy 4 loại ngữ cảnh:
Fine-Tuning: Trường hợp này mô hình cần hàng nghìn đến hàng trăm nghìn mẫu dữ liệu có dán nhãn để điều chỉnh trọng số (weight) trước khi đi vào thực tế sử dụng.
Few-Shot: Trường hợp này mô hình cần K mẫu demo nhưng không được phép điều chỉnh trọng số. K nằm trong khoảng 10-100. K mẫu này dùng để làm gì? Chỉ là để cho máy “nhận dạng tác vụ”. Sau khi nhận dạng tác vụ, máy sẽ suy diễn (cho kết quả) theo đặc điểm của tác vụ đó.
One-Shot: Tương tự như Few-Shot nhưng trong trường hợp này, máy chỉ cần 1 mẫu demo để “nhận dạng tác vụ”.
Zero-Shot: Không cần mẫu demo mà vẫn biết được tác vụ. Tức là máy không cần huấn luyện gì thêm mà vẫn có khả năng suy diễn.
Cộng đồng nghiên cứu Machine Learning nhanh chóng chấp nhận các khái niệm Few-Shot, One-Shot và Zero-Shot do OpenAI đề xuất và coi chúng là các thước đo chất lượng bước Pre-training của mô hình.
→🗎
② Wav2vec: Pre-training: mã hóa “sóng âm thanh lời nói” thành “véc-tơ”
Tham chiếu chính cho phần đàm luận này là 2 bài báo về cùng một hướng nghiên cứu của Meta AI (trước đây là Facebook AI):
- Bài 1 (đăng ngày 11/04/2019): wav2vec: Unsupervised Pre-training for Speech Recognition.
- Bài 2 (đăng ngày 20/06/2020): wav2vec 2.0: A Framework for Self-Supervised Learning of Speech Representations.
Ý tưởng chính của hướng nghiên cứu này là gì? Có thể hiểu một cách đơn giản như thế này: bước Pre-training sử dụng dữ liệu không dán nhãn và bước Fine-tuning sử dụng dữ liệu có dán nhãn. Các bài báo thường gọi cách tiếp cận này là semi-supervision (bán giám sát) vì nó vừa có huấn luyện không nhãn ở bước Pre-training (unsupervised training) vừa có huấn luyện sử dụng nhãn ở bước Fine-tuning (supervised training).
Pre-training: Người ta mã hóa sóng âm thanh thành véc-tơ trong không gian N chiều. Việc này tương tự như cách tiếp cận của word2vec: mã hóa một “từ” thành một véc-tơ. Cách làm: họ chia đoạn sóng âm thanh thành dãy các đoạn chia đều theo thời gian và mã hóa các đoạn này thành véc-tơ (điểm) trong không gian N chiều. Pre-training không có phần giải mã. Sau bước này, mô hình tạo thành một biểu diễn ẩn (latent representation) thường ký hiệu là context.
Vậy mục tiêu của phần huấn luyện này là gì? Pre-training về cơ bản là huấn luyện cho mô hình hiểu rõ hơn về các “dạng sóng” liên quan đến “lời nói”. Chúng ta có thể hiểu một cách nôm na quan hệ (“dạng sóng” – “lời nói”) chính là context. Chú ý rằng context không phải là văn bản.
Dưới góc độ toán học, chúng ta có thể hiểu đây là phép nhúng “sóng âm thanh” thành điểm trong không gian N chiều. Trong không gian này, các điểm “sóng âm thanh” tương tự nhau sẽ đứng cạnh nhau, còn các điểm “sóng âm thanh” khác nhau sẽ đứng xa nhau. Đại ý thế.
Fine-tuning: Ở bước này, người ta huấn luyện với tập dữ liệu có dán nhãn:
“Âm thanh câu nói” → “Văn bản phiên âm”.
Căn cứ vào kết quả Pre-training, chúng ta có thể triển khai phần dán nhãn thành:
“Âm thanh câu nói” → Context → “Văn bản phiên âm”.
Chú ý rằng phần “Âm thanh câu nói” → Context đã được huấn luyện ở bước Pre-training. Bước này chỉ huấn luyện mạng Context → “Văn bản phiên âm”. Bước này thường được gọi là decoder (giải mã).
–
Ưu điểm của cách tiếp cận này là gì?
Ưu điểm thứ nhất: tiết kiệm nguồn lực xây dựng kho ngữ liệu. Muốn xây dựng kho ngữ liệu có phiên âm (dán nhãn) cần rất nhiều nguồn lực.
Lấy ví dụ về kho ngữ liệu TIMIT: Có 630 người nói, 8 phương ngữ (dialect), mỗi người nói 10 câu, tổng thời lượng khoảng 5.4 giờ, ngân sách dự án khoảng 1.5 triệu USD. Toàn bộ cơ sở dữ liệu đều được kiểm tra cẩn thận một cách thủ công. Kho ngữ liệu này thuộc loại bé nhất và chỉ dùng được để huấn luyện Speech-to-text cho tiếng Anh.
Trong bước Pre-training của wav2vec, kho ngữ liệu không cần phiên âm (không dán nhãn). Ngữ liệu loại này có rất nhiều và dễ thu thập. Sang bước Fine-tuning, wav2vec cần rất ít ngữ liệu, ít hơn hàng chục lần, hàng trăm lần so với các phương pháp khác mà vẫn đạt được WER tương đương hoặc thấp hơn.
Ưu điểm thứ hai: có thể áp dụng cho nhiều ngôn ngữ và nhiều phương ngữ (dialect). Có thể coi bước Pre-training là bước xây dựng nền tảng cho một ngôn ngữ/phương ngữ. Chỉ cần thu thập các bản ghi âm của một ngôn ngữ/phương ngữ và huấn luyện Pre-training là được cấu trúc phát âm (Context) của ngôn ngữ/phương ngữ đó. Người ta ước tính hiện nay có 7,000 ngôn ngữ trên thế giới. Chỉ có cách tiếp cận tương tự như wav2vec thì mới có hy vọng giải quyết vấn đề cho chừng ấy ngôn ngữ.
–
Lấy nguồn cảm hứng từ cách tiếp cận của wav2vec, một nhóm nghiên cứu ở Google, ngày 27/09/2021 đăng bài báo khoa học với tựa đề: BigSSL: Exploring the Frontier of Large-Scale Semi-Supervised Learning for Automatic Speech Recognition.
Họ đã làm gì với Pre-training và Fine-tuning theo cách tiếp cận của wav2vec?
- Pre-training: huấn luyện không giám sát (không dán nhãn) với thời lượng 1,000,000 giờ (một triệu giờ)! Kho ngữ liệu được lọc từ YouTube.
- Fine-tuning: huấn luyện có giám sát (có dán nhãn) với thời lượng 35,000 giờ (ba mươi lăm nghìn giờ). Kho ngữ liệu được lọc từ Voice Search của Google Search.
Có lẽ chỉ có các công ty “Giant Tech” cỡ như Google mới lấy được một lượng ngữ liệu khổng lồ như thế, được trích ra từ chính hạ tầng của họ.
–
→🗎
③ Whisper: huấn luyện Speech_To_Text với nhãn trôi nổi trên Internet
Tham chiếu chính cho phần đàm luận này là bài báo về một hướng nghiên cứu của OpenAI đăng ngày 21/09/2022: Robust Speech Recognition via Large-Scale Weak Supervision.
Ý tưởng chính của hướng nghiên cứu này là gì? Là tận dụng các bản phiên âm có sẵn trên Internet do người dùng đăng công khai. Kho ngữ liệu được lấy từ các video clips / ghi âm có thuyết minh (phiên âm). Tất nhiên kho ngữ liệu dạng này không tuân theo một chuẩn nhất định nào cả. Thêm nữa, các bản thuyết minh (phiên âm) thường không chắc đúng 100%, nhiều đoạn lệch đồng bộ giữa âm thanh lời nói và phiên âm. Tôi gọi ngữ liệu dạng này là “dữ liệu dán nhãn trôi nổi trên Internet”. Trong bài báo, người ta gọi là “weak supervision” (giám sát yếu / giám sát lỏng).
Để phục vụ nghiên cứu, Whisper chia mô hình thành 5 kích cỡ (size): (ký hiệu M = triệu tham số)
- Tiny (39M),
- Base (74M),
- Small (244M),
- Medium (769M)
- Large (1550M)
Size lớn thì chất lượng mô hình thường tốt hơn (đồng nghĩa với WER thấp).
–
Nhóm nghiên cứu OpenAI đã tích hợp vào Whisper một vài tính năng hấp dẫn. Đó là Multi-lingual và Multi-task.
Multi-lingual. Mô hình Whisper có tích hợp đa ngữ. Nghĩa là ngoài tiếng Anh, Whisper còn có khả năng nhận dạng giọng nói một số ngôn ngữ khác, 96 ngôn ngữ, trong đó có tiếng Việt. Rất hấp dẫn, đúng không anh/chị? Chất lượng nhận dạng giọng nói các ngôn ngữ này không đồng đều, phụ thuộc vào số giờ được huấn luyện. Chất lượng nhận dạng giọng nói tiếng Việt của Whisper có thể đạt đến WER=10.7%.
Multi-task. Một điểm đặc biệt nữa của Whisper: mô hình này có tính đa nhiệm. Whisper lồng ghép các tác vụ: nhận dạng ngôn ngữ, xử lý đa ngữ, dịch từ phiên âm. Các mô hình khác thường single-task (đơn nhiệm). Trong trường hợp nhận dạng giọng nói, các mô hình đó chỉ có một tác vụ duy nhất là biến đổi “đoạn âm thanh giọng nói” thành “đoạn văn bản”.
–
Hãy điểm qua một vài con số liên quan đến huấn luyện mô hình Whisper:
- Tổng thời lượng: 680,000 giờ (sáu trăm tám mươi nghìn giờ)
- Số ngôn ngữ: 97 (gồm tiếng Anh và 96 ngôn ngữ khác)
- Thời lượng huấn luyện 96 ngôn ngữ ngoài tiếng Anh: 117,000 giờ
- Thời lượng để huấn luyện tiếng Việt: 691 giờ
- Thời lượng để huấn luyện dịch tiếng Việt ra tiếng Anh (dịch bằng âm thanh): 1,719 giờ
–
→🗎
④ Trải nghiệm Speech_To_Text
Thưa anh/chị, khác với nhiều bài báo khác, lần này nhóm nghiên cứu mô hình Whisper cho phép người dùng trải nghiệm bằng lập trình. Họ để toàn bộ code và hướng dẫn tại https://github.com/openai/whisper. Anh/chị nào có chút thâm niên lập trình hẳn sẽ thấy phần trải nghiệm này khá dễ dàng.
Tiếp theo, tôi xin phép kể lại quá trình trải nghiệm của tôi hòng qua đó giúp anh/chị rút ra được một vài điểm hữu ích nếu anh/chị có nhã ý thử nghiệm. Nếu anh/chị không thích bị lôi kéo vào công đoạn chi tiết, anh/chị vui lòng bỏ qua phần sau.
–
Phần trải nghiệm gồm các bước cài đặt, chuẩn bị dữ liệu và thử nghiệm.
Bước 1: Cài đặt
Sau khi đọc hướng dẫn sử dụng, tôi quyết định sử dụng phần mềm Google Colab để thử nghiệm.
- Trong tài khoản Gmail, tôi mở Google Apps rồi click vào My Drive. Lúc đó, xuất hiện một Tab mới.
- Tiếp theo tôi click vào My Drive > More > Google Colaboratory. Lúc đó, một Tab mới nữa xuất hiện.
- Đây là một file Colab với tựa đề mặc định ban đầu là “Untitled0.ipynb”. Tôi sửa tên file “Untitled0.ipynb” thành “Whisper (OpenAI).ipynb”. Tôi sẽ sử dụng file này để thử nghiệm mô hình Whisper của OpenAI.
- Tiếp theo tôi cài đặt mô hình Whisper bằng cách gõ vào hai câu lệnh sau:
!pip install git+https://github.com/openai/whisper.git
!sudo apt update && sudo apt install ffmpeg
Rồi chạy 2 câu lệnh này bằng cách click vào nút ► (Run cell) ở ngay phía bên trái.
Tiếp theo, phần mềm cho biết kết quả của các câu lệnh trên. Nếu mọi chuyện êm đẹp, Colab sẽ đánh dấu tick màu xanh (✓) vào phía trái.
–
Bước 2: Chuẩn bị dữ liệu
Đến bước này, mô hình đã sẵn sàng để chạy thử. Tuy nhiên, để chạy thử, chúng ta cần cung cấp đầu vào cho mô hình: đó là file ghi âm giọng nói. Trong phần thử nghiệm, tôi ghi âm một bản tiếng Anh và một bản tiếng Việt, nhằm thử nghiệm cả tiếng Anh và tiếng Việt.
◉ Bản tiếng Anh: tôi chọn đoạn đầu trong “The Garden of Paradise” (Hans Christian Andersen) như sau:
THERE was once a king’s son who had a larger and more beautiful collection of books than any one else in the world, and full of splendid copper-plate engravings. He could read and obtain information respecting every people of every land; but not a word could he find to explain the situation of the garden of paradise, and this was just what he most wished to know. His grandmother had told him when he was quite a little boy, just old enough to go to school, that each flower in the garden of paradise was a sweet cake, that the pistils were full of rich wine, that on one flower history was written, on another geography or tables; so those who wished to learn their lessons had only to eat some of the cakes, and the more they ate, the more history, geography, or tables they knew. He believed it all then; but as he grew older, and learnt more and more, he became wise enough to understand that the splendor of the garden of paradise must be very different to all this. “Oh, why did Eve pluck the fruit from the tree of knowledge? why did Adam eat the forbidden fruit?” thought the king’s son: “if I had been there it would never have happened, and there would have been no sin in the world.” The garden of paradise occupied all his thoughts till he reached his seventeenth year.
–
Đoạn văn bản trên có 240 từ.
–
◉ Bản tiếng Việt: tôi lấy 6 câu đầu và 14 câu cuối của “Truyện Kiều” (Nguyễn Du) như sau:
Trăm năm trong cõi người ta,
Chữ tài chữ mệnh khéo là ghét nhau.
Trải qua một cuộc bể dâu,
Những điều trông thấy mà đau đớn lòng.
Lạ gì bỉ sắc tư phong,
Trời xanh quen thói má hồng đánh ghen.
…
Ngẫm hay muôn sự tại trời,
Trời kia đã bắt làm người có thân.
Bắt phong trần phải phong trần,
Cho thanh cao mới được phần thanh cao.
Có đâu thiên vị người nào,
Chữ tài chữ mệnh dồi dào cả hai,
Có tài mà cậy chi tài,
Chữ tài liền với chữ tai một vần.
Đã mang lấy nghiệp vào thân,
Cũng đừng trách lẫn trời gần trời xa.
Thiện căn ở tại lòng ta,
Chữ tâm kia mới bằng ba chữ tài.
Lời quê chắp nhặt dông dài,
Mua vui cũng được một vài trống canh.
–
Đoạn thơ ghép ở trên có 140 từ.
–
Tiếp theo, tôi tự đọc các đoạn văn và ghi âm:
- Bản tiếng Anh tôi dùng phần mềm “Voice Recorder” trên “Windows 10” và ghi thành file “The Garden of Paradise.m4a”.
- Bản tiếng Việt tôi dùng phần mềm “Voice Memo” trên “iPhone 5s” và ghi thành file “Truyện Kiều trên iPhone.m4a”.
Bước 3: Thử nghiệm
Trước khi chạy mô hình Whisper, chúng ta cần tải các file âm thanh lên phiên làm việc (session) của Google Drive. Click nút Upload file và đợi một lúc cho đến khi thấy tên file xuất hiện ở phần file của Google Drive (gồm các file: “The Garden of Paradise.m4a” và “Truyện Kiều trên iPhone.m4a”).
Để phiên âm bản tiếng Anh, đầu tiên tôi dùng câu lệnh mặc định là:
!whisper “The Garden of Paradise.m4a”
Câu lệnh trên sử dụng mô hình mặc định là –Model Small.
Kết quả được màn hình sau:
[00:00.000 –> 00:10.320] There was once a king’s son who had a larger and more beautiful collection of books than
[00:10.320 –> 00:18.560] anyone else in the world, and full of splendid copper-blade engravings.
[00:18.560 –> 00:26.760] He could read and obtain information respecting every people of every land, but not a word
[00:26.760 –> 00:34.120] could he find to explain the situation of the Garden of Paradise, and this was just
[00:34.120 –> 00:37.400] what he most wished to know.
[00:37.400 –> 00:45.160] His grandmother had told him when he was quite a little boy, just all he had to go to school,
[00:45.160 –> 00:53.280] that each flower in the Garden of Paradise was a seed pick that his tillers were full
[00:53.280 –> 01:03.040] of reswine, that on one flower history was written on another geography or tables, so
[01:03.040 –> 01:11.280] those who wished to learn their lessons had only to eat some of the cakes, and the more
[01:11.280 –> 01:20.080] they ate, the more history, geography or tables they knew, he believed it all of them, whereas
[01:20.080 –> 01:28.360] he grew older and learned more and more, he became wise enough to understand that the
[01:28.360 –> 01:34.840] splendor of the Garden of Paradise must be very different to all this.
[01:34.840 –> 01:43.760] Oh, why did Eve pluck the fruit from the tree of knowledge, why did Adam eat the forbidden
[01:43.760 –> 01:51.800] fruit, thought he the king’s son, if I had been there, it would never have happened,
[01:51.800 –> 01:59.200] and there would have been no sin in the world, the Garden of Paradise occupied all his thoughts
[01:59.200 –> 02:14.440] till he reached his 17th year.
Phần chữ màu đỏ là do tôi đánh dấu một cách thủ công các từ mà Whisper nhận dạng nhầm. Từ đó tôi tính ra được WER = 16/240 ≈ 6.66%.
–
Được biết, Whisper có các mô hình dành riêng cho tiếng Anh nên tôi quyết định thử nghiệm câu lệnh sau:
!whisper “The Garden of Paradise.m4a” –model small.en
Câu lệnh trên sử dụng mô hình kích cỡ Small.en – là mô hình kích cỡ nhỏ chỉ dành riêng để nhận dạng giọng nói tiếng Anh.
Kết quả được màn hình sau:
[00:00.000 –> 00:10.320] There was once a king’s son who had a larger and more beautiful collection of books than
[00:10.320 –> 00:18.560] anyone else in the world and full of splendid copper plate engravings.
[00:18.560 –> 00:26.760] He could read and obtain information respecting every people of every land, but not a word
[00:26.760 –> 00:34.120] could he find to explain the situation of the Garden of Paradise, and this was just
[00:34.120 –> 00:37.400] what he most wished to know.
[00:37.400 –> 00:45.480] His grandmother had told him when he was quite a little boy, just old enough to go to school.
[00:45.480 –> 00:53.520] Each flower in the Garden of Paradise was a sheet cake that his stills were full of
[00:53.520 –> 01:03.760] re-swine, that on one flower history was written on another geography of tables, so those who
[01:03.760 –> 01:12.360] wished to learn their lessons had only to eat some of the cakes, and the more they ate,
[01:12.360 –> 01:20.360] the more history, geography of tables they knew, he believed it all again, whereas he
[01:20.360 –> 01:29.720] grew older and learned more and more, he became wise enough to understand that the splendor
[01:29.720 –> 01:34.840] of the Garden of Paradise must be very different to all this.
[01:34.840 –> 01:41.360] Oh, why did Eve pluck the fruit from the tree of knowledge?
[01:41.360 –> 01:49.320] Why did Adam eat the forbidden fruit, thought he the king’s son, if I had been there it
[01:49.320 –> 01:56.120] would never have happened, and there would have been no sin in the world, if Adam of
[01:56.120 –> 02:19.760] Paradise occupied all his thoughts till he reached his 17th year.
Phần chữ màu đỏ là do tôi đánh dấu một cách thủ công các từ mà Whisper nhận dạng nhầm. Từ đó tôi tính ra được WER = 9/240 ≈ 3.75%.
–
Để phiên âm bản tiếng Việt (“Truyện Kiều trên iPhone.m4a”), tôi chỉ định size của mô hình là Medium (kích cỡ trung bình):
!whisper “Truyện kiều trên iPhone.m4a” –model medium
Và được kết quả như sau:
Detecting language using up to the first 30 seconds. Use `–language` to specify the language
Detected language: Vietnamese
[00:00.000 –> 00:22.000] Trăm năm trông có người ta, chữ tài chữ mệnh, khéo là ghét nhau, trải qua một cuộc bể dâu những điều trông thấy mà đau lớn lòng, lạ gì bị sắc tư phong, trời xanh quen thói mà hồng đánh ghen.
[00:22.000 –> 00:34.000] Ngẫm hay muôn sự tại trời, trời kia đã bắt làm người có thân, bắt phong trần phải phong trần, cho thanh cao mới được phần thanh cao.
[00:34.000 –> 00:53.000] Có đâu thiên vị người nào chữ tài chữ mệnh rồi rào cả hai. Có tài mà cậy chi tài, chữ tài liền với chữ tài một vần, đã mang lễ nghiệp vào thân, cũng đừng chét lẫn trời gần trời xa.
[00:53.000 –> 01:08.000] Thiện căn ở tại lòng ta, chữ tâm kia mới bằng ba chữ tài, lời khuya chắp nhặt, rông dài, mưa vui cũng được một vài trống canh.
Chú ý: Lần này Whisper nhận dạng được ngôn ngữ cần phiên âm (Detected language: Vietnamese). Và để nhận dạng được ngôn ngữ, Whisper cần đến 30 giây của của bản ghi âm.
Phần chữ màu đỏ là do tôi đánh dấu một cách thủ công các từ mà Whisper nhận dạng nhầm. Từ đó tôi tính ra được WER = 11/140 ≈ 7.8%.
–
Bên lề ▼
Khuyến nghị: Có lẽ cách hữu hiệu nhất để trải nghiệm Whisper là chạy chương trình trên Colab. Anh/chị xem phần giới thiệu về Colab ở đây: https://colab.research.google.com/
Colab là gì, một cách cô đọng? Là anh/chị lập trình trên một trang Web và phần mềm chạy trên điện toán đám mây của Google. Hoàn toàn miễn phí! Cấu hình máy của anh/chị dù có yếu đến đâu cũng chạy được, miễn là máy có kết nối Internet.
Bên lề ▲
–
Bài nhàn đàm lần này xin kết thúc ở đây. Trước khi kết thúc, lại một lần nữa, tôi nhờ chú thỏ “ảo” mời anh/chị thưởng thức một cốc cà phê cũng “ảo” đặt cạnh cốc cà phê “thật” của anh/chị và mong cái “ảo” sẽ làm cho cái “thật” thi vị như những câu thơ mở và kết “Truyện Kiều” của đại thi hào Nguyễn Du.
Tác giả: Lê Văn Lợi (nguyên Viện trưởng Viện tin học doanh nghiệp – VCCI)