Lúc đầu, tôi định đặt tựa đề là nhàn đàm về Speech Recognition (nhận dạng giọng nói) nhưng chợt nhận ra là chủ đề đấy quá rộng. Ví dụ, khi chúng ta nghe qua điện thoại, chỉ cần nghe qua từ đầu tiên chúng ta đã nhận ra ai nói phía đằng kia đầu dây, nhận dạng cảm xúc người nói hoặc đặt giọng nói đó trong các bối cảnh khác nhau, … Nếu nhận dạng theo nghĩa đó thì “siêu” quá. Vả lại, trên diễn đàn này toàn “dân kỹ thuật” cả nên chủ đề “Speech-to-text” (Giọng nói-thành-văn bản) là cụm từ mà bản thân nó mang tính định nghĩa, tạo ra một giới hạn “vừa đủ” để vừa nhâm nhi cà phê vừa ngẫm chuyện công nghệ chơi.
🗣→🗎
ⓐ Speech-to-text?
Một cách giản lược, chúng ta có thể hình dung quy trình này như sau:
Khi nói, chúng ta phát ra sóng âm thanh ra xung quanh, trong đó có microphone “nghe” chúng ta nói. Tiếp theo, microphone cùng với hệ thống xử lý âm thanh thu sóng (audio signal), chuyển đổi từ dạng tương tự (analog) sang dạng số (digital). Sau khi ghi được âm thanh dưới dạng số, người ta tìm cách “chuyển đổi” dãy số đó thành văn bản. Đơn giản là vậy! 😊
-
Lại nói về việc chuyển đổi dạng tương tự (analog) sang dạng số (digital). Chúng ta biết tín hiệu tương tự là liên tục, còn tín hiệu dạng số là rời rạc. Để đảm bảo không mất thông tin, người ta phải lấy mẫu đủ mau. Tần suất lấy mẫu của sóng âm thanh thông thường là 10 ms (mili giây). Trong khung 10 ms này (frame), người ta coi như sóng âm thanh “tĩnh”, không thay đổi.
⚠ Trên thực tế, ứng với mỗi một frame là một véc-tơ (mảng 1 chiều) n số thực, chứ không đơn thuần chỉ là một con số (n có giá trị trong khoảng 10-40). Mỗi một ô trong véc-tơ là hệ số MFCC (Mel Frequency Cepstral Coefficient). MFCC thu được nhờ áp dụng một loạt công thức biến đổi sóng âm thanh. Có lẽ chúng ta không nên đi sâu vào các công thức này, chỉ biết rằng người ta có một “hàm” (function) để tính ra MFCC từ phổ sóng âm thanh.
-
Lại nói tiếp về các khung (frame) số hóa ở trên. Tổ hợp của một số khung sẽ tạo ra một âm vị (phoneme). Tổ hợp như thế nào để tạo ra các âm vị khác nhau, người ta phải mô hình hóa. Mô hình này có tên gọi là mô hình âm thanh (acoustic model). Cùng một âm vị, người này nói sẽ khác người kia. Thậm chí cùng một người, cùng một âm vị vẫn có thể khác nhau: lúc nói nhanh, lúc nói chậm; lúc bị cúm (khàn giọng) khác với lúc thường.
-
Tiếp theo, khi tổ hợp các âm vị (phoneme), chúng ta sẽ được một từ (word). Cách tổ hợp các âm vị để suy ra được một từ được gọi là mô hình phát âm (pronunciation model). Số từ vựng càng lớn thì mô hình phát âm càng phức tạp.
-
Chúng ta chú ý rằng trong ngôn ngữ, có nhiều từ hoặc cụm từ phát âm giống nhau hoặc từa tựa như nhau. Làm thế nào để biết được với phát âm “nghe như thế” suy ra được cụm từ nào thì phải dựa vào mô hình ngôn ngữ (language model).
-
Như vậy, có thể xem vấn đề “Speech-to-text” là tổ hợp các mô hình: mô hình âm thanh (acoustic model), mô hình phát âm (pronunciation model) và mô hình ngôn ngữ (language model).
-
Trong các mô hình trên chúng ta nhận thấy một số điểm thách thức:
- Làm thế nào để chắt lọc ra được “đặc tính” của âm vị (phoneme)? Nghĩa là dù mỗi người nói một giọng khác nhau, mỗi một âm vị vẫn phải có một tập hợp các đặc tính nào đó để phân biệt với các âm vị khác. Điểm này trong tiếng Anh gọi là “Speaker Independence”. Nghĩa là phát hiện ra âm vị độc lập với người nói: dù người nào nói máy vẫn phát hiện ra âm vị đấy.
- Điểm thách thức tiếp theo là từ vựng. Khi số lượng từ vựng lớn, để ghép các âm vị thành một từ cần một thuật toán đủ nhanh để tìm ra từ ứng với tổ hợp các âm vị. (Số lượng từ vựng càng lớn thì máy càng cần nhiều thời gian hơn để tìm kiếm.)
- Điểm thách thức cuối cùng, rõ ràng là tốc độ xử lý. Sẽ chẳng có ý nghĩa gì nếu sau khi chúng ta nói, mươi mười lăm phút sau máy mới cho ra văn bản. Nghĩa là máy phải cho kết quả theo thời gian thực. Phải làm cho độ trễ (latency) từ lúc nói đến lúc máy cho ra văn bản càng nhỏ càng tốt.
🗣→🗎
ⓑ Cách tiếp cận xử lý “Speech-to-text”.
Biết thế nhưng làm thế nào để cứ “nói” là ra “văn bản” lại là một vấn đề khác. Tôi tạm thời chia cách tiếp cận thành 2 loại: loại “kinh điển” và loại “tân tiến”.
- Cách tiếp cận kinh điển. Nghe từ “kinh điển” có thể anh/chị hình dung thời xa xôi nào đó. Không phải vậy. Đó là thời điểm trước năm 2012-2014. Trước thời điểm đó, 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.
-
Xin bàn một vài dòng về mô hình. Nhận dạng nói chung hay “Speech-to-text” nói riêng, đi theo cách tiếp cận gần đúng. Mọi thứ trong nhận dạng không có gì là chắc chắn 100% cả. Vì vậy, người ta hay sử dụng các mô hình xác suất, thống kê cho xử lý nhận dạng. Mô hình hay được dùng cho “Speech-to-text” là Mô hình Markov ẩn (Hidden Markov Model - HMM). HMM là một mô hình thống kê được mô hình hóa bởi quá trình Markov (xem ở đây). Các trạng thái của HMM bị “ẩn”. HMM giả định rằng có một quá trình khác có thể quan sát được (observable), được “phát ra” từ các trạng thái “ẩn” ấy. Từ các tín hiệu quan sát được, người ta “suy ra” một số “đặc tính” của các trạng thái “ẩn”. Đại ý như vậy. Theo tôi, một trong những bài hướng dẫn (tutorial) về HMM (và ứng dụng HMM vào “speech recognition”) được rất nhiều các tác giả khác trích dẫn lại là bài của tác giả Lawrence R. Rabiner, xuất bản năm 1989 [bài báo].
↓
Nếu anh/chị lướt qua bài báo (⚠ bài báo khá dài – 30 trang – với rất nhiều công thức, phương trình toán học và thuật toán đệ quy dùng để giải mã chuỗi trạng thái tối ưu và huấn luyện mô hình), anh/chị sẽ thấy là để nhận dạng một từ, người ta thiết lập một mô hình HMM tương ứng với từ đó. Để có mô hình HMM tối ưu, người ta phải điều chỉnh mô hình căn cứ theo các tín hiệu quan sát được. Tín hiệu trong trường hợp này là gì? Là tín hiệu được chiết xuất ra từ hàng chục đến hàng trăm người nói cùng một từ. Đối với một từ đã phức tạp thế, đối với từ vựng lên đến hàng trăm nghìn từ thì độ phức tạp sẽ như thế nào?! (À, mở ngoặc: hồi xưa máy chỉ nhận dạng được giọng nói của một vài chục từ thôi. Thế mà người ta vẫn coi là đột phá khủng khiếp đấy!)
-
Ngoài mô hình HMM, người ta còn dùng Mô hình biến dạng thời gian động (Dynamic Time Warping - DTW) để đo độ tương tự giữa 2 chuỗi biến động theo thời gian, tốc độ biến động. Người ta còn dùng mô hình mạng nơ-ron (Neural Network) để phân lớp vị âm, tách từ, …
-
- Cách tiếp cận “tân tiến”: end-to-end. Cách tiếp cận này lấy đầu vào là tín hiệu âm thanh và đầu ra là chuỗi văn bản. Trực tiếp – không thông qua các mô hình trung gian như cách tiếp cận “kinh điển”. (Anh/chị hẳn còn nhớ cách tiếp cận seq2seq trong dịch máy: là mô hình biến đổi chuỗi đầu vào thành chuỗi đầu ra, không thông qua phân tích cú pháp, ngữ pháp.) Trong phần tiếp theo của đàm luận, tôi xin phép anh/chị chỉ nói đến cách tiếp cận end-to-end. Phải nói thêm rằng, cách tiếp cận kinh điển có nhiều cái rất hay (và khó) nhưng tôi đoán anh/chị bây giờ bận nhiều việc, nhàn đàm phải nói cái gì mơi mới một tý chứ cứ lấy cái “cũ rích” ra để làm gì! 😊
🗣→🗎
ⓒ Cách tiếp cận end-to-end (E2E).
Cũng giống như Statistical Machine Translation - SMT, cách tiếp cận này đòi hỏi phải có rất nhiều dữ liệu - dữ liệu lớn (Big Data). Dữ liệu lớn trong trường hợp này là gì? Nghĩa là người ta phải tập hợp cơ sở dữ liệu đủ lớn, đủ đa dạng (nam – nữ, già – trẻ, giọng cao – giọng thấp, các phương ngữ - dialect) về các câu nói đã được dịch ra thành văn bản:
[Âm thanh câu nói → Văn bản]
Sau khi có tập hợp dữ liệu này, các mô hình Machine Learning sẽ học – nghĩa là người ta huấn luyện cho máy học. Cách huấn luyện như thế nào? Người ta cho máy biết rằng với “âm thanh phát ra như này” thì “văn bản sẽ ra như kia”. Người ta huấn luyện cho máy học kiểu như vậy với số lượng mẫu rất lớn (hàng trăm nghìn đến hàng chục triệu mẫu). Thông thường người ta cho máy “học đi học lại” nhiều lần, tráo thứ tự mẫu, … Học cho đến lúc nào người ta thấy “ổn”. “Ổn” là gì? Nghĩa là “lần học sau” máy không cho kết quả tốt hơn “lần học trước” là mấy – hội tụ (converged).
Sau khi máy học xong, nếu có ai đó nói từa tựa như âm thanh máy đã từng học thì nó sẽ biết là âm thanh đó tương đương với văn bản gì. Nôm na là vậy 😊.
Trước khi bàn đến các mô hình huấn luyện, chúng ta thử tìm hiểu xem người ta lấy ở đâu ra dữ liệu được gán nhãn?
- TIMIT: TIMIT là một kho ngữ liệu lời nói được phiên ra ngữ âm và từ vựng của những người nói tiếng Anh Mỹ thuộc các giới tính và phương ngữ khác nhau. Dự án này được khởi động từ năm 1988, do Viện Công nghệ Massachusetts (MIT), SRI International và Texas Instruments (TI) hợp tác. Có 630 người nói, 8 phương ngữ (dialect), mỗi người nói 10 câu (giàu ngữ điệu). Toàn bộ cơ sở dữ liệu đều được kiểm tra cẩn thận một cách thủ công. Tên TIMIT là ghép của TI (Texas Instruments) và MIT (Massachusetts Institute of Technology).
-
- Đối với các công ty như Google, họ có cách thu thập dữ liệu gán nhãn rất thông minh mà chỉ có các công ty tầm cỡ như họ mới làm được. Lấy một ví dụ: gán nhãn sử dụng công cụ Voice Search. Cách làm: khi chúng ta nói một câu tìm kiếm thì Voice Search ghi luôn cả phần âm thanh và phần văn bản. Sau mỗi một lần sử dụng Voice Search là chúng ta đã đóng góp một bản ghi vào cơ sở dữ liệu của họ! Với cách làm này, họ dễ dàng thu được hàng chục triệu, hàng trăm triệu bản ghi một cách tự động, chứ không phải nhọc nhằn như cách làm của TIMIT.
-
Khi có dữ liệu rồi, người ta cần có một cách đo chất lượng mô hình. Thước đo này là đo tự động, dùng thuật toán lập trình chứ không phải đo bằng phương pháp thủ công. Nếu không có thước đo chất lượng thì ai cũng bảo của tôi là tốt nhất (kiểu như quảng cáo trên TV) thì thật khó mà tranh cãi 😊. Thước đo này dựa vào kho ngữ liệu, mà mỗi bản ghi của kho này có câu trúc như ở trên đã đề cập, đó là:
[Âm thanh câu nói → Văn bản]
Thước đo có tên gọi là WER: Word Error Rate (Tỷ lệ từ lỗi). 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 của kho ngữ liệu”. Chúng ta phải coi “văn bản của kho ngữ liệu” là đúng 100%.
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ố các từ lỗi trên tổng số từ. Trong các nghiên cứu, người ta thường viết WER dưới dạng %. Chú ý rằng WER có thể lớn hơn 100%! Nghĩa là số từ lỗi còn nhiều hơn số từ trong bản gốc.
-
(⊧) Mô hình Listen, Attend and Spell (LAS).
Nếu anh/chị nhớ lại, trong dịch máy (Machine Translation), cơ chế chú ý (Attention Mechanism) là một ý tưởng đột phá (bài báo) trong mô hình huấn luyện mạng nơ-ron (Neural Network) để vừa dịch vừa dóng “từ đầu ra” với “từ đầu vào”. Cơ chế này sau đó được ứng dụng rộng rãi sang các lĩnh vực khác, trong đó có “Speech-to-text”. Có nhiều bài báo ứng dụng cơ chế Attention, nhưng theo tôi, ấn tượng nhất có lẽ là bài báo “Listen, Attend and Spell” (Lắng nghe, Chú ý và Đánh vần). Mô hình này cho kết quả rất trực quan: khi chúng ta nói thì trên màn hình nhả ra từng chữ (ký tự) như chúng gõ trên bàn phím vậy. (Anh/chị có thể kiểm nghiệm nhanh bằng Google Voice Search.)
Một cách giản lược, mô hình gồm hai bộ phận: bộ phận Lắng nghe (Listener) và bộ phận Đánh vần (Speller). Bộ phận Lắng nghe sẽ “Nghe”, rồi chuyển kết quả cho bộ phận Đánh vần. Bộ phận Đánh vần, căn cứ vào kết quả của bộ phận Lắng nghe rồi “Nhả” ra kết quả lần lượt từng ký tự một. (Anh/chị hãy nhớ lại lúc chúng ta học vần vỡ lòng: thầy, cô đọc chính tả cho chúng ta chép ra vở học trò: tai chúng ta lắng nghe (Listen), còn tay chúng ta viết từng cữ cái một (Spell). Mô hình này mô phỏng quá trình tương tự như vậy. 😊)
Có thể hiểu cách họ làm như sau:
[x = Đặc tính âm thanh (MFCC)] → [h = Listen(x)] → [AttendAndSpell(h, y)] → [y = văn bản]
Nghĩa là:
- Listen có đầu vào là âm thanh (đã được mã hóa, là các véc-tơ MFCC) và đầu ra là h. Có thể hiểu h chính là kết quả mã hóa của Listen, là context của đầu vào.
Ghi chú: h không có gì là bí hiểm cả: là mảng số thực!
-
Bàn thêm một vài dòng về Listen và véc-tơ h. Listen là mạng RNN. Đầu vào của mạng RNN được lấy theo trình tự thời gian: véc-tơ x (x1, x2, …, xN). Như vậy, việc chọn RNN là hợp lý vì khi chúng ta nói và nghe, việc “Nói” và “Lắng nghe” cũng theo trình tự thời gian. Véc-tơ h (h1, h2, …, hN) là kết quả mã hóa của véc-tơ x, h chính là là lớp ẩn của RNN. Việc mã hóa này được thực hiện như thế nào? Dưới góc độ toán học:
hi+1 = f(hi, xi)
Như vậy, hi+1 là mã hóa của hi, xi. Đến lượt hi, hi là mã hóa của hi-1, xi-1…
Trong Machine Learning, hàm f thường được chọn là hàm kích hoạt tanh (hàm tang hyperbolic), hoặc ReLU (rectified linear unit).
Một cách trực quan, chúng ta thấy hi+1 liên kết với tất cả các hi, xi trước đó. Nghĩa là phần tử cuối cùng của h có mối liên quan đến tất cả các phần tử trước. Đây chính là điểm khác biệt so với mô hình Markov ẩn - HMM. Trong HMM, một trạng thái (state) vào thời điểm t chỉ phụ thuộc vào trạng thái ngay trước đó (t-1) và độc lập với tất cả các trạng thái khác trong quá khứ. Dưới góc độ ngôn ngữ, RNN hợp lý hơn HMM. Lý do: các âm vị (phoneme) trong một câu nói thường liên quan đến nhau chứ không độc lập.
-
- AttendAndSpell cho kết quả là dãy ký tự được nhả ra trên màn hình.
-
Các mạng RNN của LAS có gì đặc biệt?
- Listen là mạng nơ-ron thuộc họ RNN (Recurrent Neural Network – mạng nơ-ron tái phát). Số lượng đầu vào âm thanh mã hóa gồm từ vài trăm đến hàng ngàn frame (khung mã hóa) – rất dài. (So sánh với dịch máy: Đầu vào (câu nguồn) thường chỉ có độ dài vài chục từ.) Nếu huấn luyện mạng có RNN có đầu vào quá dài thì quá trình huấn luyện rất khó hội tụ (converge). Chính vì tính chất này nên người ta dùng LSTM hai chiều (bi-directional) hình tháp 3 tầng, nhằm rút ngắn số lượng đầu vào (số frame). Số đầu vào ở tầng trên cùng của hình thấp bằng 1/8 số đầu vào ở tầng đáy (số gốc).
- AttendAndSpell gồm 2 mạng: một mạng nơ-ron 1 lớp ẩn dùng để tính hệ số dóng hàng đầu vào (h) và đầu ra (y); một mạng RNN (LSTM 2 lớp – 1 chiều) để tạo kết quả đầu ra.
-
Dữ liệu thử nghiệm. Khi huấn luyện, họ sử dụng 3 triệu bản ghi của Google voice search. Tiếp theo người ta tạo bộ dữ liệu sạch và dữ liệu nhiễu. Dữ liệu nhiễu được tạo ra bằng cách trộn tiếng ồn và tiếng vọng vào dữ liệu sạch.
Kết quả thử nghiệm. Trong môi trường sạch (không nhiễu) họ đạt kết quả WER từ 10.3% đến 16.2%. Trong môi trường nhiễu họ đạt WER từ 12% đến 19%.
-
Nếu anh/chị có thời gian đọc qua về lịch sử phát triển nhận dạng giọng nói - trên 30 năm giới khoa học miệt mài nghiên cứu, tìm tòi - rồi so sánh với cách tiếp cận E2E để thấy cái “vĩ đại” của mạng nơ-ron và dữ liệu lớn. Xem bài báo của mô hình LAS, chúng ta không hề thấy các công thức, phương trình hay mô hình phức tạp ở đâu cả (vì không cần thiết). Chỉ thấy áp dụng RNN (một mô hình đã thành kinh điển trong Machine Learning) và Attention Mechanism – thế mà cho ra kết quả “tuyệt vời”! Chỉ trong vòng 30 tháng kể từ sau năm 2014, người ta thấy việc tiếp cận E2E cho kết quả vượt xa các kết quả hơn 30 năm nghiên cứu trước đó. Rất đáng kinh ngạc!
-
(⌚) Mô hình Streaming E2E. (Truyền phát liên tục từ đầu đến cuối).
Tháng 3/2019, Google thông báo “An All-Neural On-Device Speech Recognizer” (Bộ nhận dạng giọng nói trên thiết bị - thuần mạng nơ-ron). Trước đó, họ có bài báo mô tả chi tiết về bộ nhận dạng này.
Xin luận bàn một chút về khái niệm “trên mạng” và “trên thiết bị”.
- Trên mạng. Cách tiếp cận như của LAS là “trên mạng”. Khi chúng ta nói, microphone của máy tính “thu âm” và gửi bản “âm thanh” thu được này về “Trung tâm tính toán” (qua mạng Internet). Tiếp theo, “Trung tâm tính toán” biến đổi “âm thanh” thành “văn bản”. “Văn bản” đấy được “Trung tâm tính toán” gửi trở lại cho máy tính của chúng ta và hiển thị lên màn hình.
- Trên thiết bị. Khi chúng ta nói, microphone của máy tính vẫn “thu âm”. Lần này, bản “âm thanh” thu được không gửi về “Trung tâm tính toán” nữa mà được gửi đến một phần mềm nằm ngay trên máy của chúng ta. “Máy” trong trường hợp này thường là điện thoại hoặc máy tính bảng. Phần mềm nằm ngay trên máy chuyển “âm thanh” thành “văn bản” và hiển thị ra màn hình. Theo một nghĩa nào đó, phần mềm này “tương đương” với “Trung tâm tính toán”.
Bộ nhận dạng này có 2 tham vọng chính: truyền phát liên tục (streaming) và cài đặt bộ nhận dạng trên thiết bị (on device).
Điểm đáng chú ý là họ không sử dụng mô hình LAS mà họ lại sử dụng mô hình RNN-T (viết tắt của RNN Transducer). Vì sao vậy?
Lại bàn thêm một chút về mô hình LAS (Listen, Attend and Spell). Mô hình LAS rất hay, vậy mà vẫn có một điểm yếu. Trong LAS, bộ mã hóa đầu vào (input encoder) người ta sử dụng mạng LSTM (là một trường hợp đặc biệt của mạng RNN) hai chiều (bi-directional). Điểm yếu nằm ở đây: mô hình LAS chỉ suy diễn đầu ra (decoder) dựa trên dãy hoàn chỉnh của đầu vào. Tôi nhấn mạnh từ “hoàn chỉnh”. Nghĩa là LAS chỉ giải mã đầu ra khi có đầy đủ đầu vào. Tuy nhiên, khi streaming, đầu vào (âm thanh của lời nói) được truyền liên tục, không ngừng. Nghĩa là máy không xác định được điểm kết thúc của đầu vào (input). Chính vì lý do này mà Google đã không chọn mô hình LAS. Thay vào đó, họ chọn mô hình RNN Transducer.
- Vậy RNN Transducer có gì đặc biệt?
-
Về bản chất thì RNN Transducer là mô hình sequence-to-sequence. Nghĩa là RNN Transducer biến đổi chuỗi đầu vào thành chuỗi đầu ra - nhưng có điểm khác so với LAS là mô hình này không sử dụng cơ chế chú ý (Attention Mechanism). Chuỗi đầu vào vẫn sử dụng RNN nhưng bộ giải mã họ lại sử dụng một thuật toán riêng, là thuật toán khái quát hóa của CTC (Connectionist Temporal Classification). Điểm đáng chú ý là thuật toán này, khi đọc kỹ, chúng ta thấy về bản chất vẫn là một cách để dóng hàng (alignment) – dóng “chuỗi đầu vào” với “chuỗi đầu ra” – dóng cả chuỗi chứ không phải dóng từng “từ” như Attention Mechanism. Nghĩa là một chuỗi đầu ra có thể tương ứng với n chuỗi đầu vào. Hoặc, ngược lại, một chuỗi đầu vào có thể tương ứng với m chuỗi đầu ra.
-
- Google có hàng loạt sửa đổi đối với mô hình RNN Transducer với mục tiêu là cài được mô hình này lên các thiết bị di động và có thể chạy ngay cả khi không kết nối Internet (offline). Sau khi nén, toàn bộ mô hình của họ chỉ gói gọn trong 80 MB!
-
- Một trong những thách thức khi cài lên các thiết bị di động là phải nhận dạng tùy theo bối cảnh (context biasing). Nghĩa là cùng một lõi phần mềm nhưng khi chạy trên máy A thì phải phù hợp với máy A, khi chạy trên máy B thì phải phù hợp với máy B. Bối cảnh ở đây là gì? Thường trên các thiết bị di động có danh bạ (danh mục tên riêng – số điện thoại), có danh mục tên các bài hát, video, … Các danh bạ, danh mục này khác nhau, tùy theo từng máy. Ví dụ, khi người dùng “gọi” tên trong danh bạ thì không phải là đọc chính tả thông thường mà chính là muốn gọi điện thoại đến số tương ứng với tên người đó. Làm thế nào để xử lý trường hợp này? Ý tưởng chính là họ sử dụng mô hình ngôn ngữ n-gram và chèn danh bạ vào các nhánh của đồ thị tìm kiếm khi giải mã (decode).
-
- Một thách thức nữa là phân biệt văn nói và văn viết. Ví dụ khi chúng ta đọc địa chỉ “một trăm hai mươi tám bê Võ Chí Công” (văn nói) thì phải chuyển thành 128B Võ Chí Công (văn viết). Đây gọi là vấn đề chuẩn hóa văn bản (text normalization).
-
- Khi huấn luyện, Google sử dụng 35 triệu bản ghi (tiếng Anh) gồm cả voice search và dictation (đọc chính tả). Họ trộn vào âm thanh nhiễu và tiếng vang. Vậy làm thế nào để huấn luyện và suy diễn đầu ra của danh bạ, danh mục tên bài hát, danh mục các App, …? Trả lời: người ta phải tạo ra giọng nói từ các danh mục này (text-to-speech synthesis - TTS). Mục tiêu là để mô hình nhận ra bản gốc từ bộ tạo giọng nói TTS!
-
- Kết quả thử nghiệm cho biết: với voice search họ đạt WER là 6.8%, với dictation họ đạt WER là 4.0%, với danh bạ họ đạt WER là 5.8%. (Anh/chị nào có điện thoại Google Pixel thử kiểm nghiệm xem 😊.)
🗣→🗎
ⓓ Trải nghiệm.
Có nhiều cách để trải nghiệm “Speech-to-text”, nhưng về đại trà và dễ thử nghiệm, tôi thấy có Voice Search (thay vì gõ bàn phím thì chúng ta chỉ cần nói các từ khóa cho máy tìm kiếm) và Dictation (thay vì gõ bàn phím các đoạn văn bản, chúng ta đọc cho máy ghi chép).
➡ Voice Search:
Anh/chị có thể thử so sánh giữa Google và Bing. Anh/chị chú ý phần cài đặt (settings). Chúng ta phải cài đặt đúng ngôn ngữ cần sử dụng. Ví dụ nếu chúng muốn thử đọc văn bản bằng tiếng Anh thì chúng ta phải cài đặt ngôn ngữ tìm kiếm là tiếng Anh. Còn nếu chúng ta muốn thử đọc văn bản bằng tiếng Việt thì chúng ta phải cài đặt ngôn ngữ là tiếng Việt. Nếu không làm vậy, máy nó lẫn đấy!
- Nếu anh/chị sử dụng Google Search thì anh/chị sẽ thấy phần Settings nằm ở phía góc phải dưới của màn hình.
- Còn nếu anh/chị sử dụng Microsoft Bing thì anh/chị sẽ thấy phần Settings nằm ở góc phải trên của màn hình, có hình 3 vạch ngang, tương tự như ký tự này: ≡.
Để đưa văn bản tìm kiếm vào bằng giọng nói thì anh chị kích chuột vào biểu tượng hình micro và sau đó đọc đoạn từ khóa vào cho máy tìm kiếm.
~
➡ Dictation:
Anh/chị có thể đọc chính tả đối với các ứng dụng của Microsoft Office như Word, PowerPoint. Đáng tiếc là cho đến thời điểm viết bài này, Microsoft vẫn chưa có tiếng Việt cho Dictation của Microsoft Office. Trong trường hợp anh/chị biết tiếng Anh (tôi đoán rằng phần lớn anh/chị trên diễn đàn này đều nói thạo tiếng Anh) thì anh/chị thử đọc tiếng Anh cho máy viết chính tả, xem chúng ta phát âm chuẩn đến mức nào! 😊
~
(_/)
( •_•)
/ >☕