自然语言处理 (NLP) 有很多用途:情绪分析、主题检测、语言检测、关键短语提取和文档归类。
具体而言,NLP 可用于:
- 对文档进行分类。 例如,可以将文档标记为敏感文档或垃圾文档。
- 进行后续处理或搜索。 可以将 NLP 输出用于这些目的。
- 通过识别文档中存在的实体对文本进行总结。
- 使用关键字标记文档。 对于关键字,NLP 可以使用已标识的实体。
- 执行基于内容的搜索和检索。 标记使此功能成为可能。
- 总结文档的重要主题。 NLP 可以将已标识的实体合并成主题。
- 对文档进行分类以便导航。 为此,NLP 使用检测到的主题。
- 根据选定的主题枚举相关文档。 为此,NLP 使用检测到的主题。
- 对文本进行情绪评分。 通过使用此功能,你可以评估文档的正面或负面语气。
Apache®、Apache Spark 和火焰徽标是 Apache Software Foundation 在美国和/或其他国家/地区的商标或注册商标。 使用这些标记并不暗示获得 Apache Software Foundation 的认可。
可能的用例
可从自定义 NLP 中受益的业务方案包括:
- 为金融、医疗保健、零售、政府和其他部门的手写或机器创建的文档提供文档智能。
- 用于文本处理的与行业无关的 NLP 任务,例如命名实体识别 (NER)、分类、摘要和关系提取。 这些任务使检索、标识和分析文档信息(如文本和非结构化数据)的过程自动化。 这些任务的示例包括风险分层模型、本体分类和零售摘要。
- 用于语义搜索的信息检索和知识图创建。 借助此功能,可以创建支持药物发现和临床试验的医学知识图。
- 在零售、金融、旅游和其他行业面向客户的应用程序中,为对话式 AI 系统提供文本翻译。
作为自定义 NLP 框架的 Apache Spark
Apache Spark 是并行处理框架,支持使用内存中处理来提升大数据分析应用程序的性能。 Azure Synapse Analytics、Azure HDInsight 和 Azure Databricks 提供对 Spark 的访问权限,并利用其处理能力。
对于自定义 NLP 工作负载,Spark NLP 充当处理大量文本的有效框架。 此开放源代码 NLP 库提供 Python、Java 和 Scala 库,这些库提供传统 NLP 库(例如 spaCy、NLTK、Stanford CoreNLP 和 Open NLP)的全部功能。 Spark NLP 还提供拼写检查、情绪分析和文档分类等功能。 Spark NLP 通过提供最先进的准确性、速度和可伸缩性,改进了以前的工作。
最近的公开基准表明,Spark NLP 比 spaCy 快 38 倍和 80 倍,在训练自定义模型方面准确度相当。 Spark NLP 是唯一可以使用分布式 Spark 群集的开放源代码库。 Spark NLP 是 Spark ML 的本机扩展,可直接对数据帧进行操作。 因此,在群集上加速会导致另一个数量级的性能增益。 由于每个 Spark NLP 管道都是 Spark ML 管道,因此 Spark NLP 非常适合生成统一的 NLP 和机器学习管道,例如文档分类、风险预测和推荐管道。
除了出色的性能外,Spark NLP 还为越来越多的 NLP 任务提供最先进的准确性。 Spark NLP 团队定期阅读最新的相关学术论文,并实现最先进的模型。 在过去两到三年中,性能最佳的模型都使用了深度学习。 库带有预生成的深度学习模型,可用于命名实体识别、文档分类、情绪和情感检测以及句子检测。 库还包括几十种预训练的语言模型,其中包括对字、区块、句子和文档嵌入的支持。
库针对 CPU、GPU 和最新的 Intel Xeon 芯片进行了优化生成。 你可以缩放训练和推理进程以利用 Spark 群集。 这些进程可以在所有常用分析平台的生产环境中运行。
挑战
- 处理自由格式文本文档的集合需要大量的计算资源。 处理也非常耗时。 此类进程通常涉及 GPU 计算部署。
- 如果没有标准化的文档格式,使用自由格式文本处理从文档中提取特定事实可能很难获得一致准确的结果。 例如,构想发票的文本表示形式,这难以生成一个进程来准确地从不同供应商那里提取发票编号和发票日期。
关键选择条件
在 Azure 中,在将 Azure Databricks、Azure Synapse Analytics 和 Azure HDInsight 等 Spark 服务与 Spark NLP 配合使用时它们会提供 NLP 功能。 Azure AI 服务是 NLP 功能的另一种选择。 要确定要使用的服务,请考虑以下问题:
是否要使用预生成或预训练的模型? 如果是,请考虑使用 Azure AI 服务提供的 API。 或者通过 Spark NLP 下载所选模型。
是否需要针对大型文本数据语料库训练自定义模型? 如果是,请考虑将 Azure Databricks、Azure Synapse Analytics 或 Azure HDInsight 与 Spark NLP 配合使用。
是否需要低级别 NLP 功能,如词汇切分、词干分解、词形还原和词频/逆文档频率 (TF/IDF)? 如果是,请考虑将 Azure Databricks、Azure Synapse Analytics 或 Azure HDInsight 与 Spark NLP 配合使用。 或在所选的处理工具中使用开源软件库。
是否需要简单的高级别 NLP 功能,如实体和意图识别、主题检测、拼写检查或情绪分析? 如果是,请考虑使用 Azure AI 服务提供的 API。 或者通过 Spark NLP 下载所选模型。
功能矩阵
以下各表汇总了 NLP 服务功能上的关键差异。
常规功能
功能 | 使用 Spark NLP 的 Spark 服务(Azure Databricks、Azure Synapse Analytics、Azure HDInsight) | Azure AI 服务 |
---|---|---|
提供预先训练的模型作为服务 | 是 | 是 |
REST API | 是 | 是 |
可编程性 | Python、Scala | 有关支持的语言,请参阅其他资源 |
支持处理大型数据集和大型文档 | 是 | 否 |
低级 NLP 功能
批注器功能 | 使用 Spark NLP 的 Spark 服务(Azure Databricks、Azure Synapse Analytics、Azure HDInsight) | Azure AI 服务 |
---|---|---|
句子检测程序 | 是 | 否 |
深度句子检测程序 | 是 | 是 |
分词器 | 是 | 是 |
N-gram 生成器 | 是 | 否 |
字分段 | 是 | 是 |
词干分析器 | 是 | 否 |
词形还原工具 | 是 | 否 |
词性标记 | 是 | 否 |
依赖项分析程序 | 是 | 否 |
翻译 | 是 | 否 |
非索引字清理器 | 是 | 否 |
拼写更正 | 是 | 否 |
标准化程序 | 是 | 是 |
文本匹配程序 | 是 | 否 |
TF/IDF | 是 | 否 |
正则表达式匹配程序 | 是 | 嵌入在语言理解服务 (LUIS) 中。 在替换 LUIS 的对话语言理解 (CLU) 中不受支持。 |
日期匹配程序 | 是 | 可以通过 DateTime 识别器在 LUIS 和 CLU 中使用 |
Chunker | 是 | 否 |
高级 NLP 功能
功能 | 使用 Spark NLP 的 Spark 服务(Azure Databricks、Azure Synapse Analytics、Azure HDInsight) | Azure AI 服务 |
---|---|---|
拼写检查 | 是 | 否 |
汇总 | 是 | 是 |
问答 | 是 | 是 |
情绪检测 | 是 | 是 |
情感检测 | 是 | 支持观点挖掘 |
标记分类 | 是 | 是,通过自定义模型 |
文本分类 | 是 | 是,通过自定义模型 |
文本表示形式 | 是 | 否 |
NER | 是 | 是 - 文本分析提供一组 NER,自定义模型用于实体识别 |
实体识别 | 是 | 是,通过自定义模型 |
语言检测 | 是 | 是 |
支持除英语以外的语言 | 是,支持 200 多种语言 | 是,支持的语言超过 97 种 |
在 Azure 中设置 Spark NLP
要安装 Spark NLP,请使用以下代码,但将 <version>
替换为最新版本号。 有关详细信息,请参阅 Spark NLP 文档。
# Install Spark NLP from PyPI.
pip install spark-nlp==<version>
# Install Spark NLP from Anacodna or Conda.
conda install -c johnsnowlabs spark-nlp
# Load Spark NLP with Spark Shell.
spark-shell --packages com.johnsnowlabs.nlp:spark-nlp_<version>
# Load Spark NLP with PySpark.
pyspark --packages com.johnsnowlabs.nlp:spark-nlp_<version>
# Load Spark NLP with Spark Submit.
spark-submit --packages com.johnsnowlabs.nlp:spark-nlp_<version>
# Load Spark NLP as an external JAR after compiling and building Spark NLP by using sbt assembly.
spark-shell --jars spark-nlp-assembly-3 <version>.jar
开发 NLP 管道
对于 NLP 管道的执行顺序,Spark NLP 遵循与传统 Spark ML 机器学习模型相同的开发概念。 但 Spark NLP 会应用 NLP 技术。
Spark NLP 管道的核心组件是:
DocumentAssembler:一种转换器,通过将数据更改为可供 Spark NLP 处理的格式来准备数据。 此阶段是每个 Spark NLP 管道的入口点。 DocumentAssembler 可以读取
String
列或Array[String]
。setCleanupMode
可用于预处理文本。 默认情况下,此模式处于关闭状态。SentenceDetector:一种批注器,通过使用给定的方法来检测句子边界。 此批注器可以返回
Array
中每个提取的句子。 如果将explodeSentences
设置为 true,它还可以返回不同行中的每个句子。Tokenizer:一种批注器,将原始文本分隔为标记或单词、数字和符号等单元,并以
TokenizedSentence
结构返回标记。 此类不适合。 如果 tokenizer 适合,则内部RuleFactory
会使用输入配置来设置标记化规则。 Tokenizer 使用开放标准来识别标记。 如果默认设置无法满足需求,可以添加可用于自定义 Tokenizer 的规则。Normalizer:清理标记的批注器。 Normalizer 需要词干。 Normalizer 使用正则表达式和字典来转换文本并删除脏字符。
WordEmbedding:查找将标记映射到矢量的批注器。
setStoragePath
可用于为嵌入内容指定自定义标记查找字典。 字典的每一行都需要包含一个标记及其向量表示形式,用空格分隔。 如果在字典中找不到标记,结果会是相同维度的零向量。
Spark NLP 使用 MLflow 本机支持的 Spark MLlib 管道。 MLflow 是机器学习生命周期的开源平台。 其组件包括:
- MLflow Tracking:记录试验并提供查询结果的方法。
- MLflow Project:使在任何平台上运行数据科学代码成为可能。
- MLflow Model:将模型部署到不同的环境。
- Model Registry:管理存储在中心存储库中的模型。
MLflow 已集成到 Azure Databricks。 可以在任何其他基于 Spark 的环境中安装 MLflow 来跟踪和管理试验。 还可以使用 MLflow Model Registry 将模型用于生产。
作者
本文由 Microsoft 维护, 它最初是由以下贡献者撰写的。
主要作者:
- Moritz Steller | 高级云解决方案架构师
- Zoiner Tejada | CEO 兼架构师
后续步骤
Spark NLP 文档:
Azure 组件:
学习资源: