spark for reactive machine learning: building intelligent agents at scale

67
Spark for Reactive Machine Learning: Building Intelligent Agents at Scale Jeff Smith @jeffksmithjr

Upload: jeff-smith

Post on 09-Jan-2017

297 views

Category:

Software


0 download

TRANSCRIPT

Page 1: Spark for Reactive Machine Learning: Building Intelligent Agents at Scale

Spark for Reactive Machine Learning: Building Intelligent Agents at Scale

Jeff Smith @jeffksmithjr

Page 2: Spark for Reactive Machine Learning: Building Intelligent Agents at Scale

x.ai is a personal assistant who schedules meetings for you

Page 3: Spark for Reactive Machine Learning: Building Intelligent Agents at Scale

Agents

Page 4: Spark for Reactive Machine Learning: Building Intelligent Agents at Scale

AgentsAutonomous Goal-oriented Capable of learning Reactive

Page 5: Spark for Reactive Machine Learning: Building Intelligent Agents at Scale

Amy Ingram

x.ai/how-it-works/

Page 6: Spark for Reactive Machine Learning: Building Intelligent Agents at Scale

AgentsAutonomous Goal-oriented Capable of learning Reactive

Page 7: Spark for Reactive Machine Learning: Building Intelligent Agents at Scale
Page 8: Spark for Reactive Machine Learning: Building Intelligent Agents at Scale

Tech Stacks

Page 9: Spark for Reactive Machine Learning: Building Intelligent Agents at Scale

You

Page 10: Spark for Reactive Machine Learning: Building Intelligent Agents at Scale

Scala & Python Spark MongoDB Machine Learning

Page 11: Spark for Reactive Machine Learning: Building Intelligent Agents at Scale

nom nom, the data dogScala & Python Spark & Akka Couchbase Machine Learning

Page 12: Spark for Reactive Machine Learning: Building Intelligent Agents at Scale

Reactive + Machine Learning

Page 13: Spark for Reactive Machine Learning: Building Intelligent Agents at Scale

Machine Learning Systems

Page 14: Spark for Reactive Machine Learning: Building Intelligent Agents at Scale

Traits of Reactive Systems

Page 15: Spark for Reactive Machine Learning: Building Intelligent Agents at Scale

Responsive

Page 16: Spark for Reactive Machine Learning: Building Intelligent Agents at Scale

Resilient

Page 17: Spark for Reactive Machine Learning: Building Intelligent Agents at Scale

Elastic

Page 18: Spark for Reactive Machine Learning: Building Intelligent Agents at Scale

Message-Driven

Page 19: Spark for Reactive Machine Learning: Building Intelligent Agents at Scale

Reactive Strategies

Page 20: Spark for Reactive Machine Learning: Building Intelligent Agents at Scale

Reactive Machine Learning

Page 21: Spark for Reactive Machine Learning: Building Intelligent Agents at Scale

Reactive Machine Learning

Page 22: Spark for Reactive Machine Learning: Building Intelligent Agents at Scale

Generating Features

Page 23: Spark for Reactive Machine Learning: Building Intelligent Agents at Scale

Machine Learning Systems

Page 24: Spark for Reactive Machine Learning: Building Intelligent Agents at Scale

Feature Generation

Raw Data FeaturesFeature Generation Pipeline

Page 25: Spark for Reactive Machine Learning: Building Intelligent Agents at Scale

Microblogging Data

Page 26: Spark for Reactive Machine Learning: Building Intelligent Agents at Scale

Pipeline Failure

Raw Data FeaturesFeature Generation Pipeline

Raw Data FeaturesFeature Generation Pipeline

Page 27: Spark for Reactive Machine Learning: Building Intelligent Agents at Scale

Supervising Feature Generation

Raw Data FeaturesFeature Generation Pipeline

Supervision

Page 28: Spark for Reactive Machine Learning: Building Intelligent Agents at Scale

Original Features

object SquawkLength extends FeatureType[Int]

object Super extends LabelType[Boolean]

val originalFeatures: Set[FeatureType] = Set(SquawkLength)val label = Super

Page 29: Spark for Reactive Machine Learning: Building Intelligent Agents at Scale

Basic Features

object PastSquawks extends FeatureType[Int]

val basicFeatures = originalFeatures + PastSquawks

