1 คะแนน โดย GN⁺ 4 시간 전 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • การสร้างเสียงในเครื่องตอนนี้สามารถให้คุณภาพที่สมจริงได้เพียงพอ แม้ไม่มี GPU เฉพาะ โดยในสภาพแวดล้อมตัวอย่างจะปล่อย GPU ไว้สำหรับการ inference ของ LLM และให้ CPU จัดการ TTS
  • Kokoro เป็นโมเดลขนาด 82M พารามิเตอร์ แต่รองรับหลายภาษา เช่น อังกฤษ จีน ฮินดี และมีเสียงให้ใช้ราว 50 เสียง โดยปรับให้เหมาะกับภาษาอังกฤษมากที่สุด
  • การตั้งค่าที่ง่ายที่สุดคือการรันคอนเทนเนอร์ Kokoro-FastAPI ซึ่งมีโมเดลเสียงรวมมาให้ล่วงหน้า ทำให้อิมเมจมีขนาดประมาณ 5GB
  • มีอินเทอร์เฟซที่เข้ากันได้กับ OpenAI speech API จึงสามารถเปลี่ยนโปรแกรมที่ใช้ API เสียงเดิมมาเป็น TTS ในเครื่อง ได้ค่อนข้างง่าย
  • การสังเคราะห์ย่อหน้าสั้น ๆ ใช้เวลาประมาณ Intel Core i7-4770K 4.7 วินาที, Apple M2 Pro 4.5 วินาที, AMD Ryzen 7 8745HS 1.5 วินาที ทำให้สามารถใช้งานแบบ ฟังแทนการอ่าน คำตอบจาก LLM ในเครื่องได้

Kokoro TTS ที่รันได้ด้วย CPU อย่างเดียว

  • เมื่อไม่กี่ปีก่อน การสร้างเสียงในเครื่องให้สมจริงยังเป็นเรื่องยาก แต่ตอนนี้สามารถสร้างเสียงคุณภาพสูงได้โดย ไม่ต้องฝากข้อมูลส่วนตัวไว้กับบริการภายนอก
  • ตัวอย่างนี้รันบนเครื่อง GTX 1080 Ti สำหรับ LLM ในเครื่องที่เคยกล่าวถึงก่อนหน้านี้
    • GPU เฉพาะ ของเครื่องดังกล่าวถูกสงวนไว้สำหรับการ inference ของ LLM
    • การสังเคราะห์เสียงใช้ CPU เพียงอย่างเดียว
  • โมเดลที่ใช้คือ Kokoro
    • เป็นโมเดลขนาด 82M พารามิเตอร์
    • สร้างเสียงที่สมจริงได้หลายภาษา เช่น อังกฤษ จีน ฮินดี
    • มีเสียงให้ใช้ประมาณ 50 เสียง และปรับให้เหมาะกับภาษาอังกฤษเป็นหลัก
  • การตั้งค่าเซิร์ฟเวอร์ที่ง่ายที่สุดคือใช้คอนเทนเนอร์อิมเมจ Kokoro-FastAPI
    • มีโมเดลเสียงที่ดาวน์โหลดไว้ล่วงหน้ารวมอยู่ด้วย
    • ด้วยเหตุนี้คอนเทนเนอร์อิมเมจจึงมีขนาดประมาณ 5GB
  • คำสั่งรันด้วย Docker หรือ Podman:
    podman run -p 8880:8880 ghcr.io/remsky/kokoro-fastapi-cpu
    
  • หลังรันแล้ว สามารถเปิดเว็บ UI ได้ที่ localhost:8880/web ใส่ข้อความเพื่อสร้างเสียงและเล่นอัตโนมัติได้

