การสร้างดนตรีด้วย AI แบบ Local ช่วยขจัดข้อจำกัดด้านเวลาในการสร้างสรรค์ เครื่องมืออย่าง ACE-Step 1.5 สามารถรันบน Mac ได้ทั้งหมด โดยเปลี่ยนคำสั่ง text prompt ให้กลายเป็นเพลงเต็มรูปแบบได้ภายในไม่กี่นาที โดยไม่ต้องใช้เครดิตคลาวด์และไม่ต้องรอคิวอัปโหลด อิสระนั้นก็นำมาซึ่งปัญหาใหม่ นั่นคือ ปริมาณ เมื่อการสร้างผลงานทำได้ง่ายและรวดเร็ว คุณจะเลิกถามว่าคุณ สามารถ ทำเพลงได้หรือไม่ แต่จะเริ่มสงสัยแทนว่าในบรรดา 50 เวอร์ชันที่มีอยู่ในไดรฟ์ของคุณ เวอร์ชันไหนกันแน่ที่คุ้มค่าจะเก็บไว้
ผมเรียนรู้เรื่องนี้ด้วยบทเรียนที่แสนลำบาก ในวันปกติ ผมต้องลองทำประมาณสี่เทคจาก ACE-Step 1.5 เพื่อให้เจอเพลงที่ใช้ได้จริงเพียงหนึ่งเพลง แต่ค่าเฉลี่ยนั้นหลอกเราได้ ในเซสชันล่าสุด ผมสร้างขึ้นมาถึง 32 เทคเพื่อไล่ตามการเรียบเรียงเพียงรูปแบบเดียว การฟังเพลงความยาวสองนาทีจำนวน 32 เพลง ต้องใช้เวลาฟังอย่างละเอียดนานกว่าหนึ่งชั่วโมง พอถึงเพลงที่เจ็ด หูของผมก็เริ่มยอมรับเสียงสระที่พร่ามัว พอถึงเพลงที่สิบห้า ผมเริ่มพยักหน้าตามทำนองทั้งที่พลาดคำร้องที่หายไปอย่างสิ้นเชิง ความเหนื่อยล้าของผู้ฟังไม่ใช่ความขี้เกียจ แต่มันคือการสูญเสียความแม่นยำในการรับรู้ที่เกิดขึ้นจริง ผมจึงต้องการตัวกรองที่สามารถทำงานได้ ก่อน ที่หูของผมจะเริ่มล้า
ผมจึงสร้าง pipeline สำหรับการทำ QA แบบ local ขึ้นมาโดยใช้ mlx-whisper ซึ่งเป็นพอร์ตที่ปรับแต่งมาเพื่อ Apple Silicon จากโมเดลจดจำเสียงของ OpenAI แนวคิดนั้นเรียบง่าย: ถ้าผมสามารถถอดความทุกเทคโดยอัตโนมัติและนำไปเปรียบเทียบกับเนื้อร้องต้นฉบับได้ ผมก็จะมีอัตราความแม่นยำในการจับคู่เนื้อร้อง (lyric-match rate) ที่เป็นกลาง ตัวเลขนั้นจะช่วยจัดลำดับทั้ง 32 เทคให้เหลือเพียงจำนวนที่จัดการได้ง่ายขึ้น
วิธีการทำงานของ Pipeline
เวิร์กโฟลว์นี้มีสี่ขั้นตอน และผมถือว่าแต่ละขั้นตอนเป็นสิ่งที่ต่อรองไม่ได้
Generate. ผมสร้างไฟล์เสียงดิบด้วย ACE-Step 1.5 ในขั้นตอนนี้ผมจะไม่ตัดสินอะไรทั้งสิ้น เป้าหมายคือปริมาณ
Transcribe. ไฟล์ WAV ทุกไฟล์จะถูกส่งเข้าสู่ mlx-whisper บน Mac ของผม เนื่องจาก MLX ถูกสร้างขึ้นมาเพื่อ Apple’s Metal และ neural engine กระบวนการนี้จึงรันแบบ local ทั้งหมด ไม่มีการเสียค่า API ไม่มีความหน่วงของเครือข่าย และไม่มีความกังวลเรื่องความเป็นส่วนตัวจากการส่งไฟล์เสียงดิบไปยังเซิร์ฟเวอร์ระยะไกล การถอดความไฟล์ชุด 32 ไฟล์เสร็จสิ้นได้ในขณะที่ผมกำลังชงกาแฟ
Score. ผมเปรียบเทียบข้อความที่ Whisper ถอดความได้กับเนื้อร้องต้นฉบับ อัตราการจับคู่จะวัดความแม่นยำ: นักร้องร้องครบทุกคำหรือไม่ หรือมีการข้ามบรรทัด ร้องคำรวบ หรือสร้างพยางค์ที่ไม่มีอยู่จริงขึ้นมา (hallucinate)? ผมจะคำนวณออกมาเป็นเปอร์เซ็นต์ความซ้อนทับ นี่ไม่ใช่การตัดสินเชิงสุนทรียศาสตร์ แต่มันคือการตรวจสอบความถูกต้องของข้อความอย่างเคร่งครัด
Filter. ผมจัดลำดับเทคตามอัตราการจับคู่ดังกล่าว กลุ่ม 20% แรกจะกลายเป็นกลุ่มที่ผมนำมาคัดเลือก ส่วนที่เหลือจะถูกย้ายไปไว้ในโฟลเดอร์สำรอง ผมยังไม่ได้ลบเทคที่ได้คะแนนต่ำทิ้ง แต่ผมจะไม่เสียเวลาฟังช่วงเวลาสำคัญไปกับพวกมัน
รักษาความเป็นอิสระของคณะกรรมการ
ผมมีกฎเหล็กหนึ่งข้อ: โมเดลที่ใช้สร้างงานต้องไม่เป็นคนตรวจการบ้านของตัวเอง ACE-Step 1.5 จะไม่ประเมินผลลัพธ์ของ ACE-Step 1.5 เอง ผมใช้กระบวนการที่แยกจากกันโดยสิ้นเชิงสำหรับการถอดความ เพราะโมเดลที่ตรวจสอบตัวเองมักจะใจดีเกินไปเสมอ มันมีจุดบอดแบบเดียวกัน หากตัวสร้าง (generator) มีแนวโน้มที่จะตัดเครื่องหมายพหูพจน์หรือทำเสียงพยัญชนะหนักให้เบาลง ลูปการประเมินตัวเองก็จะเรียนรู้ที่จะมองข้ามความผิดพลาดเหล่านั้นไป โมเดลการจดจำเสียงที่เป็นอิสระจะไม่มีความลำเอียงต่อตัวดนตรี มันเพียงแค่รายงานสิ่งที่มันได้ยิน ไม่ว่ารายงานนั้นจะฟังดูโหดร้ายเพียงใดก็ตาม
สิ่งที่ตัวเลขเปิดเผยออกมา
จากชุดข้อมูล 32 เทค Pipeline นี้ช่วยคัดกรองจนเหลือผู้ท้าชิง 8 รายที่ควรค่าแก่การพิจารณาอย่างจริงจัง โดยทั้ง 8 เทคนี้มีค่าเฉลี่ยอัตราการจับคู่เนื้อร้องอยู่ที่ 83.9% หลังจากที่ผมฟังพวกมันอย่างละเอียดและให้คะแนนตามเกณฑ์คุณภาพของผมเอง พวกมันได้คะแนนเฉลี่ย 94.1 จาก 100 คะแนน ส่วนต่างนี้บอกเรื่องราวทั้งหมดได้ ระบบคัดกรองอัตโนมัติช่วยดักจับความผิดพลาดทางโครงสร้างที่เห็นได้ชัด เช่น เนื้อร้องหาย จังหวะรวน หรือเสียงรบกวนในเสียงร้อง เพื่อให้การให้คะแนนด้วยมนุษย์ของผมทำงานบนชุดข้อมูลที่ผ่านการทำความสะอาดมาแล้ว ระบบอัตโนมัติไม่ได้มาแทนที่การตัดสินใจของผม แต่มันช่วยถนอมการตัดสินใจนั้นไว้
เมื่อเครื่องจักรทำงานผิดพลาด
คะแนนต่ำไม่ได้หมายความว่าเป็นเพลงที่ไม่ดีเสมอไป ผมพบเรื่องนี้ตั้งแต่เนิ่นๆ เมื่อมีเพลงหนึ่งที่ผมชอบมากกลับได้คะแนนต่ำกว่าเกณฑ์ที่ตั้งไว้ เนื้อเพลงนั้นเป็นเพียงการท่องตัวอักษรแบบง่ายๆ คือการร้องตัวอักษรทีละตัวเป็นเสียงเดี่ยวๆ แต่ Whisper ถูกฝึกมาด้วยโครงสร้างประโยคแบบธรรมชาติ เมื่อป้อน "A B C D" เข้าไป มันมักจะสร้างคำขึ้นมาเอง ใส่คำนำหน้านาม หรือรวมตัวอักษรเข้าด้วยกันจนกลายเป็นเสียงที่ฟังไม่รู้เรื่อง การถอดความล้มเหลว แต่การแสดงพลังเสียงนั้นกลับชัดเจนมาก
กรณีนั้นสอนให้ผมรู้ถึงขีดจำกัดในทางปฏิบัติ อัตราการจับคู่เป็นเพียงตัวกรองเบื้องต้น ไม่ใช่คำตัดสินสุดท้าย เทคใดก็ตามที่ได้คะแนนต่ำ ผมจะยังคงใช้มนุษย์ฟังเพื่อคัดเลือกเบื้องต้นเป็นเวลาสิบวินาทีก่อนจะทิ้งมันไป ตัวเลขเป็นเพียงสิ่งที่ชี้ไปสู่ความน่าจะเป็น ไม่ใช่ความแน่นอน หากคุณใช้คะแนนเป็นเหมือนค้อนตัดสินชี้ขาด แทนที่จะเป็นเข็มทิศนำทาง คุณจะทิ้งเพลงดีๆ ไปมากมาย
อุปสรรคทางเทคนิคเล็กน้อย
หากคุณกำลังรัน MLX บน Apple Silicon ให้ตรวจสอบสถาปัตยกรรม Python ของคุณก่อนที่จะประมวลผลข้อมูลชุดใหญ่ ข้อผิดพลาดในการตั้งค่าที่พบบ่อยคือการรัน Python binary ผ่านการจำลองด้วย Rosetta แม้ว่าสคริปต์จะยังทำงานได้ แต่คุณจะสูญเสียการเร่งความเร็วด้วยฮาร์ดแวร์ (hardware acceleration) ซึ่งเป็นสิ่งที่ทำให้การถอดความในเครื่อง (local transcription) สามารถทำงานได้อย่างรวดเร็วพอที่จะใช้งานได้จริง
รันคำสั่งนี้ใน terminal ของคุณ:
python3 -c "import platform; print(platform.machine())"
คุณควรจะเห็น arm64 หากมันแสดงผลเป็น x86_64 แสดงว่าสภาพแวดล้อมของคุณเป็นการจำลอง ให้เปลี่ยนไปใช้ Python build แบบ native หรือ conda environment แบบ native จากนั้นจึงติดตั้ง mlx-whisper ใหม่ สำหรับการประมวลผลชุดข้อมูลขนาดใหญ่ ความแตกต่างระหว่างการรันแบบจำลองกับการรันแบบ native คือความแตกต่างระหว่างการทำงานเสร็จก่อนมื้อเที่ยงกับการทำงานเสร็จก่อนมื้อเย็น
คุณค่าที่แท้จริง
การสร้างเสียงด้วย Generative audio ให้ผลตอบแทนแก่ความพยายามอย่างต่อเนื่อง แต่ความสนใจของมนุษย์นั้นมีจำกัด การต้องมานั่งฟังเสียงคุณภาพปานกลางถึงสามสิบสองเทคเพียงเพื่อพิสูจน์ว่าคุณเป็นคนทำงานละเอียดนั้นไม่ใช่เรื่องน่าภูมิใจเลย การใช้ mlx-whisper มาคั่นกลางระหว่างตัวสร้างเสียง (generator) กับหูของผม ช่วยให้ผมได้เวลาในการสร้างสรรค์งานอย่างมีสมาธิกลับคืนมาหลายชั่วโมง ผมยังคงเป็นคนตัดสินใจว่าเพลงไหนจะไปต่อหรือเพลงไหนจะถูกทิ้งไป เครื่องจักรเพียงแค่ช่วยให้มั่นใจว่าผมได้ใช้การตัดสินใจนั้นกับตัวเลือกที่มีศักยภาพดีที่สุดเท่าที่จะเป็นไปได้
คุณสามารถอ่านบทความฉบับเต็มเกี่ยวกับ pipeline นี้ได้ ที่นี่ หากคุณกำลังสร้างเครื่องมือ QA แบบ local ที่คล้ายกัน GyaanSetu community เป็นสถานที่ที่ดีในการแลกเปลี่ยนความรู้กัน
