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 взема предвид особеностите на езика: той правилно обработва токенизация за японски (без интервали между думите), арабски (писмо от дясно на ляво) и китайски (йероглифно писмо). За английски и български, токенизаторът работи на базата на интервали и пунктуация, но като взема предвид съкращения.

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

Лематизацията привежда думата до нейната речникова форма: „тича" → „тичам", „по-добър" → „добър", „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, включително български. Това прави 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: "Това приложение е невероятно!")
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 г. Ще ви консултираме и ще предложим най-доброто решение.

Обсъдете проекта

Прочетете също