3 điểm bởi GN⁺ 2023-11-20 | 1 bình luận | Chia sẻ qua WhatsApp
  • StyleTTS2 là mô hình chuyển văn bản thành giọng nói hướng tới tổng hợp TTS ở mức con người bằng cách tận dụng style diffusion và học đối kháng dựa trên speech language model (SLM) quy mô lớn
  • Mô hình hóa style như một biến xác suất tiềm ẩn của diffusion model để tạo ra style phù hợp với văn bản mà không cần reference speech, đồng thời sử dụng latent diffusion hiệu quả nhằm khai thác khả năng tổng hợp giọng nói đa dạng của diffusion model
  • Sử dụng SLM tiền huấn luyện lớn như WavLM làm discriminator, đồng thời áp dụng duration modeling khả vi để thực hiện huấn luyện end-to-end và cải thiện độ tự nhiên của giọng nói
  • Trên bộ dữ liệu đơn người nói LJSpeech, mô hình vượt qua human recordings theo đánh giá của người nói tiếng Anh bản ngữ; trên bộ dữ liệu đa người nói VCTK, mô hình đạt mức ngang với human recordings; mô hình huấn luyện trên LibriTTS cho thấy hiệu năng cao hơn các publicly available models hiện có trong zero-shot speaker adaptation
  • Quy trình huấn luyện và suy luận bao gồm LJSpeech đơn người nói, VCTK·LibriTTS đa người nói, và fine-tuning người nói mới dựa trên mô hình đa người nói đã tiền huấn luyện
    • Huấn luyện giai đoạn đầu dùng accelerate launch train_first.py --config_path ./Configs/config.yml, huấn luyện giai đoạn hai dùng python train_second.py --config_path ./Configs/config.yml
    • Phiên bản DDP của train_second.py không hoạt động nên hiện dùng DP, và script fine-tuning cũng có điều kiện khiến DDP không hoạt động
  • Các điều kiện chạy chính gồm Python >= 3.7, cài đặt requirements.txt, cài phonemizerespeak-ng khi chạy demo, và upsample dữ liệu LJSpeech lên 24 kHz
  • Các mô-đun tiền huấn luyện gồm ASR cho text aligner, JDC cho pitch extractor, và PL-BERT
    • ASR aligner được tiền huấn luyện trên các corpus English (LibriTTS), Japanese (JVS), Chinese (AiShell)
    • JDC pitch extractor chỉ được tiền huấn luyện trên corpus English (LibriTTS)
    • PL-BERT chỉ được tiền huấn luyện trên corpus English (Wikipedia), nên với các ngôn ngữ khác cần PL-BERT dành cho ngôn ngữ đó; multilingual PL-BERT hỗ trợ 14 ngôn ngữ
  • Suy luận được cung cấp qua Inference_LJSpeech.ipynb cho đơn người nói và Inference_LibriTTS.ipynb cho đa người nói, đồng thời có thể tải các mô hình tiền huấn luyện LJSpeech và LibriTTS từ Hugging Face
  • Giấy phép mã nguồn là MIT License, và khi dùng các mô hình tiền huấn luyện phải thông báo cho người nghe rằng đó là giọng nói tổng hợp, hoặc chỉ tổng hợp công khai giọng nói của những người nói mà bạn có quyền sử dụng

