whisper.cpp v1.9.0 ถอดเสียงเป็นข้อความบนเครื่องตัวเองได้ฟรีแบบออฟไลน์ · แถมรองรับโมเดล NVIDIA Parakeet ที่แม่นระดับ WER 1.93%
whisper.cpp คือโปรแกรมถอดเสียงพูดเป็นข้อความที่รันบนเครื่องตัวเองได้ฟรีโดยไม่ต้องต่อเน็ต เวอร์ชัน v1.9.0 ที่เพิ่งออกเริ่มรองรับโมเดล NVIDIA Parakeet ที่เร็วและแม่นมาก แต่ยังไม่รองรับภาษาไทย

whisper.cpp คือโปรแกรมถอดเสียงพูดเป็นข้อความที่รันได้บนเครื่องของตัวเองทั้งหมด ไม่ต้องอัปไฟล์เสียงขึ้น cloud และไม่ต้องต่อเน็ตด้วยซ้ำ ตัวโปรแกรมเป็น OpenAI Whisper ที่เขียนใหม่ด้วยภาษา C/C++ จึงเบาและไม่ต้องลงไลบรารีเสริมอะไรเลย เสียงประชุม คลิปสัมภาษณ์ หรือ voice note ที่อยากได้เป็นตัวอักษร ก็แปลงได้บนเครื่องตรงหน้า
จุดที่ทำให้รอบนี้น่าพูดถึงคือเวอร์ชัน v1.9.0 ที่เพิ่งออก หลัก ๆ เพิ่มเรื่องเดียวคือรองรับโมเดลตัวใหม่ชื่อ NVIDIA Parakeet โมเดลถอดเสียงที่ทั้งเร็วและแม่นในระดับที่น่าตกใจ แต่ก็มาพร้อมเงื่อนไขที่คนไทยต้องอ่านให้ครบก่อนตื่นเต้น บทความนี้จะตอบสามเรื่อง: ถอดเสียงบนเครื่องตัวเองดียังไง · Parakeet เก่งแค่ไหนและติดตรงไหน · แล้วจะเริ่มลองวันนี้ได้ยังไง
ทำไมการถอดเสียงบนเครื่องตัวเองถึงสำคัญ
เวลาส่งไฟล์เสียงขึ้นบริการถอดเสียงออนไลน์ สิ่งที่เกิดขึ้นคือเสียงของเราเดินทางออกจากเครื่องไปอยู่บนเซิร์ฟเวอร์ของคนอื่น ถ้าเป็นเสียงประชุมงาน บทสัมภาษณ์ลูกค้า หรือบันทึกเสียงส่วนตัว นั่นคือข้อมูลที่หลุดมือไปแล้ว และหลายบริการก็คิดเงินตามนาที
whisper.cpp เดินคนละทาง ทุกอย่างเกิดขึ้นในเครื่องของเราเอง ไฟล์เสียงไม่ไปไหน ใช้ได้ฟรีไม่จำกัดจำนวนนาที และถอดได้แม้ตอนที่ไม่มีเน็ต เพราะเอา Whisper ของ OpenAI มาเขียนใหม่ด้วย C/C++ ให้เบาและไม่ผูกกับไลบรารีภายนอก ผลคือมีไฟล์หลักแค่สองไฟล์ ลงและรันได้แทบทุกที่ ตั้งแต่ MacBook ที่เป็น Apple Silicon · เครื่อง Windows กับ Linux · ไปจนถึง Raspberry Pi ตัวเล็ก ๆ หรือแม้แต่รันในเบราว์เซอร์ผ่าน WebAssembly
อีกเรื่องที่ทำให้ใช้ได้จริงคือมันเลือกขนาดโมเดลได้ตามเครื่อง ตัวเล็กสุด tiny หนักราว 75 MiB เหมาะกับเครื่องสเปกน้อยและเน้นความเร็ว ส่วนตัวใหญ่ large ราว 2.9 GiB เน้นความแม่น โดยมี base · small · medium เป็นทางเลือกตรงกลาง สรุปสั้น ๆ คือเครื่องไม่แรงเลือกตัวเล็ก เครื่องแรงและงานต้องการความเป๊ะเลือกตัวใหญ่ ไม่ต้องลงทุกตัว
Parakeet คือของใหม่ที่ v1.9.0 เพิ่งรองรับ
ของใหม่ใน v1.9.0 คือ Parakeet TDT 0.6b v3 โมเดลถอดเสียงคนละค่ายกับ Whisper เดิม ออกแบบมาเพื่อถอดเสียงปริมาณมากให้เร็ว โมเดลนี้มีขนาด 600 ล้านพารามิเตอร์ และจุดที่ทำให้คนในวงการสนใจคือความแม่น
ตัวเลขที่บอกความแม่นของโมเดลถอดเสียงเรียกว่า WER (Word Error Rate) คืออัตราคำที่ถอดผิด ยิ่งต่ำยิ่งดี ของ Parakeet บนชุดทดสอบภาษาอังกฤษอยู่ที่ 1.93% แปลว่าถอดผิดไม่ถึงสองคำในร้อยคำ ซึ่งถือว่าแม่นมาก ส่วนค่าเฉลี่ยข้ามภาษาทั้งหมดอยู่ที่ราว 11.97% กว่าจะได้ระดับนี้ ต้องฝึกด้วยข้อมูลเสียงราว 660,000 ชั่วโมง บนการ์ด A100 จำนวน 128 ใบ
นอกจากแม่นแล้วมันยังสะดวกอีกหลายอย่าง มันเดาภาษาเองได้โดยไม่ต้องบอกล่วงหน้า และใส่เครื่องหมายวรรคตอนกับตัวพิมพ์ใหญ่ให้อัตโนมัติ ทำให้ข้อความที่ได้ออกมาอ่านรู้เรื่องทันที ไม่ใช่ก้อนตัวอักษรติดกันยาว ๆ
ข้อที่คนไทยต้องอ่านก่อนตื่นเต้น