API ที่เข้ากันได้กับ OpenAI และตัวอย่างการรัน

  • คอนเทนเนอร์ Kokoro-FastAPI นอกจากเว็บ UI แล้ว ยังมี อินเทอร์เฟซ TTS ที่เข้ากันได้กับ OpenAI speech API
    • สามารถปรับโปรแกรมที่ใช้ OpenAI speech API เดิมให้ใช้งานร่วมกันได้ง่าย
    • โค้ดตัวอย่าง JavaScript และ Python อยู่ที่ github.com/remotebrowser/speak
  • ตัวอย่างการรัน JavaScript:
    export TTS_API_BASE_URL=http://127.0.0.1:8880/v1
    ./speak.js "Good morning! How are you today?"
    
  • ตัวอย่างการรัน Python:
    export TTS_API_BASE_URL=http://127.0.0.1:8880/v1
    ./speak.py "Good morning! How are you today?"
    
  • เสียงที่สร้างขึ้นจะถูกบันทึกเป็น ไฟล์ MP3
    • หากติดตั้ง SoX หรือ Sound eXchange ไว้ เสียงจะเล่นโดยอัตโนมัติ
    • ดูข้อมูลเกี่ยวกับ SoX ได้ที่ sox.sf.net
  • หากต้องการเลือกเสียงอื่น ให้ตั้งค่าตัวแปรสภาพแวดล้อม TTS_VOICE
    export TTS_API_BASE_URL=http://127.0.0.1:8880/v1
    export TTS_VOICE="am_eric"
    ./speak.js "Good morning! How are you today?"
    
  • รายชื่อเสียงทั้งหมดที่ใช้ได้อยู่ใน Kokoro VOICES.md

