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
}

Токенизация на уровне предложений полезна для разбиения больших текстов на логические блоки перед дальнейшим анализом. 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 предоставляет схемы тегирования для лингвистического анализа: части речи (noun, verb, adjective), леммы (нормальная форма слова), типы сущностей (person, organization, place) и другие категории.

Лемматизация приводит слово к его словарной форме: «бежал» → «бежать», «лучше» → «хороший», «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 → Noun, were → Verb, quickly → Adverb. Комбинируя лемматизацию и части речи, можно строить умный поиск, который находит «бегущих котов» по запросу «бежать кот».

NLTagScheme.lemma работает для всех поддерживаемых NaturalLanguage языков, включая русский. Это makes 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 format (.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 года. Мы проконсультируем вас и предложим наилучшее решение.

Обсудить проект

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