NLP / NaturalLanguage: оквир за обраду текста у iOS-у

Аутор: IT Sectr Објављено: 2026-07-19 Време читања: 8 мин

NaturalLanguage — је Apple-ов оквир за обраду природног језика на iOS и macOS уређајима, који пружа приступ токенизацији, препознавању језика, означавању делова говора, лематизацији и идентификацији именованих entity-ја. Према Apple WWDC 2020, оквир обавља сву анализу на уређају, без слања података на сервер, што обезбеђује поверљивост корисничких података. NaturalLanguage подржава преко 30 језика и интегрише се са Core ML за прилагођене NLP моделе.

Главне карактеристике

  • NaturalLanguage — on-device NLP оквир од Apple-а, који ради без слања података у облак.
  • Подржава токенизацију, препознавање језика, лематизацију, означавање делова говора и NER.
  • Ради са 30+ језика, укључујући српски, енглески, кинески, арапски.
  • NLTokenizer дели текст на речи, реченице, параграфе и документе.
  • NLLanguageRecognizer одређује језик текста са назнаком вероватноће за сваку опцију.

Шта је NaturalLanguage у iOS-у?

NaturalLanguage (NL) — је Apple-ов оквир машинског учења за анализу природног језика, који је део Foundation-а и доступан је на iOS 12+, macOS 10.14+ и watchOS 5+. Оквир пружа готове NLP могућности без потребе за обучавањем сопствених модела.

За разлику од cloud NLP сервиса (Google Cloud NLP, Amazon Comprehend), NaturalLanguage обавља сву анализу на уређају. То значи нулто кашњење за мрежне захтеве, рад у офлајн режиму и потпуну поверљивост података — текст не напушта корисников уређај.

Према Apple ML Research 2023, on-device NLP на A12+ чиповима обрађује захтеве 3–5 пута брже од сличних cloud решења, уз задржавање прецизности од преко 85% за основне задатке. Оквир је оптимизован за Neural Engine, омогућавајући обраду до 100 захтева у секунди на савременим уређајима.

NaturalLanguage се користи у iOS апликацијама за анализу рецензија, паметно претраживање, аутоматско довршавање, модерирање садржаја и издвајање структурираних података из неструктурираног текста. Оквир подржава преко 30 језика, укључујући српски, украјински, турски и арапски.

Токенизација текста са NLTokenizer

NLTokenizer — је класа за дељење текста на лингвистичке јединице: речи, реченице, параграфе или документе. Токенизација је први корак скоро сваког NLP pipeline-а, а NaturalLanguage је пружа у готовом облику.

NLTokenizer узима у обзир карактеристике језика: правилно обрађује токенизацију за јапански (без размака између речи), арапски (писмо здесна улево) и кинески (хијероглифско писмо). За енглески и српски, токенизатор ради на основу размака и интерпункције, али узимајући у обзир скраћенице.

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
}

Токенизација на нивоу реченица је корисна за дељење великих текстова на логичке блокове пре даље анализе. NLTokenizerSentence ће одредити границе реченица чак и у одсуству тачке на крају или код упитних реченица.

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 — је основа за све остале могућности NaturalLanguage-а. Након токенизације, текст је спреман за препознавање језика, означавање и лематизацију.

Препознавање језика са NLLanguageRecognizer

NLLanguageRecognizer одређује језик текста и враћа највероватнију опцију са назнаком поузданости. Оквир подржава преко 30 језика и може да ради са текстом било које дужине — од једне речи до целог документа.

Алгоритам NLLanguageRecognizer анализира n-граме карактера и упоређује их са језичким профилима. За кратке текстове (до 50 карактера) прецизност опада, зато Apple препоручује слање најмање 100–200 карактера за поуздано одређивање језика.

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

Метод languageHypotheses враћа речник језика са вероватноћама у опадајућем редоследу. Ово је корисно када текст садржи мешавину језика или када треба приказати кориснику неколико опција за избор, а не само доминантни језик.

NaturalLanguage одређује српски језик са прецизношћу од 95% за текстове од 100 карактера. За кратке текстове (1–2 речи) прецизност пада на 60–70% — у таквим случајевима боље је користити languageHypotheses и приказати топ-3 опције.

Означавање делова говора и лематизација

NLTagScheme пружа шеме означавања за лингвистичку анализу: делове говора (именица, глагол, придев), леме (нормални облик речи), типове entity-ја (особа, организација, место) и друге категорије.

Лематизација своди реч на њен речнички облик: „трчао" → „трчати", „бољи" → „добар", „books" → „book". Ово је критично за претрагу и анализу текста — без лематизације „мачка" и „мачке" се сматрају различитим токенима, што смањује квалитет 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")"
}

Пример излаза: cats → Noun, were → Verb, quickly → Adverb. Комбиновањем лематизације и делова говора може се изградити паметна претрага која проналази „мачке које трче" по упиту „трчати мачка".

NLTagScheme.lemma ради за све језике које NaturalLanguage подржава, укључујући српски. Ово чини NLTagger универзалним алатом за вишејезичне апликације без потребе за учитавањем посебних модела за сваки језик.

Named Entity Recognition у NaturalLanguage

Named Entity Recognition (NER) — је задатак издвајања именованих entity-ја из текста: имена особа, назива организација, географских места и личних података. NaturalLanguage подржава NER кроз NLTagScheme.nameType.

