NLP / NaturalLanguage:iOS中的文本处理框架

作者: IT Sectr 发布日期: 2026-07-19 阅读时间: 8 分钟

NaturalLanguage —— 是苹果公司在iOS和macOS设备上进行自然语言处理的框架,提供分词、语言识别、词性标注、词形还原和命名实体识别等功能。根据Apple WWDC 2020,该框架在设备上执行所有分析,无需将数据发送到服务器,从而确保用户数据的隐私性。NaturalLanguage支持30多种语言,并与Core ML集成以支持自定义NLP模型。

要点

  • NaturalLanguage —— 苹果的设备端NLP框架,无需将数据发送到云端即可工作。
  • 支持分词、语言识别、词形还原、词性标注和NER。
  • 支持30多种语言,包括中文、英语、阿拉伯语。
  • NLTokenizer 将文本拆分为单词、句子、段落和文档。
  • NLLanguageRecognizer 确定文本的语言,并显示每个选项的概率。

什么是iOS中的NaturalLanguage?

NaturalLanguage(NL)——是苹果公司用于自然语言分析的机器学习框架,是Foundation的一部分,可在iOS 12+、macOS 10.14+和watchOS 5+上使用。该框架提供即用型NLP功能,无需训练自己的模型。

与云端NLP服务(Google Cloud NLP、Amazon Comprehend)不同,NaturalLanguage在设备上执行所有分析。这意味着网络请求零延迟、可在离线模式下工作以及完全数据隐私 —— 文本不会离开用户的设备。

根据Apple ML Research 2023,在A12+芯片上进行设备端NLP处理请求的速度比类似云解决方案快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-gram并将其与语言配置文件进行比较。对于短文本(最多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确定中文的准确度对于100个字符以上的文本为95%。对于短文本(1–2个单词),准确度降至60–70% —— 在这种情况下,最好使用languageHypotheses并显示前三个选项。

词性标注和词形还原

NLTagScheme提供用于语言分析的标注方案:词性(名词、动词、形容词)、词元(单词的正常形式)、实体类型(人物、组织、地点)和其他类别。

词形还原将单词转换为其词典形式:“跑了”→“跑”,“更好”→“好”,“books”→“book”。这对于搜索和文本分析至关重要 —— 没有词形还原,“猫”和“猫的”被视为不同的token,这会降低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成为多语言应用程序的通用工具,无需为每种语言加载单独的模型。

NaturalLanguage中的命名实体识别

命名实体识别(NER)—— 是从文本中提取命名实体的任务:人名、组织名称、地理位置和个人数据。NaturalLanguage通过NLTagScheme.nameType支持NER。

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。NaturalLanguage的NER无需自定义训练,即可立即用于英语、法语、德语、西班牙语和其他语言。

对于中文,NER受支持但准确度略低 —— 约70–75%,而英语为85%。如果需要对中文具有高准确度,Apple建议使用Create ML在自己的数据上训练自定义Core ML模型。

使用NLModel进行情感分析

NLModel —— 是一个用于处理经过训练的Core ML NLP模型的类,包括由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和情感分析主要针对英语。

如何为NaturalLanguage训练自己的NLP模型?

使用Create ML —— 苹果公司的无需编程即可训练机器学习模型的应用程序。加载标记的数据集(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 —— 苹果的设备端NLP框架,用于分词、语言识别、词形还原、词性标注和NER,无需将数据发送到云端。
  • NLTokenizer将文本拆分为单词、句子、段落和文档,考虑30多种语言的特征,包括日语和阿拉伯语。
  • NLLanguageRecognizer确定文本的主要语言,并返回带有概率的假设以用于多语言场景。
  • NLTagger使用.lexicalClass和.lemma执行词性标注和词形还原 —— 将单词转换为词典形式以改进搜索和分析。
  • 命名实体识别通过NLTagScheme.nameType从英语、法语、德语和其他语言的文本中提取名称、组织和地点。
  • NLModel为预训练和自定义Core ML模型提供接口,包括用于7种语言评论的内置情感分析模型。
  • 对于中文,提供了分词、语言识别、词形还原和词性标注;NER和情感分析最好通过自定义Core ML模型实现。

我们将开发一款交钥匙移动应用程序

IT Sectr自2017年以来为初创企业和企业打造iOS和Android应用程序。我们将为您提供咨询并提出最佳解决方案。

讨论项目

另请阅读