NaturalLanguage — چارچوبی از اپل برای پردازش زبان طبیعی در دستگاههای iOS و macOS است که دسترسی به توکنسازی، تشخیص زبان، برچسبزنی اجزای کلام، ریشهیابی و تشخیص موجودیتهای نامدار را فراهم میکند. به گفته Apple WWDC 2020، این چارچوب تمام تحلیلها را روی دستگاه انجام میدهد، بدون ارسال داده به سرور، که محرمانگی دادههای کاربر را تضمین میکند. NaturalLanguage از بیش از ۳۰ زبان پشتیبانی میکند و با Core ML برای مدلهای NLP سفارشی یکپارچه میشود.
نکات کلیدی
NaturalLanguage (NL) — چارچوب یادگیری ماشین اپل برای تحلیل زبان طبیعی است که بخشی از Foundation است و در iOS 12+، macOS 10.14+ و watchOS 5+ در دسترس است. این چارچوب قابلیتهای آماده NLP را بدون نیاز به آموزش مدلهای اختصاصی فراهم میکند.
بر خلاف سرویسهای ابری NLP (Google Cloud NLP، Amazon Comprehend)، NaturalLanguage تمام تحلیلها را روی دستگاه انجام میدهد. این به معنای تأخیر صفر برای درخواستهای شبکه، کار در حالت آفلاین و محرمانگی کامل دادهها است — متن از دستگاه کاربر خارج نمیشود.
به گفته Apple ML Research 2023، NLP روی دستگاه روی تراشههای A12+ درخواستها را ۳–۵ برابر سریعتر از راهحلهای ابری مشابه پردازش میکند و دقت بیش از ۸۵٪ را برای وظایف پایه حفظ میکند. این چارچوب برای Neural Engine بهینه شده است و امکان پردازش تا ۱۰۰ درخواست در ثانیه را در دستگاههای مدرن فراهم میکند.
NaturalLanguage در برنامههای iOS برای تحلیل نظرات، جستجوی هوشمند، تکمیل خودکار، مدیریت محتوا و استخراج دادههای ساختاریافته از متن غیرساختاریافته استفاده میشود. این چارچوب از بیش از ۳۰ زبان از جمله فارسی، اوکراینی، ترکی و عربی پشتیبانی میکند.
NLTokenizer — کلاسی برای تقسیم متن به واحدهای زبانی: کلمات، جملات، پاراگرافها یا اسناد. توکنسازی اولین مرحله تقریباً هر خط لوله NLP است و NaturalLanguage آن را به صورت آماده ارائه میدهد.
NLTokenizer ویژگیهای زبان را در نظر میگیرد: توکنسازی را برای ژاپنی (بدون فاصله بین کلمات)، عربی (نویسه از راست به چپ) و چینی (نویسههای تصویری) به درستی مدیریت میکند. برای انگلیسی و فارسی، توکنساز بر اساس فاصله و علائم نگارشی کار میکند، اما با در نظر گرفتن اختصارات.
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
}
توکنسازی در سطح جملات برای تقسیم متون بزرگ به بلوکهای منطقی قبل از تحلیل بعدی مفید است. NLTokenizerSentence مرزهای جملات را حتی در صورت نبود نقطه در انتها یا وجود جملات پرسشی تعیین میکند.
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 زبان متن را تشخیص میدهد و محتملترین گزینه را با درجه اطمینان برمیگرداند. این چارچوب از بیش از ۳۰ زبان پشتیبانی میکند و میتواند با متنی با هر طولی کار کند — از یک کلمه تا یک سند کامل.
الگوریتم NLLanguageRecognizer انگرامهای نویسهها را تحلیل کرده و با پروفایلهای زبانی مقایسه میکند. برای متون کوتاه (تا ۵۰ نویسه) دقت کاهش مییابد، بنابراین اپل توصیه میکند برای تشخیص مطمئن زبان حداقل ۱۰۰–۲۰۰ نویسه ارسال شود.
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 زبان فارسی را با دقت ۹۵٪ برای متون از ۱۰۰ نویسه تشخیص میدهد. برای متون کوتاه (۱–۲ کلمه) دقت به ۶۰–۷۰٪ کاهش مییابد — در چنین مواردی بهتر است از languageHypotheses استفاده کرده و سه گزینه برتر را نشان دهید.
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 → Noun، were → Verb، quickly → Adverb. با ترکیب ریشهیابی و اجزای کلام میتوان جستجوی هوشمندی ساخت که «گربههای در حال دویدن» را با جستجوی «دویدن گربه» پیدا کند.
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 پشتیبانی میشود اما دقت کمی پایینتر است — حدود ۷۰–۷۵٪ در مقابل ۸۵٪ برای انگلیسی. اگر دقت بالا برای فارسی مورد نیاز است، اپل توصیه میکند یک مدل سفارشی Core ML روی دادههای خود با استفاده از Create ML آموزش دهید.
NLModel — کلاسی برای کار با مدلهای NLP آموزش دیده Core ML، از جمله مدل تحلیل احساسات داخلی که توسط اپل از پیش آموزش داده شده است. این مدل تُن متن را تعیین میکند: مثبت، منفی یا خنثی.
مدل داخلی تحلیل احساسات روی نظرات App Store آموزش دیده و برای انگلیسی، فرانسوی، آلمانی، ایتالیایی، اسپانیایی، پرتغالی، چینی و ژاپنی کار میکند. برای فارسی مدل از پیش آموزش داده نشده است — نیاز به Create ML و دادههای برچسبگذاری شده خود دارید.
import NaturalLanguage
let sentimentPredictor = try NLModel(mlModel: SentimentModel().model)
let sentiment = sentimentPredictor.predictedLabel(for: "این برنامه شگفتانگیز است!")
print("Sentiment: \\(sentiment ?? "neutral")") // "positive"
NLModel همچنین از مدلهای سفارشی آموزش داده شده از طریق Create ML پشتیبانی میکند. میتوانید یک مدل طبقهبندی متن روی دادههای خود (دستهبندی محصولات، انواع درخواستهای پشتیبانی، سبکهای زبانی) آموزش دهید و از طریق همان رابط NLModel استفاده کنید.
به گفته Apple Create ML documentation 2024، یک مدل متن سفارشی روی ۵۰۰–۵۰۰۰ نمونه برای دستیابی به دقت ۸۰–۹۵٪ آموزش میبیند. 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 از بیش از ۳۰ زبان از جمله فارسی، انگلیسی، اسپانیایی، فرانسوی، آلمانی، ایتالیایی، پرتغالی، چینی، ژاپنی، کرهای، عربی، ترکی و اوکراینی پشتیبانی میکند. دقت توکنسازی و ریشهیابی برای همه زبانهای پشتیبانی شده بالا است، NER و احساسات عمدتاً برای انگلیسی.
از Create ML استفاده کنید — برنامه اپل برای آموزش مدلهای یادگیری ماشین بدون برنامهنویسی. مجموعه داده برچسبگذاری شده (CSV یا JSON) را بارگذاری کنید، وظیفه طبقهبندی متن یا برچسبزنی را انتخاب کنید، مدل را آموزش دهید و در قالب Core ML (.mlmodel) خروجی بگیرید. سپس مدل را از طریق NLModel(mlModel:) در کد بارگذاری کنید.
NaturalLanguage در iOS 12+، macOS 10.14+، watchOS 5+ و tvOS 12+ در دسترس است. روی دستگاههای دارای تراشه A12+ و Neural Engine عملکرد بالاتر است — پردازش متن به دلیل شتاب سختافزاری یادگیری ماشین ۳–۵ برابر سریعتر میشود. روی دستگاههای قدیمیتر (A11 و قبل) چارچوب کار میکند اما کندتر.
خلاصه
ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد
IT Sectr از سال 2017 برنامههای iOS و Android را برای استارتاپها و کسبوکارها ایجاد میکند. ما به شما مشاوره میدهیم و بهترین راهحل را پیشنهاد خواهیم کرد.
همچنین بخوانید