Text-to-Speech
Safetensors
Vietnamese
qwen2

VieNeu-TTS

Github Hugging Face

VieNeu-TTS là mô hình Text-to-Speech (TTS) tiếng Việt đầu tiên chạy trên thiết bị cá nhân với khả năng nhân bản giọng nói tức thì. Được fine-tune từ NeuTTS Air, VieNeu-TTS mang đến giọng nói tiếng Việt tự nhiên, siêu chân thực với hiệu suất thời gian thực trên CPU.

Dựa trên backbone Qwen 0.5B LLM, VieNeu-TTS kết hợp giữa tốc độ, kích thước nhỏ gọn và chất lượng âm thanh cao - hoàn hảo cho các ứng dụng voice agent, trợ lý ảo, đồ chơi tương tác và các ứng dụng yêu cầu bảo mật cao chạy trên thiết bị local.

Tác giả: Phạm Nguyễn Ngọc Bảo

Chi tiết mô hình

VieNeu-TTS được xây dựng dựa trên kiến trúc NeuTTS Air với các thành phần chính:

  • Base Model: Qwen 0.5B
  • Audio Codec: NeuCodec
  • Format: Safetensors và GGUF (Q8, Q4) cho suy luận hiệu quả trên thiết bị
  • Trách nhiệm: Audio đầu ra có watermark tích hợp
  • Tốc độ suy luận: Sinh giọng nói thời gian thực trên thiết bị tầm trung
  • Tiêu thụ điện năng: Tối ưu cho thiết bị di động và nhúng
  • Dataset huấn luyện:

Bắt đầu

Clone Git Repo

git clone https://github.com/pnnbao97/VieNeu-TTS.git
cd VieNeu-TTS

Cài đặt espeak (dependency bắt buộc)

Tham khảo hướng dẫn chi tiết tại: https://github.com/espeak-ng/espeak-ng/blob/master/docs/guide.md

# Mac OS
brew install espeak

# Ubuntu/Debian
sudo apt install espeak

# Arch Linux
paru -S aur/espeak

# Windows
# Tải và cài đặt từ: https://github.com/espeak-ng/espeak-ng/releases
# Mặc định cài vào: C:\Program Files\eSpeak NG\
# Code sẽ tự động nhận diện đường dẫn này

Cài đặt Python dependencies

File requirements bao gồm các dependencies cần thiết để chạy model với PyTorch. Khi sử dụng ONNX decoder hoặc GGML model, một số dependencies (như PyTorch) có thể không cần thiết.

Inference tương thích và đã được test trên python>=3.11.

# Cài đặt từ requirements.txt
pip install -r requirements.txt

# Hoặc sử dụng uv (nếu có pyproject.toml)
uv pip install -r requirements.txt

# Hoặc cài đặt từ pyproject.toml
pip install -e .

Lưu ý: Nếu bạn sử dụng GPU, hãy đảm bảo cài đặt PyTorch với hỗ trợ CUDA phù hợp:

# Xem hướng dẫn tại: https://pytorch.org/get-started/locally/
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118  # CUDA 11.8

💻 Cách sử dụng

1. Sử dụng qua Python API

Ví dụ cơ bản

from vieneutts import VieNeuTTS
import soundfile as sf
import os

# Văn bản cần tổng hợp
input_texts = [
    "Các khóa học trực tuyến đang giúp học sinh tiếp cận kiến thức mọi lúc mọi nơi.",
    "Các nghiên cứu về bệnh Alzheimer cho thấy tác dụng tích cực của các bài tập trí não.",
    "Một tiểu thuyết trinh thám hiện đại dẫn dắt độc giả qua những tình tiết phức tạp, bí ẩn.",
]

output_dir = "./output_audio"
os.makedirs(output_dir, exist_ok=True)

# Đường dẫn file tham chiếu
# Nam miền Nam
ref_audio_path = "./sample/id_0001.wav"
ref_text_path = "./sample/id_0001.txt"
# Nữ miền Nam
# ref_audio_path = "./sample/id_0002.wav"
# ref_text_path = "./sample/id_0002.txt"

ref_text = open(ref_text_path, "r", encoding="utf-8").read()

# Khởi tạo model
tts = VieNeuTTS(
    backbone_repo="pnnbao-ump/VieNeu-TTS",
    backbone_device="cuda",  # hoặc "cpu" nếu không có GPU
    codec_repo="neuphonic/neucodec",
    codec_device="cuda"  # hoặc "cpu" nếu không có GPU
)

print("Encoding reference audio")
ref_codes = tts.encode_reference(ref_audio_path)

# Tổng hợp giọng nói cho nhiều văn bản
for i, text in enumerate(input_texts, 1):
    print(f"Generating audio for example {i}: {text}")
    wav = tts.infer(text, ref_codes, ref_text)
    output_path = os.path.join(output_dir, f"output_{i}.wav")
    sf.write(output_path, wav, 24000)
    print(f"Saved to {output_path}")

2. Sử dụng qua Gradio Web Interface (Local)

Chạy ứng dụng web đơn giản với giao diện trực quan:

python gradio_app.py

Sau đó mở trình duyệt và truy cập http://127.0.0.1:7860

Tính năng của Gradio App:

  • ✅ Chọn giọng từ 6 giọng mẫu có sẵn
  • ✅ Upload audio tùy chỉnh để clone giọng
  • ✅ Preview và download kết quả
  • ✅ Có ví dụ mẫu sẵn để thử nghiệm

3. Giọng mẫu có sẵn

Trong thư mục sample/, có 6 giọng mẫu sẵn có:

File Giới tính Miền Mô tả
id_0001 Nam Miền Nam Giọng nam 1
id_0002 Nữ Miền Nam Giọng nữ 1
id_0003 Nam Miền Nam Giọng nam 2
id_0004 Nữ Miền Nam Giọng nữ 2
id_0005 Nam Miền Nam Giọng nam 3
id_0007 Nam Miền Nam Giọng nam 4

Quy ước:

  • File số lẻ (1, 3, 5, 7) → Giọng Nam
  • File số chẵn (2, 4) → Giọng Nữ

🔧 Sử dụng nâng cao

Voice Cloning với audio tùy chỉnh

Model có thể clone giọng từ bất kỳ audio nào của bạn (với text tương ứng):

from vieneutts import VieNeuTTS
import soundfile as sf

# Khởi tạo model
tts = VieNeuTTS(
    backbone_repo="pnnbao-ump/VieNeu-TTS",
    backbone_device="cuda",
    codec_repo="neuphonic/neucodec",
    codec_device="cuda"
)

# Sử dụng audio của bạn
ref_audio_path = "./your_audio.wav"
ref_text = "Nội dung chính xác của audio mẫu"  # Phải khớp với nội dung audio

# Encode reference audio
ref_codes = tts.encode_reference(ref_audio_path)

# Tổng hợp giọng nói
text = "Văn bản bạn muốn tổng hợp"
wav = tts.infer(text, ref_codes, ref_text)
sf.write("output.wav", wav, 24000)

⚠️ Lưu ý:

  • Chất lượng audio mẫu ảnh hưởng lớn đến kết quả
  • Nội dung text phải khớp chính xác với audio
  • Để có kết quả tốt nhất, nên finetune model trên giọng của bạn (xem hướng dẫn finetune)

Tính năng chính

🗣 Giọng nói siêu chân thực - Tạo ra giọng nói tiếng Việt tự nhiên, giống người thật với độ rõ ràng và cảm xúc cao

📱 Chạy trên thiết bị cá nhân - Được tối ưu hóa để chạy trên điện thoại, laptop, hoặc thậm chí Raspberry Pi mà không cần kết nối internet

👫 Nhân bản giọng nói tức thì - Chỉ cần 3 giây audio mẫu để tạo ra giọng nói tùy chỉnh của riêng bạn

🚄 Kiến trúc nhẹ và hiệu quả - Backbone 0.5B params, cân bằng hoàn hảo giữa tốc độ, kích thước và chất lượng cho ứng dụng thực tế

🇻🇳 Tối ưu cho tiếng Việt - Fine-tuned đặc biệt trên dữ liệu tiếng Việt để đảm bảo phát âm chính xác các thanh điệu và âm tiết

File mẫu sẵn có

Bạn có thể tìm thấy các mẫu sẵn sàng sử dụng trong thư mục sample

Hướng dẫn để đạt kết quả tốt nhất

Để có hiệu suất tối ưu, audio mẫu tham chiếu nên:

  • Mono channel
  • Sample rate: 16-44 kHz
  • Độ dài: 3-15 giây
  • Lưu dưới dạng: .wav file
  • Chất lượng âm thanh: Sạch - ít hoặc không có tiếng ồn nền
  • Nội dung: Lời nói tự nhiên, liên tục - như độc thoại hoặc hội thoại, với ít khoảng dừng, để mô hình có thể nắm bắt giọng điệu một cách hiệu quả
  • Ngôn ngữ: Nội dung tiếng Việt để đạt kết quả tốt nhất

Trách nhiệm sử dụng

Mỗi file audio được tạo bởi VieNeu-TTS đều bao gồm Perth (Perceptual Threshold) Watermarker để đảm bảo tính trách nhiệm và truy vết nguồn gốc.

⚠️ Khuyến cáo

Vui lòng không sử dụng mô hình này cho mục đích xấu hoặc vi phạm pháp luật, bao gồm:

  • Mạo danh giọng nói người khác mà không có sự đồng ý
  • Tạo nội dung sai sự thật, lừa đảo
  • Vi phạm quyền riêng tư hoặc quyền sở hữu trí tuệ
  • Các hành vi vi phạm pháp luật khác

Hãy tôn trọng quyền riêng tư và quyền sở hữu trí tuệ của người khác.

⚠️ Giới hạn

  • Mô hình có thể không phát âm chính xác 100% các từ tiếng Việt phức tạp hoặc từ vựng chuyên ngành
  • Chất lượng đầu ra phụ thuộc nhiều vào chất lượng của audio tham chiếu
  • Hiệu suất có thể giảm với văn bản quá dài (khuyến nghị chia nhỏ văn bản dài, tối đa ~500 ký tự)
  • Văn bản đầu vào nên ở dạng chuẩn, tránh viết tắt hoặc ký tự đặc biệt không chuẩn

🐛 Xử lý lỗi thường gặp

Lỗi: "Failed to import espeak"

Nguyên nhân: Chưa cài đặt hoặc chưa cấu hình đúng eSpeak NG

Giải pháp:

  • Windows: Đảm bảo đã cài đặt eSpeak NG vào C:\Program Files\eSpeak NG\
  • Linux: Chạy sudo apt install espeak hoặc sudo apt install espeak-ng
  • MacOS: Chạy brew install espeak hoặc brew install espeak-ng

Lỗi: "CUDA out of memory"

Nguyên nhân: GPU không đủ bộ nhớ

Giải pháp:

  • Sử dụng CPU: đổi backbone_device="cpu"codec_device="cpu"
  • Hoặc sử dụng model quantized (GGUF Q4/Q8)

Lỗi: "No valid speech tokens found"

Nguyên nhân: Model không generate được speech tokens hợp lệ

Giải pháp:

  • Kiểm tra lại text input (không để trống, không quá dài)
  • Kiểm tra audio reference (đảm bảo file hợp lệ)
  • Thử với text ngắn hơn

📊 Hiệu suất

  • Sample rate: 24kHz
  • Inference time: ~1-3 giây cho văn bản 100-200 ký tự (tùy hardware)
  • GPU: NVIDIA GPU với CUDA được khuyến nghị để có tốc độ tốt nhất
  • CPU: Có thể chạy được nhưng sẽ chậm hơn đáng kể
  • Memory: Cần ~2-4GB RAM cho model và codec

📚 Tài liệu tham khảo

📄 License

Apache 2.0

Trích dẫn

Nếu bạn sử dụng VieNeu-TTS trong nghiên cứu hoặc ứng dụng của mình, vui lòng trích dẫn:

@misc{vieneutts2025,
  title={VieNeu-TTS: Vietnamese Text-to-Speech with Instant Voice Cloning},
  author={Pham Nguyen Ngoc Bao},
  year={2025},
  publisher={Hugging Face},
  howpublished={\url{https://huggingface.co/pnnbao-ump/VieNeu-TTS}}
}

Và base model NeuTTS Air:

@misc{neuttsair2025,
  title={NeuTTS Air: On-Device Speech Language Model with Instant Voice Cloning},
  author={Neuphonic},
  year={2025},
  publisher={Hugging Face},
  howpublished={\url{https://huggingface.co/neuphonic/neutts-air}}
}

Liên hệ

Ghi nhận

Dự án này được xây dựng dựa trên NeuTTS Air của Neuphonic. Xin gửi lời cảm ơn chân thành đến đội ngũ Neuphonic đã tạo ra mô hình base xuất sắc này và công khai cho cộng đồng.


Lưu ý: Đây là phiên bản nghiên cứu và thử nghiệm. Vui lòng báo cáo các vấn đề hoặc đóng góp cải tiến qua GitHub Issues.


🙏 Đóng góp

Mọi đóng góp đều được chào đón! Vui lòng:

  1. Fork the repository
  2. Tạo branch mới cho feature của bạn (git checkout -b feature/AmazingFeature)
  3. Commit các thay đổi (git commit -m 'Add some AmazingFeature')
  4. Push lên branch (git push origin feature/AmazingFeature)
  5. Mở Pull Request

📞 Hỗ trợ

Nếu bạn gặp vấn đề hoặc có câu hỏi:


Made with ❤️ for Vietnamese TTS community

Downloads last month
842
Safetensors
Model size
0.6B params
Tensor type
BF16
·
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for pnnbao-ump/VieNeu-TTS

Finetuned
(8)
this model

Datasets used to train pnnbao-ump/VieNeu-TTS

Space using pnnbao-ump/VieNeu-TTS 1