NaturalLanguage হল Apple-এর একটি ফ্রেমওয়ার্ক যা iOS এবং macOS ডিভাইসে প্রাকৃতিক ভাষা প্রক্রিয়াকরণের জন্য, যা টোকেনাইজেশন, ভাষা শনাক্তকরণ, বক্তৃতার অংশ ট্যাগিং, লেমাটাইজেশন এবং নামযুক্ত সত্তা শনাক্তকরণে অ্যাক্সেস প্রদান করে। Apple WWDC 2020 অনুযায়ী, ফ্রেমওয়ার্কটি সমস্ত বিশ্লেষণ ডিভাইসে সম্পাদন করে, সার্ভারে ডেটা না পাঠিয়ে, যা ব্যবহারকারী ডেটার গোপনীয়তা নিশ্চিত করে। NaturalLanguage 30টিরও বেশি ভাষা সমর্থন করে এবং কাস্টম NLP মডেলের জন্য Core ML-এর সাথে একীভূত হয়।
মূল বিষয়বস্তু
NaturalLanguage (NL) হল Apple-এর একটি মেশিন লার্নিং ফ্রেমওয়ার্ক যা প্রাকৃতিক ভাষা বিশ্লেষণের জন্য, যা Foundation-এর অংশ এবং iOS 12+, macOS 10.14+ এবং watchOS 5+-এ উপলব্ধ। ফ্রেমওয়ার্কটি কাস্টম মডেল প্রশিক্ষণের প্রয়োজন ছাড়াই ব্যবহারের জন্য প্রস্তুত NLP ক্ষমতা প্রদান করে।
ক্লাউড NLP পরিষেবাদির (Google Cloud NLP, Amazon Comprehend) বিপরীতে, NaturalLanguage সমস্ত বিশ্লেষণ ডিভাইসে সম্পাদন করে। এর অর্থ শূন্য নেটওয়ার্ক লেটেন্সি, অফলাইন অপারেশন এবং সম্পূর্ণ ডেটা গোপনীয়তা — টেক্সট কখনই ব্যবহারকারীর ডিভাইস ছেড়ে যায় না।
Apple ML Research 2023 অনুযায়ী, A12+ চিপে অন-ডিভাইস NLP একই ক্লাউড সমাধানের তুলনায় 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 100 ক্যারেক্টার বা তার বেশি টেক্সটের জন্য রুশ 95% নির্ভুলতার সাথে শনাক্ত করে। ছোট টেক্সটের জন্য (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 NLTagScheme.nameType-এর মাধ্যমে NER সমর্থন করে।
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। NaturalLanguage NER-এর কাস্টম প্রশিক্ষণের প্রয়োজন নেই এবং এটি ইংরেজি, ফরাসি, জার্মান, স্প্যানিশ এবং অন্যান্য ভাষার জন্য সাথে সাথে কাজ করে।
রুশ-এর জন্য, NER সমর্থিত কিন্তু নির্ভুলতা কিছুটা কম — ইংরেজির জন্য 85% এর তুলনায় প্রায় 70–75%। রুশের জন্য উচ্চ নির্ভুলতা প্রয়োজন হলে, Apple Create ML ব্যবহার করে আপনার নিজস্ব ডেটাতে একটি কাস্টম Core 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 অনুযায়ী, একটি কাস্টম টেক্সট মডেল 80–95% নির্ভুলতা অর্জনের জন্য 500–5000 উদাহরণে প্রশিক্ষিত হয়। 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 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন