Spark NLP库备受青睐,我也入个“门”

点击上方关注,All in AI中国

Spark NLP库已成为一种流行的AI框架,可为您的项目提供速度和可扩展性。了解如何开始利用John Snow Labs的Spark NLP。

人工智能在企业中的采用

O'Reilly在企业中采用人工智能的年度报告于2019年2月发布。这是一项针对多个垂直行业的1300名从业人员的调查,向受访者询问他们的组织在生产中有哪些能带来收入的人工智能项目。这是对当今公司如何真正使用AI的精彩分析 - 以及如何将其用于快速扩展到深度学习、人机回圈、知识图谱和强化学习。

该调查要求受访者列出他们使用的所有ML或AI框架和工具。这是答案的摘要:

Spark NLP库备受青睐,我也入个“门”

这个为期18个月的Spark NLP库在所有AI框架和工具中排名第7(注意“其他开源工具”和“其他云服务”)。它也是迄今为止使用最广泛的NLP库 - 是spaCy的两倍。事实上,在scikit-learn,TensorFlow,Keras和PyTorch之后,它是本调查中最受欢迎的AI库。

最先进的精度、速度和可扩展性

这项调查与我们在过去一年中所经历的采用率上升以及在医疗保健、金融、生命科学和招聘中成功使用Spark NLP的公共案例研究一致。这种快速采用的根本原因在于近年来发生的最先进的NLP的重大转变。

精度

在过去3 - 5年中,自然语言处理的深度学习的兴起意味着在流行的库中实施的算法,如spaCy、Stanford CoreNLP、nltk和OpenNLP,不如最新的科学论文所能做到的那么准确。

声称提供最先进的准确性和速度让我们不断寻求产品化最新的科学进步。以下是我们迄今为止的表现:

Spark NLP库备受青睐,我也入个“门”

速率

为了使Apache Spark的性能更接近裸机,在单个机器和集群上进行了优化,这意味着常见的NLP流水线可以比传统库允许的固有设计限制快几个数量级。

迄今为止最全面的基准测试,比较生产级NLP库,一年前发布在O'Reilly Radar上。左侧是在单个Intel i5,4核,16 GB内存机器上训练简单管道(句子边界检测、标记化和词性标记)的运行时比较:

Spark NLP库备受青睐,我也入个“门”

能够利用GPU进行训练和推理已成为赌注。使用TensorFlow进行深度学习,使Spark NLP能够充分利用现代计算机平台 - 从nVidia的DGX-1到英特尔的Cascade Lake处理器。较旧的库,无论是否使用某些深度学习技术,都需要重写以利用这些新的硬件创新,这些创新可以将NLP管道的速度和规模提高一个数量级。

可扩展性

能够将模型训练、推理和完整AI管道从本地机器扩展到具有很少或没有代码更改的集群,这也成为了赌注。本地构建在Apache Spark ML上使Spark NLP可以在任何Spark集群、内部部署或任何云提供商上扩展。借助Spark的分布式执行计划和缓存,可以对加速进行优化,该计划和缓存已经在几乎任何当前的存储和计算平台上进行了测试。

企业采用的其他驱动因素

产品级别的代码库

我们致力于为企业提供工作软件。与AllenNLP和NLP Architect等面向研究的库相比,这是我们的首要目标。

开放源码许可

选择了坚持使用Apache 2.0许可证,以便可以免费使用库,包括在商业环境中使用。这与Stanford CoreNLP形成鲜明对比,Stanford CoreNLP需要商业用途的付费许可证,而有些spaCy模型使用的ShareAlike CC许可存在问题。

完整的PYTHON、JAVA和SCALA API

支持多种编程语言不仅可以增加库的受众。它还使您能够利用已实现的模型,而无需在运行时的环境之间来回移动数据。例如,使用(仅适用于Python)spaCy需要将数据从JVM进程移动到Python进程以便调用它,这导致架构更复杂,而且通常比必要的速度慢得多。

频繁发布

