大数据培训新三板挂牌机构 股票代码:837906 | EN CN
【小牛原创】Spark SQL 从入门到实战 -- spark sql 1.6版本相关api
【小牛原创】Spark SQL 从入门到实战 -- 概述
Spark Streaming:大规模流式数据处理
spark RDD 相关需求
spark RDD 高级应用
Spark手册 - load&save
Spark手册 - debug
Spark手册 - cache&checkpoint
Spark手册 - RDD Action API
Spark手册 - Partitioner源码
Spark手册 - RDD Transformation API
Spark手册 - RDD的依赖关系
Spark手册 - RDD入门
Spark手册 - 远程debug
Spark手册 - 在IDEA中编写WordCount程序(3)
Spark手册 - 在IDEA中编写WordCount程序(2)
Spark手册 - 在IDEA中编写WordCount程序(1)
Spark手册 - 执行Spark程序
Spark手册 - 集群安装
20页PPT|视频类网站大数据生态 Spark在爱奇艺的应用实践
Spark机器学习入门实例——大数据集(30+g)二分类
Spark官方文档中文翻译:Spark SQL 之 Data Sources
使用Spark MLlib来训练并服务于自然语言处理模型
Spark知识体系完整解读
案例 :Spark应用案例现场分享(IBM Datapalooza)
最全的Spark基础知识解答
Spark在GrowingIO数据无埋点全量采集场景下的实践
Apache Spark探秘:三种分布式部署方式比较
Apache Spark探秘:多进程模型还是多线程模型?
Apache Spark探秘:实现Map-side Join和Reduce-side Join
Apache Spark探秘:利用Intellij IDEA构建开发环境
spark on yarn的技术挑战
Apache Spark学习:将Spark部署到Hadoop 2.2.0上
Hadoop与Spark常用配置参数总结
基于Spark Mllib,SparkSQL的电影推荐系统
spark作业调优秘籍,解数据倾斜之痛
Spark入门必学:预测泰坦尼克号上的生还情况
小牛学堂浅谈基于Spark大数据平台日志审计系统的设计与实现
【Hadoop Summit Tokyo 2016】使用基于Lambda架构的Spark的近实时的网络异常检测和流量分析
Spark编程环境搭建经验分享
Spark技术在京东智能供应链预测的应用
spark中textFile、groupByKey、collect、flatMap、map结合小案例
Spark中DataFrame的schema讲解
深度剖析Spark分布式执行原理
【Spark Summit East 2017】从容器化Spark负载中获取的经验
内存分析技术哪家强?Spark占几何
Spark系列之一:Spark,一种快速数据分析替代方案
6种最常见的Hadoop和Spark项目
Hadoop vs Spark
Hadoop与Spark常用配置参数总结
Spark RPC通信层设计原理分析
Spark Standalone架构设计要点分析
Spark UnifiedMemoryManager内存管理模型分析
网易的Spark技术分享

使用Spark MLlib来训练并服务于自然语言处理模型

于2017-04-01由小牛君创建

分享到:


作者:Michelle Casbon

在非结构化数据的海洋中识别出关键信息,或实时人机交互的自定义,是客户如何利用我们的技术的一组例子,我们的公司Idibon——一个专注于自然语言处理(NLP)的旧金山创业公司。在Spark ML和MLlib中的机器学习库使得我们能够创建一个分析任何语言中的文字的机器智能环境,其规模远远超过了Twitter firehose中每秒的字数。

我们的工程师团队已经建立了一个平台,能够培训和提供数千款NLP模型,在分布式环境中发挥着重要作用。这使我们能够快速扩展并为许多客户提供同时每秒数千次的预测。在这篇文章中,我们将探讨的的我们正在努力解决的问题类型、我们遵循的程序以及我们使用的技术堆栈。这应该对任何希望打造出或改善自己的NLP流水线的人很有帮助。

用Spark构造预测模型

我们的客户是需要自动分类文件或从文件中提取信息的公司。这可以通过多种多样的形式来实现,包括社交媒体分析,信息分类和客户通讯、新闻监测、风险评估和数据录入过程自动化,效率低下。所有这些任务都有一个共同点:预测模型的构建,训练从原始文本中提取的特征。创造NLP模型的这个过程是一个使用Spark提供的工具的独特的、富有挑战性的案例。

产品构建

机器学习产品的构建过程

一种机器学习产品可以被分解成三个概念部分:预测本身,提供预测的模型,以及用于训练模型的数据集。

3个构建流程

预测

在我们的经验中,预测最好是从商业问题开始,并用它们来驱动数据集的选择,而不是用数据集本身驱动项目目标。如果你开始使用一个数据集,重要的是要尽快将数据与关键业务需求进行连接。有了正确的问题,它就会更易于选择有用的分类,这关联到最终提供的预测。

数据集

一旦被定义,最有用的数据集会变得相当明晰。重要的是要验证您所访问的数据可以支持您试图回答的问题。

模型训练

当任务已经建立、数据已被使用,我们现在来考虑模型的问题。为了产生精确的模型,我们需要训练数据,这些数据通常是由人产生的。这些人可能是一个公司或咨询公司的专家,或在许多情况下,他们可能是网络分析师。

此外,许多任务可以做到高效率和低成本利用众包平台CrowdFlower。我们喜欢他们的平台,因为它将基于特定专业领域的工作者,这对英语以外的其他语言的工作特别有用。

所有这些类型的工作者提交的数据集的特定部分的注释,以产生训练数据。训练数据是对数据集的新的或其余部分的预测使用的。基于这些预测,你可以对一组数据发送到代码作出决定。这里的关键是要用最少的人的判断做出最好的模型。你持续进行迭代模型训练、评价和诠释之间,在每一次迭代中得到较高的精度。我们把这个过程称为适应学习,这是一个能够产生高度准确预测的快速、具有成本效益的方法。

操作化

支持自适应学习的过程中,我们建立了一个平台,使其尽可能的自动化。没有我们的干预的组件,自动规模是关键,以支持实时的接口与波动的客户端请求。我们已经解决了一些更严格的可扩展性的挑战,包括:

  1. 文件存储
  2. 每秒钟为上千人提供预测
  3. 支持持续的培训,这涉及到当训练数据集或模型参数发生变化时自动生成更新的模型
  4. 超参数优化产生最高效的模型

我们通过在AWS堆栈使用部件的组合,如 Elastic Load Balancing, Autoscaling Groups, RDS, 和 ElastiCache。也有一些指标,我们通过New Relic 和Datadog来监测,以防止我们发生可怕的错误。

下面是我们的基础设施的主要工具的高级图表。

高级图表

Spark扮演的角色

我们的机器学习能力的核心是使用Spark ML和MLlib优化功能。充分使用这些是为了NLP,包括我们称之为IdiML的持久层的加入。这使我们能够利用Spark进行个体预测,而不是其最常见的用于一次性处理大量数据的平台用法。

我们使用Spark是为了什么?

在更详细的层面上,NLP流水线有三个主要组成部分:

  1. 特征提取,文本被转换成一种数字格式,以适用于统计模型。
  2. 培训,用于为每个特征向量的分类的基础上产生模型。
  3. 预测,用于训练的模型被用来产生一个新的、不可见的文本分类。

每个组件的一个简单的例子如下所述:

组建例子

特征提取

