NaturalLanguage — is een framework van Apple voor natuurlijke taalverwerking op iOS- en macOS-apparaten, dat toegang biedt tot tokenisatie, taalherkenning, tagging van woordsoorten, lemmatisering en identificatie van benoemde entiteiten. Volgens Apple WWDC 2020 voert het framework alle analyse uit op het apparaat, zonder gegevens naar de server te sturen, wat de vertrouwelijkheid van gebruikersgegevens waarborgt. NaturalLanguage ondersteunt meer dan 30 talen en integreert met Core ML voor aangepaste NLP-modellen.
Belangrijkste punten
NaturalLanguage (NL) — is een machine learning-framework van Apple voor natuurlijke taalanalyse, onderdeel van Foundation en beschikbaar op iOS 12+, macOS 10.14+ en watchOS 5+. Het framework biedt kant-en-klare NLP-mogelijkheden zonder dat je eigen modellen hoeft te trainen.
In tegenstelling tot cloud-NLP-diensten (Google Cloud NLP, Amazon Comprehend), voert NaturalLanguage alle analyse uit op het apparaat. Dit betekent nul latentie voor netwerkverzoeken, werken in offline modus en volledige gegevensvertrouwelijkheid — de tekst verlaat het apparaat van de gebruiker niet.
Volgens Apple ML Research 2023 verwerkt on-device NLP op A12+-chips verzoeken 3–5 keer sneller dan vergelijkbare cloudoplossingen, met behoud van een nauwkeurigheid van meer dan 85% voor basistaken. Het framework is geoptimaliseerd voor Neural Engine, waardoor het tot 100 verzoeken per seconde kan verwerken op moderne apparaten.
NaturalLanguage wordt gebruikt in iOS-applicaties voor recensieanalyse, slim zoeken, automatisch aanvullen, inhoudsmoderatie en het extraheren van gestructureerde gegevens uit ongestructureerde tekst. Het framework ondersteunt meer dan 30 talen, waaronder Nederlands, Oekraïens, Turks en Arabisch.
NLTokenizer — is een klasse voor het opsplitsen van tekst in linguïstische eenheden: woorden, zinnen, alinea's of documenten. Tokenisatie is de eerste stap van vrijwel elke NLP-pipeline en NaturalLanguage biedt het kant-en-klaar.
NLTokenizer houdt rekening met taalspecifieke kenmerken: het verwerkt tokenisatie correct voor Japans (zonder spaties tussen woorden), Arabisch (rechts-naar-links schrift) en Chinees (hiërogliefenschrift). Voor Engels en Nederlands werkt de tokenizer op basis van spaties en interpunctie, maar met inachtneming van afkortingen.
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
}
Tokenisatie op zinsniveau is nuttig voor het opsplitsen van grote teksten in logische blokken voor verdere analyse. NLTokenizerSentence bepaalt zinsgrenzen, zelfs als er geen punt aan het einde staat of bij vragende zinnen.
let sentenceTokenizer = NLTokenizer(unit: .sentence)
sentenceTokenizer.string = text
sentenceTokenizer.enumerateTokens(in: text.startIndex..<text.endIndex) { range, _ in
print("Sentence: \\(text[range])")
return true
}
NLTokenizer — is de basis voor alle andere mogelijkheden van NaturalLanguage. Na tokenisatie is de tekst klaar voor taalherkenning, tagging en lemmatisering.
NLLanguageRecognizer bepaalt de taal van de tekst en retourneert de meest waarschijnlijke optie met vermelding van betrouwbaarheid. Het framework ondersteunt meer dan 30 talen en kan werken met tekst van elke lengte — van één woord tot een volledig document.
Het algoritme van NLLanguageRecognizer analyseert n-grammen van karakters en vergelijkt deze met taalprofielen. Voor korte teksten (tot 50 karakters) neemt de nauwkeurigheid af, daarom raadt Apple aan om minimaal 100–200 karakters te versturen voor een betrouwbare taalbepaling.
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)")
}
De methode languageHypotheses retourneert een woordenboek van talen met waarschijnlijkheden in aflopende volgorde. Dit is handig wanneer de tekst een mengeling van talen bevat of wanneer je de gebruiker meerdere opties ter selectie wilt tonen, niet alleen de dominante taal.
NaturalLanguage bepaalt Nederlands met een nauwkeurigheid van 95% voor teksten vanaf 100 karakters. Voor korte teksten (1–2 woorden) daalt de nauwkeurigheid naar 60–70% — in zulke gevallen kun je beter languageHypotheses gebruiken en de top-3 opties tonen.
NLTagScheme biedt tagschema's voor linguïstische analyse: woordsoorten (zelfstandig naamwoord, werkwoord, bijvoeglijk naamwoord), lemma's (normale vorm van het woord), entiteitstypen (persoon, organisatie, plaats) en andere categorieën.
Lemmatisering herleidt een woord tot zijn woordenboekvorm: „rende" → „rennen", „beter" → „goed", „books" → „book". Dit is cruciaal voor zoeken en tekstanalyse — zonder lemmatisering worden „kat" en „katten" beschouwd als verschillende tokens, wat de kwaliteit van NLP-pipelines vermindert.
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")"
}
Voorbeelduitvoer: cats → Noun, were → Verb, quickly → Adverb. Door lemmatisering en woordsoorten te combineren, kun je slim zoeken bouwen dat „rennende katten" vindt op de query „rennen kat".
NLTagScheme.lemma werkt voor alle door NaturalLanguage ondersteunde talen, inclusief Nederlands. Dit maakt NLTagger een universeel hulpmiddel voor meertalige applicaties zonder aparte modellen voor elke taal te hoeven laden.
Named Entity Recognition (NER) — is de taak om benoemde entiteiten uit tekst te extraheren: persoonsnamen, organisatienamen, geografische locaties en persoonlijke gegevens. NaturalLanguage ondersteunt NER via NLTagScheme.nameType.
NLTagScheme.nameType onderscheidt drie typen entiteiten: PersonalName (persoonsnamen), OrganizationName (organisaties, bedrijven) en PlaceName (geografische namen). Dit maakt het mogelijk om automatisch gestructureerde gegevens te extraheren uit nieuws, e-mails en recensies.
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)"
}
}
Resultaat: Tim Cook → PersonalName, Apple → OrganizationName, Cupertino → PlaceName. NER van NaturalLanguage vereist geen aangepaste training en werkt direct uit de doos voor Engels, Frans, Duits, Spaans en andere talen.
Voor Nederlands wordt NER ondersteund, maar de nauwkeurigheid is iets lager — ongeveer 70–75% versus 85% voor Engels. Als hoge nauwkeurigheid voor Nederlands vereist is, raadt Apple aan om een aangepast Core ML-model te trainen op eigen gegevens met Create ML.
NLModel — is een klasse voor het werken met getrainde Core ML NLP-modellen, inclusief het ingebouwde sentimentanalysemodel dat door Apple is voorgetraind. Het model bepaalt de tonaliteit van de tekst: positief, negatief of neutraal.
Het ingebouwde sentimentanalysemodel is getraind op App Store-recensies en werkt voor Engels, Frans, Duits, Italiaans, Spaans, Portugees, Chinees en Japans. Voor Nederlands is het model niet voorgetraind — Create ML en eigen gelabelde gegevens zijn vereist.
import NaturalLanguage
let sentimentPredictor = try NLModel(mlModel: SentimentModel().model)
let sentiment = sentimentPredictor.predictedLabel(for: "Deze app is geweldig!")
print("Sentiment: \\(sentiment ?? "neutral")") // "positive"
NLModel ondersteunt ook aangepaste modellen die via Create ML zijn getraind. Je kunt een tekstclassificatiemodel trainen op eigen gegevens (productcategorieën, typen ondersteuningsverzoeken, taalstijlen) en het gebruiken via dezelfde NLModel-interface.
Volgens Apple Create ML documentation 2024 wordt een aangepast tekstmodel getraind op 500–5000 voorbeelden om een nauwkeurigheid van 80–95% te bereiken. NaturalLanguage laadt het model eenmalig en cacht het voor volgende aanroepen, wat de latentie bij herhaalde verzoeken minimaliseert.
| NLP-taak | NaturalLanguage-klasse | Nederlandse ondersteuning |
|---|---|---|
| Tokenisatie | NLTokenizer | Ja |
| Taalherkenning | NLLanguageRecognizer | Ja |
| Lemmatisering | NLTagger + .lemma | Ja |
| Woordsoorten | NLTagger + .lexicalClass | Ja |
| NER | NLTagger + .nameType | Beperkt |
| Sentiment | NLModel (voorgetraind) | Nee |
Veelgestelde vragen
NaturalLanguage biedt kant-en-klare NLP-modellen zonder trainingsbehoefte: tokenisatie, taalherkenning, NER. Core ML vereist het trainen van een model op eigen gegevens en biedt meer flexibiliteit voor specifieke taken. NaturalLanguage is beter voor basistaken „uit de doos", Core ML — voor gespecialiseerde taken.
Ja, NaturalLanguage werkt volledig op het apparaat zonder internetverbinding. Alle modellen zijn ingebouwd in iOS en macOS, gegevens worden niet naar de server gestuurd. Dit is een belangrijk voordeel ten opzichte van cloud-NLP-diensten die netwerk vereisen en privacyrisico's creëren.
NaturalLanguage ondersteunt meer dan 30 talen, waaronder Nederlands, Engels, Spaans, Frans, Duits, Italiaans, Portugees, Chinees, Japans, Koreaans, Arabisch, Turks en Oekraïens. De nauwkeurigheid van tokenisatie en lemmatisering is hoog voor alle ondersteunde talen, NER en sentiment — voornamelijk voor Engels.
Gebruik Create ML — de Apple-applicatie voor het trainen van machine learning-modellen zonder programmeren. Laad de gelabelde dataset (CSV of JSON), selecteer de tekstclassificatie- of taggingtaak, train het model en exporteer naar Core ML-formaat (.mlmodel). Laad het model vervolgens via NLModel(mlModel:) in de code.
NaturalLanguage is beschikbaar op iOS 12+, macOS 10.14+, watchOS 5+ en tvOS 12+. Op apparaten met A12+-chip en Neural Engine is de prestatie hoger — tekstverwerking wordt 3–5 keer versneld dankzij hardwareversnelling van machine learning. Op oudere apparaten (A11 en eerder) werkt het framework, maar langzamer.
Samenvatting
We ontwikkelen een mobiele applicatie turnkey
IT Sectr creëert sinds 2017 iOS- en Android-applicaties voor startups en bedrijven. We adviseren u en stellen de beste oplossing voor.
Lees ook