Page 30: Spark for Reactive Machine Learning: Building Intelligent Agents at Scale

More Features

object MobileSquawker extends FeatureType[Boolean]

val moreFeatures = basicFeatures + MobileSquawker

Page 31: Spark for Reactive Machine Learning: Building Intelligent Agents at Scale

Feature Collections

case class FeatureCollection(id: Int, createdAt: DateTime, features: Set[_ <: FeatureType[_]], label: LabelType[_])

Page 32: Spark for Reactive Machine Learning: Building Intelligent Agents at Scale

Feature Collectionsval earlierCollection = FeatureCollection(101, earlier, basicFeatures, label)

val latestCollection = FeatureCollection(202, now, moreFeatures, label)

val featureCollections = sc.parallelize( Seq(earlierCollection, latestCollection))

Page 33: Spark for Reactive Machine Learning: Building Intelligent Agents at Scale

Fallback Collections

val FallbackCollection = FeatureCollection(404, beginningOfTime, originalFeatures, label)

Page 34: Spark for Reactive Machine Learning: Building Intelligent Agents at Scale

Fallback Collectionsdef validCollection(collections: RDD[FeatureCollection], invalidFeatures: Set[FeatureType[_]]) = { val validCollections = collections.filter( fc => !fc.features .exists(invalidFeatures.contains)) .sortBy(collection => collection.id) if (validCollections.count() > 0) { validCollections.first() } else FallbackCollection}

Page 35: Spark for Reactive Machine Learning: Building Intelligent Agents at Scale

Learning Models

Page 36: Spark for Reactive Machine Learning: Building Intelligent Agents at Scale

Machine Learning Systems

Page 37: Spark for Reactive Machine Learning: Building Intelligent Agents at Scale

Learning Models

Features ModelModel Learning Pipeline

Page 38: Spark for Reactive Machine Learning: Building Intelligent Agents at Scale

Models of Love

Page 39: Spark for Reactive Machine Learning: Building Intelligent Agents at Scale

Data Preparationval labelIndexer = new StringIndexer() .setInputCol("label") .setOutputCol("indexedLabel") .fit(instances)

val featureIndexer = new VectorIndexer() .setInputCol("features") .setOutputCol("indexedFeatures") .fit(instances)

val Array(trainingData, testingData) = instances.randomSplit( Array(0.8, 0.2))

Page 40: Spark for Reactive Machine Learning: Building Intelligent Agents at Scale

Learning a Modelval decisionTree = new DecisionTreeClassifier() .setLabelCol("indexedLabel") .setFeaturesCol("indexedFeatures")

val labelConverter = new IndexToString() .setInputCol("prediction") .setOutputCol("predictedLabel") .setLabels(labelIndexer.labels)

val pipeline = new Pipeline() .setStages(Array(labelIndexer, featureIndexer, decisionTree, labelConverter))

Page 41: Spark for Reactive Machine Learning: Building Intelligent Agents at Scale

Evolving Modeling Strategiesval randomForest = new RandomForestClassifier() .setLabelCol("indexedLabel") .setFeaturesCol("indexedFeatures")

val revisedPipeline = new Pipeline() .setStages(Array(labelIndexer, featureIndexer, randomForest, labelConverter))

Page 42: Spark for Reactive Machine Learning: Building Intelligent Agents at Scale

Deep Models of Artistic Style

Page 43: Spark for Reactive Machine Learning: Building Intelligent Agents at Scale

Refactoring Command Line Tools> python neural-art-tf.py -m vgg -mp ./vgg -c ./images/bear.jpg -s ./images/style.jpg -w 800

def produce_art(content_image_path, style_image_path, model_path, model_type, width, alpha, beta, num_iters):

Page 44: Spark for Reactive Machine Learning: Building Intelligent Agents at Scale

Exposing a Serviceclass NeuralServer(object): def generate(self, content_image_path, style_image_path, model_path, model_type, width, alpha, beta, num_iters): produce_art(content_image_path, style_image_path, model_path, model_type, width, alpha, beta, num_iters) return True

daemon = Pyro4.Daemon() ns = Pyro4.locateNS() uri = daemon.register(NeuralServer) ns.register("neuralserver", uri) daemon.requestLoop()

Page 45: Spark for Reactive Machine Learning: Building Intelligent Agents at Scale

Encoding Model Types

