Classificazione di documenti con Spark ML
L’avvento dei Big Data ha introdotto dei framework in grado di gestire l’elaborazione di grandi quantità di dati attraverso il calcolo distribuito. Parallelizzare l’elaborazione attraverso l’architettura Hadoop migliora le prestazioni dei modelli. Con il linguaggio Scala, utilizzato con il framework Apache Spark, si ottengono risultati molto performanti. La libreria Spark ML mette a disposizione molti modelli di Machine Learning (supervised e unsupervised). Grazie a questa libreria è possibile applicare delle tecniche di Ensemble per la classificazione di documenti.
4. APACHE SPARK
Elaborazione di grandi moli di dati su cluster
Supporta i linguaggi più diffusi in ambito statistico:
Python, R
Diverse librerie del mondo Java incorporate
Può essere eseguito:
• Autonomamente
• All'interno di YARN
4
5. APACHE SPARK - Componenti
5
Interfacce di basso livello
RDD Variabili distribuite
Interfacce strutturate
DataFrame DataSet SQL
Streaming
strutturato
Apprendimento
automatico
Librerie ed
ecosistema
6. APACHE SPARK – Map-Reduce
• Problema che può essere suddiviso in sotto-problemi
• Invio ai vari nodi del cluster i sotto-problemi e le operazioni
da effettuare
• I vari nodi risolvono i sotto-problemi
• Combino le soluzioni ai sotto-problemi
• Scrivo la soluzione
6
7. APACHE SPARK – Innovazione
Spark ha permesso di risolvere più velocemente alcuni
problemi usando di più la RAM, il cui prezzo è sceso.
7
8. APACHE SPARK – Linguaggi
• Nel mondo dell'analisi dei dati, Python ed R sono molto diffusi
• Spark supporta Python ed R
• L'efficienza di usare Python o R non è la stessa di Scala
8
9. SCALA
Spark è scritto in Scala
Kafka è scritto in Java e Scala
Concetti di Scala validi per programmazione distribuita
9
10. SCALA
Un linguaggio di programmazione moderno
Tipizzazione statica
Programmazione a oggetti e funzionale
Gira sulla Java Virtual Machine
10
12. Come acquisire un dataset con Apache Spark?
val employeesDataRaw : RDD[String] = sqlContext.read.text(filePathTraining)
.map(x => x.getString(0))
val rowEmployeesRDD: RDD[Row] = employeesDataRaw.map(_.split(";"))
.map(p => Row(p(0), p(1), p(2)))
Il risultato sarà un RDD che contiene tutte le righe del file acquisito
suddivise per colonne.
Data Preparation con Apache Spark - acquisizione dei dati
12
13. Acquisendo i dati in un RDD sarà possibile esplorarli,
verificarne la qualità ed effettuare operazioni di cleaning.
Gli RDD ci mettono a disposizione molte funzioni per
analizzare i dati:
https://spark.apache.org/docs/1.6.0/api/scala/index.html#org.apache.spark.rdd.R
DD
Data Preparation con Apache Spark - acquisizione dei dati
13
14. Feature transformation:
- trasformazione dei dati per migliorare l’accuratezza dell’algoritmo.
Feature extraction and feature engineering
- trasformazione dei dati grezzi in caratteristiche (features) indonee per il
modello.
Feature selection
- rimozione delle caratteristiche (features) non necessarie.
Estrarre, trasformare e selezionare le features
14
15. Il processo di Tokenization è utilizzato per acquisire da un testo dei termini
individuali (normalmente delle parole).
Un modo avanzato di eseguire il processo di tokenization è applicare le regular
expressions (regex).
Per approfondimenti: https://spark.apache.org/docs/1.6.0/ml-features.html#tokenizer
Feature Transformer - Tokenizer
15
17. Le Stop Words sono delle parole che devono essere escluse, poiché appaiono
frequentemente oppure non sono considerate importanti.
Si possono quindi utilizzare delle tecniche per rimuovere una lista di stop words.
Per approfondimenti: https://spark.apache.org/docs/1.6.0/ml-features.html#stopwordsremover
Feature Transformer - StopWordsRemover
17
21. Spark ML Pipeline - addestramento
Il metodo fit() permette di addestrare il modello.
val model = pipeline.fit(trainingDataDF)
Il modello sarà addestrato attraverso i dati contenuti in un
DataFrame.
21
23. Spark ML Model - predizione
Il metodo transform() permette di generare un DataFrame
contenente le predizioni.
val predictionDF = model.transform(testDataDF)
Il DataFrame restituito conterrà le stesse colonne mostrando altre
informazioni tra cui la predizione (label) per ogni riga.
23
24. Obiettivo: classificare diverse tipologie di documenti.
Come: Utilizzando un modello di classificazione addestrato con delle
parole chiave (features) che caratterizzano una specifica tipologia di
documento.
Tecnologia:
24
26. • Naive Bayes
• Gradient Boosting Tree
• Random Forest
Supervised learning
26
27. Supervised learning - Naive Bayes classifier
Il Naive Bayes classifier è un modello di classificazione che si basa sul teorema
bayesiano
Usando il teorema bayesiano, possiamo trovare la probabilità che A si verifichi
quando occorre B.
I predittori/caratteristiche devono essere indipendenti:
- la presenza di una particolare caratteristica (feature) non influisce su
un’altra.
27
28. Supervised learning - Naive Bayes classifier
Multinomial Naive Bayes:
Il più usato per problemi di classificazione dei documenti.
Le caratteristiche/predittori vengono usate dal classificatore come frequenza
delle parole presenti in un documento.
Bernoulli Naive Bayes:
Simile al multinomial naive bayes, ma I predittori sono variabili booleane.
Gaussian Naive Bayes:
Quando i predittori accettano soltanto valori continui (quindi non discreti),
questi valori possono essere campionati da una distribuzione gaussiana.
N.B. : Il Gaussian Naïve Bayes non è supportato da Spark 1.6.
28
31. Ensemble
Ensemble è un concetto di Machine Learning che corrisponde all’idea
di addestrare molteplici modelli usando lo stesso algoritmo di
apprendimento.
Molti learners, con lo stesso obiettivo, sono fusi tra loro per risolvere
uno specifico problema.
Bagging Random Forest;
Boosting Gradient Boosting.
31
32. Bagging
Bagging (Bootstrap Aggregation) è una tecnica utilizzata quando
abbiamo l’esigenza di ridurre la varianza di un albero decisionale.
Questo avviene tramite la creazione di molti subset di dati a partire dal
campione scelto in modo casuale.
La media di diversi alberi risulterà più robusta rispetto a un singolo
albero decisionale.
32
33. Boosting
Boosting è una tecnica di ensemble per creare una collezione di
predittori.
I learners vengono generati in modo sequenziale.
Ogni nuovo albero cercherà di risolvere gli errori a partire dal
precedente albero.
33
40. Obiettivo
A, B, C, E, F, H B, D, E, F, I, N
Individuare la tipologia dei documenti attraverso delle parole chiave.
A, B, E, F, H, S
40
C, D, H, E, F, S
41. Training set
A B C E F H, DOCTYPE1
A C E F H S, DOCTYPE1
B C E F H S, DOCTYPE1
B D E F I N, DOCTYPE2
D E F G I U, DOCTYPE2
B D E F I N, DOCTYPE2
A B C E F H, DOCTYPE1
A B C E F H, DOCTYPE1
B D E F I N, DOCTYPE1
B D F I M N, DOCTYPE2
B D E F I N, DOCTYPE2
A B E F H S, DOCTYPE1
A B C F H S, DOCTYPE1
…
41