在特征提取阶段,基于文本的数据转化为一个特征向量的数值数据。此向量表示的文本的独特的特性,可以生成任何序列的数学变换。我们的系统是建立在容易适应其他功能类型,如来自深度学习的功能,但为了简单起见,我们会考虑一个基本的特征流水线实例:

  1. 输入:一个单一的文档,包括内容和元数据。
  2. 内容提取:将我们感兴趣的输入部分分离,这通常是内容本身。
  3. 标记:将文本转换为单个的词。在英语中,符号是单词以及周围空格或标点的字符串,但在其他语言如中文或日语中,你可能需要确定如何识别一个“词”。
  4. Ngrams:产生组长度为n的字序列。双字母组和三元模型经常使用。
  5. 特征查找:将一个任意的数值索引值分配给每个唯一的特征,从而生成一个整数向量。此特征索引是在预测中使用的。
  6. 输出:Spark MLlib的Vector数据类型形式的数值特征向量(org.apache.spark.mllib.linalg.Vector).

流水线

训练

在训练阶段,一个分类被附加到特征向量。在Spark里用LabeledPoint数据类型表示。二元分类中,分类是真或假(1或0)。

输入:数字特征Vectors。

一个LabeledPoint创建,组成特征向量及其分类。这种分类是由项目生命周期中所产生的。

代表培训全套资料LabeledPoint集送到MLlib的LogisticRegressionWithLBFGS功能,在适合模型的基础上给出了特征向量及相关分类。

输出:一个 LogisticRegressionModel 。

训练

预测

在预测时,在训练过程中所产生的模型被用来提供一个新的文本分类。一个0-1的置信区间表示预测模型的可信度。可信度越高,模型越确定。以下内容包含了预测过程:

输入:在同一领域看不见的文件,用于训练的数据。相同的特征流水线应用于看不见的文本。在训练过程中所产生的特征指数作为一项查询。这将使特征向量的相同的特征空间中的数据用于训练。

检索到的模型。

特征Vector被发送到该模型,并返回一个分类预测。

使用特定的模型情境解释分类,然后返回给用户。

输出:看不见的数据的预测分类和对应的置信区间。

置信区间 置信区间2

将其融入我们现有的平台,IdiML

为了提供最准确的模型,我们希望能够支持不同类型的机器学习库。Spark有一个独特的处理方式,因此我们希望我们主要的代码库能与任何特质隔绝。这被称为持久层(IdiML),它允许我们把Spark的功能与我们自己写的NLP特定代码结合起来。例如,在超参数调整过程中,我们可以使用结合Spark和我们自己的库组件的培养模式。这使我们能够自动选择执行最佳的模型,而不是只用一个模型来决定的所有模型。

模型

为什么使用持久层?

使用持久层允许我们以实施培训和服务成千上万的机型。以下是IdiML为我们提供的:

存储训练过程中使用的参数的方法。这是必要的,以便返回相应的预测。

版本控制流水线的每一个部分的能力。这使我们能够支持进行更新的代码库后的向后兼容性。版本也指召回和项目的生命周期中支持的模型以前的迭代的能力。

能够自动选择对每个模型的最佳算法。期间超参数调谐,从不同的机器学习库实现以各种组合使用和结果进行评价。

通过规范面向开发者组件快速整合新功能NLP的能力。这提供了一个绝缘层,使得它不需要我们的功能工程师和数据科学家学习如何使用新的工具进行交互。

在任何环境中部署的能力。目前,我们正在EC2实践上使用Docker容器,但我们的架构意味着我们也可以采取burst capabilities,如亚马逊的lambda服务提供的优势。

一个单一的存储和基于通用InputStreams和OutputStreams,从而使我们的阅读的要求,写入和磁盘负载框架。

一个抽象的“slf4j”的形式的日志,使我们不依赖于任何特定的框架。

速度快且灵活的高性能系统

NLP与其他形式的机器学习不同,因为它可以直接对人类产生的数据进行操作。这往往比机器生成的数据更混乱,因为语言是模棱两可的,因此会导致高度可变性——即使在人类之间也是如此。我们的目标是使尽可能多的NLP流水线使资源得到更有效的利用:机器帮助人类-帮助机器-帮助人类。为了克服这一跨越语言的障碍,我们使用工具,如Spark,建立高性能的系统,比以往任何时候都更快、更灵活。

via:数盟

End.