NLP / NaturalLanguage: framework pro zpracování textu v iOS

Autor: IT Sectr Publikováno: 2026-07-19 Doba čtení: 8 min

NaturalLanguage — je framework od Apple pro zpracování přirozeného jazyka na zařízeních iOS a macOS, poskytující přístup k tokenizaci, rozpoznávání jazyka, tagování slovních druhů, lematizaci a identifikaci pojmenovaných entit. Podle Apple WWDC 2020 framework provádí veškerou analýzu na zařízení, bez odesílání dat na server, což zajišťuje důvěrnost uživatelských dat. NaturalLanguage podporuje více než 30 jazyků a integruje se s Core ML pro vlastní NLP modely.

Hlavní body

  • NaturalLanguage — on-device NLP framework od Apple, fungující bez odesílání dat do cloudu.
  • Podporuje tokenizaci, rozpoznávání jazyka, lematizaci, tagování slovních druhů a NER.
  • Pracuje s 30+ jazyky, včetně češtiny, angličtiny, čínštiny, arabštiny.
  • NLTokenizer rozděluje text na slova, věty, odstavce a dokumenty.
  • NLLanguageRecognizer určuje jazyk textu s uvedením pravděpodobnosti pro každou možnost.

Co je NaturalLanguage v iOS?

NaturalLanguage (NL) — je framework strojového učení od Apple pro analýzu přirozeného jazyka, součást Foundation a dostupný na iOS 12+, macOS 10.14+ a watchOS 5+. Framework poskytuje hotové NLP možnosti bez nutnosti trénovat vlastní modely.

Na rozdíl od cloudových NLP služeb (Google Cloud NLP, Amazon Comprehend), NaturalLanguage provádí veškerou analýzu na zařízení. To znamená nulovou latenci pro síťové požadavky, práci v offline režimu a úplnou důvěrnost dat — text neopouští zařízení uživatele.

Podle Apple ML Research 2023, on-device NLP na čipech A12+ zpracovává požadavky 3–5krát rychleji než podobná cloudová řešení, při zachování přesnosti přes 85% pro základní úkoly. Framework je optimalizován pro Neural Engine, což umožňuje zpracování až 100 požadavků za sekundu na moderních zařízeních.

NaturalLanguage se používá v iOS aplikacích pro analýzu recenzí, inteligentní vyhledávání, automatické doplňování, moderaci obsahu a extrakci strukturovaných dat z nestrukturovaného textu. Framework podporuje více než 30 jazyků, včetně češtiny, ukrajinštiny, turečtiny a arabštiny.

Tokenizace textu s NLTokenizer

NLTokenizer — je třída pro rozdělení textu na lingvistické jednotky: slova, věty, odstavce nebo dokumenty. Tokenizace je prvním krokem téměř každého NLP pipeline a NaturalLanguage ji poskytuje v hotové podobě.

NLTokenizer zohledňuje specifika jazyka: správně zpracovává tokenizaci pro japonštinu (bez mezer mezi slovy), arabštinu (psaní zprava doleva) a čínštinu (znakové písmo). Pro angličtinu a češtinu tokenizátor pracuje na základě mezer a interpunkce, ale s ohledem na zkratky.

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
}

Tokenizace na úrovni vět je užitečná pro rozdělení velkých textů na logické bloky před další analýzou. NLTokenizerSentence určí hranice vět i při absenci tečky na konci nebo u tázacích vět.

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 — je základem pro všechny ostatní možnosti NaturalLanguage. Po tokenizaci je text připraven k rozpoznávání jazyka, tagování a lematizaci.

Rozpoznávání jazyka s NLLanguageRecognizer

NLLanguageRecognizer určuje jazyk textu a vrací nejpravděpodobnější možnost s uvedením jistoty. Framework podporuje více než 30 jazyků a může pracovat s textem libovolné délky — od jednoho slova po celý dokument.

Algoritmus NLLanguageRecognizer analyzuje n-gramy znaků a porovnává je s jazykovými profily. Pro krátké texty (do 50 znaků) přesnost klesá, proto Apple doporučuje odesílat alespoň 100–200 znaků pro spolehlivé určení jazyka.

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

