เปิดตัว 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 MLCheckpoint ต้นฉบับสิทธิ์การใช้งาน
Parakeet TDT 0.6B v3mattt/parakeet-tdt-0.6b-v3-coremlnvidia/parakeet-tdt-0.6b-v3CC BY 4.0
Parakeet Ultramattt/parakeet-ultra-coremlmoondream/parakeet-ultraCC BY 4.0
Parakeet Unified EN 0.6Bmattt/parakeet-unified-en-0.6b-coremlnvidia/parakeet-unified-en-0.6bNVIDIA Open Model License
Qwen3-ASR 0.6Bmattt/qwen3-asr-0.6b-coremlQwen/Qwen3-ASR-0.6B-hfApache 2.0
Qwen3-ASR 1.7Bmattt/qwen3-asr-1.7b-coremlQwen/Qwen3-ASR-1.7B-hfApache 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"]
    ),
]

ลิงก์ที่เกี่ยวข้อง

Source: Hugging Face Blog
ดูแลงานแปลและเรียบเรียงโดย TanasakP

ความคิดเห็น (0)

เข้าสู่ระบบเพื่อร่วมแสดงความเห็น

สมัครสมาชิก

มาเป็นคนแรกที่แสดงความเห็นกันเลยโบร