NLTagScheme.nameType разликује три типа entity-ја: PersonalName (имена особа), OrganizationName (организације, компаније) и PlaceName (географски називи). Ово омогућава аутоматско издвајање структурираних података из вести, имејлова и рецензија.

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

Резултат: Tim Cook → PersonalName, Apple → OrganizationName, Cupertino → PlaceName. NER од NaturalLanguage-а не захтева прилагођено обучавање и ради одмах након инсталације за енглески, француски, немачки, шпански и друге језике.

За српски језик NER је подржан, али је прецизност нешто нижа — око 70–75% наспрам 85% за енглески. Ако је потребна висока прецизност за српски, Apple препоручује обучавање прилагођеног Core ML модела на сопственим подацима коришћењем Create ML.

Анализа сентимента са NLModel

NLModel — је класа за рад са обученим NLP моделима Core ML, укључујући уграђени модел анализе сентимента, претходно обучен од стране Apple-а. Модел одређује тоналност текста: позитивну, негативну или неутралну.

Уграђени модел анализе сентимента је обучен на рецензијама из App Store-а и ради за енглески, француски, немачки, италијански, шпански, португалски, кинески и јапански. За српски језик модел није претходно обучен — потребан је Create ML и сопствени означени подаци.

swift
import NaturalLanguage

let sentimentPredictor = try NLModel(mlModel: SentimentModel().model)
let sentiment = sentimentPredictor.predictedLabel(for: "Ова апликација је невероватна!")
print("Sentiment: \\(sentiment ?? "neutral")") // "positive"

NLModel такође подржава прилагођене моделе обучене кроз Create ML. Може се обучити модел класификације текста на сопственим подацима (категорије производа, типови захтева за подршку, језички стилови) и користити га кроз исти NLModel интерфејс.

Према Apple Create ML документацији из 2024, прилагођени текст модел се обучава на 500–5000 примера да би достигао прецизност од 80–95%. NaturalLanguage учитава модел једном и кешира га за наредне позиве, што минимизује кашњење при поновљеним захтевима.

NLP задатакNaturalLanguage класаПодршка за српски
ТокенизацијаNLTokenizerДа
Препознавање језикаNLLanguageRecognizerДа
ЛематизацијаNLTagger + .lemmaДа
Делови говораNLTagger + .lexicalClassДа
NERNLTagger + .nameTypeОграничено
СентиментNLModel (претходно обуч.)Не

Често постављана питања

По чему се NaturalLanguage разликује од Core ML за NLP?

NaturalLanguage пружа готове NLP моделе без потребе за обучавањем: токенизација, препознавање језика, NER. Core ML захтева обучавање модела на сопственим подацима и даје више флексибилности за специфичне задатке. NaturalLanguage је бољи за основне задатке „из кутије", Core ML — за високо специјализоване.

Да ли NaturalLanguage ради офлајн?

Да, NaturalLanguage у потпуности ради на уређају без интернет конекције. Сви модели су уграђени у iOS и macOS, подаци се не шаљу на сервер. Ово је кључна предност у односу на cloud NLP сервисе који захтевају мрежу и стварају ризике за приватност.

Које језике NaturalLanguage подржава?

NaturalLanguage подржава преко 30 језика, укључујући српски, енглески, шпански, француски, немачки, италијански, португалски, кинески, јапански, корејски, арапски, турски и украјински. Прецизност токенизације и лематизације је висока за све подржане језике, NER и сентимент — углавном за енглески.

Како да обучим свој NLP модел за NaturalLanguage?

Користите Create ML — Apple-ову апликацију за обучавање модела машинског учења без програмирања. Учитајте означени скуп података (CSV или JSON), изаберите задатак класификације текста или означавања, обучите модел и извезите га у Core ML формату (.mlmodel). Затим учитајте модел кроз NLModel(mlModel:) у коду.

Да ли NaturalLanguage ради на свим Apple уређајима?

NaturalLanguage је доступан на iOS 12+, macOS 10.14+, watchOS 5+ и tvOS 12+. На уређајима са A12+ чипом и Neural Engine перформансе су веће — обрада текста се убрзава 3–5 пута захваљујући хардверском убрзању машинског учења. На старијим уређајима (A11 и раније) оквир ради, али спорије.

Закључци

  • NaturalLanguage — on-device NLP оквир Apple-а за токенизацију, препознавање језика, лематизацију, POS-означавање и NER без слања података у облак.
  • NLTokenizer дели текст на речи, реченице, параграфе и документе узимајући у обзир карактеристике 30+ језика, укључујући јапански и арапски.
  • NLLanguageRecognizer одређује доминантни језик текста и враћа хипотезе са вероватноћама за вишејезичне сценарије.
  • NLTagger са .lexicalClass и .lemma врши означавање делова говора и лематизацију — свођење речи на речнички облик ради побољшања претраге и анализе.
  • Named Entity Recognition кроз NLTagScheme.nameType издваја имена, организације и места из текста на енглеском, француском, немачком и другим језицима.
  • NLModel пружа интерфејс за претходно обучене и прилагођене Core ML моделе, укључујући уграђени модел анализе сентимента за рецензије на 7 језика.
  • За српски језик доступни су токенизација, препознавање језика, лематизација и POS-означавање; NER и сентимент је боље реализовати кроз прилагођени Core ML модел.

Развићемо мобилну апликацију под кључ

IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.

Разговарајте о пројекту

Прочитајте такође