你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
自然语言处理有许多应用程序,例如情绪分析、主题检测、语言检测、关键短语提取和文档分类。
具体而言,可以使用自然语言处理来:
- 对文档进行分类。 例如,可以将它们标记为敏感或垃圾邮件。
- 使用自然语言处理输出执行后续处理或搜索。
- 通过标识文档中的实体来汇总文本。
- 利用识别的实体使用关键字标记文档。
- 使用标记进行基于内容的搜索和检索。
- 使用标识的实体汇总文档的关键主题。
- 使用检测到的主题对文档进行导航分类。
- 根据选定的主题枚举相关文档。
- 评估文本情绪以了解其积极或消极的语气。
随着技术的进步,可以使用自然语言处理对文本数据进行分类和分析。 还可以使用它来增强跨不同领域可解释的 AI 函数。 语言模型的集成显著提高了自然语言处理的功能。 GPT 和 BERT 等语言模型可以生成具有人类水平、能理解上下文的文本。 此功能使它们对复杂的语言处理任务非常有效。 它们通过处理更广泛的认知任务来补充现有的自然语言处理技术,这些任务可改善聊天系统和客户参与度,尤其是与 Databricks 的 Dolly 2.0等模型一样。
语言模型与自然语言处理之间的关系和差异
自然语言处理是一个综合领域,包含处理人类语言的各种技术。 相比之下,语言模型是自然语言处理的特定子集。 他们专注于深度学习来执行高级语言任务。 语言模型通过提供高级文本生成和理解功能来增强自然语言处理,但它们与自然语言处理不同义。 相反,它们通过启用更复杂的语言处理,充当更广泛的自然语言处理域中的强大工具。
注释
本文重点介绍自然语言处理。 自然语言处理与语言模型之间的关系表明,语言模型通过语言理解和生成功能增强自然语言处理过程。
可能的用例
可受益于自定义自然语言处理的业务方案包括:
用于金融、医疗保健、零售、政府以及其他领域的手写文档或机器生成文档的智能分析。
与行业无关的用于文本处理的自然语言处理任务,例如命名实体识别 (NER)、分类、摘要和关系提取。
这些任务可帮助你自动检索、识别和分析文档信息,例如文本和非结构化数据。 这些任务的示例包括风险分层模型、本体分类和零售摘要。
用于语义搜索的信息检索和知识图创建。 借助此功能,可以创建支持药物发现和临床试验的医学知识图。
在零售、金融、旅游和其他行业面向客户的应用程序中,为对话式 AI 系统提供文本翻译。
分析中的情感和增强情绪智能,特别是在监测品牌感知和客户反馈分析中的应用。
自动生成报表。 从结构化数据输入合成和生成全面的文本报告。 这些任务有助于财务和合规等需要全面文档的领域。
集成了用于语音识别和自然对话功能的自然语言处理的语音激活接口。 此集成增强了物联网应用程序和智能设备应用程序中的用户交互。
自适应语言模型,可以动态调整语言输出以适应各种受众理解级别。 此功能对于教育内容和辅助功能改进至关重要。
网络安全文本分析,实时分析通信模式和语言使用情况。 此分析可帮助你识别数字通信中的潜在安全威胁,并改进网络钓鱼尝试或错误信息检测。
Apache Spark 作为自定义的自然语言处理框架
Apache Spark 是一个功能强大的并行处理框架,它通过使用内存中处理来增强大数据分析应用程序的性能。 Microsoft Fabric、 Azure HDInsight 和 Azure Databricks 提供对 Spark 的处理功能的可靠访问。 此访问可帮助你运行大规模数据作。
Spark NLP 是一个高效的框架,可以处理大量文本,以便自定义的自然语言处理工作负载。 此开源库使用 Python、Java 和 Scala 库提供广泛的功能。 这些库提供了在突出的自然语言处理库(如 spaCy 和自然语言工具包)中找到的成熟度。 Spark NLP 包括高级功能,如拼写检查、情绪分析和文档分类。 这些功能可帮助你一致地确保最佳准确性和可伸缩性。
Apache®、Apache Spark 和火焰徽标是 Apache Software Foundation 在美国和/或其他国家/地区的商标或注册商标。 使用这些标记并不暗示获得 Apache Software Foundation 的认可。
最近的公共基准测试突出了 Spark NLP 的性能。 这些基准测试显示,速度相较于其他库有显著提升。 Spark NLP 还保持了训练自定义模型的可比准确性。 值得注意的是,Llama 2 模型与 OpenAI Whisper 的集成增强了对话界面和多语言语音识别。 这些功能标志着优化处理功能的重大进展。
Spark NLP 有效地利用分布式 Spark 群集,该群集充当 Spark ML 的本机扩展,并直接在数据帧上运行。 此集成支持增强群集的性能提升,这有助于为文档分类和风险预测等任务创建统一的自然语言处理和机器学习管道。 MPNet 嵌入和广泛的 ONNX 支持进一步丰富这些功能,并允许进行精确和上下文感知的处理。
Spark NLP 跨扩展的自然语言处理任务数组提供高度准确的结果。 该库附带预生成的深度学习模型,用于命名实体识别、文档分类和情绪检测。 其功能丰富的设计包括支持单词、区块、句子和文档嵌入的预先训练的语言模型。
Spark NLP 的基础结构使用 CPU、GPU 和最新 Intel Xeon 芯片的优化版本进行扩展,使训练和推理过程能够充分利用 Spark 群集。 此功能有助于确保跨各种环境和应用程序高效处理自然语言处理任务。
挑战
资源处理:处理自由格式文本文档的集合需要大量的计算资源。 处理也非常耗时。 此类处理通常涉及 GPU 计算部署。 支持量化的最新改进(例如 Spark NLP 体系结构(如 Llama 2)中的优化,有助于更有效地分配资源来简化这些密集型任务。
标准化:如果没有标准化的文档格式,使用自由格式的文本处理从文档中提取特定事实时,很难实现一致准确的结果。 例如,从各种发票中提取发票编号和日期会带来挑战。 M2M100 等可适应的自然语言处理模型的集成可提高多种语言和格式的处理准确性。 这提高了准确性,导致结果更加一致。
数据多样性和复杂性:解决文档结构和语言细微差别的各种问题仍然很复杂。 MPNet 嵌入等创新提供了增强的上下文理解,从而更直观地处理各种文本格式和更可靠的数据处理。
关键选择条件
在 Azure 中,将 Spark 服务(如 Azure Databricks、Microsoft Fabric 和 HDInsight)用于 Spark NLP 时提供自然语言处理功能。 Azure AI 服务是自然语言处理功能的另一个选项。 为了帮助你确定要使用的服务,请考虑以下几个方面:
如果要使用预生成模型或预训练模型,请考虑使用 AI 服务提供的 API。 或者,可以通过 Spark NLP 下载所选模型,其中包括高级模型(如 Llama 2 和 MPNet)以提高功能。
如果需要针对大量文本数据训练自定义模型,请考虑将 Azure Databricks、Fabric 或 HDInsight 与 Spark NLP 配合使用。 这些平台提供广泛的模型训练所需的计算能力和灵活性。
如果需要低级别自然语言处理功能,例如标记化、词干化、词法化和术语频率/反向文档频率(TF/IDF),请考虑将 Azure Databricks、Fabric 或 HDInsight 与 Spark NLP 配合使用。 或者,在所选的处理工具中使用开源软件库。
如果需要简单的高级自然语言处理功能,例如实体和意向识别、主题检测、拼写检查或情绪分析,请考虑使用 AI 服务提供的 API。 或者通过 Spark NLP 下载所选模型,以便对这些任务使用预生成函数。
功能矩阵
下表总结了自然语言处理服务功能的主要差异。
常规功能
| 能力 | Spark 服务(Azure Databricks、Fabric、HDInsight)与 Spark NLP | AI 服务 |
|---|---|---|
| 提供预先训练的模型作为服务 | 是的 | 是的 |
| REST API | 是的 | 是的 |
| 可编程性 | Python、Scala | 请参阅支持的编程语言 |
| 支持处理大型数据集和大型文档 | 是的 | 否 |
批注器功能
| 能力 | Spark 服务(Azure Databricks、Fabric、HDInsight)与 Spark NLP | AI 服务 |
|---|---|---|
| 句子检测器 | 是的 | 否 |
| 深度句子检测程序 | 是的 | 是的 |
| 分词器 | 是的 | 是的 |
| N-gram 生成器 | 是的 | 否 |
| 字分段 | 是的 | 是的 |
| 词干分析器 | 是的 | 否 |
| 词形还原工具 | 是的 | 否 |
| 词性标记 | 是的 | 否 |
| 依赖项分析程序 | 是的 | 否 |
| 翻译 | 是的 | 否 |
| 非索引字清理器 | 是的 | 否 |
| 拼写更正 | 是的 | 否 |
| 规范器 | 是的 | 是的 |
| 文本匹配程序 | 是的 | 否 |
| TF/IDF | 是的 | 否 |
| 正则表达式匹配程序 | 是的 | 嵌入在对话语言理解(CLU)功能中 |
| 日期匹配程序 | 是的 | 可通过 DateTime 识别器在 CLU 中实现 |
| Chunker (分块) | 是的 | 否 |
高级自然语言处理功能
| 能力 | Spark 服务(Azure Databricks、Fabric、HDInsight)与 Spark NLP | AI 服务 |
|---|---|---|
| 拼写检查 | 是的 | 否 |
| 综述 | 是的 | 是的 |
| 问答 | 是的 | 是的 |
| 情绪检测 | 是的 | 是的 |
| 情感检测 | 是的 | 支持观点挖掘 |
| 标记分类 | 是的 | 是,通过自定义模型 |
| 文本分类 | 是的 | 是,通过自定义模型 |
| 文本表示形式 | 是的 | 否 |
| NER | 是的 | 是,文本分析提供一组 NER |
| 实体识别 | 是的 | 是,通过自定义模型 |
| 语言检测 | 是的 | 是的 |
| 支持除英语以外的语言 | 是,支持 200 多种语言 | 是,支持的语言超过 97 种 |
在 Azure 中设置 Spark NLP
若要安装 Spark NLP,请按照 Spark NLP 文档中的“安装 Spark NLP ”说明进行作。
开发自然语言处理管道
Spark NLP 在运行自然语言处理管道时遵循与传统的 Spark ML 机器学习模型相同的开发概念。 它还应用专门的自然语言处理技术。
Spark NLP 管道包含以下核心组件:
DocumentAssembler 是一种转换器,它通过将它转换为 Spark NLP 可以处理的格式来准备数据。 此阶段是每个 Spark NLP 管道的入口点。 DocumentAssembler 会读取
String列或Array[String],并且可以用setCleanupMode(默认关)预处理文本。SentenceDetector 是一个批注器,它使用预定义的方法标识句子边界。 它可以返回在
Array中检测到的每个句子,或当explodeSentences设置为 true 时以单独行的形式返回。Tokenizer 是一个批注器,可将原始文本划分为离散标记,如单词、数字和符号,并将其输出为
TokenizedSentence。 Tokenizer 未经过训练,并使用RuleFactory中的输入配置来创建令牌化规则。 如果默认规则不足,可以添加自定义规则。Normalizer 是负责优化令牌的批注器。 Normalizer 将正则表达式和字典转换应用于清理文本并删除多余的字符。
WordEmbeddings 是一种查找注解器,用于将令牌映射到向量,从而促进语义处理。 可以使用
setStoragePath指定自定义嵌入字典,其中每行包含一个标记及其向量,用空格分隔。 未解析的令牌默认为零向量。
Spark NLP 使用 MLflow 提供本机支持的 Spark MLlib 管道,这是一个开源平台,用于管理机器学习生命周期。 MLflow 具有以下关键组件:
MLflow 跟踪系统 记录试验运行,并提供强大的查询功能来分析结果。
MLflow Projects 使你可以在不同的平台上运行数据科学代码。 此功能可提高可移植性和可重现性。
MLflow 模型 通过一致的框架支持跨不同环境进行多用途的模型部署。
模型注册表 通过集中存储版本来提供全面的模型管理,以便简化访问和部署。 此步骤有助于生产就绪。
MLflow 与 Azure Databricks 等平台集成,但你也可以在其他基于 Spark 的环境中安装它,以管理和跟踪试验。 通过此集成,可以使用 MLflow 模型注册表使模型可用于生产目的。 可以简化部署过程和维护模型治理。
通过将 MLflow 与 Spark NLP 一起使用,可以确保更高效地管理和部署自然语言处理管道。 还可以解决可伸缩性和集成的新式要求,同时支持词嵌入和语言模型适应等高级技术。
供稿人
Microsoft维护本文。 以下参与者撰写了本文。
主要作者:
- 弗雷迪·阿亚拉 |云解决方案架构师
- Moritz Steller | 高级云解决方案架构师
其他参与者:
- Tincy Elias |高级云解决方案架构师
要查看非公开的 LinkedIn 个人资料,请登录到 LinkedIn。
后续步骤
Spark NLP 文档:
Azure 组件:
学习资源: