Căn chỉnh cưỡng bức

Qwen3-ForcedAligner cung cấp khả năng căn chỉnh dấu thời gian cấp từ cho âm thanh. Nó thực hiện một forward pass không tự hồi quy duy nhất để căn chỉnh từng từ trong bản chuyển lời nói với vị trí chính xác của nó trong dạng sóng âm thanh.

Cách hoạt động

Aligner dùng căn chỉnh CTC (Connectionist Temporal Classification) với một bước hiệu chỉnh tính đơn điệu bằng LIS (Longest Increasing Subsequence). Điều này đảm bảo các dấu thời gian luôn theo thứ tự, ngay cả khi đầu ra CTC thô có những bất nhất nhỏ.

Thuộc tínhGiá trị
Phương pháp căn chỉnhCTC với hiệu chỉnh đơn điệu LIS
Độ phân giải dấu thời gian80 ms
Lớp đầu ra5000
Chế độ suy luậnKhông tự hồi quy (một forward pass duy nhất)

Sử dụng CLI

Căn chỉnh một tệp âm thanh. Nếu không cung cấp bản chuyển lời nói, âm thanh sẽ được chuyển thành văn bản tự động trước bằng Qwen3-ASR:

.build/release/speech align recording.wav

Cung cấp bản chuyển lời nói đã biết để bỏ qua bước chuyển lời nói tự động:

.build/release/speech align recording.wav --text "The quick brown fox jumps over the lazy dog"

Tuỳ chọn

# Chỉ định trực tiếp văn bản chuyển lời nói
.build/release/speech align recording.wav --text "known transcript"

# Chọn mô hình ASR cho bước chuyển lời nói tự động
.build/release/speech align recording.wav --model 1.7b

# Chỉ định biến thể mô hình aligner
.build/release/speech align recording.wav --aligner-model default

# Thiết lập ngôn ngữ
.build/release/speech align recording.wav --language en

Hỗ trợ ngôn ngữ

Truyền --language tương ứng với ngôn ngữ của âm thanh. Mô hình được huấn luyện chính thức trên 11 ngôn ngữ (en, zh, ja, ko, es, fr, de, ru, it, pt, ar); bộ tiền xử lý cũng phân đoạn morpheme tiếng Nhật, từ tiếng Hàn, từng ký tự tiếng Trung, và tiếng Thái / Lào / Khmer / Miến Điện / Tạng một cách tự nhiên qua NLTokenizer của Apple. Các dấu kết hợp (matra Devanagari, nguyên âm Thái, v.v.) được bảo toàn để các từ như नमस्तेสวัสดี giữ nguyên vẹn.

Biến thể mô hình

Có nhiều biến thể mô hình khả dụng, đánh đổi giữa dung lượng và độ chính xác:

Biến thểID mô hìnhDung lượng
MLX 4-bit (mặc định)aufklarer/Qwen3-ForcedAligner-0.6B-4bit~979 MB
MLX 8-bitaufklarer/Qwen3-ForcedAligner-0.6B-8bit~1.3 GB
MLX bf16aufklarer/Qwen3-ForcedAligner-0.6B-bf16~1.8 GB
CoreML INT4aufklarer/Qwen3-ForcedAligner-0.6B-CoreML-INT4~662 MB
CoreML INT8aufklarer/Qwen3-ForcedAligner-0.6B-CoreML-INT8~1.1 GB

Chọn một biến thể với --aligner-model:

.build/release/speech align recording.wav --aligner-model aufklarer/Qwen3-ForcedAligner-0.6B-8bit

Định dạng đầu ra

Aligner xuất ra một dòng cho mỗi từ với dấu thời gian bắt đầu và kết thúc tính bằng giây:

[0.24 - 0.48] The
[0.48 - 0.72] quick
[0.72 - 1.04] brown
[1.04 - 1.36] fox
[1.36 - 1.68] jumps
[1.68 - 1.92] over
[1.92 - 2.08] the
[2.08 - 2.40] lazy
[2.40 - 2.80] dog

Mỗi cặp dấu thời gian cho biết thời điểm bắt đầu và kết thúc của từ trong âm thanh, với độ phân giải 80 ms.

Xử lý âm thanh dài

Về nguyên tắc, đầu phân loại có thể xử lý lên đến 400 giây (5000 lớp × 80 ms), nhưng trên Qwen3-ForcedAligner-0.6B đã phát hành, mô hình chỉ được huấn luyện đáng tin cậy đến khoảng 270 giây. Vượt quá điểm đó, mô hình phát ra các chỉ số dấu thời gian nhiễu và xử lý hậu kỳ LIS gộp mọi từ cuối lên cùng một dấu thời gian.

CLI tự động xử lý chuyện này: âm thanh dài được chia đoạn tại điểm bão hoà và căn chỉnh lại. Bạn sẽ thấy một thông báo một dòng khi việc chia đoạn được kích hoạt:

Audio 306.2s saturated after word 690 (272.6s); chunking remaining 33.6s (pass 2)

Đặt ALIGN_DEBUG=1 để xuất các chỉ số dấu thời gian thô và đã hiệu chỉnh khi điều tra các đầu ra bị lệch.

Hạn chế đã biết: phần không có lời nói ở đầu

Khi âm thanh bắt đầu bằng phần không có lời nói (intro nhạc, im lặng kéo dài), mô hình thường đóng dấu từ đầu tiên gần mốc 0 giây vì bộ phân loại không có khái niệm "lời nói chưa bắt đầu". Giải pháp: cắt phần không có lời nói ở đầu trước khi căn chỉnh, hoặc chạy một bước VAD bằng Silero trước để tìm điểm bắt đầu lời nói thực tế.

Quan trọng

Khi không cung cấp --text, aligner trước tiên chạy một bước chuyển lời nói đầy đủ bằng Qwen3-ASR rồi căn chỉnh văn bản thu được. Nghĩa là lần chạy đầu sẽ tải cả mô hình ASR lẫn mô hình aligner. Cung cấp --text sẽ bỏ qua bước ASR và chỉ tải aligner.