NLP / NaturalLanguage: چارچوب پردازش متن در iOS

نویسنده: IT Sectr منتشر شده: 2026-07-19 زمان مطالعه: 8 دقیقه

NaturalLanguage — چارچوبی از اپل برای پردازش زبان طبیعی در دستگاه‌های iOS و macOS است که دسترسی به توکن‌سازی، تشخیص زبان، برچسب‌زنی اجزای کلام، ریشه‌یابی و تشخیص موجودیت‌های نام‌دار را فراهم می‌کند. به گفته Apple WWDC 2020، این چارچوب تمام تحلیل‌ها را روی دستگاه انجام می‌دهد، بدون ارسال داده به سرور، که محرمانگی داده‌های کاربر را تضمین می‌کند. NaturalLanguage از بیش از ۳۰ زبان پشتیبانی می‌کند و با Core ML برای مدل‌های NLP سفارشی یکپارچه می‌شود.

نکات کلیدی

  • NaturalLanguage — چارچوب NLP روی دستگاه از اپل، بدون ارسال داده به ابر.
  • پشتیبانی از توکن‌سازی، تشخیص زبان، ریشه‌یابی، برچسب‌زنی اجزای کلام و NER.
  • کار با ۳۰+ زبان، از جمله فارسی، انگلیسی، چینی، عربی.
  • NLTokenizer متن را به کلمات، جملات، پاراگراف‌ها و اسناد تقسیم می‌کند.
  • NLLanguageRecognizer زبان متن را با نشان دادن احتمال برای هر گزینه تشخیص می‌دهد.

NaturalLanguage در iOS چیست؟

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

NLTokenizer — کلاسی برای تقسیم متن به واحدهای زبانی: کلمات، جملات، پاراگراف‌ها یا اسناد. توکن‌سازی اولین مرحله تقریباً هر خط لوله NLP است و NaturalLanguage آن را به صورت آماده ارائه می‌دهد.

NLTokenizer ویژگی‌های زبان را در نظر می‌گیرد: توکن‌سازی را برای ژاپنی (بدون فاصله بین کلمات)، عربی (نویسه از راست به چپ) و چینی (نویسه‌های تصویری) به درستی مدیریت می‌کند. برای انگلیسی و فارسی، توکن‌ساز بر اساس فاصله و علائم نگارشی کار می‌کند، اما با در نظر گرفتن اختصارات.

swift
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 مرزهای جملات را حتی در صورت نبود نقطه در انتها یا وجود جملات پرسشی تعیین می‌کند.

swift
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 زبان متن را تشخیص می‌دهد و محتمل‌ترین گزینه را با درجه اطمینان برمی‌گرداند. این چارچوب از بیش از ۳۰ زبان پشتیبانی می‌کند و می‌تواند با متنی با هر طولی کار کند — از یک کلمه تا یک سند کامل.

الگوریتم NLLanguageRecognizer ان‌گرام‌های نویسه‌ها را تحلیل کرده و با پروفایل‌های زبانی مقایسه می‌کند. برای متون کوتاه (تا ۵۰ نویسه) دقت کاهش می‌یابد، بنابراین اپل توصیه می‌کند برای تشخیص مطمئن زبان حداقل ۱۰۰–۲۰۰ نویسه ارسال شود.

swift
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 را کاهش می‌دهد.

swift
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 را به ابزاری جهانی برای برنامه‌های چندزبانه بدون نیاز به بارگذاری مدل‌های جداگانه برای هر زبان تبدیل می‌کند.

تشخیص موجودیت‌های نام‌دار در NaturalLanguage

تشخیص موجودیت‌های نام‌دار (NER) — وظیفه استخراج موجودیت‌های نام‌دار از متن: نام افراد، نام سازمان‌ها، مکان‌های جغرافیایی و اطلاعات شخصی است. NaturalLanguage از NER از طریق NLTagScheme.nameType پشتیبانی می‌کند.

NLTagScheme.nameType سه نوع موجودیت را تشخیص می‌دهد: PersonalName (نام افراد)، OrganizationName (سازمان‌ها، شرکت‌ها) و PlaceName (نام‌های جغرافیایی). این امکان استخراج خودکار داده‌های ساختاریافته از اخبار، ایمیل‌ها و نظرات را فراهم می‌کند.

swift
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

NLModel — کلاسی برای کار با مدل‌های NLP آموزش دیده Core ML، از جمله مدل تحلیل احساسات داخلی که توسط اپل از پیش آموزش داده شده است. این مدل تُن متن را تعیین می‌کند: مثبت، منفی یا خنثی.

مدل داخلی تحلیل احساسات روی نظرات App Store آموزش دیده و برای انگلیسی، فرانسوی، آلمانی، ایتالیایی، اسپانیایی، پرتغالی، چینی و ژاپنی کار می‌کند. برای فارسی مدل از پیش آموزش داده نشده است — نیاز به Create ML و داده‌های برچسب‌گذاری شده خود دارید.

swift
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بله
NERNLTagger + .nameTypeمحدود
احساساتNLModel (پیش‌آموزش)خیر

سوالات متداول

تفاوت NaturalLanguage با Core ML برای NLP چیست؟

NaturalLanguage مدل‌های آماده NLP را بدون نیاز به آموزش فراهم می‌کند: توکن‌سازی، تشخیص زبان، NER. Core ML نیاز به آموزش مدل روی داده‌های شما دارد و انعطاف بیشتری برای وظایف خاص می‌دهد. NaturalLanguage برای وظایف پایه «آماده کار» بهتر است، Core ML برای وظایف تخصصی.

آیا NaturalLanguage آفلاین کار می‌کند؟

بله، NaturalLanguage کاملاً روی دستگاه بدون اتصال اینترنت کار می‌کند. همه مدل‌ها در iOS و macOS تعبیه شده‌اند و داده‌ها به سرور ارسال نمی‌شوند. این مزیت کلیدی نسبت به سرویس‌های ابری NLP است که نیاز به شبکه دارند و ریسک حریم خصوصی ایجاد می‌کنند.

NaturalLanguage از چه زبان‌هایی پشتیبانی می‌کند؟

NaturalLanguage از بیش از ۳۰ زبان از جمله فارسی، انگلیسی، اسپانیایی، فرانسوی، آلمانی، ایتالیایی، پرتغالی، چینی، ژاپنی، کره‌ای، عربی، ترکی و اوکراینی پشتیبانی می‌کند. دقت توکن‌سازی و ریشه‌یابی برای همه زبان‌های پشتیبانی شده بالا است، NER و احساسات عمدتاً برای انگلیسی.

چگونه مدل NLP خود را برای NaturalLanguage آموزش دهم؟

از Create ML استفاده کنید — برنامه اپل برای آموزش مدل‌های یادگیری ماشین بدون برنامه‌نویسی. مجموعه داده برچسب‌گذاری شده (CSV یا JSON) را بارگذاری کنید، وظیفه طبقه‌بندی متن یا برچسب‌زنی را انتخاب کنید، مدل را آموزش دهید و در قالب Core ML (.mlmodel) خروجی بگیرید. سپس مدل را از طریق NLModel(mlModel:) در کد بارگذاری کنید.

آیا NaturalLanguage روی همه دستگاه‌های اپل کار می‌کند؟

NaturalLanguage در iOS 12+، macOS 10.14+، watchOS 5+ و tvOS 12+ در دسترس است. روی دستگاه‌های دارای تراشه A12+ و Neural Engine عملکرد بالاتر است — پردازش متن به دلیل شتاب سخت‌افزاری یادگیری ماشین ۳–۵ برابر سریع‌تر می‌شود. روی دستگاه‌های قدیمی‌تر (A11 و قبل) چارچوب کار می‌کند اما کندتر.

خلاصه

  • NaturalLanguage — چارچوب NLP روی دستگاه اپل برای توکن‌سازی، تشخیص زبان، ریشه‌یابی، برچسب‌زنی POS و NER بدون ارسال داده به ابر.
  • NLTokenizer متن را به کلمات، جملات، پاراگراف‌ها و اسناد با در نظر گرفتن ویژگی‌های ۳۰+ زبان از جمله ژاپنی و عربی تقسیم می‌کند.
  • NLLanguageRecognizer زبان غالب متن را تشخیص می‌دهد و فرضیه‌هایی با احتمالات برای سناریوهای چندزبانه برمی‌گرداند.
  • NLTagger با .lexicalClass و .lemma برچسب‌زنی اجزای کلام و ریشه‌یابی را انجام می‌دهد — تبدیل کلمات به شکل پایه برای بهبود جستجو و تحلیل.
  • تشخیص موجودیت‌های نام‌دار از طریق NLTagScheme.nameType نام‌ها، سازمان‌ها و مکان‌ها را از متن به انگلیسی، فرانسوی، آلمانی و سایر زبان‌ها استخراج می‌کند.
  • NLModel رابطی برای مدل‌های از پیش آموزش دیده و سفارشی Core ML فراهم می‌کند، از جمله مدل تحلیل احساسات داخلی برای نظرات به ۷ زبان.
  • برای زبان فارسی توکن‌سازی، تشخیص زبان، ریشه‌یابی و برچسب‌زنی POS در دسترس است؛ NER و احساسات بهتر است از طریق مدل سفارشی Core ML پیاده‌سازی شوند.

ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد

IT Sectr از سال 2017 برنامه‌های iOS و Android را برای استارتاپ‌ها و کسب‌وکارها ایجاد می‌کند. ما به شما مشاوره می‌دهیم و بهترین راه‌حل را پیشنهاد خواهیم کرد.

بحث درباره پروژه

همچنین بخوانید