NaturalLanguage — este un framework Apple pentru procesarea limbajului natural pe dispozitive iOS și macOS, oferind acces la tokenizare, recunoașterea limbii, etichetarea părților de vorbire, lematizare și identificarea entităților denumite. Potrivit Apple WWDC 2020, framework-ul efectuează toată analiza pe dispozitiv, fără a trimite date pe server, asigurând confidențialitatea datelor utilizatorului. NaturalLanguage suportă peste 30 de limbi și se integrează cu Core ML pentru modele NLP personalizate.
Principalele puncte
NaturalLanguage (NL) — este un framework de învățare automată Apple pentru analiza limbajului natural, care face parte din Foundation și este disponibil pe iOS 12+, macOS 10.14+ și watchOS 5+. Framework-ul oferă capacități NLP gata făcute fără a fi nevoie să antrenezi modele proprii.
Spre deosebire de serviciile NLP cloud (Google Cloud NLP, Amazon Comprehend), NaturalLanguage efectuează toată analiza pe dispozitiv. Aceasta înseamnă zero latență pentru solicitări de rețea, funcționare în mod offline și confidențialitate completă a datelor — textul nu părăsește dispozitivul utilizatorului.
Potrivit Apple ML Research 2023, NLP pe dispozitiv pe cipurile A12+ procesează solicitările de 3–5 ori mai rapid decât soluțiile cloud similare, păstrând o precizie de peste 85% pentru sarcinile de bază. Framework-ul este optimizat pentru Neural Engine, permițând procesarea a până la 100 de solicitări pe secundă pe dispozitive moderne.
NaturalLanguage este utilizat în aplicațiile iOS pentru analiza recenziilor, căutare inteligentă, completare automată, moderare a conținutului și extragerea datelor structurate din text nestructurat. Framework-ul suportă peste 30 de limbi, inclusiv română, ucraineană, turcă și arabă.
NLTokenizer — este o clasă pentru împărțirea textului în unități lingvistice: cuvinte, propoziții, paragrafe sau documente. Tokenizarea este primul pas al aproape oricărui pipeline NLP, iar NaturalLanguage o oferă gata făcută.
NLTokenizer ține cont de particularitățile limbii: gestionează corect tokenizarea pentru japoneză (fără spații între cuvinte), arabă (scriere de la dreapta la stânga) și chineză (scriere hieroglifică). Pentru engleză și română, tokenizatorul funcționează pe baza spațiilor și punctuației, dar ținând cont de abrevieri.
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
}
Tokenizarea la nivel de propoziții este utilă pentru împărțirea textelor mari în blocuri logice înainte de analiza ulterioară. NLTokenizerSentence va determina limitele propozițiilor chiar și în absența punctului la sfârșit sau în prezența propozițiilor interogative.
let sentenceTokenizer = NLTokenizer(unit: .sentence)
sentenceTokenizer.string = text
sentenceTokenizer.enumerateTokens(in: text.startIndex..<text.endIndex) { range, _ in
print("Sentence: \\(text[range])")
return true
}
NLTokenizer — este baza pentru toate celelalte capacități ale NaturalLanguage. După tokenizare, textul este gata pentru recunoașterea limbii, etichetare și lematizare.
NLLanguageRecognizer determină limba textului și returnează cea mai probabilă opțiune cu indicarea încrederii. Framework-ul suportă peste 30 de limbi și poate lucra cu text de orice lungime — de la un singur cuvânt până la un document întreg.
Algoritmul NLLanguageRecognizer analizează n-gramele de caractere și le compară cu profilurile lingvistice. Pentru texte scurte (până la 50 de caractere), precizia scade, de aceea Apple recomandă transmiterea a cel puțin 100–200 de caractere pentru o determinare sigură a limbii.
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)")
}
Metoda languageHypotheses returnează un dicționar de limbi cu probabilități în ordine descrescătoare. Acest lucru este util când textul conține un amestec de limbi sau când trebuie să afișezi utilizatorului mai multe opțiuni pentru alegere, nu doar limba dominantă.
NaturalLanguage determină limba română cu o precizie de 95% pentru texte de la 100 de caractere. Pentru texte scurte (1–2 cuvinte), precizia scade la 60–70% — în astfel de cazuri, este mai bine să folosești languageHypotheses și să afișezi top-3 opțiuni.
NLTagScheme oferă scheme de etichetare pentru analiza lingvistică: părți de vorbire (substantiv, verb, adjectiv), leme (forma normală a cuvântului), tipuri de entități (persoană, organizație, loc) și alte categorii.
Lematizarea reduce cuvântul la forma sa de dicționar: „alerga" → „a alerga", „mai bun" → „bun", „books" → „book". Acest lucru este esențial pentru căutare și analiza textului — fără lematizare, „pisică" și „pisicii" sunt considerate tokeni diferiți, ceea ce reduce calitatea pipeline-urilor 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")"
}
Exemplu de ieșire: cats → Noun, were → Verb, quickly → Adverb. Combinând lematizarea și părțile de vorbire, poți construi o căutare inteligentă care găsește „pisici care aleargă" după interogarea „a alerga pisică".
NLTagScheme.lemma funcționează pentru toate limbile suportate de NaturalLanguage, inclusiv româna. Acest lucru face ca NLTagger să fie un instrument universal pentru aplicații multilingve, fără a fi nevoie să încarci modele separate pentru fiecare limbă.
Named Entity Recognition (NER) — este sarcina de extragere din text a entităților denumite: nume de persoane, denumiri de organizații, locații geografice și date personale. NaturalLanguage suportă NER prin NLTagScheme.nameType.
NLTagScheme.nameType distinge trei tipuri de entități: PersonalName (nume de persoane), OrganizationName (organizații, companii) și PlaceName (denumiri geografice). Acest lucru permite extragerea automată a datelor structurate din știri, e-mailuri și recenzii.
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)"
}
}
Rezultat: Tim Cook → PersonalName, Apple → OrganizationName, Cupertino → PlaceName. NER de la NaturalLanguage nu necesită antrenare personalizată și funcționează gata făcut pentru engleză, franceză, germană, spaniolă și alte limbi.
Pentru limba română NER este suportat, dar precizia este ușor mai scăzută — aproximativ 70–75% față de 85% pentru engleză. Dacă este necesară o precizie ridicată pentru română, Apple recomandă antrenarea unui model Core ML personalizat pe propriile date folosind Create ML.
NLModel — este o clasă pentru lucrul cu modele NLP antrenate Core ML, inclusiv modelul integrat de analiză a sentimentelor, pre-antrenat de Apple. Modelul determină tonalitatea textului: pozitivă, negativă sau neutră.
Modelul integrat de analiză a sentimentelor este antrenat pe recenzii din App Store și funcționează pentru engleză, franceză, germană, italiană, spaniolă, portugheză, chineză și japoneză. Pentru limba română, modelul nu este pre-antrenat — este necesar Create ML și propriile date adnotate.
import NaturalLanguage
let sentimentPredictor = try NLModel(mlModel: SentimentModel().model)
let sentiment = sentimentPredictor.predictedLabel(for: "Această aplicație este uimitoare!")
print("Sentiment: \\(sentiment ?? "neutral")") // "positive"
NLModel suportă și modele personalizate antrenate prin Create ML. Poți antrena un model de clasificare a textului pe propriile date (categorii de produse, tipuri de solicitări de suport, stiluri lingvistice) și să îl folosești prin aceeași interfață NLModel.
Potrivit Apple Create ML documentation 2024, un model text personalizat se antrenează pe 500–5000 de exemple pentru a atinge o precizie de 80–95%. NaturalLanguage încarcă modelul o singură dată și îl stochează în cache pentru apelurile ulterioare, minimizând latența la solicitările repetate.
| Sarcină NLP | Clasa NaturalLanguage | Suport română |
|---|---|---|
| Tokenizare | NLTokenizer | Da |
| Recunoașterea limbii | NLLanguageRecognizer | Da |
| Lematizare | NLTagger + .lemma | Da |
| Părți de vorbire | NLTagger + .lexicalClass | Da |
| NER | NLTagger + .nameType | Limitat |
| Sentiment | NLModel (pre-antrenat) | Nu |
Întrebări frecvente
NaturalLanguage oferă modele NLP gata făcute fără necesitatea antrenării: tokenizare, recunoașterea limbii, NER. Core ML necesită antrenarea modelului pe propriile date și oferă mai multă flexibilitate pentru sarcini specifice. NaturalLanguage este mai bun pentru sarcinile de bază „gata de utilizare", Core ML — pentru cele înalt specializate.
Da, NaturalLanguage funcționează complet pe dispozitiv fără conexiune la internet. Toate modelele sunt încorporate în iOS și macOS, datele nu sunt trimise pe server. Acesta este un avantaj cheie față de serviciile NLP cloud care necesită rețea și creează riscuri pentru confidențialitate.
NaturalLanguage suportă peste 30 de limbi, inclusiv română, engleză, spaniolă, franceză, germană, italiană, portugheză, chineză, japoneză, coreeană, arabă, turcă și ucraineană. Precizia tokenizării și lematizării este ridicată pentru toate limbile suportate, NER și sentimentul — în principal pentru engleză.
Folosește Create ML — aplicația Apple pentru antrenarea modelelor de învățare automată fără programare. Încarcă setul de date adnotat (CSV sau JSON), selectează sarcina de clasificare a textului sau etichetare, antrenează modelul și exportă în format Core ML (.mlmodel). Apoi încarcă modelul prin NLModel(mlModel:) în cod.
NaturalLanguage este disponibil pe iOS 12+, macOS 10.14+, watchOS 5+ și tvOS 12+. Pe dispozitivele cu cip A12+ și Neural Engine, performanța este mai ridicată — procesarea textului se accelerează de 3–5 ori datorită accelerării hardware a învățării automate. Pe dispozitive mai vechi (A11 și anterioare), framework-ul funcționează, dar mai lent.
Concluzii
Vom dezvolta o aplicație mobilă la cheie
IT Sectr creează aplicații iOS și Android pentru startup-uri și afaceri din 2017. Vă vom consilia și vă vom propune cea mai bună soluție.
Citiți și