ตรงนี้ต้องพูดให้ชัด Parakeet v3 รองรับ 25 ภาษา แต่ทั้งหมดเป็นภาษายุโรป ตั้งแต่อังกฤษ ฝรั่งเศส เยอรมัน ไปจนถึงรัสเซียและยูเครน ไม่มีภาษาไทยอยู่ในรายการ ดังนั้นความแม่นระดับ WER 1.93% ที่น่าตื่นเต้นนี้ ใช้ไม่ได้กับงานเสียงภาษาไทย
แต่นี่ไม่ได้แปลว่า whisper.cpp ใช้กับภาษาไทยไม่ได้ เพราะโมเดล Whisper เดิมที่ whisper.cpp รองรับอยู่แล้วเป็น multilingual และถอดภาษาไทยได้ ความต่างคือ Parakeet เป็นทางเลือกใหม่สำหรับคนที่ทำงานกับเสียงภาษายุโรปเป็นหลัก ส่วนงานเสียงภาษาไทยยังใช้โมเดล Whisper หลายภาษาตามเดิม โดยขยับไปใช้ขนาด medium หรือ large เพื่อให้ผลภาษาไทยแม่นขึ้น พูดง่าย ๆ คือ v1.9.0 เพิ่มทางเลือกให้ ไม่ได้มาแทนของเดิม
ลองจริงในไม่กี่บรรทัด
ข้อดีของ whisper.cpp คือเริ่มได้เร็วมาก ถ้าอยากลองถอดไฟล์ตัวอย่างให้เห็นผลทันที สามขั้นนี้พอ
git clone https://github.com/ggml-org/whisper.cpp.git
cd whisper.cpp
make base.enบรรทัดสุดท้าย make base.en จะดาวน์โหลดโมเดลขนาด base ภาษาอังกฤษ แล้วรันถอดเสียงไฟล์ตัวอย่างให้ดูทันทีในคำสั่งเดียว เอาไว้เช็กว่าเครื่องเราพร้อมไหมและผลออกมาหน้าตาเป็นยังไง
พอเห็นภาพแล้ว ถ้าอยากเอาไฟล์เสียงของตัวเองมาถอดจริง ให้ทำสองอย่าง อย่างแรกคือ build ตัวโปรแกรมเต็มด้วย cmake -B build && cmake --build build -j --config Release อย่างที่สองคือแปลงไฟล์เสียงให้ถูกฟอร์แมตก่อน: WAV แบบ 16-bit ช่องเสียงเดียว เพราะตัวถอดเสียงรับเฉพาะแบบนี้ ขั้นนี้พลาดบ่อยจนควรจำไว้
ffmpeg -i input.mp3 -ar 16000 -ac 1 -c:a pcm_s16le output.wavเสร็จแล้วก็สั่งถอดด้วย ./build/bin/whisper-cli -f output.wav เท่านี้ก็ได้ข้อความออกมา
นอกจากถอดไฟล์ธรรมดาแล้ว มันยังทำได้อีกหลายอย่างที่ครีเอเตอร์น่าจะชอบ ทั้งถอดแบบเรียลไทม์ขณะพูดผ่าน whisper-stream · ออกไทม์สแตมป์ระดับคำเพื่อเอาไปทำซับ · ไปจนถึงแยกว่าใครพูดช่วงไหนในไฟล์ที่มีหลายคน
เลือกใช้ให้ตรงงาน

สรุปให้เห็นภาพว่าควรหยิบตัวไหนเมื่อไหร่ ถ้างานเป็นเสียงภาษาไทย ให้ใช้โมเดล Whisper หลายภาษาที่ whisper.cpp มีอยู่ และเลือกขนาดใหญ่ขึ้นถ้าอยากให้แม่น ถ้างานเป็นเสียงภาษาอังกฤษหรือภาษายุโรปอื่น ๆ และต้องการความเร็วกับความแม่นสูงสุด Parakeet ใน v1.9.0 คือตัวเลือกใหม่ที่คุ้มลอง ส่วนถ้าแค่อยากลองให้เห็นว่ามันทำงานยังไง make base.en คือจุดเริ่มที่เบาที่สุด
คนเคยมองว่าซอฟต์แวร์ที่รันบนเครื่องตัวเองได้ต้องแลกความแม่นกับความเป็นส่วนตัวเสมอ แต่ภาพนั้นกำลังเปลี่ยน ความแม่นระดับท็อปขยับมาอยู่ในเครื่องตรงหน้าแล้ว เหลือแค่ว่าภาษาที่เราใช้จะถึงคิวเมื่อไหร่



