NaturalLanguage เป็นเฟรมเวิร์กของ Apple สำหรับการประมวลผลภาษาธรรมชาติบนอุปกรณ์ iOS และ macOS ให้การเข้าถึง tokenization การจดจำภาษา การติดป้ายกำกับส่วนของคำพูด lemmatization และการจดจำเอนทิตีที่มีชื่อ ตามข้อมูลของ Apple WWDC 2020 เฟรมเวิร์กดำเนินการวิเคราะห์ทั้งหมดบนอุปกรณ์ โดยไม่ส่งข้อมูลไปยังเซิร์ฟเวอร์ ทำให้มั่นใจในความเป็นส่วนตัวของข้อมูลผู้ใช้ NaturalLanguage รองรับมากกว่า 30 ภาษาและผสานรวมกับ Core ML สำหรับโมเดล NLP ที่กำหนดเอง
ประเด็นสำคัญ
NaturalLanguage (NL) เป็นเฟรมเวิร์กการเรียนรู้ของเครื่องของ Apple สำหรับการวิเคราะห์ภาษาธรรมชาติ ซึ่งเป็นส่วนหนึ่งของ Foundation และพร้อมใช้งานบน iOS 12+, macOS 10.14+ และ watchOS 5+ เฟรมเวิร์กมีความสามารถ NLP ที่พร้อมใช้งานโดยไม่ต้องฝึกโมเดลที่กำหนดเอง
แตกต่างจากบริการ NLP บนคลาวด์ (Google Cloud NLP, Amazon Comprehend) NaturalLanguage ดำเนินการวิเคราะห์ทั้งหมดบนอุปกรณ์ ซึ่งหมายถึงความหน่วงของเครือข่ายเป็นศูนย์ การทำงานแบบออฟไลน์ และความเป็นส่วนตัวของข้อมูลอย่างสมบูรณ์ — ข้อความไม่เคยออกจากอุปกรณ์ของผู้ใช้
ตาม Apple ML Research 2023 NLP บนอุปกรณ์บนชิป A12+ ประมวลผลคำขอได้เร็วกว่า 3–5 เท่าเมื่อเทียบกับโซลูชันคลาวด์ที่คล้ายกัน ในขณะที่รักษาความแม่นยำมากกว่า 85% สำหรับงานพื้นฐาน เฟรมเวิร์กได้รับการปรับให้เหมาะสมสำหรับ Neural Engine สามารถประมวลผลได้ถึง 100 คำขอต่อวินาทีบนอุปกรณ์สมัยใหม่
NaturalLanguage ใช้ใน แอปพลิเคชัน iOS สำหรับการวิเคราะห์รีวิว การค้นหาอัจฉริยะ การเติมข้อความอัตโนมัติ การกลั่นกรองเนื้อหา และการแยกข้อมูลที่มีโครงสร้างจากข้อความที่ไม่มีโครงสร้าง เฟรมเวิร์กรองรับมากกว่า 30 ภาษา รวมถึงภาษารัสเซีย ยูเครน ตุรกี และอาหรับ
NLTokenizer เป็นคลาสสำหรับแบ่งข้อความเป็นหน่วยทางภาษา: คำ ประโยค ย่อหน้า หรือเอกสาร Tokenization เป็นขั้นตอนแรกของไปป์ไลน์ NLP เกือบทุกประเภท และ NaturalLanguage มีให้พร้อมใช้งาน
NLTokenizer คำนึงถึง คุณลักษณะเฉพาะของภาษา: จัดการ tokenization สำหรับภาษาญี่ปุ่น (ไม่มีช่องว่างระหว่างคำ) ภาษาอาหรับ (การเขียนจากขวาไปซ้าย) และภาษาจีน (การเขียนเชิงตรรกะ) อย่างถูกต้อง สำหรับภาษาอังกฤษและรัสเซีย tokenizer ทำงานโดยใช้ช่องว่างและเครื่องหมายวรรคตอน แต่คำนึงถึงการหดคำ (don't → do + n't)
import NaturalLanguage
let text = "NaturalLanguage processes text on-device. It supports 30+ languages!"
let tokenizer = NLTokenizer(unit: .word)
tokenizer.string = text
tokenizer.enumerateTokens(in: text.startIndex..<text.endIndex) { range, _ in
print(text[range])
return true
}
Tokenization ในระดับ ประโยค มีประโยชน์สำหรับการแบ่งข้อความขนาดใหญ่ออกเป็นบล็อกตรรกะก่อนการวิเคราะห์เพิ่มเติม NLTokenizer จะกำหนดขอบเขตประโยคแม้ว่าจะไม่มีจุดต่อท้ายหรือเมื่อมีประโยคคำถาม
let sentenceTokenizer = NLTokenizer(unit: .sentence)
sentenceTokenizer.string = text
sentenceTokenizer.enumerateTokens(in: text.startIndex..<text.endIndex) { range, _ in
print("Sentence: \\(text[range])")
return true
}
NLTokenizer เป็นพื้นฐานสำหรับความสามารถอื่น ๆ ทั้งหมดของ NaturalLanguage หลังจาก tokenization ข้อความพร้อมสำหรับการจดจำภาษา การติดป้ายกำกับ และ lemmatization
NLLanguageRecognizer กำหนดภาษาของข้อความและส่งคืนตัวเลือกที่น่าจะเป็นไปได้มากที่สุดพร้อมคะแนนความเชื่อมั่น เฟรมเวิร์กรองรับมากกว่า 30 ภาษาและสามารถทำงานกับข้อความทุกความยาว — ตั้งแต่คำเดียวจนถึงเอกสารทั้งฉบับ
อัลกอริทึมของ NLLanguageRecognizer วิเคราะห์ n-gram ของอักขระและเปรียบเทียบกับโปรไฟล์ภาษา สำหรับข้อความสั้น (สูงสุด 50 อักขระ) ความแม่นยำจะลดลง ดังนั้น Apple แนะนำให้ส่งอย่างน้อย 100–200 อักขระเพื่อการระบุภาษาที่เชื่อถือได้
import NaturalLanguage
let recognizer = NLLanguageRecognizer()
recognizer.processString("Hello, how are you? I am learning NaturalLanguage.")
if let language = recognizer.dominantLanguage {
print("Dominant language: \\(language.rawValue)") // "ru"
}
let hypotheses = recognizer.languageHypotheses(withMaximum: 3)
for (lang, prob) in hypotheses {
print("\\(lang.rawValue): \\(prob)")
}
เมธอด languageHypotheses ส่งคืนพจนานุกรมของภาษาพร้อมความน่าจะเป็นในลำดับจากมากไปน้อย มีประโยชน์เมื่อข้อความประกอบด้วยภาษาที่ผสมกัน หรือเมื่อคุณต้องการแสดงตัวเลือกหลายรายการให้ผู้ใช้เลือกแทนที่จะเป็นภาษาเด่นเท่านั้น
NaturalLanguage ระบุ ภาษารัสเซีย ด้วยความแม่นยำ 95% สำหรับข้อความตั้งแต่ 100 อักขระขึ้นไป สำหรับข้อความสั้น (1–2 คำ) ความแม่นยำลดลงเหลือ 60–70% — ในกรณีเช่นนี้ ควรใช้ languageHypotheses และแสดง 3 ตัวเลือกแรก
NLTagScheme มีรูปแบบการติดป้ายกำกับสำหรับการวิเคราะห์ทางภาษา: ส่วนของคำพูด (คำนาม คำกริยา คำคุณศัพท์) lemmas (รูปแบบฐานของคำ) ประเภทเอนทิตี (บุคคล องค์กร สถานที่) และหมวดหมู่อื่น ๆ
Lemmatization ลดรูปคำให้อยู่ในรูปพจนานุกรม: วิ่ง → วิ่ง ดีกว่า → ดี books → book สิ่งนี้สำคัญอย่างยิ่งสำหรับการค้นหาและการวิเคราะห์ข้อความ — หากไม่มี lemmatization แมวและแมวทั้งหลายจะถูกปฏิบัติเป็น token ที่แตกต่างกัน ซึ่งลดคุณภาพของไปป์ไลน์ NLP
import NaturalLanguage
let tagger = NLTagger(tagSchemes: [.lemma, .lexicalClass])
tagger.string = "The cats were running quickly."
tagger.enumerateTags(in: tagger.string!.startIndex..<tagger.string!.endIndex,
unit: .word,
scheme: .lexicalClass) { tag, range in
print("\\(tagger.string![range]): \\(tag?.rawValue ?? "unknown")"
}
ตัวอย่างผลลัพธ์: cats → คำนาม were → คำกริยา quickly → คำกริยาวิเศษณ์ การรวม lemmatization และส่วนของคำพูดช่วยให้คุณสร้างการค้นหาอัจฉริยะที่ค้นหา แมวกำลังวิ่ง จากคำค้น วิ่ง แมว
NLTagScheme.lemma ทำงานสำหรับทุกภาษาที่ NaturalLanguage รองรับ รวมถึงภาษารัสเซีย ทำให้ NLTagger เป็นเครื่องมืออเนกประสงค์สำหรับแอปพลิเคชันหลายภาษาโดยไม่ต้องโหลดโมเดลแยกต่างหากสำหรับแต่ละภาษา
การจดจำเอนทิตีที่มีชื่อ (NER) คืองานในการแยกเอนทิตีที่มีชื่อออกจากข้อความ: ชื่อบุคคล ชื่อองค์กร สถานที่ตั้งทางภูมิศาสตร์ และข้อมูลส่วนบุคคล NaturalLanguage รองรับ NER ผ่าน NLTagScheme.nameType
NLTagScheme.nameType แยกแยะเอนทิตีสามประเภท: PersonalName, OrganizationName และ PlaceName ซึ่งช่วยให้สามารถแยกข้อมูลที่มีโครงสร้างจากข่าวสาร อีเมล และรีวิวได้โดยอัตโนมัติ
let nerTagger = NLTagger(tagSchemes: [.nameType])
nerTagger.string = "Tim Cook announced Apple's new headquarters in Cupertino."
nerTagger.enumerateTags(in: nerTagger.string!.startIndex..<nerTagger.string!.endIndex,
unit: .word,
scheme: .nameType) { tag, range in
if tag != nil {
print("\\(nerTagger.string![range]): \\(tag!.rawValue)"
}
}
ผลลัพธ์: Tim Cook → PersonalName, Apple → OrganizationName, Cupertino → PlaceName NER ของ NaturalLanguage ไม่ต้องการการฝึกอบรมที่กำหนดเองและทำงานทันทีสำหรับภาษาอังกฤษ ฝรั่งเศส เยอรมัน สเปน และภาษาอื่น ๆ
สำหรับ ภาษารัสเซีย NER ได้รับการสนับสนุนแต่ความแม่นยำค่อนข้างต่ำกว่า — ประมาณ 70–75% เทียบกับ 85% สำหรับภาษาอังกฤษ หากต้องการความแม่นยำสูงสำหรับภาษารัสเซีย Apple แนะนำให้ฝึกโมเดล Core ML ที่กำหนดเองบนข้อมูลของคุณเองโดยใช้ Create ML
NLModel เป็นคลาสสำหรับทำงานกับโมเดล Core ML NLP ที่ผ่านการฝึกอบรม รวมถึงโมเดลวิเคราะห์ความรู้สึกในตัวที่ Apple ฝึกอบรมไว้ล่วงหน้า โมเดลกำหนดความรู้สึกของข้อความ: บวก ลบ หรือเป็นกลาง
โมเดล วิเคราะห์ความรู้สึก ในตัวฝึกอบรมบนรีวิว App Store และทำงานสำหรับภาษาอังกฤษ ฝรั่งเศส เยอรมัน อิตาลี สเปน โปรตุเกส จีน และญี่ปุ่น สำหรับภาษารัสเซีย โมเดลไม่ได้ฝึกอบรมล่วงหน้า — คุณต้องใช้ Create ML และข้อมูลที่มีป้ายกำกับของคุณเอง
import NaturalLanguage
let sentimentPredictor = try NLModel(mlModel: SentimentModel().model)
let sentiment = sentimentPredictor.predictedLabel(for: "This app is amazing!")
print("Sentiment: \\(sentiment ?? "neutral")") // "positive"
NLModel ยังรองรับโมเดลที่กำหนดเองที่ฝึกอบรมผ่าน Create ML คุณสามารถฝึกโมเดลการจำแนกข้อความบนข้อมูลของคุณเอง (หมวดหมู่ผลิตภัณฑ์ ประเภทตั๋วสนับสนุน รูปแบบภาษา) และใช้งานผ่านอินเทอร์เฟซ NLModel เดียวกัน
ตาม เอกสาร Apple Create ML 2024 โมเดลข้อความที่กำหนดเองจะฝึกอบรมบน 500–5000 ตัวอย่างเพื่อให้ได้ความแม่นยำ 80–95% NaturalLanguage โหลดโมเดลครั้งเดียวและแคชไว้สำหรับการเรียกครั้งต่อ ๆ ไป ซึ่งช่วยลดความหน่วงสำหรับคำขอที่ทำซ้ำ
| งาน NLP | คลาส NaturalLanguage | รองรับภาษารัสเซีย |
|---|---|---|
| Tokenization | NLTokenizer | ใช่ |
| การจดจำภาษา | NLLanguageRecognizer | ใช่ |
| Lemmatization | NLTagger + .lemma | ใช่ |
| ส่วนของคำพูด | NLTagger + .lexicalClass | ใช่ |
| NER | NLTagger + .nameType | จำกัด |
| ความรู้สึก | NLModel (ฝึกอบรมล่วงหน้า) | ไม่ |
คำถามที่พบบ่อย
NaturalLanguage มีโมเดล NLP ที่พร้อมใช้งานโดยไม่ต้องฝึกอบรม: tokenization, การจดจำภาษา, NER Core ML ต้องการการฝึกโมเดลบนข้อมูลของคุณเองและมีความยืดหยุ่นมากกว่าสำหรับงานเฉพาะ NaturalLanguage เหมาะสำหรับงานพื้นฐานที่พร้อมใช้งาน ในขณะที่ Core ML สำหรับงานที่เชี่ยวชาญสูง
ใช่ NaturalLanguage ทำงานบนอุปกรณ์อย่างสมบูรณ์โดยไม่ต้องเชื่อมต่ออินเทอร์เน็ต โมเดลทั้งหมดถูกสร้างไว้ใน iOS และ macOS และข้อมูลจะไม่ถูกส่งไปยังเซิร์ฟเวอร์ นี่คือข้อได้เปรียบสำคัญเหนือบริการ NLP บนคลาวด์ที่ต้องการการเข้าถึงเครือข่ายและสร้างความเสี่ยงต่อความเป็นส่วนตัว
NaturalLanguage รองรับมากกว่า 30 ภาษา รวมถึงรัสเซีย อังกฤษ สเปน ฝรั่งเศส เยอรมัน อิตาลี โปรตุเกส จีน ญี่ปุ่น เกาหลี อาหรับ ตุรกี และยูเครน ความแม่นยำของ tokenization และ lemmatization สูงสำหรับทุกภาษาที่รองรับ ในขณะที่ NER และการวิเคราะห์ความรู้สึกส่วนใหญ่สำหรับภาษาอังกฤษ
ใช้ Create ML — แอปพลิเคชันของ Apple สำหรับฝึกโมเดลการเรียนรู้ของเครื่องโดยไม่ต้องเขียนโปรแกรม อัปโหลดชุดข้อมูลที่มีป้ายกำกับ (CSV หรือ JSON) เลือกงานจำแนกข้อความหรือติดป้ายกำกับ ฝึกโมเดล และส่งออกเป็นรูปแบบ Core ML (.mlmodel) จากนั้นโหลดโมเดลผ่าน NLModel(mlModel:) ในโค้ด
NaturalLanguage พร้อมใช้งานบน iOS 12+, macOS 10.14+, watchOS 5+ และ tvOS 12+ บนอุปกรณ์ที่มีชิป A12+ และ Neural Engine ประสิทธิภาพสูงกว่า — การประมวลผลข้อความเร็วขึ้น 3–5 เท่าด้วยการเรียนรู้ของเครื่องที่เร่งด้วยฮาร์ดแวร์ บนอุปกรณ์รุ่นเก่า (A11 และก่อนหน้า) เฟรมเวิร์กทำงานแต่ช้ากว่า
สรุป
เราจะพัฒนาแอปพลิเคชันบนมือถือแบบครบวงจร
IT Sectr สร้างแอปพลิเคชัน iOS และ Android สำหรับสตาร์ทอัพและธุรกิจตั้งแต่ปี 2017 เราจะให้คำแนะนำและเสนอวิธีแก้ปัญหาที่ดีที่สุดแก่คุณ