Hướng dẫn
Điều thật sự diễn ra khi chiếc Mac của bạn chép lời âm thanh ngay trên máy
"AI trên thiết bị" là một cụm từ tiếp thị gắn vào một phần kỹ thuật rất cụ thể và khá thú vị. Đây là toàn bộ quy trình, từ tệp đến văn bản.
Ứng dụng nào bây giờ cũng nói mình làm mọi thứ "trên thiết bị". Biết điều đó thật sự bao gồm những gì là điều đáng làm, một phần vì nó giải thích vì sao chép lời ngay trên máy tiến bộ nhanh đến vậy, và một phần vì đó là khác biệt giữa một khẳng định bạn kiểm chứng được và một khẳng định bạn không kiểm chứng được.
Đây là quy trình, theo đúng thứ tự.
Bước 1: Mọi thứ trở thành mono 16 kHz #
Whisper, mô hình nhận dạng giọng nói mà gần như mọi ứng dụng loại này đều dùng, chỉ nhận đúng một kiểu đầu vào: 16.000 mẫu mỗi giây, một kênh, dưới dạng số thực dấu phẩy động trong khoảng -1 đến 1.
Vậy nên việc đầu tiên mọi công cụ chép lời làm là vứt bỏ phần lớn âm thanh của bạn. Bản ghi stereo 48 kHz của bạn được trộn xuống và giảm tần số lấy mẫu. Tệp video thì bị tách lấy luồng âm thanh còn phần hình bị bỏ đi.
Nghe có vẻ tàn phá nhưng phần lớn thì không: tiếng nói của con người nằm dưới 8 kHz, và theo giới hạn Nyquist thì tần số lấy mẫu 16 kHz thu được trọn vẹn phần đó. Thứ bạn mất là chất lượng âm nhạc, không phải khả năng nghe hiểu.
Hệ quả thực tế: bản ghi 96 kHz đắt tiền của bạn chẳng đem lại lợi ích gì ở bước này, và một tệp bị nén tệ cũng không được nó cứu vãn.
Bước 2: Phát hiện hoạt động giọng nói quyết định phần nào đáng chép lời #
Một mô hình thứ hai, nhỏ hơn nhiều, chạy trước và đánh dấu những phần âm thanh nào chứa tiếng người.
Mô hình được dùng phổ biến là Silero VAD — chưa tới một megabyte, và nó trả lời đúng một câu hỏi: có tiếng nói hay không, trên một lưới thời gian mịn.
Nó tồn tại vì hai lý do. Nó làm mọi thứ nhanh hơn, vì giải mã sự im lặng là công sức bỏ phí. Quan trọng hơn, nó ngăn kiểu hỏng mà ở đó Whisper, khi được đưa cho phần âm thanh không có tiếng nói, vẫn sinh ra văn bản và rơi vào vòng lặp. VAD là lý do việc chép lời hiện đại ngay trên máy không còn tạo ra hàng trang câu chữ lặp lại.
Bước 3: Âm thanh trở thành một bức ảnh #
Whisper không tiêu thụ dạng sóng. Nó tiêu thụ một phổ đồ log-Mel: một hình ảnh hai chiều với trục ngang là thời gian, trục dọc là tần số theo thang khớp với thính giác con người, và độ sáng là năng lượng.
Đây chính là bước nhảy về khái niệm trong nhận dạng giọng nói hiện đại. Một khi âm thanh đã là hình ảnh, bạn dùng được bộ máy vốn xây cho thị giác máy tính lên nó — và đó đúng là điều xảy ra tiếp theo.
Bước 4: Bộ mã hóa chạy, lý tưởng nhất là trên Neural Engine #
Whisper là một transformer gồm hai nửa. Bộ mã hóa đọc phổ đồ và biến nó thành một biểu diễn số dày đặc của những gì đã được nói. Đây là nửa tốn kém — phép nhân ma trận nặng nề và đều đặn trên một đầu vào có kích thước cố định.
Mà đó chính xác là thứ Neural Engine của Apple được tạo ra để làm: một khối chuyên dụng trên con chip, thực hiện đúng một loại phép tính hẹp cực nhanh và cực ít tốn điện. Nó không đa dụng — bạn không chạy được mã tùy ý trên đó — nhưng một bộ mã hóa transformer thì đúng hình dạng của nó.
Để đưa bộ mã hóa lên đó cần biên dịch trước mô hình sang định dạng của Core ML (.mlmodelc). Những ứng dụng làm việc này sẽ đi kèm một bộ mã hóa Core ML bên cạnh các trọng số mô hình, và đó là khác biệt tốc độ lớn nhất giữa một ứng dụng chép lời nhanh và một ứng dụng chậm trên cùng phần cứng.
Bước 5: Bộ giải mã chạy trên GPU #
Bộ giải mã tạo ra phần văn bản thật sự, từng mã một, mỗi mã đều dựa trên mọi thứ đứng trước nó.
Nửa này mang tính tuần tự, nên nó không hợp với thiết kế thiên về xử lý theo lô của Neural Engine. Thay vào đó nó chạy trên GPU thông qua Metal. Trên Apple Silicon, GPU đó dùng chung bộ nhớ với CPU, nên trọng số của mô hình không phải sao chép qua một đường bus — đây là phần lớn lý do Apple Silicon mạnh hơn tầm vóc của nó trong việc suy luận ngay trên máy.
Bước 6: Dấu thời gian ra đời từ chính quá trình đó #
Whisper phát ra các mã dấu thời gian đặc biệt xen kẽ với các từ. Đó là cách bạn có được một tệp SRT với thời gian hợp lý thay vì một bức tường chữ — thông tin thời gian rơi ra từ chính lượt giải mã đó, chứ không phải từ một bước căn chỉnh riêng.
Khi VAD đã bỏ qua các đoạn im lặng, các mốc thời gian phải được ánh xạ ngược về bản ghi gốc, nếu không thì mọi dấu thời gian sau khoảng trống đầu tiên đều sẽ sai.
Mô hình, và vì sao nó nhỏ hơn ta tưởng #
Mô hình Base của Whisper có 74 triệu tham số. Ở độ chính xác đầy đủ thì đó là khoảng 140 MB, mà phần lớn trong đó là dư thừa cho mục đích này.
Lượng tử hóa lưu mỗi trọng số bằng ít bit hơn. Trong một mô hình q5_1, trọng số dùng 5 bit cộng với một hệ số tỉ lệ và độ lệch nhỏ cho mỗi khối — khoảng 6 bit cho mỗi trọng số thay vì 16. Kết quả là khoảng 60 MB với những khác biệt về độ chính xác khó phát hiện trên lời nói thông thường.
Điều đó quan trọng với một chiếc điện thoại, nơi một lượt tải về 140 MB và lượng bộ nhớ tương ứng là chi phí thật. Đó cũng là lý do câu trả lời thành thật cho "tôi nên dùng mô hình nào" thường là một mô hình nhỏ hơn người ta tưởng.
Tệp dài, và vì sao bộ nhớ là phần khó #
API của Whisper nhận một vùng đệm mẫu liền mạch. Hai tiếng ở 16 kHz là khoảng 470 MB số thực, cộng thêm một phổ đồ có kích thước tương đương.
Trên Mac thì ổn. Trên iPhone, chừng đó đủ để một ứng dụng bị hệ thống tắt — đó là lý do một số ứng dụng chép lời trên di động lặng lẽ giới hạn độ dài tệp.
Cách khắc phục là chép lời theo cửa sổ: giữ phần âm thanh đã giải mã trên ổ đĩa, ánh xạ vào từng lát một, chép lời lát đó, rồi giải phóng. Bộ nhớ đỉnh khi ấy phụ thuộc vào cửa sổ chứ không phải tệp. Chỗ tinh tế là cắt ở đâu — cắt giữa một từ thì bạn nhận được một câu bị băm nát ở mỗi ranh giới, nên một cách cài đặt hợp lý sẽ cắt ở điểm yên tĩnh nhất trong một vùng chồng lấn, và dịch dấu thời gian của mỗi cửa sổ trở lại dòng thời gian gốc.
Vì sao những điều này quan trọng với bạn #
Từ quy trình ở trên suy ra ba điều, và chúng không phải là lời quảng cáo:
Nó chạy được khi không có mạng. Không bước nào ở trên cần đến mạng. Điều này kiểm tra được trong ba mươi giây — chúng tôi đã viết cách làm, bao gồm những phép thử không đòi bạn phải tin chúng tôi.
Bản ghi của bạn không phải dữ liệu huấn luyện của ai cả. Vấn đề không phải là một ứng dụng chạy trên máy hứa sẽ không huấn luyện trên âm thanh của bạn. Vấn đề là âm thanh của bạn chưa từng ở nơi nào để chuyện đó có thể xảy ra.
Tốc độ phụ thuộc vào phần cứng của bạn, không phải hàng đợi của ai đó. Một lượt chép lời ngay trên máy chạy nhanh hơn thời gian thực nhiều lần trên Apple Silicon, một cách ổn định, vào 3 giờ sáng chủ nhật, không có giới hạn tần suất.
Tóm lại #
Âm thanh được giảm xuống mono 16 kHz, việc phát hiện giọng nói loại bỏ những phần không có tiếng nói, phần còn lại trở thành một phổ đồ, một bộ mã hóa transformer xử lý nó trên Neural Engine, một bộ giải mã tạo ra văn bản trên GPU với dấu thời gian xen kẽ, và việc lượng tử hóa làm mô hình đủ nhỏ để tất cả những thứ đó vừa vặn trên một chiếc điện thoại.
Không phần nào cần đến máy chủ, và đó chính là toàn bộ vấn đề.
Tải Offline Transcription
Chuyển âm thanh và video thành văn bản hoàn toàn trên chính chiếc Mac của bạn. Không có gì được tải lên, không cần tài khoản, không tính phí theo phút.