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 (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.
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.
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.
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.
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.
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.
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.
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 (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í.
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.
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.
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 NLP | Třída NaturalLanguage | Podpora češtiny |
|---|---|---|
| Tokenizace | NLTokenizer | Ano |
| Rozpoznávání jazyka | NLLanguageRecognizer | Ano |
| Lematizace | NLTagger + .lemma | Ano |
| Slovní druhy | NLTagger + .lexicalClass | Ano |
| NER | NLTagger + .nameType | Omezená |
| Sentiment | NLModel (předtrénovaný) | Ne |
Často kladené dotazy
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.
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í.
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.
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.
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í
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í.
Přečtěte si také