เวลาในการสังเคราะห์ตาม CPU และทางเลือกอื่น

  • ผลการสังเคราะห์ย่อหน้าทดสอบสั้น ๆ ด้วยเสียง am_eric โดยใช้เวลาที่ดีที่สุดจากการรัน 3 ครั้ง มีดังนี้
    • Intel Core i7-4770K: 4.7 วินาที
    • Apple M2 Pro: 4.5 วินาที
    • AMD Ryzen 7 8745HS: 1.5 วินาที
  • CPU ตัวแรกในรายการเป็นรุ่นที่เปิดตัวเมื่อ 12 ปีก่อน และ CPU รุ่นเก่าก็ยังสามารถจัดการงานนี้ได้
  • อีกทางเลือกของ TTS แบบคอนเทนเนอร์ที่เข้ากันได้กับ OpenAI คือ Speaches
    • ต่างจาก Kokoro-FastAPI ตรงที่คอนเทนเนอร์อิมเมจไม่มี weight ของเสียงรวมอยู่ และต้องดาวน์โหลดอย่างชัดเจนผ่าน API
    • มีฟีเจอร์ STT คุณภาพสูง รวมถึง Whisper
    • หากแอปพลิเคชันต้องการทั้ง TTS และ STT ก็อาจเป็นตัวเลือกที่จัดการได้ในที่เดียว
  • เมื่อนำไปใช้ร่วมกับ LLM ในเครื่อง จะทำให้สามารถใช้งานแบบ ฟังคำตอบเป็นเสียง แทนการอ่านคำตอบของ LLM ได้

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

 
GN⁺ 4 시간 전
ความคิดเห็นจาก Hacker News
  • เคยใช้ Kokoro ค่อนข้างเยอะในผลิตภัณฑ์ด้านการเข้าถึง และทำงานด้วยได้ดีเพราะไม่ต้องมี GPU ของ NVidia แบบที่ TTS หลายตัวที่คุณภาพใกล้เคียงกันต้องใช้
    โดยเฉพาะชอบตรงที่สามารถใส่ คู่มือการออกเสียง IPA เองได้ เพราะมีบางกรณีที่คำสำคัญเป็นคำพ้องรูป แล้ว Kokoro ออกเสียงผิด
    แต่ถ้าให้พูดแค่คำเดียวหรือสองคำจะทำได้ไม่ดีนัก เช่น ถ้าให้พูดแค่ "six" มันแทบจะพูดเป็น "ah-six-ah" เสมอ แต่ถ้าใส่ประโยคที่ยาวขึ้นอย่าง "The word is: six" ก็จะอ่านถูกต้อง และเพราะ Kokoro API ให้ timestamp ของแต่ละคำในประโยค จึงใช้สคริปต์ Python ตัดเอาเฉพาะคำที่ต้องการได้ น้ำเสียงจะค่อนข้างเรียบไปหน่อย แต่เสถียรมาก
    ถามใน Discord แล้วได้ยินว่าเป็นข้อจำกัดจากจำนวนพารามิเตอร์ที่เล็ก และเพื่อให้ความเป็นธรรมกับ Kokoro เสียงของ eleven-labs ก็มีปัญหาแบบนี้เป็นครั้งคราวเหมือนกัน

    • ใช้เทคนิคเดียวกันนี้กับเครื่องมืออื่น ๆ หลายตัวด้วย ถ้าพูดว่า "Knight" กับ Wispr หรือ Google มันจะออกมาเป็น "night" แต่แค่พูดว่า "Knight to f3" แล้วลบเฉพาะ "to f3" ออกก็พอ
    • จริง ๆ แล้วเป็นจุดอ่อนที่พบได้บ่อยของ โมเดล TTS
      งานที่ใช้ของฉันแทบทั้งหมดเป็นคำเดี่ยว ๆ เลยไม่เหมาะ เพราะไม่อยากต้องมาจัดการเชื่อมต่อหรือแบ่ง input กับ output เอง
  • เรื่องนี้เป็นหัวข้อที่สนใจจริง ๆ เลยอ่านแล้วสนุก
    เมื่อก่อนเคยดูแล whisperx แยกไว้ เพราะมองว่านอกจากการถอดเสียงธรรมดาแล้ว การจับเวลาและการระบุผู้พูด ที่จำเป็นสำหรับงานอย่างซับไตเติลก็สำคัญด้วย แต่พึ่งพา pyannote และไลเซนส์ก็ก้ำกึ่ง ทำให้การทำ automation สำหรับติดตั้งยุ่งยากขึ้น
    เลยไปมองหาสิ่งที่ให้การถอดเสียงดีกว่าและรองรับการแยกผู้พูดด้วย สุดท้ายเลือก parakeet สำหรับการถอดเสียง และ softformer สำหรับการแยกผู้พูด แต่เอนจินที่ใช้ได้ส่วนใหญ่ไม่ได้รวม softformer ไว้
    ผมทำเซิร์ฟเวอร์ที่เข้ากันได้กับ OpenAI สำหรับ parakeet-rs ซึ่งรองรับ softformer (https://github.com/altunenes/parakeet-rs) และใช้งานร่วมกับแอปถอดเสียงบนเดสก์ท็อป OpenWhispr ที่จัดการฟีเจอร์อำนวยความสะดวกหลายอย่าง
    เพราะใช้ GPU ทำงานอื่นอยู่ จึงยังไม่ได้เพิ่มเส้นทาง GPU ตอนนี้ถอดเสียงด้วย CPU ล้วน ๆ แต่การที่สามารถรันการถอดเสียงแบบ local ได้เมื่อต้องการนั้นให้ความรู้สึกทรงพลังมาก

    • อันนี้คือ text-to-speech ส่วนที่คุณพูดถึงคือ speech-to-text
      สำหรับงานที่อยากทำ ถ้าใช้ Senko ร่วมกับ parakeet การแยกผู้พูดทำได้ดีมาก บน MacBook ของผมเร็วและแม่นกว่า Pyannote กับ whisper
    • แค่ whisper.cpp ธรรมดาก็ทำอะไรคล้าย ๆ กันได้
  • โมเดลนี้ดีมากจริง ๆ เสียดายที่เพราะ GPU ไม่พอ เลยแทบไม่ได้ลองเล่นโมเดล local เท่าไร แต่เมื่อประมาณหนึ่งเดือนก่อนติดตั้ง Kokoro บน GTX1650 แล้วทำ TTS สำหรับอ่านบทความ
    ใน WebUI ง่าย ๆ ถ้าวาง URL หรือก้อนข้อความที่คัดลอกมา Python จะจัดรูปให้แล้วส่งไปยัง Kokoro เพื่อสร้าง TTS จากนั้นเสิร์ฟผลลัพธ์เป็น RSS สำหรับ Apple Podcasts ใช้ตอนขับรถตอนเช้าเพื่อไล่อ่านบทความหรือบล็อกที่เก็บไว้
    สักวันอยากลองทำอะไรคล้าย NotebookLM ที่แบ่งใช้หลายเสียง แล้วอ่านข่าวที่เก็บไว้ให้ฟังเหมือนรายการวิทยุตอนเช้า

  • เมื่อไม่กี่เดือนก่อนทำ ส่วนขยาย Chrome ที่ทำสิ่งนี้ได้บนเว็บเพจใดก็ได้ และไฮไลต์ประโยคที่กำลังอ่านไปพร้อมกัน
    มันข้ามทั้งขั้นตอนเปิดคอนเทนเนอร์และขั้นตอนคัดลอกเนื้อหาเว็บไซต์ไปวางได้ จึงอาจมีประโยชน์สำหรับคนที่อยากใช้ Kokoro ให้สะดวกขึ้น
    https://chromewebstore.google.com/detail/local-reader-ai-on-...

  • TTS พัฒนาไปไกลมากจริง ๆ และมีตัวเลือกเยอะ Kokoro ก็มี ส่วน Pocket TTS เป็นโมเดลเล็กขนาด 100M แต่ก็ทำ voice cloning ได้
    Chatterbox Turbo ใหญ่ขึ้นอีกหน่อย แต่รองรับการควบคุมอารมณ์ของเสียงได้ดีกว่า และ Fish Audio S2 ใหญ่กว่า แต่ควบคุมโทนและอารมณ์ได้ละเอียดกว่ามากแทบไม่มีข้อจำกัด ทั้งหมดนี้รันบน MacBook ได้ง่าย ๆ

  • รีโพซิทอรีที่เหมาะสำหรับเริ่มเปรียบเทียบโมเดล TTS คือ https://github.com/5uck1ess/tts-bench
    Kokoro เป็นโมเดลที่ดีมากเมื่อคิดว่าเปิดตัวเมื่อ 1.5 ปีก่อน และมีประสิทธิภาพยอดเยี่ยมเมื่อเทียบกับขนาด: https://5uck1ess.github.io/tts-bench/scores.html

  • เคยลองใช้ Piper เป็น TTS แบบ local มาก่อน Kokoro ก็ดูน่าสนใจเหมือนกัน

  • เจ๋งมาก ใช้ Linux อยู่เลยใช้ Aqua หรือ Whipsrflow อะไรพวกนั้นไม่ได้ จึงใช้โซลูชันที่ทำเองมาตั้งแต่มกราคม
    เพิ่งจัดระเบียบไม่นานนี้ให้ติดตั้งง่ายขึ้น ถ้าสนใจดูได้ที่นี่: https://github.com/Hugo0/voiceio
    มันค่อย ๆ ปรับปรุงตัวเองเมื่อเวลาผ่านไป รันบนเครื่อง local และโดยรวมเป็นซอฟต์แวร์ที่ใช้งานได้ดี ทุกวันนี้การโต้ตอบกับ PC ของผมประมาณ 60% เป็น การป้อนข้อมูลด้วยเสียง ล้วน ๆ

    • อันนี้คือ text-to-speech ส่วนอันนั้นคือ speech-to-text แต่ STT ก็ดูน่าสนใจอยู่ดี
  • ชอบ Kokoro มาก ใช้ให้มันอ่านอีบุ๊กที่ไม่มีออดิโอบุ๊กให้ฟัง และสำหรับงานนี้ก็ทำงานได้ค่อนข้างดี
    ทำสคริปต์ Python ที่อ่าน epub/html รันโมเดล แล้วเขียนออกมาเป็น mp3 ไว้แล้ว
    จำนวนภาษาที่ Kokoro รองรับยังจำกัดอยู่ จึงต้องใช้โมเดลอื่นสำหรับการรองรับ ภาษาดัตช์ แต่คุณภาพไม่ดีเท่ากัน ปกติมักช้ากว่ามากและใหญ่กว่าด้วย จึงใหญ่เกินไปสำหรับ VRAM 8GB
    สุดท้ายถึงกับลองใช้ TTS ที่มากับ Windows แม้ฟังดูไม่เป็นธรรมชาติ แต่อย่างน้อยก็ออกเสียงคำส่วนใหญ่ได้และเร็วมาก

  • ใช้เวลาหนึ่งวันลองเล่น AI แล้วตัดเลเยอร์ราคาแพงออกจาก Kokoro และมันรันบน CPU มือถือกับ MNN ได้เร็วขึ้น 3 เท่า
    คุณภาพใกล้เคียงกันมาก อาจขึ้นอยู่กับสภาพแวดล้อม แต่สคริปต์อยู่ที่นี่: https://github.com/DavidVentura/translator-rs/blob/master/sc...