object ModelType extends Enumeration { type ModelType = Value val VGG = Value("VGG") val I2V = Value("I2V") }

Page 46: Spark for Reactive Machine Learning: Building Intelligent Agents at Scale

Encoding Valid Configurationcase class JobConfiguration(contentPath: String, stylePath: String, modelPath: String, modelType: ModelType, width: Integer = 800, alpha: java.lang.Double = 1.0, beta: java.lang.Double = 200.0, iterations: Integer = 5000)

Page 47: Spark for Reactive Machine Learning: Building Intelligent Agents at Scale

Finding the Serviceval ns = NameServerProxy.locateNS(null) val remoteServer = new PyroProxy(ns.lookup("neuralserver"))

Page 48: Spark for Reactive Machine Learning: Building Intelligent Agents at Scale

Calling the Servicedef callServer(remoteServer: PyroProxy, jobConfiguration: JobConfiguration) = { Future.firstCompletedOf( List( timedOut, Future { remoteServer.call("generate", jobConfiguration.contentPath, jobConfiguration.stylePath, jobConfiguration.modelPath, jobConfiguration.modelType.toString, jobConfiguration.width, jobConfiguration.alpha, jobConfiguration.beta, jobConfiguration.iterations).asInstanceOf[Boolean] }))}

Page 49: Spark for Reactive Machine Learning: Building Intelligent Agents at Scale

Profiles with Style

Page 50: Spark for Reactive Machine Learning: Building Intelligent Agents at Scale

Hybrid Model learning

Features ModelModel Learning Pipeline

Page 51: Spark for Reactive Machine Learning: Building Intelligent Agents at Scale

Publishing Models

Page 52: Spark for Reactive Machine Learning: Building Intelligent Agents at Scale

Machine Learning Systems

Page 53: Spark for Reactive Machine Learning: Building Intelligent Agents at Scale

Publishing Models

Model Predictive ServicePublishing Process

Page 54: Spark for Reactive Machine Learning: Building Intelligent Agents at Scale

Detecting Fraud

False Negative

False Positive

Page 55: Spark for Reactive Machine Learning: Building Intelligent Agents at Scale

Model Metrics

val trainingSummary = model.summary val binarySummary = trainingSummary

.asInstanceOf[BinaryLogisticRegressionSummary]

binarySummary.roc roc.show() binarySummary.areaUnderROC

Page 56: Spark for Reactive Machine Learning: Building Intelligent Agents at Scale

Model Metricsval predictions = model.transform(testingData)

val evaluator = new BinaryClassificationEvaluator() .setLabelCol("label") .setRawPredictionCol("rawPrediction") .setMetricName("areaUnderPR")

val areaUnderPR = evaluator.evaluate(predictions)

Page 57: Spark for Reactive Machine Learning: Building Intelligent Agents at Scale

Building Lineages

val rawData: RawData val featureSet: Set[FeatureType] val model: ClassificationModel val modelMetrics: BinaryLogisticRegressionSummary

Page 58: Spark for Reactive Machine Learning: Building Intelligent Agents at Scale

Summary

Page 59: Spark for Reactive Machine Learning: Building Intelligent Agents at Scale

AgentsAutonomous Goal-oriented Capable of learning Reactive

Page 60: Spark for Reactive Machine Learning: Building Intelligent Agents at Scale

Machine Learning Systems

Page 61: Spark for Reactive Machine Learning: Building Intelligent Agents at Scale

Traits of Reactive Systems

Page 62: Spark for Reactive Machine Learning: Building Intelligent Agents at Scale

Reactive Strategies

Page 63: Spark for Reactive Machine Learning: Building Intelligent Agents at Scale

Reactive Machine Learning

Page 64: Spark for Reactive Machine Learning: Building Intelligent Agents at Scale

For Later

Page 65: Spark for Reactive Machine Learning: Building Intelligent Agents at Scale

@jeffksmithjr manning.com reactivemachinelearning.com medium.com/data-engineering

M A N N I N G

Jeff SmithUse the code opensanmu for 40% off!

Page 66: Spark for Reactive Machine Learning: Building Intelligent Agents at Scale

x.ai @xdotai [email protected] New York, New York

We’re hiring!

Page 67: Spark for Reactive Machine Learning: Building Intelligent Agents at Scale

Thank You!