1 bình luận

 
GN⁺ 2023-11-20
Ý kiến trên Hacker News
  • Đã tạo một chatbot giọng nói chạy 100% cục bộ bằng các mảnh ghép mã nguồn mở như StyleTTS2, Whisper và OpenHermes2-Mistral-7B, và phản hồi nhanh hơn ChatGPT rất nhiều
    Không phải kiểu tương tác cứng nhắc theo phong cách Siri như các trợ lý giọng nói khác, mà có thể qua lại gần giống hội thoại thật nên khá thú vị
    Trên một PC gaming Windows có GPU Nvidia 12GB, trong bài test với 3060 12GB có thể cài đặt một lần là trò chuyện được mà không cần đụng tới Python hay CUDA: https://apps.microsoft.com/detail/9NC624PBFGB7
    Bản demo vẫn còn thô, như cần tai nghe và chạy dưới dạng ứng dụng console, nhưng tạo cảm giác như đang cho thấy trước những gì sắp có thể làm được trên PC gaming phổ thông chỉ với việc ghép các thành phần mã nguồn mở, và còn có nhiều mô hình cải tiến chưa kịp tích hợp

    • Không rõ việc làm cho chatbot trò chuyện tự nhiên khó đến mức nào
      Đặc biệt là nếu đối phương nói quá lâu thì tôi có thể chen vào để ngắt, hoặc trong lúc tôi đang nói thì AI có thể đệm những câu ngắn, kiểu ngắt lời và xen lời giống như hội thoại bình thường thì sẽ rất hay
      Nếu tốc độ đạt mức nhanh hơn thời gian thực thì về lý thuyết có vẻ đã có thể bắt đầu làm những tính năng đó, và để có hội thoại hoàn toàn tự nhiên thì có lẽ còn cần nhận biết ngữ cảnh để AI nhìn nét mặt và cử chỉ cơ thể rồi phán đoán xem người kia có đang nói dài hay không
    • Đã thử chạy nhưng có vẻ chỉ hoạt động với CUDA 11, mà tôi đã ở môi trường CUDA 12 nên không định phá môi trường CUDA hiện tại chỉ để test
    • Kết quả thử nghiệm khá trái chiều: cài trên ổ khác C:\ thì bị lỗi, chuyển sang C: thì chạy bình thường
      Ngay cả trên EVGA 3080Ti 12GB thì độ trễ vẫn khá lớn, và có vẻ chỉ nói một lần mà nó lại xử lý cùng một đầu vào nhiều lần, lặp lại các kết quả nhận dạng hơi khác nhau
      Cuối cùng còn xuất hiện cả vấn đề nó nghe chính giọng mình và tự trả lời chính nó
    • Không rõ 12GB có phải cấu hình tối thiểu không. Trên 8GB thì bị lỗi thiếu bộ nhớ
    • Whisper không hỗ trợ streaming đầu vào, nên có phải chỉ sau khi toàn bộ phản hồi của LLM kết thúc thì mới có thể kích hoạt phiên âm hay không
  • Tôi đã test StyleTTS2 vào tháng trước và có tổng hợp lại ghi chú từng bước có thể hữu ích cho ai cài đặt cục bộ: https://llm-tracker.info/books/howto-guides/page/styletts-2
    Tôi cũng so sánh nhanh tốc độ và chất lượng của nó với VITS, XTTS bằng mô hình LJSpeech, và StyleTTS2 khá tốt đồng thời rất nhanh: https://fediverse.randomfoo.net/notice/AaOgprU715gcT5GrZ2

    • Suy luận nhanh gấp 15~95 lần thời gian thực trên 4090 thì thật ấn tượng
      Tôi cũng tò mò liệu có làm được các chức năng tương ứng với infill hay outpainting không, và kiểu tổng hợp giọng nói siêu nhanh với chất lượng này hứa hẹn rất nhiều ứng dụng, đặc biệt trong phát triển game indie và game thử nghiệm
    • Tôi đang làm theo hướng dẫn, nhưng nếu không phải người đã dùng sẵn thì mamba không còn được khuyến nghị nữa
      Anchor #mambaforge trong liên kết cũng không hoạt động
  • Tài liệu hơi rời rạc nên quá trình thiết lập có phần khá phiền, nhưng sau khoảng 20 phút thì chạy tốt trên WSL Ubuntu 22.04
    Chất lượng âm thanh rất tốt, tốt hơn nhiều so với các dự án tổng hợp giọng nói mã nguồn mở khác mà tôi từng thấy, và với GPU 4090 thì cực kỳ nhanh
    Chưa rõ đã đạt tới chất lượng của ElevenLabs hay chưa, nhưng điểm hấp dẫn của ElevenLabs là thư viện giọng nói chất lượng cao rất lớn và dễ chọn. Trong thư viện này tôi vẫn chưa tìm ra cách chọn giọng nào khác ngoài giọng nữ mặc định
    Điểm cốt lõi thực sự của ElevenLabs là voice cloning gần như tức thì chỉ với một mẫu dài 5 phút, và nó làm tốt đến mức đáng kinh ngạc, hơi rợn người. Tôi hy vọng tính năng này sẽ sớm khả thi hoàn toàn bằng mã nguồn mở. Các dịch vụ API quá đắt cho nhiều trường hợp sử dụng, và ngay cả OpenAI tương đối rẻ cũng tốn khoảng 10 xu cho vài nghìn từ được tạo ra

    • Đây là quy trình cài đặt tôi đã thử trên Ubuntu 22.04. Liên kết tải Google Drive có thể bị chặn vì quá nhiều lượt tải trong 24 giờ, nhưng chờ một chút rồi sẽ tải lại được
      git clone https://github.com/yl4579/StyleTTS2.git  
      cd StyleTTS2  
      python3 -m venv venv  
      source venv/bin/activate  
      python3 -m pip install --upgrade pip  
      python3 -m pip install wheel  
      pip install -r requirements.txt  
      pip install phonemizer  
      sudo apt-get install -y espeak-ng  
      pip install gdown  
      gdown https://drive.google.com/uc?id=1K3jt1JEbtohBLUA0X75KLw36TW7U1yxq  
      7z x Models.zip  
      rm Models.zip  
      gdown https://drive.google.com/uc?id=1jK_VV3TnGM9dkrIMsdQ_upov8FrIymr7  
      7z x Models.zip  
      rm Models.zip  
      pip install ipykernel pickleshare nltk SoundFile  
      python -c "import nltk; nltk.download('punkt')"  
      pip install --upgrade jupyter ipywidgets librosa  
      python -m ipykernel install --user --name=venv --display-name="Python (venv)"  
      jupyter notebook  
      
      Sau đó vào /Demo rồi mở Inference_LJSpeech.ipynb hoặc Inference_LibriTTS.ipynb là sẽ chạy được
    • Với cloning theo phong cách, tôi từng thấy cách “tăng cường” đầu ra bằng pipeline RVC sau khi fine-tune tổng hợp giọng nói chất lượng cao
      Tức là phần tổng hợp giọng nói đảm nhiệm ngữ điệu và phát âm, còn RVC đảm nhiệm chất giọng, nên nếu kết hợp StyleTTS với pipeline này thì có thể tiến gần tới ElevenLabs
    • Demo LibriTTS clone giọng của một người nói chưa từng thấy trước đó chỉ từ một đoạn clip khoảng 5 giây
    • Tôi tò mò không biết có ai đã thử các câu nói dài trên cả ElevenLabs lẫn StyleTTS chưa
      Việc tổng hợp audio ngắn gần như đã là bài toán được giải quyết trong thế giới tổng hợp giọng nói, nhưng khi cố tạo audiobook bằng text-to-speech thì mọi thứ bắt đầu sụp đổ
  • Thú vị là các ví dụ TTS2 nghe còn hay hơn cả giọng chuẩn thực tế https://styletts2.github.io/
    Ví dụ ở câu “Then leaving the corpse within the house [...]”, giọng chuẩn phát âm từ house nghe kỳ lạ, như bị nhấc tông lên, còn bản TTS2 nghe tự nhiên hơn
    Tôi muốn dùng nó cho nhiều file ePub như light novel Nhật Bản không có audiobook. Hiện tôi đang dùng Moon+ Reader TTS trên Android nhưng nó khá robot

    • Vợ đầu của tôi là diễn viên lồng tiếng chuyên nghiệp, và tôi từng thấy ai đó để lại review xấu nói là “rõ ràng là AI”
      Năm 2023 thì không có cách nào thắng được chuyện đó
    • Tốc độ thì tốt hơn, nhưng cá nhân tôi vẫn thấy có âm sắc kim loại khá rõ nên kém hơn giọng thật
      Dù vậy kết quả rất ấn tượng và vượt trội hơn mọi hệ thống tổng hợp giọng nói khác
    • Tôi tò mò bạn định gắn nó vào ePub như thế nào. Tôi cũng ở tình huống tương tự nên muốn tận dụng thứ này cho ebook
  • Tiêu đề HN hiện tại là “StyleTTS2 – open-source Eleven Labs quality Text To Speech”, nhưng tiêu đề gốc không đưa tên một sản phẩm cụ thể nào, và bài arXiv được liên kết từ đó cũng không nhắc tới ElevenLabs
    Theo tôi biết thì kiểu chỉnh sửa tiêu đề như thế này nên tránh

    • ElevenLabs là mốc chuẩn của tổng hợp giọng nói, và hiện vẫn chưa có gì tốt hơn
      Nếu một hệ thống mã nguồn mở có thể tiệm cận chất lượng đó thì rất đáng chú ý, nên tôi nghĩ đa số sẽ cảm kích phép so sánh này. Thực tế là chính so sánh đó đã khiến tôi quan tâm
    • Đây đúng là tiêu đề đã bị biên tập lại và cũng có phần cường điệu. Dù vậy khi tự thử StyleTTS2 thì tôi thấy nó vượt xa mọi TTS mã nguồn mở khác, nên hoàn toàn xứng đáng ở đầu HN một thời gian
    • Đúng là vi phạm guideline. Nhìn tiêu đề tôi đã nghĩ đây là một dự án GitHub ngẫu nhiên chứ không phải bài nghiên cứu mới
  • Tôi muốn hỏi những người đã dùng thành công là phần voice cloning này hoàn toàn khác XTTSv2 và càng không thể so với ElevenLabs
    Có vẻ nó không chú ý nhiều tới ngữ điệu, chỉ là khớp cao độ và nhịp điệu khá ổn
    Tôi đã thử thay đổi alpha, beta, embedding scale, diffusion steps theo nhiều cách, nhưng dù tôi công nhận nó nhanh và chất lượng âm thanh ổn thì voice cloning vẫn hoàn toàn không ra gì

    • ElevenLabs dựa trên Tortoise-TTS và đã được pretrain trên hàng triệu giờ dữ liệu, trong khi mô hình này cùng lắm chỉ được huấn luyện trên LibriTTS khoảng 500 giờ
      XTTS có lẽ cũng đã được huấn luyện trên hơn 20 ngôn ngữ và hàng triệu người nói
      Nếu bạn đã thấy hàng triệu giọng nói thì chắc chắn sẽ có những giọng gần giống bạn, nên rốt cuộc đây là vấn đề dữ liệu huấn luyện. Chỉ là việc thu thập và huấn luyện trên dữ liệu quy mô như vậy cực kỳ khó
    • Nếu xem phần kết luận của bài báo, họ cũng thừa nhận rằng voice cloning vẫn chưa thực sự tốt
    • Tôi đã thử nghiệm alpha, beta rất nhiều và tải lên nhiều clip audio khác nhau nhưng vẫn gặp kết quả y như vậy
  • Chất lượng thực sự tốt đến mức khó tin, ở mức gần như không thể tưởng tượng nổi vào đầu những năm 2000
    Có những khả năng thú vị trong game, kiểu như LLM đảm nhận phần nhân vật còn tổng hợp giọng nói này dùng để tạo tiếng nói cho NPC

    • Điều này có ý nghĩa lớn trong lĩnh vực tôi quan tâm là mô phỏng golf
      Hiện nay các trình mô phỏng golf có tiếng chim hót, cỏ lay động và lối chơi thì chân thực, nhưng lại không có lấy một con người nào nên vẫn hơi mang bầu không khí hậu tận thế
      Nó quá khác với những câu bông đùa mang tính cà khịa trong một vòng chơi thực tế hay tiếng khán giả ở một giải đấu lớn, nên có vẻ rất phù hợp để thêm phần tán gẫu dựa trên LLM
  • Tôi vừa thử dùng notebook Colab và chất lượng có vẻ rất tốt, còn hỗ trợ cả nhân bản giọng nói

    • Tôi đã lướt README nhưng vẫn thắc mắc yêu cầu phần cứng tối thiểu để chạy là gì. Không rõ có đến mức làm nổ CPU hay ổ cứng không
    • Tôi cũng xem qua GitHub nhưng chưa tìm thấy, nên muốn biết mất bao lâu để fine-tune theo một giọng nói cụ thể
  • Tôi muốn thử dùng, nhưng đã bắt đầu chán ngấy việc lần nào cài dependency của torch cũng phải tạo venv mới
    Tôi muốn biết mọi người xử lý chuyện này thế nào. Có cách nào dễ để nhiều venv cùng chia sẻ một môi trường torch chung không; làm thủ công thì được nhưng tôi muốn biết có công cụ nào hỗ trợ việc này không

    • Tôi dùng nix để cấu hình môi trường Python, cố định phiên bản Python và poetry, đôi khi cả những gói khó cài bằng poetry, rồi phần còn lại thì xử lý bằng poetry
      Quy trình làm việc là nix flake init -t github:dialohq/flake-templates#python, vào bằng nix develop -c $SHELL, rồi trong shell hook của môi trường phát triển nix chạy poetry installpoetry activate
    • Bình thường tôi định dùng Docker cho mấy việc này, nhưng việc xác định dependency quá khó nên đó cũng là lý do chính khiến tôi bỏ qua những dự án kiểu này
    • Tôi cũng gặp vấn đề tương tự rất nhiều. Tôi từng nghĩ đến việc dùng dev container của Docker, tạo một base image cho dependency dùng chung, rồi tùy biến bằng Dockerfile cho từng dự án mới, nhưng không biết có phương án nào tốt hơn không
    • Tôi cũng vậy. Tôi đang dùng conda và đang tính cài PyTorch hẳn vào môi trường conda mặc định
    • Nếu thật sự đã chán ngấy rồi thì chẳng phải LLM như Copilot nên xử lý thay chúng ta được sao
  • Tôi tự hỏi liệu sẽ xuất hiện một chợ LoRA cho các mô hình chuyển văn bản thành giọng nói giống như Civitai hay không
    https://github.com/microsoft/LoRA