Nếu bạn đang bắt đầu nghiên cứu lĩnh vực nhận dạng giọng nói tự động ("ASR"), rất có thể bạn đã gặp wav2vec 2.0 ("wav2vec2") từ Meta AI Research. Có một số tài nguyên kỹ thuật tuyệt vời, trong đó ít nhất là tài liệu wav2vec2 ban đầu , mô tả cách hoạt động của mô hình máy học ("ML"). Ngoài ra, nhóm Nghiên cứu Meta AI có cái nhìn tổng quan rất hay về wav2vec2 trên trang web của họ.
Tôi khuyến khích bạn xem qua nó vì nó cung cấp một bản tóm tắt hay về bài báo học thuật và vì các minh họa mô hình wav2vec2 trong bài viết này đều có nguồn gốc từ trang đó. Với suy nghĩ trước đó, dường như không có nhiều bài viết giải thích wav2vec2 bằng "tiếng Anh đơn giản". Tôi cố gắng làm điều đó với bài viết này.
Bài viết này giả định rằng bạn hiểu một số khái niệm ML cơ bản và bạn quan tâm đến việc hiểu cách wav2vec2 hoạt động ở mức cao mà không đi quá sâu vào "cỏ dại".
Theo đó, các phần tiếp theo cố gắng tránh nhiều chi tiết kỹ thuật để thay vào đó bằng những giải thích đơn giản và những so sánh hữu ích khi thích hợp.
Như đã nói, sẽ rất hữu ích nếu biết sớm rằng wav2vec2 bao gồm 3 thành phần chính: Bộ mã hóa tính năng , Mô-đun lượng tử hóa và Bộ biến áp .
Mỗi nội dung sẽ được thảo luận trong quá trình bắt đầu cuộc thảo luận với một số ý tưởng cơ bản đồng thời xây dựng các điểm phức tạp hơn (nhưng vẫn dễ hiểu). Hãy nhớ rằng wav2vec2 có thể được sử dụng cho các mục đích khác ngoài ASR.
Như đã nói, phần tiếp theo ở đây sẽ thảo luận về mô hình trong bối cảnh cụ thể của ASR.
Vào thời điểm được giới thiệu vào năm 2020, wav2vec2 đã cung cấp một khuôn khổ mới để xây dựng hệ thống ASR. Nó có gì đặc biệt vậy? Trước wav2vec2, hệ thống ASR thường được đào tạo bằng cách sử dụng dữ liệu được gắn nhãn . Nghĩa là, các mô hình trước đó đã được đào tạo trên nhiều ví dụ về âm thanh lời nói trong đó mỗi ví dụ có một bản phiên âm liên quan. Để giải thích ý tưởng này, hãy xem xét dạng sóng này:
Không hoàn toàn rõ ràng dạng sóng này thể hiện điều gì nếu chỉ nhìn vào nó. Tuy nhiên, nếu bạn được thông báo rằng người phát ra âm thanh này đã nói những từ "hello world", bạn có thể đưa ra một số phỏng đoán thông minh về phần nào của dạng sóng tương ứng với văn bản đại diện cho nó.
Bạn có thể phỏng đoán - một cách chính xác - rằng đoạn đầu tiên của dạng sóng có liên quan đến từ "xin chào". Tương tự, các mô hình ASR có thể tìm hiểu cách tạo liên kết giữa các phân đoạn dạng sóng âm thanh được nói và văn bản viết.
Tuy nhiên, như các nhà điều tra wav2vec2 ban đầu đã chỉ ra trong bài báo của họ, "[nhiều] hệ thống nhận dạng giọng nói yêu cầu hàng nghìn giờ phiên âm giọng nói để đạt được hiệu suất chấp nhận được, điều này không có sẵn cho đại đa số trong số gần 7.000 ngôn ngữ được sử dụng trên toàn thế giới."
Vì vậy, các nhà điều tra wav2vec2 đã phát minh ra một mô hình mới mà không cần thiết phải có "hàng nghìn giờ phiên âm giọng nói" để huấn luyện hệ thống. Họ đề cập đến một sự tương tự hữu ích của con người: trẻ sơ sinh không học nói bằng cách nghe một từ và sau đó nhìn thấy ngay văn bản trình bày của từ đó.
Các em học cách trình bày lời nói bằng cách lắng nghe những người trong môi trường của mình (ví dụ: cha mẹ, anh chị em, v.v.). wav2vec2 học theo cách tương tự: bằng cách lắng nghe trước.
Tất nhiên, làm thế nào để đạt được điều này là điểm thảo luận trong bài viết này. Hãy nhớ rằng wav2vec2 được thiết kế rộng rãi để thực hiện 2 điều :
Tìm hiểu những đơn vị giọng nói nào sẽ được cung cấp các mẫu âm thanh không được gắn nhãn.
Dự đoán các đơn vị lời nói chính xác.
Tại thời điểm này, bạn không cần phải hiểu hoàn toàn ý nghĩa của những điểm này. Chúng sẽ được giải thích dưới đây. Bây giờ chỉ cần giữ chúng ở phía sau đầu của bạn.
Hãy tưởng tượng bạn có một tập dữ liệu khổng lồ về các mẫu âm thanh - ví dụ như đối với một số người nói tiếng Anh. Ngay cả khi không có nền tảng chính thức về ngữ âm , bạn có thể hiểu bằng trực giác rằng ngôn ngữ tiếng Anh được phát âm bằng cách sử dụng một tập hợp các âm cơ bản được "xâu chuỗi lại với nhau" để tạo thành từ, câu, v.v.
Tất nhiên, nếu bạn là một người nói tiếng Anh, bạn sẽ không nghĩ đến việc nói theo cách này và việc phát âm bất cứ điều gì bạn muốn nói ít nhiều đều tự động! Tuy nhiên, vấn đề là ngôn ngữ nói tiếng Anh - và thực sự là bất kỳ ngôn ngữ nói nào - đều có thể được phân tách thành các âm cơ bản, rời rạc hơn.
Nếu bằng cách nào đó chúng ta có thể thuyết phục một mô hình ASR "trích xuất" những âm thanh cơ bản này, thì nó sẽ cho phép chúng ta mã hóa bất kỳ mẫu âm thanh nào của ngôn ngữ nói bằng cách sử dụng chúng. Đây là những gì wav2vec2 thực hiện bằng cách huấn luyện trước dữ liệu âm thanh.
Trong bối cảnh này, đào tạo trước có nghĩa là phần đầu tiên của quá trình đào tạo mô hình được tự giám sát trong chừng mực nó không được "cho biết" một cách rõ ràng những âm thanh cơ bản phải là gì đối với một tập hợp dữ liệu âm thanh nhất định.
Đi sâu hơn một chút, hệ thống được "nạp" một số lượng lớn các ví dụ chỉ có âm thanh và từ những ví dụ đó, có thể học một tập hợp các đơn vị giọng nói cơ bản .
Do đó, mọi ví dụ về âm thanh đều được cấu tạo một cách hiệu quả từ sự kết hợp nào đó của các đơn vị giọng nói đó; giống như cách bạn có thể chia mẫu âm thanh giọng nói thành một chuỗi âm vị .
Điều quan trọng là các đơn vị giọng nói cơ bản mà wav2vec2 học ngắn hơn âm vị và có độ dài 25 mili giây.
Câu hỏi đặt ra ở thời điểm này là: Làm thế nào wav2vec2 học các đơn vị giọng nói này chỉ từ âm thanh?
Quá trình học các đơn vị giọng nói bắt đầu bằng Bộ mã hóa tính năng. wav2vec2 "mã hóa âm thanh lời nói thông qua mạng nơ-ron tích chập nhiều lớp."
Mạng thần kinh tích chập, hay CNN, là các mô hình cho phép chúng ta tìm hiểu các tính năng từ một đầu vào nhất định mà không cần xác định rõ ràng trước các tính năng đó.
Mỗi lớp của CNN có thể được coi là trích xuất các tính năng từ đầu vào, với các tính năng đó ngày càng phức tạp hơn khi bạn chuyển lên các lớp cao hơn.
Trong trường hợp dữ liệu âm thanh, bạn có thể tưởng tượng lớp đầu tiên trong CNN kiểm tra các cửa sổ thông tin âm thanh và trích xuất các tính năng cấp thấp, chẳng hạn như âm thanh nguyên thủy.
Lớp sau trong cùng một CNN, tận dụng các tính năng cấp thấp hơn được trích xuất trong các lớp trước đó, sẽ mã hóa các tính năng cấp cao hơn, chẳng hạn như âm thanh gần đúng với âm vị.
Theo ý tưởng này, wav2vec2 có thể bắt đầu "tìm hiểu xem đơn vị lời nói nào sẽ được cung cấp mẫu âm thanh không được gắn nhãn" bằng cách chuyển các lát thời gian của từng mẫu âm thanh vào Bộ mã hóa tính năng và tạo ra biểu diễn tiềm ẩn của từng lát.
Tuy nhiên, tập hợp các biểu diễn tiềm ẩn không biểu diễn các đơn vị tiếng nói rời rạc. Những cách biểu diễn này phải được rời rạc hóa theo một cách nào đó. Điều này được thực hiện bằng cách chuyển đầu ra của Bộ mã hóa tính năng tới Mô-đun lượng tử hóa .
Thực tế, Mô-đun lượng tử hóa lấy tất cả các biểu diễn âm thanh khác nhau do Bộ mã hóa tính năng tạo ra và giảm chúng thành một tập hợp hữu hạn các đơn vị giọng nói. Tại thời điểm này, bạn nên hỏi xem wav2vec2 nên được đào tạo trước trên một ngôn ngữ hay nhiều ngôn ngữ khác nhau.
Logic cho chúng ta biết rằng việc nắm bắt các đơn vị giọng nói đại diện cho nhiều ngôn ngữ so với một ngôn ngữ có thể sẽ hữu ích hơn khi thiết kế hệ thống ASR có thể được sử dụng trên nhiều ngôn ngữ.
Để đạt được mục tiêu đó, việc đào tạo trước wav2vec2 với việc lựa chọn các mẫu âm thanh đa ngôn ngữ cho phép mô hình tạo ra các đơn vị giọng nói trên thực tế có thể thu được nhiều ngôn ngữ.
Các nhà điều tra wav2vec2 ghi nhận giá trị đằng sau phương pháp này vì "đối với một số ngôn ngữ, ngay cả dữ liệu [âm thanh] cũng bị hạn chế". Những phát hiện ban đầu của họ xác định rằng "một số đơn vị chỉ được sử dụng cho một ngôn ngữ cụ thể, trong khi những đơn vị khác được sử dụng trong các ngôn ngữ tương tự và đôi khi ngay cả trong các ngôn ngữ không giống nhau lắm".
Việc kiểm kê các đơn vị giọng nói là bước đầu tiên để có thể mã hóa các mẫu âm thanh ngôn ngữ nói. Tuy nhiên, điều chúng tôi thực sự muốn đạt được là huấn luyện wav2vec2 về cách các đơn vị này liên hệ với nhau.
Nói cách khác, chúng ta muốn hiểu những đơn vị lời nói nào có thể xuất hiện trong cùng một ngữ cảnh với nhau. wav2vec2 giải quyết nhiệm vụ này thông qua lớp Transformer.
Về cơ bản, Transformer cho phép wav2vec2 tìm hiểu, theo nghĩa thống kê, cách phân bổ các đơn vị giọng nói giữa các ví dụ âm thanh khác nhau. Sự hiểu biết này tạo điều kiện thuận lợi cho việc mã hóa các mẫu âm thanh mà mô hình sẽ "nhìn thấy" sau khi huấn luyện trước.
Cuối cùng, hệ thống ASR cần có khả năng tạo bản phiên âm văn bản cho một chuỗi âm thanh nhất định mà nó chưa từng "nhìn thấy" trước đó. Sau khi đào tạo trước qua các bước được mô tả ở trên, wav2vec2 được tinh chỉnh cho mục đích này. Lần này mô hình hiển thị rõ ràng các ví dụ về mẫu âm thanh và bản ghi âm liên quan của chúng.
Tại thời điểm này, mô hình có thể sử dụng những gì nó đã học được trong quá trình huấn luyện trước để mã hóa các mẫu âm thanh dưới dạng chuỗi các đơn vị lời nói và ánh xạ các chuỗi đơn vị giọng nói đó thành các chữ cái riêng lẻ trong từ vựng đại diện cho phiên âm (tức là các chữ cái "a" đến " z" trong trường hợp tiếng Anh).
Quá trình học trong quá trình tinh chỉnh sẽ hoàn thành việc huấn luyện mô hình wav2vec2 và cho phép nó dự đoán văn bản cho các mẫu âm thanh mới không nằm trong quá trình huấn luyện trong quá trình tinh chỉnh.
Tất nhiên, cơ chế cấp thấp của wav2vec2 phức tạp hơn nhiều so với những gì được trình bày ở trên. Tuy nhiên, xin nhắc lại, ý tưởng của bài viết này là cung cấp cho bạn sự hiểu biết khái niệm, đơn giản về cách hoạt động của mô hình và cách nó được đào tạo.
wav2vec2 là một khung ML rất mạnh mẽ để xây dựng hệ thống ASR và biến thể XLS-R của nó được giới thiệu vào cuối năm 2021 đã được đào tạo trên 128 ngôn ngữ, do đó cung cấp nền tảng cải tiến để thiết kế các mô hình ASR trên nhiều ngôn ngữ.
Như đã đề cập trong phần Giới thiệu, có sẵn một số tài nguyên kỹ thuật tuyệt vời để giúp bạn tìm hiểu thêm. Đặc biệt, bạn có thể thấy những thứ do Ôm Mặt cung cấp đặc biệt hữu ích.