3 คะแนน โดย GN⁺ 2023-11-20 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • StyleTTS2 เป็นโมเดลแปลงข้อความเป็นเสียงพูดที่มุ่งสร้าง TTS ระดับมนุษย์ โดยใช้ style diffusion และการเรียนรู้แบบปฏิปักษ์บนพื้นฐานของ speech language model (SLM) ขนาดใหญ่
  • โมเดลทำให้สไตล์เป็น ตัวแปรสุ่มแฝง ของ diffusion model เพื่อสร้างสไตล์ที่เหมาะกับข้อความได้โดยไม่ต้องมี reference speech และใช้ latent diffusion ที่มีประสิทธิภาพซึ่งอาศัยการสังเคราะห์เสียงพูดที่หลากหลายของ diffusion model
  • ใช้ SLM ที่ผ่านการ pretrain ขนาดใหญ่อย่าง WavLM เป็น discriminator และใช้ duration modeling ที่หาอนุพันธ์ได้ เพื่อให้ฝึกแบบ end-to-end และปรับปรุงความเป็นธรรมชาติของเสียงพูด
  • บนชุดข้อมูลผู้พูดคนเดียว LJSpeech ผลประเมินโดย native English speaker ระบุว่าสามารถ surpass human recordings ได้ และบนชุดข้อมูลหลายผู้พูด VCTK สามารถ match กับ human recordings ได้ ขณะที่โมเดลที่ฝึกด้วย LibriTTS แสดงประสิทธิภาพสูงกว่าโมเดล publicly available models เดิมในงาน zero-shot speaker adaptation
  • เวิร์กโฟลว์การฝึกและการอนุมานครอบคลุม LJSpeech แบบผู้พูดคนเดียว, VCTK·LibriTTS แบบหลายผู้พูด และการ fine-tuning ผู้พูดใหม่จากโมเดลหลายผู้พูดที่ผ่านการ pretrain
    • การฝึกขั้นแรกใช้ accelerate launch train_first.py --config_path ./Configs/config.yml และการฝึกขั้นที่สองใช้ python train_second.py --config_path ./Configs/config.yml
    • เวอร์ชัน DDP ของ train_second.py ใช้งานไม่ได้ จึงใช้ DP อยู่ในปัจจุบัน และสคริปต์ fine-tuning ก็มีเงื่อนไขที่ DDP ใช้งานไม่ได้เช่นกัน
  • เงื่อนไขหลักในการรันคือ Python >= 3.7, ติดตั้ง requirements.txt, เมื่อต้องการรันเดโมให้ติดตั้ง phonemizer และ espeak-ng, และอัปแซมปลิงข้อมูล LJSpeech เป็น 24 kHz
  • โมดูลที่ผ่านการ pretrain ประกอบด้วย ASR สำหรับ text aligner, JDC สำหรับ pitch extractor และ PL-BERT
    • ASR aligner ผ่านการ pretrain ด้วย corpus ภาษาอังกฤษ (LibriTTS), ภาษาญี่ปุ่น (JVS), และภาษาจีน (AiShell)
    • JDC pitch extractor ผ่านการ pretrain ด้วย corpus ภาษาอังกฤษ (LibriTTS) เท่านั้น
    • PL-BERT ผ่านการ pretrain ด้วย corpus ภาษาอังกฤษ (Wikipedia) เท่านั้น ดังนั้นภาษาอื่นจึงต้องใช้ PL-BERT สำหรับภาษานั้น ๆ และ multilingual PL-BERT รองรับ 14 ภาษา
  • การอนุมานมีให้ผ่าน Inference_LJSpeech.ipynb สำหรับผู้พูดคนเดียว และ Inference_LibriTTS.ipynb สำหรับหลายผู้พูด โดยโมเดลที่ผ่านการ pretrain สำหรับ LJSpeech และ LibriTTS ดาวน์โหลดได้จาก Hugging Face
  • ไลเซนส์ของโค้ดคือ MIT License และเมื่อใช้โมเดลที่ผ่านการ pretrain ต้องปฏิบัติตามเงื่อนไข เช่น แจ้งผู้ฟังว่าเป็นเสียงสังเคราะห์ หรือสังเคราะห์เสียงเผยแพร่ต่อสาธารณะเฉพาะเสียงของผู้พูดที่มีสิทธิ์ใช้งานเสียงเท่านั้น

