เปิดตัว AnySpeechRecognizer และ AnyDecisionModel บน Apple
Language models สามารถทำอะไรได้มากมาย ทั้งเขียน สรุป แปล และเรียกใช้เครื่องมือต่างๆ แต่นั่นเป็นเพียงส่วนเล็กๆ ของสิ่งที่ machine learning สามารถทำได้
สมมติว่าลูกค้าโทรเข้าสายสนับสนุนของคุณ อันดับแรกคุณต้องการทราบว่าพวกเขาพูดอะไร (speech recognition) จากนั้นคุณต้องตัดสินใจว่าจะส่งพวกเขาไปที่ส่วนงานไหน (decision) คุณสามารถส่งทั้งสองอย่างไปให้ language model จัดการได้ แต่ปัจจุบันมีโมเดลที่สร้างขึ้นมาเฉพาะทางซึ่งทำงานได้ดีกว่า เร็วกว่า และราคาถูกกว่า
ใน AnyLanguageModel 1.0 recap เราได้ดูโมเดลแบบ local และแบบ hosted ใน Swift ตลอดทั้งปี เมื่อ AnyLanguageModel และ swift-huggingface ออกเวอร์ชัน 1.x แล้ว เราจึงขยายแนวทางเดียวกันนี้ไปยังเรื่องเสียงและการตัดสินใจ ผ่าน Swift API ที่คุ้นเคยพร้อมตัวเลือกโมเดลที่หลากหลาย
วันนี้เราขอประกาศเปิดตัวสองแพ็คเกจใหม่:
- AnySpeechRecognizer นำ API การแปลงเสียงเป็นข้อความใหม่ของ Apple มาใช้งานร่วมกับเอนจินการจดจำที่หลากหลาย รวมถึง Parakeet ของ NVIDIA และ Qwen3-ASR ของ Alibaba ที่รันแบบ local บน Core ML พร้อมเพิ่มฟีเจอร์ speaker diarization เพื่อระบุตัวตนผู้พูด
- AnyDecisionModel สำหรับตอบคำถามแบบใช่หรือไม่ใช่ (yes-or-no), แบบเลือกตอบ (multiple-choice) และแบบมาตรวัดคะแนน (rating-scale) พร้อมผลลัพธ์แบบระบุประเภท (typed results) และค่าความน่าจะเป็น โดยดึงคำตอบจากความน่าจะเป็นของโมเดลแทนการสร้างข้อความ (generating text) รองรับการใช้งานผ่าน MLX, Core AI หรือ llama.cpp รวมถึงโมเดลจาก Jev หรือ Ollama
ทั้งสองแพ็คเกจสามารถดาวน์โหลดโมเดลแบบเปิดจาก Hugging Face Hub และรันบนอุปกรณ์ได้ทันที
AnySpeechRecognizer
คอมพิวเตอร์ทำการถอดความเสียงมานานหลายทศวรรษและพัฒนาขึ้นมากในช่วงไม่กี่ปีที่ผ่านมา แพลตฟอร์มของ Apple มี API สำหรับเรื่องนี้อยู่แล้ว โดย macOS 26 และ iOS 26 ได้แนะนำ SpeechAnalyzer ซึ่งเป็น API การแปลงเสียงเป็นข้อความรูปแบบใหม่
แม้จะเป็น API ที่ออกแบบมาอย่างดี แต่เอนจินเบื้องหลังจำกัดอยู่แค่ของ Apple เท่านั้น AnySpeechRecognizer จึงเข้ามาช่วยให้คุณใช้ API เดิมแต่เลือกเอนจินอื่นได้:
- import Speech
+ import AnySpeechRecognizerหากโค้ดเดิมใช้ API ของ Apple อยู่แล้ว เพียงแค่เปลี่ยนการ import ก็สามารถใช้งานได้ทันที แต่ถ้าต้องการใช้โมเดลอย่าง Parakeet แทน ก็เพียงแค่ปรับวิธีสร้าง transcriber ดังนี้:
let transcriber = SpeechTranscriber(
model: ParakeetSpeechModel(variant: .v3),
transcriptionOptions: [],
reportingOptions: [.volatileResults],
attributeOptions: [.audioTimeRange]
)พบกับโมเดลต่างๆ
Parakeet v3 จาก NVIDIA เป็นโมเดลหลายภาษา (polyglot) จดจำภาษาในยุโรปได้ 25 ภาษาและระบุภาษาได้อัตโนมัติ ขณะที่ Parakeet Ultra เป็นเวอร์ชันที่ผ่านการ post-trained โดย Moondream ซึ่งให้ความแม่นยำสูงกว่าในหลายการทดสอบ ส่วน Parakeet Unified จะเน้นเฉพาะภาษาอังกฤษ
Qwen3-ASR จาก Alibaba มีขนาด 0.6B และ 1.7B จดจำได้ 30 ภาษาและ 22 สำเนียงจีน ครอบคลุมภาษาแถบเอเชียอย่าง จีนกลาง กวางตุ้ง ญี่ปุ่น และเกาหลี ที่ Parakeet ไม่รองรับ โดย Qwen3-ASR จะรันบน GPU และเหมาะสำหรับการถอดความไฟล์มากกว่าการรับข้อมูลแบบสด (live)
โมเดล Core ML บน Hub
เราได้แปลงโมเดลเหล่านี้เป็น Core ML และเผยแพร่บน Hub เพื่อให้รันในแอปได้สะดวก:
| โมเดล | การแปลง Core ML | Checkpoint ต้นฉบับ | สิทธิ์การใช้งาน |
|---|---|---|---|
| Parakeet TDT 0.6B v3 | mattt/parakeet-tdt-0.6b-v3-coreml | nvidia/parakeet-tdt-0.6b-v3 | CC BY 4.0 |
| Parakeet Ultra | mattt/parakeet-ultra-coreml | moondream/parakeet-ultra | CC BY 4.0 |
| Parakeet Unified EN 0.6B | mattt/parakeet-unified-en-0.6b-coreml | nvidia/parakeet-unified-en-0.6b | NVIDIA Open Model License |
| Qwen3-ASR 0.6B | mattt/qwen3-asr-0.6b-coreml | Qwen/Qwen3-ASR-0.6B-hf | Apache 2.0 |
| Qwen3-ASR 1.7B | mattt/qwen3-asr-1.7b-coreml | Qwen/Qwen3-ASR-1.7B-hf | Apache 2.0 |
การดาวน์โหลดจะเกิดขึ้นเมื่อแอปของคุณร้องขอเท่านั้น ไฟล์จะถูกเก็บไว้ในแคชมาตรฐานของ Hugging Face ทำให้แอป Mac ที่อยู่นอก sandbox สามารถแชร์ไฟล์ร่วมกับเครื่องมืออื่นๆ ได้
Speaker diarization
AnySpeechRecognizer เพิ่มโมดูล SpeakerDiarizer ซึ่งใช้ Streaming Sortformer ของ NVIDIA เพื่อระบุว่าใครเป็นคนพูดในบทสนทนา ซึ่งเป็นฟีเจอร์ที่ API ของ Apple ยังไม่มีในปัจจุบัน โดยสามารถติดตามผู้พูดได้สูงสุด 4 คนพร้อมกันแม้จะพูดแทรกกันก็ตาม
AnyDecisionModel
AnyDecisionModel ถูกสร้างขึ้นเพื่อตอบโจทย์การตัดสินใจโดยเฉพาะ เช่น การระบุความด่วนของข้อความ หรือการเลือกทีมที่ควรรับผิดชอบตั๋วสนับสนุน แทนที่จะใช้วิธี prompt ปกติที่ให้แค่คำตอบเดียว AnyDecisionModel จะให้ค่าความน่าจะเป็นของแต่ละตัวเลือกด้วย
import AnyDecisionModel
enum Department: String, Choosable {
case billing, technical, sales
}
let ticket = "I was charged twice for my order..."
let model = MLXDecisionModel(modelID: "mlx-community/Qwen3-4B-Instruct-2507-4bit")
let session = DecisionSession(model: model, state: .text(ticket))
let team = try await session.choice("Which team?", from: Department.self)Backends ที่รองรับ
AnyDecisionModel รองรับ 6 backends หลัก ได้แก่ MLX และ MLX decision heads (เช่น Clef) สำหรับรันบน Apple silicon, Core AI สำหรับ macOS/iOS 27, llama.cpp สำหรับโมเดล GGUF, รวมถึง Jev และ Ollama สำหรับการเรียกใช้ผ่าน API หรือเซิร์ฟเวอร์
เริ่มต้นใช้งาน
ทั้งสองแพ็คเกจต้องการ Swift 6.2 และ macOS 26 / iOS 26 ขึ้นไป โดยสามารถเพิ่มลงใน Package.swift ได้ดังนี้:
dependencies: [
.package(url: "https://github.com/mattt/AnySpeechRecognizer", from: "0.1.0"),
.package(
url: "https://github.com/mattt/AnyDecisionModel",
from: "0.6.0",
traits: ["MLX"]
),
]ลิงก์ที่เกี่ยวข้อง
ความคิดเห็น (0)
เข้าสู่ระบบเพื่อร่วมแสดงความเห็น
สมัครสมาชิกมาเป็นคนแรกที่แสดงความเห็นกันเลยโบร
