NLP / NaturalLanguage: що це, фреймворк обробки тексту в iOS

Автор: IT Sectr Опубліковано: 2026-07-19 Час читання: 8 хв

NaturalLanguage — це фреймворк від Apple для обробки природної мови на пристроях iOS та macOS, що надає доступ до токенізації, розпізнавання мови, тегування частин мови, лематизації та визначення іменованих сутностей. За даними 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-можливості без необхідності навчати власні моделі.

На відміну від хмарних NLP-сервісів (Google Cloud NLP, Amazon Comprehend), NaturalLanguage виконує весь аналіз на пристрої. Це означає нульову затримку на мережеві запити, роботу в офлайн-режимі та повну конфіденційність даних — текст не залишає пристрій користувача.

За даними Apple ML Research 2023, on-device NLP на чипах A12+ обробляє запити в 3–5 разів швидше, ніж аналогічні хмарні рішення, при збереженні точності понад 85% для базових завдань. Фреймворк оптимізовано під Neural Engine, що дозволяє обробляти до 100 запитів на секунду на сучасних пристроях.

NaturalLanguage використовується в iOS-додатках для аналізу відгуків, розумного пошуку, автодоповнення, модерації контенту та вилучення структурованих даних з неструктурованого тексту. Фреймворк підтримує понад 30 мов, включаючи українську, російську, турецьку та арабську.

Токенізація тексту з NLTokenizer

NLTokenizer — це клас для розбиття тексту на лінгвістичні одиниці: слова, речення, абзаци або документи. Токенізація — перший крок практично будь-якого NLP-пайплайну, і NaturalLanguage надає її в готовому вигляді.

NLTokenizer враховує особливості мови: він коректно обробляє токенізацію для японської мови (без пробілів між словами), арабської (правостороннє письмо) та китайської (ієрогліфічне письмо). Для англійської та російської токенізатор працює за пробілами та пунктуацією, але з урахуванням скорочень (don't → do + n't).

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
}

Токенізація на рівні речень корисна для розбиття великих текстів на логічні блоки перед подальшим аналізом. NLTokenizer визначить межі речень навіть за відсутності крапки в кінці або за наявності питальних речень.

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 надає схеми тегування для лінгвістичного аналізу: частини мови (іменник, дієслово, прикметник), леми (нормальна форма слова), типи сутностей (особа, організація, місце) та інші категорії.

Лематизація приводить слово до його словникової форми: «біг» → «бігти», «кращий» → «хороший», «books» → «book». Це критично важливо для пошуку та аналізу тексту — без лематизації «кіт» і «кота» вважаються різними токенами, що знижує якість NLP-пайплайнів.

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 → Іменник, were → Дієслово, quickly → Прислівник. Комбінуючи лематизацію та частини мови, можна будувати розумний пошук, який знаходить «біжучих котів» за запитом «бігти кіт».

NLTagScheme.lemma працює для всіх підтримуваних NaturalLanguage мов, включаючи українську. Це робить NLTagger універсальним інструментом для багатомовних додатків без необхідності завантажувати окремі моделі для кожної мови.

Named Entity Recognition в NaturalLanguage

Named Entity Recognition (NER) — це задача виділення з тексту іменованих сутностей: імен людей, назв організацій, географічних місць та персональних даних. NaturalLanguage підтримує NER через NLTagScheme.nameType.

NLTagScheme.nameType розрізняє три типи сутностей: 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: "This app is amazing!")
print("Sentiment: \\(sentiment ?? "neutral")") // "positive"

NLModel також підтримує кастомні моделі, навчені через Create ML. Можна навчити модель класифікації тексту на своїх даних (категорії товарів, типи звернень у підтримку, мовні стилі) і використовувати її через той самий інтерфейс NLModel.

За даними Apple Create ML documentation 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, дані не відправляються на сервер. Це ключова перевага перед хмарними 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 року. Ми проконсультуємо вас і запропонуємо найкраще рішення.

Обговорити проект

Читайте також