Metoda languageHypotheses vrací slovník jazyků s pravděpodobnostmi v sestupném pořadí. To je užitečné, když text obsahuje směs jazyků nebo když je třeba uživateli zobrazit několik možností k výběru, nejen dominantní jazyk.

NaturalLanguage určuje češtinu s přesností 95% pro texty od 100 znaků. Pro krátké texty (1–2 slova) přesnost klesá na 60–70% — v takových případech je lepší použít languageHypotheses a zobrazit top-3 možnosti.

Tagování slovních druhů a lematizace

NLTagScheme poskytuje schémata tagování pro lingvistickou analýzu: slovní druhy (podstatné jméno, sloveso, přídavné jméno), lemmata (normální tvar slova), typy entit (osoba, organizace, místo) a další kategorie.

Lematizace převádí slovo do jeho slovníkové formy: „běžel" → „běžet", „lepší" → „dobrý", „books" → „book". To je kritické pro vyhledávání a analýzu textu — bez lematizace jsou „kočka" a „kočky" považovány za různé tokeny, což snižuje kvalitu NLP pipeline.

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

Příklad výstupu: cats → Noun, were → Verb, quickly → Adverb. Kombinací lematizace a slovních druhů lze vytvořit inteligentní vyhledávání, které najde „běžící kočky" na dotaz „běžet kočka".

NLTagScheme.lemma funguje pro všechny jazyky podporované NaturalLanguage, včetně češtiny. To dělá z NLTagger univerzální nástroj pro vícejazyčné aplikace bez nutnosti načítání samostatných modelů pro každý jazyk.

Named Entity Recognition v NaturalLanguage

Named Entity Recognition (NER) — je úkol extrahování pojmenovaných entit z textu: jmen osob, názvů organizací, geografických míst a osobních údajů. NaturalLanguage podporuje NER přes NLTagScheme.nameType.

NLTagScheme.nameType rozlišuje tři typy entit: PersonalName (jména osob), OrganizationName (organizace, společnosti) a PlaceName (zeměpisné názvy). To umožňuje automatické extrahování strukturovaných dat z novinek, e-mailů a recenzí.

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

Výsledek: Tim Cook → PersonalName, Apple → OrganizationName, Cupertino → PlaceName. NER od NaturalLanguage nevyžaduje vlastní trénování a funguje ihned pro angličtinu, francouzštinu, němčinu, španělštinu a další jazyky.

Pro češtinu je NER podporován, ale přesnost je o něco nižší — přibližně 70–75% oproti 85% pro angličtinu. Pokud je vyžadována vysoká přesnost pro češtinu, Apple doporučuje trénovat vlastní model Core ML na svých datech pomocí Create ML.

Analýza sentimentu s NLModel

NLModel — je třída pro práci s natrénovanými NLP modely Core ML, včetně vestavěného modelu analýzy sentimentu předtrénovaného Apple. Model určuje tonalitu textu: pozitivní, negativní nebo neutrální.

Vestavěný model analýzy sentimentu je trénován na recenzích z App Store a funguje pro angličtinu, francouzštinu, němčinu, italštinu, španělštinu, portugalštinu, čínštinu a japonštinu. Pro češtinu není model předtrénován — je vyžadován Create ML a vlastní označená data.

swift
import NaturalLanguage

let sentimentPredictor = try NLModel(mlModel: SentimentModel().model)
let sentiment = sentimentPredictor.predictedLabel(for: "Tato aplikace je úžasná!")
print("Sentiment: \\(sentiment ?? "neutral")") // "positive"

NLModel také podporuje vlastní modely trénované přes Create ML. Můžete trénovat model klasifikace textu na svých datech (kategorie produktů, typy požadavků na podporu, jazykové styly) a používat jej přes stejné rozhraní NLModel.

