2022/12/30

☕ Nhàn đàm ICT: NFT (Non-Fungible Token)

Phác họa bài post:

Blockchain

Cryptocurrency wallet (ví tiền ảo)

Smart contract

NFT (Non-Fungible Token)

Làm thế nào để tạo ra NFT?

-

Chủ đề lần này tôi xin phép nhàn đàm cùng anh/chị là NFT (Non-Fungible Token). Vì chúng ta đều là dân kỹ thuật nên tôi xin phép giãi bày “đầu đuôi ngọn ngành” tường tận để anh/chị hiểu bản chất của NFT. Hy vọng sau khi nhâm nhi cà phê, đọc hết bài post này, anh/chị sẽ có ngẫu hứng biến các tác phẩm nghệ thuật số của mình thành các NFT và đưa lên sàn trưng bày cho cryptographic assets metaverse cùng thưởng ngoạn.

Để 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ủ đề: Blockchain, Cryptocurrency.

·       Tính thời sự: Tháng 09/2022.

·       Thời gian đọc: 8 phút.

Blockchain

Ngược dòng thời gian, ngày 27/03/2018, tôi có bài đàm luận trên diễn đàn này với tựa đề “Bitcoin, Blockchain & Satoshi Nakamoto ₿” (anh/chị có thể xem lại tại đây). Trong bài đó, chủ yếu tôi đàm luận về bài viết của Satoshi Nakamoto: “Bitcoin: A Peer-to-Peer Electronic Cash System” (https://bitcoin.org/bitcoin.pdf). Có thể nói Satoshi Nakamoto “một mình” đã khởi xướng ra hệ thống tiền điện tử - tiền mã hóa (cryptocurrencies) và khái niệm Blockchain cho cả thế giới sử dụng rồi sau đó dần rút lui và “biến mất”. Nếu anh/chị có thời gian đọc bài báo thì sẽ thấy tính cô đọng của bài viết, tôi có cảm giác không thể viết ngắn hơn được nữa: 8 trang bài viết + 1 trang tham chiếu.

-

Mục tiêu của Satoshi Nakamoto là tạo ra hệ thống tiền điện tử mà người bán và người mua giao dịch trực tiếp với nhau, không cần thông qua một đơn vị trung gian. Thách thức lớn nhất là làm thế nào để giải quyết vấn đề “double spending”: nghĩa là cùng một lượng tiền người ta chi trả nhiều lần cho nhiều người thì sao? Satoshi Nakamoto cho rằng cách duy nhất để giải quyết vấn đề này là tất cả các bên tham gia vào hệ thống đều có sổ cái (ledger) ghi lại toàn bộ các giao dịch. Ai cũng có sổ cái và tất cả các sổ cái đều giống nhau. Hệ thống hoạt động dựa trên mạng lưới các “nút” (Node) giao dịch trên mạng. Các nút này thực chất là các máy tính có kết nối Internet.

-

Satoshi Nakamoto đưa ra một ý tưởng mới gọi là block chain (trong bài báo, hai từ này được viết rời nhau) - tạm dịch là “các khối xâu chuỗi với nhau”. Các khối này liên kết với nhau theo trục thời gian: cứ khoảng 10 phút sinh ra một khối mới. Khối sau được sinh ra liên kết với tất cả các khối trước đó theo một quy tắc nhất định, chứ không phải sinh ra một cách bất kỳ. Tất cả các giao dịch mới đều được đặt vào khối phát sinh sau cùng. Sau khi có khối mới đã phát sinh thì hệ thống “khóa sổ” các khối trước đó.

Cách các khối liên kết với nhau theo trục mốc thời gian

(Hình ảnh được lấy từ bài báo của Satoshi Nakamoto)

Bên lề Thời gian sinh ra một block mới

- Đối với Blockchain của Bitcoin, thời gian phát sinh một khối (block) mới theo quy ước là 10 phút. Tất nhiên, con số này không hẳn là chính xác tuyệt đối, có thể chênh nhau vài giây.

- Trong hệ thống Ethereum, thời gian phát sinh một khối mới khoảng từ 10 giây đến 20 giây, trung bình khoảng 14 giây.

Bên lề

-

Satoshi Nakamoto quy định là người đầu tiên tìm ra khối mới sẽ được “thưởng” một lượng tiền ảo nhất định. Trong thời gian 4 năm đầu tiên, mỗi một khối mới được thưởng 50 Bitcoins. Bốn năm tiếp theo lượng thưởng giảm đi một nửa: 25 Bitcoins, bốn năm tiếp theo sau giảm đi tiếp một nửa, chỉ còn 12.5 Bitcoins, … Bằng cách này, các nút ganh đua nhau tính nhanh để có phần thưởng.

Bên lề Tổng số coin là bao nhiêu?

- Do quy định của Satoshi Nakamoto, tổng số Bitcoin (₿) không vượt quá 21 triệu (anh/chị nào cao thủ về Toán tính giới hạn theo quy định trên sẽ ra ngay).

- Trong hệ thống Ethereum, số coin (Ξ) không bị hạn chế.

Bên lề

-

Vấn đề là nếu có một “kẻ gian” muốn sửa đổi các giao dịch đã “khóa sổ” thì sao? Để giải quyết vấn đề này, ý tưởng của Satoshi Nakamoto là bắt các nút phải giải một câu đố (puzzle). Cách ra câu đố của Satoshi Nakamoto là phối hợp phương pháp Hashcash của Adam Back với một số gọi là Nonce (tạm dịch: độc số).

Hàm hashcash là hàm số “băm” một chuỗi bất kỳ và cho kết quả là một chuỗi có độ dài cố định (ví dụ 32 bytes). Hàm ngược: cho biết kết quả băm, việc tái tạo lại chuỗi đã bị băm là không khả thi. Trong Blockchain, Satoshi Nakamoto dùng phương pháp mật mã hashcash. Phương pháp này độc đáo ở chỗ: khối sau là kết quả “băm” của tổ hợp của khối ngay phía trước và Nonce. Kết quả băm này phải nhỏ hơn một “ngưỡng” nào đấy. Thực chất của việc giải hàm ngược là tăng dần số Nonce, thực hiện hàm băm và xem xem kết quả đã nhỏ hơn ngưỡng chưa. Satoshi Nakamoto gọi quá trình là Proof-of-Work (tạm dịch: chứng minh nỗ lực). Khi chạy trong thực tế các nút phải cạnh tranh xem ai là người đầu tiên tìm ra kết quả băm theo quy định. Người ta chứng minh rằng “ngưỡng” càng nhỏ thì việc tìm ra kết quả càng khó. Các tài liệu trên mạng gọi đây là độ khó (dificulty).

Tác dụng của phương pháp hashcash là gì? Nếu có một kẻ tấn công muốn thay đổi một giao dịch nào đó từ khối K nằm ở giữa chuỗi thì kẻ đó bắt buộc phải tính lại K cùng toàn bộ các khối tiếp theo K+1, K+2, … và tổng hợp thời gian tính toán phải nhỏ hơn các nút khác trên mạng chỉ tính toán cho khối cuối cùng. Xác suất này, theo Satoshi Nakamoto, tiệm cận đến 0 khi chuỗi Blockchain đủ dài.

Hàm cashhash kết hợp với độc số Nonce

(Hình ảnh được lấy từ bài báo của Satoshi Nakamoto)

-

Chúng ta nhận thấy đặc tính của Blockchain:

·       Tất cả các nút có cùng một bản sao của sổ cái (ledger).

·       Sổ cái là một chuỗi các khối (Block). Nhìn vào hình vẽ: khối sau chứa con trỏ đến hàm “băm” khối ngay phía trước (+ độc số Nonce), một timestamp (dấu thời gian) và dữ liệu các giao dịch. Chú ý rằng, ngoài các thông tin này, Block có thể lưu thêm các thông tin khác (xem phần sau về NFT).

·       Sau khi “đóng sổ” thì không ai có quyền thay đổi nội dung các khối.

Chỉ bằng thiết kế, với hệ thống mã nguồn mở, Satoshi Nakamoto đã tạo ra một hệ thống mà ở đó các nút (Node) phối hợp với nhau một cách “an toàn” (secured) mà không cần đến vai trò trung gian.

Bên lề Proof-of-Work vs. Proof-of-Stake

- Proof-of-Work đòi hỏi rất nhiều tính toán. Đây là điểm bị chỉ trích của Bitcoin: lãng phí về lượng tính toán (hàng chục nghìn hệ thống cùng làm một việc giống nhau và độc lập với nhau) và không có cơ chế hợp tác của những người “đào mỏ”.

- Hệ thống Ethereum lúc đầu cũng cùng nguyên tắc với Bitcoin (nghĩa là sử dụng Proof-of-Work). Nhưng Ethereum đã chuyển sang phương pháp mới gọi là Proof-of-Stake. Trong hệ thống Proof-of-Stake, người “đào mỏ” sẽ được thay bằng “Validator” (người xác nhận). Trong hệ thống này Validator không cần giải bài “đánh đố” hàm hashcash, nhưng phải đặt cược một lượng tiền ảo (Ether). Nếu có hành vi gian lận thì lượng tiền này sẽ bị mất (bị hủy: burned). Phần thưởng cho Validator là phí giao dịch tương ứng với lượng tiền cổ phần đặt cược (Stake). Cơ chế này làm cho các Validator giàu càng giàu hơn. Người chuyển tiền phải trả phí giao dịch (cái này giống ngân hàng 😊). Phí giao dịch và lưu trữ trong Ethereum được gọi là Gas Price (Gas là khái niệm ảo, không có thật trong đời thường). Năng lượng tiêu tốn của Proof-of-Stake được cho là chỉ bằng một phần nghìn (1/1000) của Proof-of-Work.

- Ethereum đã khởi động việc chuyển từ Proof-of-Work sang Proof-of-Stake từ ngày 01/12/2020 và mới hoàn tất vào ngày 15/09/2022. Như vậy, vào thời điểm của bài post này, Ethereum đã sử dụng giải pháp Proof-of-Stake.

Bên lề

Cryptocurrency wallet (ví tiền ảo)

Cũng trong bài báo đó Satoshi Nakamoto đề xuất người mua và người bán thanh toán, “chuyển khoản” trực tiếp cho nhau mà không cần trung gian. Việc định danh sử dụng phương pháp Private – PublicKey (mỗi chủ nhân giữ một cặp chìa khóa gồm chìa khóa bí mật: private key và chìa khóa công khai: public key). Trong mật mã thì phương pháp này cho đến thời điểm hiện nay chưa ai công bố được phương án “phá” khóa cả. Như vậy việc định danh, mua – bán đảm bảo tuyệt mật được giải quyết.

Để giúp anh/chị làm tươi bộ nhớ, tôi xin phép giới thiệu vắn tắt phương pháp này. Giả định có 2 người liên lạc với nhau có tên là Alice và Bob. Mỗi người đều có một cặp khóa: khóa công khai (Public Key) và khóa bí mật (Private Key). (Nguồn: https://en.wikipedia.org/wiki/Public-key_cryptography)

·       Phát sinh khóa:

-

·       Bob gửi thông tin cho Alice:

 

Dùng khoá công khai để mã hóa, nhưng dùng khoá bí mật để giải mã.

-

·       Alice gửi thông tin cho Bob:

Dùng khoá bí mật để ký một thông báo dùng khoá công khai để xác minh chữ ký.

-

Tóm tắt: ví là nơi chứa thông tin chi tiết của cặp chìa khóa (Public Key – khóa công khai, Private Key – khóa bí mật). Các khóa được sử dụng để theo dõi số tiền có trong ví, nhận tiền từ người khác hoặc chi tiêu tiền. Khóa công khai cho phép người khác biết “địa chỉ ví” để thực hiện thanh toán, trong khi khóa bí mật cho phép chủ sở hữu chi tiêu tiền (gửi tiền đến các ví khác).

Chú ý rằng ví không chứa tiền, nó chỉ chứa tham chiếu. Tiền thực sự nằm trên Blockchain.

Smart contract

Bây giờ chúng ta bàn đến chuyện giao dịch trên Blockchain. Nghĩa là liên quan đến mua, bán tài sản mã hóa. Chú ý rằng việc mua bán này là thỏa thuận trực tiếp giữa người mua (ví mua) và người bán (ví bán), không qua trung gian và không có trọng tài nào cả. Đơn giản nhất là một giao thức (protocol) thỏa thuận mặc nhiên giữa người mua và người bán. Tổng quát hóa, người ta đưa vào ứng dụng một loại hợp đồng đặc biệt có tên là Smart contract.

Thực chất, dưới góc nhìn kỹ thuật, smart contract là gì? Đơn giản đó chỉ là một phần mềm máy tính – một chương trình (program). Tất nhiên chúng ta tò mò về cách thức xử lý một “hợp đồng” (smart contract) được thực hiện như thế nào? Chúng ta lấy ví dụ: tài khoản A gửi tiền (coins) cho tài khoản B.

·       Gửi giao dịch từ tài khoản A đến một khối trong Blockchain (khối phát sinh sau cùng). Giao dịch bao gồm mã chương trình đã được biên dịch thành ngôn ngữ máy và địa chỉ người nhận (tài khoản B).

·       Tiếp theo, chương trình (đã biên dịch) được kích hoạt, các dữ liệu trạng thái được ghi vào khối (block).

·       Tiếp theo, các nút (Node) cạnh tranh/thỏa thuận với nhau để tạo ra khối (block) mới.  Xem phần Blockchain ở đầu bài post.

·       Sau khi các nút cùng chấp thuận khối mới, tất cả thông tin trong khối đó được “đóng sổ”, không ai được phép thay đổi.

Kết quả thực hiện một smart contract là gì? Kết quả chung cuộc: tài khoản A gửi cho tài khoản B một lượng tiền (coins). Trong các bước trung gian, có thể một smart contract trung gian này gửi tiền cho một smart contract trung gian khác.

Blockchain phổ biến nhất để chạy các smart contractEthereum. Trong Ethereum, smart contract được lập trình bằng ngôn ngữ Solidity.

NFT (Non-Fungible Token)

Non-Fungible Token (tạm dịch: token không thể thay thế, viết tắt: NFT) là một đơn vị dữ liệu (data) trên sổ cái (ledger), nghĩa là nằm trên Blockchain. NFT là mã định danh (identifier - ID) duy nhất không thể sao chép, thay thế hoặc chia nhỏ, được sử dụng để chứng nhận tính xác thựcquyền sở hữu.

Dưới góc độ kỹ thuật, NFT được lưu trong một khối (block) của Blockchain. Chúng ta lưu ý thêm về đặc điểm của Blockchain: dữ liệu, kể cả mã định danh (ID), nằm trong một Block khi đã “khóa sổ” thì không thể sửa đổi.

Khi ví (Cryptocurrency wallet) sở hữu mã định danh (ID) thì chủ nhân của ví sẽ sở hữu NFT tương ứng với mã định danh đó.

Mã định danh khác với các đồng tiền mã hóa (như Bitcoin): chúng không cái nào giống cái nào, mỗi một mã định danh là duy nhất, không hoán đổi được như các đồng tiền mã hóa. Mỗi một NFT là duy nhất (vì vậy mới có tên là identifier).

Thế mỗi một identifer (ID) tham chiếu đến cái gì? Mỗi một ID tham chiếu đến một đơn vị dữ liệu số hóa: tác phẩm nghệ thuật, âm thanh, video, món đồ trong trò chơi điện tử, … Chúng được xem như chứng chỉ xác thực quyền sở hữu đối với sản phẩm tương ứng.

NFT có thể thay đổi chủ sở hữu. Vì vậy, người ta có thể mua hoặc bán NFT.

Chúng ta cùng tìm hiểu xem NFT được lưu trên Blockchain như thế nào qua hình ảnh minh họa sau.


Minh họa NFT được tạo bởi smart contract.

-

Trong hình minh họa ở trên, smart contract cùng với NFT được lưu trong một khối (block) của Blockchain. Toàn bộ khối dữ liệu của NFT thường rất ít khi nằm ngay trên Blockchain mà NFT thường là một con trỏ, trỏ đến một tệp dữ liệu nằm bên ngoài Blockchain. Như vậy cái ví (Cryptocurrency wallet) của chủ sở hữu không chứa NFT. Ví đó chứa con trỏ và con trỏ này trỏ đến một khối (block) có chứa NFT trên Blockchain. Đến lượt NFT, trong phần lớn các trường hợp, cũng chỉ là một mã định danh tham chiếu đến một đơn vị dữ liệu nào đó được lưu giữ ở bên ngoài Blockchain, trên Internet.

Như vậy, nội dung thực chất của NFT là Digital Media (truyền thông kỹ thuật số)! Tuy nhiên, NFT có một điểm đặc biệt: chúng có thể được mua, bán, thương mại và từ đó phát sinh tài sản số (digita assets).

Nội dung của NFT thường là các tác phẩm nghệ thuật kỹ thuật số (Digital Artwork), tài sản ảo trong trò chơi (in-game assets), âm nhạc, phim và các nội dung kỹ thuật số khác.

Làm thế nào để tạo ra NFT?

Để có trải nghiệm, tôi đã mày mò tạo ra NFT. Thì thiên hạ có NFT, mình cũng phải có chứ! 😊 Mà cũng khá đơn giản, các công cụ có đầy trên mạng. Sau đây tôi xin thuật lại các bước nhằm tạo ra NFT để anh/chị nào chưa từng đưa tác phẩm của mình lên sàn NFT có thể tham khảo.

Bước 1: Xác định nội dung của NFT

Do sức sáng tạo của tôi có hạn nên tôi chọn “tác phẩm” của mình là các bức tranh, ảnh kỹ thuật số. Cái này thì vào thời điểm hiện nay, một lúc có thể tạo ra hàng chục “tác phẩm”!

Bước 2: Chọn Blockchain

Chúng ta dễ dàng tìm thấy có nhiều loại Blockchain. Đương nhiên chúng ta đã biết Blockchain của Bitcoin nhưng đáng tiếc Blockchain này không phổ dụng cho NFT. Bằng cách “Google Search”, tôi tìm được danh sách các loại Blockchain phổ biến dùng cho NFT là Ethereum, Solana, Polygon, Cardano, Tezos, …

Tôi chọn Ethereum.

Bước 3: Tạo ví (cryptocurrency wallet)

Để có thể “chứa” NFT, chúng ta bắt buộc phải có ví. Cũng bằng cách dò la thông qua “Google Search”, tôi thấy có các loại ví phổ biến là MetaMask, Coinbase Wallet, Ledger Nano X, …

Tôi chọn MetaMask.

(Tôi xin phép không đi vào chi tiết tạo ví vì điều đó làm cho bài post dài không cần thiết. Trước khi tạo ví, anh/chị nên đọc kỹ hướng dẫn của phần mềm tạo ví.
Xem thêm mục ② Cryptocurrency wallet (ví tiền ảo) tôi đã giới thiệu ở trên để tìm hiểu nguyên lý hoạt động của ví.)

Bước 4: Chọn NFT Platform (sàn NFT)

NFT Platform là nơi cho phép chúng ta tạo NFT, chỉnh sửa tham số các NFT, “niêm yết” (list) các NFT lên sàn và có thể mua, bán các NFT của các chủ nhân khác. Thấy người ta giới thiệu một số sàn (Platform) nổi tiếng như OpenSea, Solanart, Crypto exchanges, …

Tôi chọn OpenSea.

Bước 5: Tạo một NFT

Sau khi có ví và đã chọn sàn (Platform) thì việc tạo ra một NFT khá đơn giản.

·       Kết nối với ví

·       Chọn “Create”

·       Tải lên file ảnh

·       Điền các thông tin theo hướng dẫn

·       Chọn loại Blockchain (Ethereum)

·       Nhấn nút Create – Xong.

Bước 6: Đưa lên sàn để chào bán

Sau khi đã có tác phẩm, muốn “niêm yết” (list) lên sàn (của OpenSea) thì chỉ mỗi việc là nhấn nút “Sell” và điền đơn giá (đồng ETH).

-

Thế tôi đã đưa lên sàn OpenSea “tác phẩm” nào? Báo cáo với anh/chị là tôi đã sử dụng công cụ trực tuyến Craiyon.com để vẽ một bức tranh theo mô hình DALL·E 2 của OpenAI. Bức tranh đó như hình vẽ dưới đây.

Chúc mừng năm mới 2023 và xin gửi đến tất cả anh/chị cùng gia đình và bạn hữu xa gần lời chúc tốt đẹp nhất!



2022/10/30

☕ Nhàn đàm ICT: Speech_To_Text++ 🗣→🗎

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-trainingFine-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-ShotZero-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-trainingFine-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-lingualMulti-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 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.

-

(\_/)
( •_•)
/ >☕

 

☕ Nhàn đàm S&T: Humanoid Robots 🤖

Phác họa bài post: Đề dẫn. ❶. Humanoid Robots hoạt động thế nào? ❷. Lắp ghép một Humanoid Robot như thế nào? ❸. Huấn luyện Humano...