1 ความคิดเห็น

 
GN⁺ 2023-11-20
ความคิดเห็นจาก Hacker News
  • ใช้ชิ้นส่วนโอเพนซอร์สอย่าง StyleTTS2, Whisper, OpenHermes2-Mistral-7B สร้างแชตบอตเสียงที่ทำงานแบบโลคัล 100% และตอบสนองได้เร็วกว่า ChatGPT มาก
    ไม่ใช่การโต้ตอบแบบ Siri ที่แข็ง ๆ เหมือนผู้ช่วยเสียงรายอื่น แต่สามารถถามตอบกันได้ใกล้เคียงการสนทนาจริง จึงน่าสนุก
    บนพีซีเกมมิง Windows ที่มี GPU Nvidia 12GB โดยทดสอบกับ 3060 12GB สามารถติดตั้งทีเดียวแล้วคุยได้เลยโดยไม่ต้องแตะ Python หรือ CUDA: https://apps.microsoft.com/detail/9NC624PBFGB7
    เดโมยังมีส่วนที่ไม่เนี้ยบ เช่น ต้องใช้หูฟังและรันเป็นแอปคอนโซล แต่ให้ความรู้สึกเหมือนแสดงให้เห็นล่วงหน้าว่าอีกไม่นานสิ่งนี้จะเป็นไปได้บนพีซีเกมมิงทั่วไปด้วยการประกอบโอเพนซอร์สล้วน ๆ และยังมีโมเดลที่ปรับปรุงแล้วอีกหลายตัวที่ยังไม่ได้เอามาใส่

    • สงสัยว่าการทำให้แชตบอตสนทนาได้อย่างเป็นธรรมชาตินั้นดูยากแค่ไหน
      โดยเฉพาะอยากให้ การขัดจังหวะและการแทรกพูด ทำได้เหมือนบทสนทนาทั่วไป เช่น ถ้าอีกฝ่ายพูดนานเกินไป ฉันสามารถแทรกเข้าไปหยุดได้ หรือระหว่างที่ฉันกำลังพูด AI ก็ส่งเสียงรับสั้น ๆ ได้
      ถ้าความเร็วถึงระดับที่เร็วกว่าการทำงานแบบเรียลไทม์ ก็น่าจะเริ่มทำฟีเจอร์แบบนั้นได้ในทางทฤษฎี และสำหรับการสนทนาที่เป็นธรรมชาติอย่างสมบูรณ์ก็ดูเหมือนต้องมี การรับรู้บริบท ที่ AI ดูใบหน้าและท่าทางแล้วตัดสินว่ากำลังจะพูดยาวหรือไม่ด้วย
    • ลองรันดูแล้ว แต่ดูเหมือนจะทำงานได้เฉพาะบน CUDA 11 และตอนนี้ใช้สภาพแวดล้อม CUDA 12 อยู่แล้ว จึงไม่คิดจะทำให้สภาพแวดล้อม CUDA พังเพื่อทดสอบ
    • ผลทดสอบออกมาปะปนกัน: ถ้าติดตั้งในไดรฟ์ที่ไม่ใช่ C:\ จะเกิดข้อผิดพลาด แต่พอย้ายไป C: ก็ทำงานปกติ
      แม้บน EVGA 3080Ti 12GB ก็ยังมี latency ค่อนข้างสูง และแม้พูดแค่ครั้งเดียว ดูเหมือนมันจะประมวลผลอินพุตเดียวกันหลายครั้ง พร้อมผลการรู้จำที่ต่างกันเล็กน้อยซ้ำ ๆ
      สุดท้ายก็เห็นปัญหาที่มันฟังเสียงของตัวเองแล้วตอบกลับตัวเองด้วย
    • สงสัยว่า 12GB เป็นสเปกขั้นต่ำ หรือไม่ บน 8GB เกิดข้อผิดพลาดหน่วยความจำไม่พอ
    • Whisper ไม่รองรับ input streaming ดังนั้นดูเหมือนว่าต้องรอให้การตอบกลับของ LLM ทั้งหมดจบก่อน ถึงจะทริกเกอร์การถอดเสียงได้หรือเปล่า
  • เดือนที่แล้วได้ทดสอบ StyleTTS2 และรวบรวมบันทึกแบบทีละขั้นตอนที่น่าจะช่วยคนที่ต้องการติดตั้งแบบโลคัลไว้: https://llm-tracker.info/books/howto-guides/page/styletts-2
    ยังได้เปรียบเทียบความเร็วและคุณภาพแบบง่าย ๆ กับ VITS, XTTS โดยใช้โมเดล LJSpeech ซึ่ง StyleTTS2 ค่อนข้างดีและเร็วมาก: https://fediverse.randomfoo.net/notice/AaOgprU715gcT5GrZ2

    • บน 4090 ได้ การอนุมานเร็วกว่าเรียลไทม์ 15~95 เท่า นี่สุดยอดมาก
      สงสัยว่าฟังก์ชันที่เทียบได้กับ inpainting หรือ outpainting จะทำได้ไหม และการสังเคราะห์เสียงคุณภาพระดับนี้ที่เร็วมาก ๆ น่าจะมีการใช้งานได้หลากหลาย โดยเฉพาะในการพัฒนาเกมอินดี้และเกมเชิงทดลอง
    • กำลังทำตามคู่มืออยู่ แต่ถ้าไม่ใช่คนที่ใช้อยู่แล้ว mamba ไม่ได้รับการแนะนำอีกต่อไป
      anchor #mambaforge ในลิงก์ก็ใช้งานไม่ได้ด้วย
  • เอกสารค่อนข้างเว้นช่องโหว่ไว้เยอะ ทำให้ขั้นตอนตั้งค่าให้ตรงกันยุ่งยากนิดหน่อย แต่หลังจากราว 20 นาที ก็ทำงานได้ดีบน WSL Ubuntu 22.04
    คุณภาพเสียงดีมาก ดีกว่าโปรเจกต์สังเคราะห์เสียงโอเพนซอร์สอื่น ๆ ที่เคยเห็นมามาก และถ้าใช้ GPU 4090 ถือว่า เร็วมาก
    ยังไม่แน่ใจว่าเทียบถึงระดับคุณภาพของ ElevenLabs หรือไม่ แต่เสน่ห์ของ ElevenLabs อยู่ที่มีไลบรารีเสียงคุณภาพสูงขนาดใหญ่และเลือกใช้ได้ง่าย ในไลบรารีนี้ผมยังหาวิธีเลือกเสียงอื่นนอกจากเสียงผู้หญิงเริ่มต้นไม่เจอ
    จุดสำคัญจริง ๆ ของ ElevenLabs คือ การโคลนเสียง ที่ทำได้แทบจะทันทีจากตัวอย่างเพียง 5 นาที ซึ่งทำได้ดีจนน่าทึ่งและแอบน่าขนลุก หวังว่าฟีเจอร์นี้จะทำได้แบบโอเพนซอร์สเต็มรูปแบบในอนาคต บริการ API แพงเกินไปสำหรับหลายการใช้งาน และแม้แต่ OpenAI ที่ค่อนข้างถูกก็ยังมีค่าใช้จ่ายราว 10 เซนต์สำหรับการสร้างข้อความหลายพันคำ

    • นี่คือขั้นตอนติดตั้งที่ทดสอบบน Ubuntu 22.04 ลิงก์ดาวน์โหลดจาก Google Drive อาจถูกบล็อกเพราะมีการดาวน์โหลดมากเกินไปภายใน 24 ชั่วโมง แต่ถ้ารอสักพักก็น่าจะใช้ได้อีกครั้ง
      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  
      
      จากนั้นไปที่ /Demo แล้วเปิด Inference_LJSpeech.ipynb หรือ Inference_LibriTTS.ipynb ก็น่าจะทำงานได้
    • สำหรับการโคลนสไตล์ เคยเห็นวิธีที่ใช้การสังเคราะห์เสียงที่ fine-tune ด้วยคุณภาพสูง แล้ว “เสริม” เอาต์พุตด้วย RVC pipeline
      โครงสร้างคือให้การสังเคราะห์เสียงรับผิดชอบเรื่องน้ำเสียงและการออกเสียง ส่วน RVC รับผิดชอบเนื้อเสียง ถ้าผสม StyleTTS กับ pipeline นี้ก็อาจเข้าใกล้ ElevenLabs ได้
    • เดโม LibriTTS โคลนเสียงผู้พูดที่ไม่เคยเห็นมาก่อนด้วยคลิปเพียงประมาณ 5 วินาที
    • สงสัยว่ามีใครทดสอบคำพูดยาว ๆ ทั้งกับ ElevenLabs และ StyleTTS แล้วหรือยัง
      การสังเคราะห์เสียงสั้น ๆ แทบจะเป็นปัญหาที่แก้ได้แล้วในโลกการสังเคราะห์เสียง แต่เมื่อพยายามทำ หนังสือเสียง ด้วย text-to-speech ปัญหาต่าง ๆ จะเริ่มพังลง
  • น่าสนใจที่ตัวอย่างของ TTS2 ฟังดูดีกว่าเสียงจริงที่เป็นคำตอบเฉลยด้วยซ้ำ https://styletts2.github.io/
    เช่น ในตัวอย่าง “Then leaving the corpse within the house [...]” เสียงเฉลยออกเสียง house แปลก ๆ เหมือนโทนเสียงยกขึ้น แต่เวอร์ชัน TTS2 ฟังเป็นธรรมชาติกว่า
    อยากใช้กับไฟล์ ePub หลาย ๆ ไฟล์ เช่น ไลต์โนเวลญี่ปุ่นที่ไม่มีหนังสือเสียง ตอนนี้ใช้ TTS ของ Moon+ Reader บน Android อยู่ ซึ่งฟังเป็นหุ่นยนต์พอสมควร

    • ภรรยาคนแรกของผมเป็นนักพากย์มืออาชีพ แต่เคยเห็นมีคนรีวิวแย่ ๆ ว่า “ชัดเจนว่าเป็น AI”
      ในปี 2023 ไม่มีทางชนะได้เลย
    • จังหวะความเร็วดีขึ้น แต่โดยส่วนตัวยังรู้สึกว่ามี โทนโลหะ ค่อนข้างชัด จึงยังด้อยกว่าเสียงจริง
      ถึงอย่างนั้นผลลัพธ์ก็น่าประทับใจ และดีกว่าการสังเคราะห์เสียงอื่น ๆ ทั้งหมด
    • สงสัยว่าคุณวางแผนจะเอาไปใช้กับ ePub อย่างไร ผมอยู่ในสถานการณ์คล้ายกันและอยากใช้สิ่งแบบนี้กับอีบุ๊กเหมือนกัน
  • ตอนนี้หัวข้อบน HN คือ “StyleTTS2 – open-source Eleven Labs quality Text To Speech” แต่หัวข้อต้นฉบับไม่ได้ใส่ชื่อผลิตภัณฑ์เฉพาะ และบทความ arXiv ที่ลิงก์ไว้ก็ไม่ได้กล่าวถึง ElevenLabs
    เข้าใจว่าการ แก้ไขหัวข้อ แบบนี้เป็นสิ่งที่ควรหลีกเลี่ยง

    • ElevenLabs เป็น จุดอ้างอิงของการสังเคราะห์เสียง และตอนนี้ยังไม่มีอะไรที่ดีกว่านั้น
      ถ้าระบบโอเพนซอร์สเข้าใกล้คุณภาพนั้นได้ก็เป็นเรื่องน่าจับตามาก และคิดว่าคนส่วนใหญ่น่าจะขอบคุณที่มีการเปรียบเทียบนี้ จริง ๆ แล้วผมสนใจก็เพราะการเปรียบเทียบนั้น
    • เป็นหัวข้อที่มีการแก้ไขและก็พูดเกินจริงด้วย ถึงอย่างนั้นจากที่ลองใช้ StyleTTS2 เอง มันเป็น การสังเคราะห์เสียงโอเพนซอร์สที่ดีที่สุดอย่างชัดเจน จึงสมควรอยู่หน้าแรกของ HN สักพักอย่างยิ่ง
    • ใช่ เป็นการละเมิดแนวทางปฏิบัติ เห็นหัวข้อแล้วคิดว่าเป็นโปรเจกต์ GitHub แบบสุ่ม ๆ ไม่ใช่งานวิจัยใหม่
  • อยากถามคนที่ใช้ได้สำเร็จว่า การโคลนเสียง นี้ต่างจาก XTTSv2 อย่างสิ้นเชิง และยิ่งเทียบ ElevenLabs ไม่ได้เลย
    ดูเหมือนมันไม่ได้ใส่ใจกับน้ำเสียงมากนัก แค่จับระดับเสียงและจังหวะได้ค่อนข้างดี
    ลองปรับค่า alpha, beta, embedding scale, diffusion steps หลายแบบแล้ว ยอมรับว่ามันเร็วและคุณภาพเสียงใช้ได้ แต่การโคลนเสียงไม่ได้ทำงานได้ถูกต้องเลย

    • ElevenLabs มีพื้นฐานจาก Tortoise-TTS และถูก pretrain ด้วย ข้อมูลหลายล้านชั่วโมง แล้ว ในขณะที่โมเดลนี้ฝึกด้วย LibriTTS ที่อย่างมากก็ 500 ชั่วโมงเท่านั้น
      XTTS ก็น่าจะฝึกด้วยภาษามากกว่า 20 ภาษาและผู้พูดหลายล้านคน
      ถ้าเคยเห็นเสียงเป็นล้าน ๆ เสียง ย่อมต้องมีเสียงที่คล้ายคุณอยู่ในนั้นแน่นอน สุดท้ายจึงเป็นปัญหาเรื่องข้อมูลฝึก แต่การรวบรวมข้อมูลขนาดใหญ่แบบนั้นและนำมาฝึกเป็นเรื่องยากมาก
    • ดูส่วนสรุปของบทความแล้ว เขายอมรับว่า การโคลนเสียงยังไม่ได้ดีนัก
    • ผมลอง alpha, beta ไปเยอะมากและอัปโหลดคลิปเสียงหลายคลิป แต่ก็เจอผลแบบเดียวกัน
  • คุณภาพนั้น ดีจนน่าเหลือเชื่อจริง ๆ และอยู่ในระดับที่แทบจะจินตนาการได้ยากในช่วงต้นยุค 2000
    ถ้าให้ LLM รับบทเป็นตัวละคร แล้วใช้การสังเคราะห์เสียงแบบนี้มอบเสียงให้ NPC ก็น่าจะเปิดความเป็นไปได้ที่น่าสนใจในเกม

    • มีความหมายมากในสาขาที่สนใจอย่าง กอล์ฟซิมูเลชัน
      ตอนนี้เครื่องจำลองกอล์ฟมีเสียงนกร้อง หญ้าไหว และการเล่นก็สมจริง แต่กลับไม่มีคนเลยสักคน ทำให้ยังมีกลิ่นอายแบบหลังวันสิ้นโลกนิด ๆ
      มันต่างจากการหยอกล้อปนกดดันกันในรอบจริง หรือเสียงผู้ชมในการแข่งขันใหญ่ ๆ มาก จึงดูเหมาะมากที่จะเพิ่มการคุยเล่นที่ขับเคลื่อนด้วย LLM เข้าไป
  • เพิ่งลองใช้ Colab notebook ดู และคุณภาพก็ดูดีมาก อีกทั้งยังรองรับ การโคลนเสียง ด้วย

    • ลองอ่าน README คร่าว ๆ แล้ว แต่สงสัยว่า ข้อกำหนดฮาร์ดแวร์ขั้นต่ำ สำหรับการรันคืออะไร ไม่รู้ว่าจะทำให้ CPU หรือฮาร์ดดิสก์พังหรือเปล่า
    • ลองดู GitHub แบบผ่าน ๆ แล้วแต่หาไม่เจอ เลยสงสัยว่าการ fine-tune ให้เข้ากับเสียงเฉพาะเสียงหนึ่งต้องใช้เวลานานแค่ไหน
  • อยากลองใช้ดู แต่เริ่มเบื่อแล้วกับการต้องสร้าง venv ทุกครั้งเพื่อจะติดตั้ง dependency ของ torch
    เลยสงสัยว่าคนอื่นจัดการกันอย่างไร อยากรู้ว่ามีวิธีง่าย ๆ ให้ venv หลายตัวใช้ สภาพแวดล้อม torch ร่วมกันได้ไหม หรือมีเครื่องมือที่ช่วยเรื่องนี้หรือเปล่า ถึงแม้จะทำเองแบบแมนนวลได้ก็ตาม

    • สำหรับการตั้งค่าสภาพแวดล้อม Python ใช้ nix โดยตรึงเวอร์ชัน Python กับ poetry และบางครั้งก็ตรึงแพ็กเกจที่ติดตั้งผ่าน poetry ได้ยาก จากนั้นที่เหลือให้ poetry จัดการ
      เวิร์กโฟลว์คือเข้าไปด้วย nix flake init -t github:dialohq/flake-templates#python, nix develop -c $SHELL แล้วใน shell hook ของสภาพแวดล้อมพัฒนา nix จะรัน poetry install และ poetry activate
    • เรื่องแบบนี้ปกติมักจะพยายามใช้ Docker แต่การทำความเข้าใจ dependency ยากเกินไป จนเป็นเหตุผลหลักที่ทำให้ข้ามโปรเจกต์แบบนี้ไป
    • รู้สึกเจอปัญหาเดียวกันบ่อยมาก เคยคิดจะใช้ Docker development container แล้วสร้าง base image สำหรับ dependency ร่วม จากนั้นค่อยปรับแต่งด้วย Dockerfile ในแต่ละโปรเจกต์ใหม่ แต่ก็ไม่รู้ว่ามีทางเลือกที่ดีกว่านี้ไหม
    • ผมก็คล้ายกัน ใช้ conda อยู่ และกำลังมองไปทางการติดตั้ง PyTorch ไว้ใน สภาพแวดล้อม conda พื้นฐาน ไปเลย
    • ถ้าเริ่มเบื่อจริง ๆ แล้ว ก็น่าคิดว่า LLM อย่าง Copilot น่าจะจัดการแทนได้ ไม่ใช่หรือ
  • สงสัยว่าจะมี มาร์เก็ตเพลส LoRA แบบ Civitai สำหรับโมเดลแปลงข้อความเป็นเสียงหรือไม่
    https://github.com/microsoft/LoRA