- Sopro TTS là một mô hình chuyển văn bản thành giọng nói gọn nhẹ cho tiếng Anh, hỗ trợ sao chép giọng nói zero-shot và sinh theo luồng
- Có 169 triệu tham số, tạo âm thanh dài 30 giây trong khoảng 7,5 giây với tốc độ 0.25 RTF trên CPU
- Có thể sao chép giọng của người nói chỉ với âm thanh tham chiếu dài 3~12 giây, sử dụng kiến trúc dilated conv kiểu WaveNet và cross-attention nhẹ
- Đây là dự án chi phí thấp được huấn luyện bằng một GPU L40S duy nhất, và vẫn còn dư địa cải thiện hiệu năng nếu nâng cao chất lượng dữ liệu
- Hỗ trợ cả chế độ streaming và non-streaming, cùng CLI, Python API và web demo, nên có tính hữu dụng cao cho thử nghiệm và tích hợp của lập trình viên
Tổng quan về Sopro TTS
- Sopro có nghĩa là “hơi thở” trong tiếng Bồ Đào Nha, được phát triển như một mô hình TTS tiếng Anh gọn nhẹ
- Kiến trúc kết hợp dilated convolution và cross-attention thay vì Transformer
- Là một dự án cá nhân được huấn luyện bằng một GPU L40S duy nhất
- Đặc điểm chính
- 169M tham số, hỗ trợ streaming, sao chép giọng nói zero-shot
- 0.25 RTF trên CPU, tạo audio 30 giây trong 7,5 giây
- Có thể sao chép giọng bằng audio tham chiếu dài 3~12 giây
Cài đặt và chạy
- Chỉ chỉ định phiên bản phụ thuộc tối thiểu nên có thể cài đặt mà không cần tạo môi trường riêng
- Ví dụ: phiên bản
torch==2.6.0 cải thiện hiệu năng khoảng 3 lần trên CPU M3
- Cách cài đặt
- PyPI:
pip install sopro
- Kho GitHub:
git clone rồi pip install -e .
Ví dụ sử dụng
- Ví dụ chạy CLI
- Có thể chỉ định văn bản, audio tham chiếu và tệp đầu ra
- Cung cấp các tham số điều khiển chi tiết như
--style_strength, --no_stop_head, --stop_threshold, --stop_patience
- Ví dụ Python API
- Tải mô hình bằng
SoproTTS.from_pretrained("samuel-vitorino/sopro", device="cpu")
- Hỗ trợ cả hai cách non-streaming và streaming
- Trong chế độ streaming, có thể ghép tuần tự các chunk audio được tạo ra
Demo streaming tương tác
- Sau khi cài đặt, chạy máy chủ cục bộ bằng lệnh
uvicorn demo.server:app
- Hoặc có thể build và chạy bằng Docker
docker build -t sopro-demo .
docker run --rm -p 8000:8000 sopro-demo
- Có thể xem demo bằng cách truy cập
http://localhost:8000 trên trình duyệt
Lưu ý và giới hạn
- Có thể thiếu tính nhất quán của đầu ra, cần điều chỉnh tham số
- Chất lượng sao chép giọng nói phụ thuộc lớn vào chất lượng micro và tiếng ồn xung quanh
- Phiên bản non-streaming cho chất lượng âm thanh tốt hơn
- Độ dài sinh bị giới hạn khoảng 32 giây (400 frame), nếu vượt quá có thể xuất hiện đầu ra ảo giác
- Cần ffmpeg khi dùng torchaudio, khuyến nghị dùng
soundfile
- Dữ liệu huấn luyện ở dạng đã được token hóa sẵn, audio gốc đã bị loại bỏ do vấn đề dung lượng lưu trữ
- Có đề cập kế hoạch công khai mã huấn luyện và mở rộng hỗ trợ đa ngôn ngữ trong tương lai
Dữ liệu huấn luyện
- Sử dụng các bộ dữ liệu Emilia YODAS, LibriTTS-R, Mozilla Common Voice 22, MLS
Tham khảo và công nghệ nền tảng
- Tận dụng nghiên cứu và mã nguồn từ Mimi Codec (Kyutai), WaveNet, Attentive Stats Pooling, AudioLM, CSM
1 bình luận
Ý kiến trên Hacker News
Đây là một dự án hay và hữu ích
Cá nhân tôi nghĩ Chatterbox-TTS-Server là phương án thay thế tốt nhất
Tốc độ thì chậm nhưng chất lượng âm thanh khá cao
Mô hình này hỗ trợ voice cloning và điều khiển cảm xúc thủ công thông qua vector cảm xúc, nên tôi thấy nó là một công cụ rất mạnh
Nó đặc biệt hữu ích trong dự án orchestration mô hình mà tôi đang làm
Một mô hình phân loại cảm xúc bên ngoài đồng thời điều khiển persona của LLM và đầu ra TTS để giữ tính nhất quán
Xác suất truy xuất “ký ức” cũng thay đổi theo trạng thái cảm xúc, và hầu như không có TTS nào cho phép điều khiển tinh vi như IndexTTS2
Đầu ra của Sopro TTS, xét theo video trên GitHub, tệ một cách nghiêm trọng và gần như không dùng thực tế được
Trong khi đó Chatterbox cho kết quả đáng kinh ngạc
GPU của tôi là RTX5090, và nó rất nhanh với thời gian chạy khoảng 2 giây để tạo ra 1 giây âm thanh
Có thể tham khảo ví dụ thứ nhất và ví dụ thứ hai. Ví dụ sau là bản demo clone giọng của YouTuber ArbitorIan
Thật sự rất hay!
Tôi đang dùng Kokoro (82M) trên máy local, nó chạy nhanh và chất lượng âm thanh cũng rất tốt
Tôi đang dùng ricky0123/vad để xử lý voice activation, sau đó dùng Web Speech API để nhận diện nhanh rồi dùng TTS thương mại
Đến giờ tôi vẫn chưa tìm được giải pháp mã nguồn mở nào có tốc độ đủ tốt
Tôi tò mò “zero-shot” nghĩa là gì
few-shot là đưa vào một vài ví dụ để định hướng mô hình, còn multi-shot là trải qua nhiều lượt prompt và chỉnh sửa
Cảm giác như đã hiện thực hóa voice cloning đẳng cấp Mission Impossible mà không cần quá trình compile dài dòng
Tôi cũng chia sẻ video YouTube liên quan và bài thơ chơi chữ
Tôi đã thử bằng tiếng Anh và thấy khá ấn tượng
Với một dự án kinh phí thấp thì kết quả thật đáng ngạc nhiên, lại còn rất dễ dùng
Nếu có bản tiếng Đức thì tôi chắc chắn muốn dùng thử
Nếu xét các ràng buộc thì đây là kết quả khá ấn tượng
Tôi tò mò không biết có kế hoạch phát hành phiên bản mạnh hơn không, kiểu ít artifact hơn nhưng cần nhiều tính toán hơn
Tôi chủ yếu dùng Chatterbox, nhưng nếu cái này phát triển lên chất lượng cao thì có thể trở thành một lựa chọn thay thế tốt
Chi phí tính toán khá đắt, nhưng nếu phản hồi từ cộng đồng tốt thì tôi định sẽ phát triển thêm
Nhân tiện, Chatterbox là một mô hình tuyệt vời và cũng là nguồn cảm hứng
Tôi thắc mắc ý nghĩa của “zero-shot”
Nó còn tùy tiện hơn cả ký hiệu Big O
Tức là nếu mô hình học được xác suất có điều kiện P(Audio|Voice) và có thể lấy mẫu cho các lớp giọng nói chưa thấy trong quá trình huấn luyện, thì đó là zero-shot
Việc cung cấp audio tham chiếu không làm thay đổi trọng số mô hình mà thuộc về cung cấp ngữ cảnh
Tôi đã nghe audio và sốc vì chất lượng âm thanh quá kinh khủng
Nó còn tệ hơn giọng máy tính từ 15 năm trước, và tôi không hiểu sao mọi người lại khen được
Tôi đã thử trên nhiều trình duyệt nhưng kết quả vẫn như nhau
Nếu nghiêm trọng đến mức đó thì có thể còn vấn đề khác, tôi muốn cùng xem thử
Công nghệ này thực sự rất hay
Có vẻ về sau nó sẽ còn tốt hơn nữa
Tuy vậy, dù chỉ là giải pháp tạm thời thì cũng nên thêm một bước hậu xử lý âm thanh đơn giản để giảm độ khàn/rá
Tôi tò mò không biết trong số các mô hình này có cái nào hoạt động như bộ biến đổi giọng nói speech-to-speech không
Tức là nhận một mẫu giọng cố định (prompt) cùng luồng audio đầu vào thời gian thực, rồi chuyển giọng của đầu vào sang tông và âm sắc của prompt
Với V-tuber thì không cần đổi prompt thường xuyên, nên có lẽ cũng có thể áp một âm sắc cố định bằng một lần fine-tuning
Tuy nhiên xử lý streaming thì bạn phải tự triển khai
Nó nhận audio A (phong cách) và B (nội dung), rồi kết hợp âm sắc của A với phát âm và ngữ điệu của B
Thực ra các mô hình kiểu này đúng hơn nên xem là S+STS (speech+style to speech) chứ không hẳn là “TTS”
Blog chính thức giải thích rất chi tiết
Tuy nhiên có mâu thuẫn giữa tác giả gốc và các nhà phát triển, nên tốt nhất tránh main fork và tìm một fork mới hơn được duy trì bằng tiếng Anh