Phác họa bài post:
⓪
Vì sao đặt tiêu đề là Speech_To_Text++?
①
Reminders
②
Wav2vec: Pre-training: mã hóa “sóng âm thanh lời nói” thành “véc-tơ”
③
Whisper: huấn luyện Speech_To_Text với nhãn trôi nổi trên Internet
④
Trải nghiệm Speech_To_Text
~
Để 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.
1.
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.
2.
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.
3.
Đâ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.
4.
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:
1.
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”.
2.
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.
-
(\_/)
(
•_•)
/
>☕