NLP / NaturalLanguage: ramverk för textbehandling i iOS

Författare: IT Sectr Publicerad: 2026-07-19 Lästid: 8 min

NaturalLanguage — är ett ramverk från Apple för naturlig språkbehandling på iOS- och macOS-enheter, som ger tillgång till tokenisering, språkigenkänning, taggning av ordklasser, lemmatisering och identifiering av namngivna entiteter. Enligt Apple WWDC 2020 utför ramverket all analys på enheten, utan att skicka data till servern, vilket säkerställer konfidentialitet för användardata. NaturalLanguage stöder över 30 språk och integreras med Core ML för anpassade NLP-modeller.

Huvudpunkter

  • NaturalLanguage — on-device NLP-ramverk från Apple, som fungerar utan att skicka data till molnet.
  • Stöder tokenisering, språkigenkänning, lemmatisering, taggning av ordklasser och NER.
  • Fungerar med 30+ språk, inklusive svenska, engelska, kinesiska, arabiska.
  • NLTokenizer delar upp text i ord, meningar, stycken och dokument.
  • NLLanguageRecognizer bestämmer textens språk med angivelse av sannolikhet för varje alternativ.

Vad är NaturalLanguage i iOS?

NaturalLanguage (NL) — är ett maskininlärningsramverk från Apple för naturlig språkanalys, en del av Foundation och tillgängligt på iOS 12+, macOS 10.14+ och watchOS 5+. Ramverket erbjuder färdiga NLP-funktioner utan att behöva träna egna modeller.

Till skillnad från molnbaserade NLP-tjänster (Google Cloud NLP, Amazon Comprehend), utför NaturalLanguage all analys på enheten. Detta innebär noll latens för nätverksförfrågningar, arbete i offlineläge och fullständig datakonfidentialitet — texten lämnar inte användarens enhet.

Enligt Apple ML Research 2023 behandlar on-device NLP på A12+-chips förfrågningar 3–5 gånger snabbare än liknande molnlösningar, med bibehållen noggrannhet på över 85% för grundläggande uppgifter. Ramverket är optimerat för Neural Engine, vilket möjliggör bearbetning av upp till 100 förfrågningar per sekund på moderna enheter.

NaturalLanguage används i iOS-applikationer för recensionsanalys, smart sökning, autokomplettering, innehållsmoderering och extrahering av strukturerad data från ostrukturerad text. Ramverket stöder över 30 språk, inklusive svenska, ukrainska, turkiska och arabiska.

Tokenisering av text med NLTokenizer

NLTokenizer — är en klass för att dela upp text i språkliga enheter: ord, meningar, stycken eller dokument. Tokenisering är det första steget i nästan varje NLP-pipeline, och NaturalLanguage erbjuder det i färdig form.

NLTokenizer tar hänsyn till språkspecifika egenskaper: det hanterar tokenisering korrekt för japanska (utan mellanslag mellan ord), arabiska (höger-till-vänster-skrift) och kinesiska (hieroglyfskrift). För engelska och svenska fungerar tokenizern baserat på mellanslag och skiljetecken, men med hänsyn till förkortningar.

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
}

Tokenisering på meningsnivå är användbar för att dela upp stora texter i logiska block före vidare analys. NLTokenizerSentence bestämmer meningsgränser även utan punkt i slutet eller vid frågesatser.

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 — är grunden för alla andra funktioner i NaturalLanguage. Efter tokenisering är texten redo för språkigenkänning, taggning och lemmatisering.

Språkigenkänning med NLLanguageRecognizer

NLLanguageRecognizer bestämmer textens språk och returnerar det mest sannolika alternativet med angivelse av säkerhet. Ramverket stöder över 30 språk och kan arbeta med text av valfri längd — från ett enda ord till ett helt dokument.

Algoritmen i NLLanguageRecognizer analyserar n-gram av tecken och jämför dem med språkprofiler. För korta texter (upp till 50 tecken) minskar noggrannheten, därför rekommenderar Apple att skicka minst 100–200 tecken för tillförlitlig språkbestämning.

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)")
}

Metoden languageHypotheses returnerar en ordbok över språk med sannolikheter i fallande ordning. Detta är användbart när texten innehåller en blandning av språk eller när användaren ska visas flera alternativ att välja mellan, inte bara det dominanta språket.

NaturalLanguage bestämmer svenska med en noggrannhet på 95% för texter från 100 tecken. För korta texter (1–2 ord) sjunker noggrannheten till 60–70% — i sådana fall är det bättre att använda languageHypotheses och visa de tre bästa alternativen.

Taggning av ordklasser och lemmatisering

NLTagScheme tillhandahåller taggningsscheman för språklig analys: ordklasser (substantiv, verb, adjektiv), lemma (normalform av ordet), entitetstyper (person, organisation, plats) och andra kategorier.

Lemmatisering för ordet till dess ordboksform: „sprang" → „springa", „bättre" → „bra", „books" → „book". Detta är avgörande för sökning och textanalys — utan lemmatisering anses „katt" och „katten" vara olika token, vilket minskar kvaliteten på NLP-pipelines.

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")"
}

Exempel på utdata: cats → Noun, were → Verb, quickly → Adverb. Genom att kombinera lemmatisering och ordklasser kan du bygga smart sökning som hittar „springande katter" på frågan „springa katt".

NLTagScheme.lemma fungerar för alla språk som NaturalLanguage stöder, inklusive svenska. Detta gör NLTagger till ett universellt verktyg för flerspråkiga applikationer utan att behöva ladda separata modeller för varje språk.

Named Entity Recognition i NaturalLanguage

Named Entity Recognition (NER) — är uppgiften att extrahera namngivna entiteter från text: personnamn, organisationsnamn, geografiska platser och personuppgifter. NaturalLanguage stöder NER via NLTagScheme.nameType.

NLTagScheme.nameType skiljer på tre typer av entiteter: PersonalName (personnamn), OrganizationName (organisationer, företag) och PlaceName (geografiska namn). Detta möjliggör automatisk extrahering av strukturerad data från nyheter, e-postmeddelanden och recensioner.

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)"
    }
}

Resultat: Tim Cook → PersonalName, Apple → OrganizationName, Cupertino → PlaceName. NER från NaturalLanguage kräver ingen anpassad träning och fungerar direkt för engelska, franska, tyska, spanska och andra språk.

För svenska stöds NER, men noggrannheten är något lägre — cirka 70–75% jämfört med 85% för engelska. Om hög noggrannhet krävs för svenska rekommenderar Apple att träna en anpassad Core ML-modell på egna data med Create ML.

Sentimentanalys med NLModel

NLModel — är en klass för att arbeta med tränade Core ML NLP-modeller, inklusive den inbyggda sentimentanalysmodellen som är förtränad av Apple. Modellen bestämmer textens tonalitet: positiv, negativ eller neutral.

Den inbyggda sentimentanalysmodellen är tränad på App Store-recensioner och fungerar för engelska, franska, tyska, italienska, spanska, portugisiska, kinesiska och japanska. För svenska är modellen inte förtränad — Create ML och egna märkta data krävs.

swift
import NaturalLanguage

let sentimentPredictor = try NLModel(mlModel: SentimentModel().model)
let sentiment = sentimentPredictor.predictedLabel(for: "Den här appen är fantastisk!")
print("Sentiment: \\(sentiment ?? "neutral")") // "positive"

NLModel stöder även anpassade modeller tränade via Create ML. Du kan träna en textklassificeringsmodell på egna data (produktkategorier, typer av supportförfrågningar, språkstilar) och använda den via samma NLModel-gränssnitt.

Enligt Apple Create ML documentation 2024 tränas en anpassad textmodell på 500–5000 exempel för att uppnå en noggrannhet på 80–95%. NaturalLanguage laddar modellen en gång och cachar den för efterföljande anrop, vilket minimerar latens vid upprepade förfrågningar.

NLP-uppgiftNaturalLanguage-klassSvenskt stöd
TokeniseringNLTokenizerJa
SpråkigenkänningNLLanguageRecognizerJa
LemmatiseringNLTagger + .lemmaJa
OrdklasserNLTagger + .lexicalClassJa
NERNLTagger + .nameTypeBegränsat
SentimentNLModel (förtränad)Nej

Vanliga frågor

Hur skiljer sig NaturalLanguage från Core ML för NLP?

NaturalLanguage erbjuder färdiga NLP-modeller utan träningsbehov: tokenisering, språkigenkänning, NER. Core ML kräver träning av modell på egna data och ger mer flexibilitet för specifika uppgifter. NaturalLanguage är bättre för grundläggande uppgifter „direkt ur lådan", Core ML — för högspecialiserade uppgifter.

Fungerar NaturalLanguage offline?

Ja, NaturalLanguage fungerar helt på enheten utan internetanslutning. Alla modeller är inbyggda i iOS och macOS, data skickas inte till servern. Detta är en viktig fördel jämfört med molnbaserade NLP-tjänster som kräver nätverk och skapar integritetsrisker.

Vilka språk stöder NaturalLanguage?

NaturalLanguage stöder över 30 språk, inklusive svenska, engelska, spanska, franska, tyska, italienska, portugisiska, kinesiska, japanska, koreanska, arabiska, turkiska och ukrainska. Noggrannheten för tokenisering och lemmatisering är hög för alla språk som stöds, NER och sentiment — främst för engelska.

Hur tränar jag min egen NLP-modell för NaturalLanguage?

Använd Create ML — Apple-applikationen för att träna maskininlärningsmodeller utan programmering. Ladda den märkta datamängden (CSV eller JSON), välj textklassificerings- eller taggningsuppgiften, träna modellen och exportera till Core ML-format (.mlmodel). Ladda sedan modellen via NLModel(mlModel:) i koden.

Fungerar NaturalLanguage på alla Apple-enheter?

NaturalLanguage är tillgängligt på iOS 12+, macOS 10.14+, watchOS 5+ och tvOS 12+. På enheter med A12+-chip och Neural Engine är prestandan högre — textbehandling accelereras 3–5 gånger tack vare maskininlärningsacceleration i hårdvara. På äldre enheter (A11 och tidigare) fungerar ramverket men långsammare.

Sammanfattning

  • NaturalLanguage — on-device NLP-ramverk från Apple för tokenisering, språkigenkänning, lemmatisering, POS-taggning och NER utan att skicka data till molnet.
  • NLTokenizer delar upp text i ord, meningar, stycken och dokument med hänsyn till egenskaper hos 30+ språk, inklusive japanska och arabiska.
  • NLLanguageRecognizer bestämmer textens dominerande språk och returnerar hypoteser med sannolikheter för flerspråkiga scenarier.
  • NLTagger med .lexicalClass och .lemma utför taggning av ordklasser och lemmatisering — att föra ord till ordboksform för förbättrad sökning och analys.
  • Named Entity Recognition via NLTagScheme.nameType extraherar namn, organisationer och platser från text på engelska, franska, tyska och andra språk.
  • NLModel tillhandahåller ett gränssnitt för förtränade och anpassade Core ML-modeller, inklusive den inbyggda sentimentanalysmodellen för recensioner på 7 språk.
  • För svenska finns tokenisering, språkigenkänning, lemmatisering och POS-taggning tillgängliga; NER och sentiment implementeras bäst via en anpassad Core ML-modell.

Vi utvecklar en mobil applikation nyckelfärdigt

IT Sectr skapar iOS- och Android-applikationer för startups och företag sedan 2017. Vi ger dig råd och föreslår den bästa lösningen.

Diskutera projektet

Läs också