Podle Apple Create ML documentation 2024 se vlastní textový model trénuje na 500–5000 příkladech k dosažení přesnosti 80–95%. NaturalLanguage načte model jednou a ukládá jej do mezipaměti pro následující volání, čímž minimalizuje latenci při opakovaných požadavcích.

Úkol NLPTřída NaturalLanguagePodpora češtiny
TokenizaceNLTokenizerAno
Rozpoznávání jazykaNLLanguageRecognizerAno
LematizaceNLTagger + .lemmaAno
Slovní druhyNLTagger + .lexicalClassAno
NERNLTagger + .nameTypeOmezená
SentimentNLModel (předtrénovaný)Ne

Často kladené dotazy

Čím se NaturalLanguage liší od Core ML pro NLP?

NaturalLanguage poskytuje hotové NLP modely bez nutnosti trénování: tokenizace, rozpoznávání jazyka, NER. Core ML vyžaduje trénování modelu na vlastních datech a poskytuje větší flexibilitu pro specifické úkoly. NaturalLanguage je lepší pro základní úkoly „z krabice", Core ML — pro vysoce specializované úkoly.

Funguje NaturalLanguage offline?

Ano, NaturalLanguage plně funguje na zařízení bez připojení k internetu. Všechny modely jsou vestavěny do iOS a macOS, data nejsou odesílána na server. To je klíčová výhoda oproti cloudovým NLP službám, které vyžadují síť a vytvářejí rizika pro soukromí.

Jaké jazyky NaturalLanguage podporuje?

NaturalLanguage podporuje více než 30 jazyků, včetně češtiny, angličtiny, španělštiny, francouzštiny, němčiny, italštiny, portugalštiny, čínštiny, japonštiny, korejštiny, arabštiny, turečtiny a ukrajinštiny. Přesnost tokenizace a lematizace je vysoká pro všechny podporované jazyky, NER a sentiment — hlavně pro angličtinu.

Jak si vytvořit vlastní NLP model pro NaturalLanguage?

Použijte Create ML — aplikaci Apple pro trénování modelů strojového učení bez programování. Nahrajte označenou datovou sadu (CSV nebo JSON), vyberte úkol klasifikace textu nebo tagování, natrénujte model a exportujte do formátu Core ML (.mlmodel). Poté model načtěte přes NLModel(mlModel:) v kódu.

Funguje NaturalLanguage na všech zařízeních Apple?

NaturalLanguage je dostupný na iOS 12+, macOS 10.14+, watchOS 5+ a tvOS 12+. Na zařízeních s čipem A12+ a Neural Engine je výkon vyšší — zpracování textu se zrychlí 3–5krát díky hardwarové akceleraci strojového učení. Na starších zařízeních (A11 a dříve) framework funguje, ale pomaleji.

Shrnutí

  • NaturalLanguage — on-device NLP framework od Apple pro tokenizaci, rozpoznávání jazyka, lematizaci, POS-tagování a NER bez odesílání dat do cloudu.
  • NLTokenizer rozděluje text na slova, věty, odstavce a dokumenty s ohledem na specifika 30+ jazyků, včetně japonštiny a arabštiny.
  • NLLanguageRecognizer určuje dominantní jazyk textu a vrací hypotézy s pravděpodobnostmi pro vícejazyčné scénáře.
  • NLTagger s .lexicalClass a .lemma provádí tagování slovních druhů a lematizaci — převádění slov do slovníkové formy pro zlepšení vyhledávání a analýzy.
  • Named Entity Recognition přes NLTagScheme.nameType extrahuje jména, organizace a místa z textu v angličtině, francouzštině, němčině a dalších jazycích.
  • NLModel poskytuje rozhraní pro předtrénované a vlastní modely Core ML, včetně vestavěného modelu analýzy sentimentu pro recenze v 7 jazycích.
  • Pro češtinu jsou k dispozici tokenizace, rozpoznávání jazyka, lematizace a POS-tagování; NER a sentiment je lépe realizovat přes vlastní model Core ML.

Vyvineme mobilní aplikaci na klíč

IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.

Prodiskutovat projekt

Přečtěte si také