3 điểm bởi GN⁺ 2026-01-10 | 1 bình luận | Chia sẻ qua WhatsApp
  • 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
  • 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-streamingstreaming
    • 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

 
GN⁺ 2026-01-10
Ý 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

    • Tôi thích IndexTTS2 hơn
      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
    • Nhưng chất lượng đầu ra của Chatterbox-TTS tốt hơn hẳn
      Đầ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ấtví 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

    • Có ai biết stack trợ lý giọng nói mã nguồn mở nào tốt không?
      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 cũng đã thử Kokoro-JS chạy trong trình duyệt, nhưng độ trễ quá cao và còn không hỗ trợ ngôn ngữ tôi muốn nên khá tiếc
  • Tôi tò mò “zero-shot” nghĩa là gì

    • zero-shot là cách vận hành mô hình bằng một prompt duy nhất (hoặc kèm thêm ngữ cảnh dưới dạng tệp)
      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
    • Trong trường hợp này, có vẻ nó có nghĩa là có thể tạo ra bản clone tốt mà không cần cung cấp thêm mẫu giọng nói khác
  • 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 quanbà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

    • Nhưng vì chỉ dành cho tiếng Anh nên tôi không thử được ngôn ngữ khác
      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

    • Đây là side project của tôi
      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”

    • Tôi nghĩ mấy thuật ngữ *-shot này thực chất là biệt ngữ ngành gần như vô nghĩa
      Nó còn tùy tiện hơn cả ký hiệu Big O
    • Theo định nghĩa trên Wikipedia, zero-shot là thiết lập bài toán trong đó mô hình phải dự đoán mẫu thuộc các lớp chưa từng thấy trong lúc huấn luyện
      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

    • Một số giọng tham chiếu có thể làm giảm chất lượng
      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ử
    • Nếu mẫu này là thứ tốt nhất trong demo, thì độ méo phát âm nặng đến mức tôi nghe là muốn tắt ngay
    • Thoáng nghe tôi còn tưởng đó là giọng RFK
    • Tôi đã thử nhiều giọng nhưng audio tạo ra chẳng giống chút nào, mà cũng không phải là một giọng nói tử tế
    • Tôi cũng khó tin khi nghe. Chất lượng khó chịu đến mức tôi không nghe nổi quá 1 phút
  • 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

    • Chatterbox TTS hỗ trợ việc này ở chế độ “voice cloning”
      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”
    • Tôi không rõ mã nguồn mở có cái nào không, nhưng ElevenLabs đã triển khai ý tưởng này từ lâu
      Blog chính thức giải thích rất chi tiết
    • RVC (Retrieval Voice Conversion) cũng là một bộ chuyển đổi giọng nói mã nguồn mở tố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
    • Trên thực tế nhiều V-tuber dùng công nghệ kiểu này, nên chắc chắn phải có những giải pháp ổn định tồn tại rồi