除了社区贡献,Spark NLP还由一个完整的核心团队积极开发。我们每月发布两次 - 2018年有26个新版本。我们欢迎代码、文档、模型或问题的贡献 - 请首先查看GitHub上的现有问题。

入门

PYTHON

Spark NLP 2.0的一个主要设计目标是让人们在不了解它们的情况下获得Spark和TensorFlow的好处。您不必知道Spark ML估算器或变换器是什么,或者TensorFlow图或会话是什么。如果您正在构建自己的自定义模型或图表,这些仍然可用,但它们现在面向前端,以最少的时间和学习曲线完成工作。我们还添加了15个预先训练好的管道和模型,涵盖了最常见的用例。

为Python安装Spark NLP需要一行pip安装或conda安装。此安装页面包含有关Jupyter和Databricks配置的更多详细信息。实时项目例程还可以在Zeppelin、SageMaker、Azure、GCP、Cloudera和vanilla Spark上使用该库,包括Kubernetes内外。

安装完成后,运行情绪分析需要:

Spark NLP库备受青睐,我也入个“门”

以下是使用BERT嵌入运行命名实体识别所需的全部内容:

Spark NLP库备受青睐,我也入个“门”

这些示例中的管道对象有两个关键方法 - 带字符串的annotate()和带Spark数据帧的transform()。这使您可以扩展此代码,以处理任何Spark群集上的大量文本。

SCALA

Spark NLP是用Scala编写的,它直接在Spark数据帧上运行,无需复制数据,同时充分利用Spark执行计划程序和其他优化。因此,对于Scala和Java开发人员来说,使用库是一件轻而易举的事。

该库在Maven Center上发布,因此只需在Maven或SBT文件中添加依赖项即可安装它。如果您还想安装Spark NLP的OCR(对象字符识别)功能,还需要添加第二个依赖项。

安装完成后,拼写检查句子的方法如下:

Spark NLP库备受青睐,我也入个“门”

Scala和Python API在每个版本中保持相似且100%完整。

在hood下面

在上面分享的几行代码中,有许多内容可供使用 - 而且您可以为其他应用程序自定义很多代码。 Spark NLP针对特定领域的NLP模型进行了大量优化,例如参见Spark NLP for Healthcare商业扩展,因此所有用于定义预训练模型、管道和资源的工具都在公共和文档化的API中。

以下是使用上一节中的BERT Python代码进行命名实体识别所采取的主要步骤:

  1. sparknlp.start()启动一个新的Spark会话,如果没有的话,就返回它。
  2. PretrainedPipeline()加载explain_document_dl管道的英语版本,预先训练的模型以及它所依赖的嵌入。
  3. 它们存储在本地并缓存。
  4. TensorFlow在运行Spark的同一JVM进程中初始化,加载预训练的嵌入和深度学习模型(如NER)。如果在群集上运行,模型将自动分发和共享。
  5. annotate()调用运行一个NLP推理管道,它激活每个阶段的算法(标记化、POS等)。
  6. NER阶段在TensorFlow上运行 - 使用一个具有bi-LSTM层的神经网络作为标记,使用一个CNN作为字符。。
  7. 嵌入用于在NER推理过程中将上下文令牌转换为向量。
  8. 结果对象是一个普通的旧的本地Python字典。

来吧,试一试!

Spark NLP主页包含示例、文档和安装指南。

如果您希望自己探索样本笔记本,Spark NLP Workshop有一个预先构建的Docker容器,通过键入3个单行程序,您可以在本地计算机上运行完整的环境。

Bio:David Talby是Pacific AI的首席技术官,在构建和运营网络规模的数据科学和业务平台方面拥有丰富的经验,并且建立了世界一流的敏捷分布式团队。此前,他曾在微软的Bing Group工作,负责Bing Shopping在美国和欧洲的业务运营,并在亚马逊和西雅图工作,在那里他建立并运营分布式团队,帮助扩展亚马逊的金融系统。David拥有计算机科学博士学位和计算机科学与工商管理硕士学位。

Spark NLP库备受青睐,我也入个“门”

编译出品

nlp

相关推荐