NaturalLanguage هو إطار عمل من Apple لمعالجة اللغة الطبيعية على أجهزة iOS و macOS، يوفر الوصول إلى الترميز، التعرف على اللغة، وضع علامات على أجزاء الكلام، الاشتقاق والتعرف على الكيانات المسماة. وفقًا لـ 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 هو فئة لتقسيم النص إلى وحدات لغوية: كلمات، جمل، فقرات أو مستندات. الترميز هو الخطوة الأولى لأي خط أنابيب NLP تقريبًا، ويوفرها NaturalLanguage جاهزة.
يراعي NLTokenizer خصائص اللغة: فهو يتعامل بشكل صحيح مع الترميز لليابانية (بدون مسافات بين الكلمات)، والعربية (الكتابة من اليمين إلى اليسار)، والصينية (الكتابة الرمزية). للإنجليزية والروسية، يعمل المرمز بالمسافات وعلامات الترقيم، لكن مع مراعاة الاختصارات (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
}
الترميز على مستوى الجمل مفيد لتقسيم النصوص الكبيرة إلى كتل منطقية قبل التحليل اللاحق. سيحدد 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 الأخرى. بعد الترميز، النص جاهز للتعرف على اللغة، وضع العلامات والاشتقاق.
NLLanguageRecognizer يحدد لغة النص ويعيد الخيار الأكثر احتمالاً مع درجة ثقة. يدعم الإطار أكثر من 30 لغة ويمكنه العمل مع نص من أي طول — من كلمة واحدة إلى مستند كامل.
خوارزمية NLLanguageRecognizer تحلل n-grams من الأحرف وتقارنها مع ملفات تعريف اللغة. للنصوص القصيرة (حتى 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 يوفر مخططات وضع العلامات للتحليل اللغوي: أجزاء الكلام (اسم، فعل، صفة)، الاشتقاقات (الشكل الأساسي للكلمة)، أنواع الكيانات (شخص، مؤسسة، مكان) وفئات أخرى.
الاشتقاق يختزل الكلمة إلى شكلها القاموسي: «جرى» → «جري»، «أفضل» → «جيد»، «books» → «book». هذا مهم بشكل حاسم للبحث وتحليل النص — بدون الاشتقاق، يتم التعامل مع «قطة» و«قطتين» كرموز مختلفة، مما يقلل من جودة خطوط أنابيب 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 → ظرف. من خلال الجمع بين الاشتقاق وأجزاء الكلام، يمكنك بناء بحث ذكي يجد «القطط الجارية» من استعلام «جري قطة».
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 | دعم الروسية |
|---|---|---|
| الترميز | NLTokenizer | نعم |
| التعرف على اللغة | NLLanguageRecognizer | نعم |
| الاشتقاق | NLTagger + .lemma | نعم |
| أجزاء الكلام | NLTagger + .lexicalClass | نعم |
| NER | NLTagger + .nameType | محدود |
| المشاعر | NLModel (مدرب مسبقًا) | لا |
الأسئلة الشائعة
NaturalLanguage يوفر نماذج NLP جاهزة دون الحاجة للتدريب: الترميز، التعرف على اللغة، NER. Core ML يتطلب تدريب نموذج على بياناتك الخاصة ويوفر مرونة أكبر للمهام المحددة. NaturalLanguage أفضل للمهام الأساسية الجاهزة، بينما Core ML للمهام المتخصصة للغاية.
نعم، NaturalLanguage يعمل بالكامل على الجهاز دون اتصال بالإنترنت. جميع النماذج مدمجة في iOS و macOS، ولا يتم إرسال البيانات إلى خادم. هذه ميزة رئيسية على خدمات NLP السحابية التي تتطلب الوصول إلى الشبكة وتخلق مخاطر على الخصوصية.
NaturalLanguage يدعم أكثر من 30 لغة، بما في ذلك الروسية والإنجليزية والإسبانية والفرنسية والألمانية والإيطالية والبرتغالية والصينية واليابانية والكورية والعربية والتركية والأوكرانية. دقة الترميز والاشتقاق عالية لجميع اللغات المدعومة، بينما 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. سوف نقدم لك النصح ونقترح أفضل حل.