Νέο πλαίσιο μηχανικής μάθησης ανοιχτού κώδικα γραμμένο σε Java PlatoBlockchain Data Intelligence. Κάθετη αναζήτηση. Ολα συμπεριλαμβάνονται.

Νέο πλαίσιο μηχανικής μάθησης ανοιχτού κώδικα γραμμένο σε Java

Είμαι στην ευχάριστη θέση να ανακοινώσω ότι το Datumbox Machine Learning Framework είναι πλέον ανοιχτό υπό την GPL 3.0 και μπορείτε να κάνετε λήψη του κώδικά του από Github!

Τι είναι αυτό το Πλαίσιο;

Η Πλαίσιο μηχανικής μάθησης Datumbox είναι ένα πλαίσιο ανοιχτού κώδικα γραμμένο σε Java που επιτρέπει την ταχεία ανάπτυξη μοντέλων μηχανικής μάθησης και στατιστικών εφαρμογών. Είναι ο κώδικας που ενεργοποιεί αυτήν τη στιγμή το Datumbox API. Ο κύριος στόχος του πλαισίου είναι να συμπεριλάβει μεγάλο αριθμό αλγορίθμων μηχανικής μάθησης και στατιστικών μεθόδων και να μπορεί να χειρίζεται σύνολα δεδομένων μικρού μεσαίου μεγέθους. Παρόλο που το πλαίσιο στοχεύει να βοηθήσει στην ανάπτυξη μοντέλων από διάφορους τομείς, παρέχει επίσης εργαλεία που είναι ιδιαίτερα χρήσιμα σε εφαρμογές Επεξεργασίας Φυσικής Γλώσσας και Ανάλυσης Κειμένου.

Τι τύποι μοντέλων/αλγορίθμων υποστηρίζονται;

Το πλαίσιο χωρίζεται σε πολλά επίπεδα, όπως η Μηχανική Μάθηση, η Στατιστική, τα Μαθηματικά, οι Αλγόριθμοι και τα Βοηθητικά προγράμματα. Κάθε ένα από αυτά παρέχει μια σειρά τάξεων που χρησιμοποιούνται για την εκπαίδευση μοντέλων μηχανικής εκμάθησης. Τα δύο πιο σημαντικά επίπεδα είναι το Statistics και το Machine Learning.

Το επίπεδο Statistics παρέχει κλάσεις για τον υπολογισμό περιγραφικών στατιστικών, την εκτέλεση διαφόρων τύπων δειγματοληψίας, την εκτίμηση CDF και PDF από κοινώς χρησιμοποιούμενες κατανομές πιθανοτήτων και την εκτέλεση περισσότερων από 35 παραμετρικών και μη παραμετρικών δοκιμών. Τέτοιοι τύποι κλάσεων είναι συνήθως απαραίτητοι κατά την εκτέλεση επεξηγηματικής ανάλυσης δεδομένων, δειγματοληψίας και επιλογής χαρακτηριστικών.

Το επίπεδο Machine Learning παρέχει κλάσεις που μπορούν να χρησιμοποιηθούν σε μεγάλο αριθμό προβλημάτων, όπως ταξινόμηση, παλινδρόμηση, ανάλυση συμπλέγματος, μοντελοποίηση θεμάτων, μείωση διαστάσεων, επιλογή χαρακτηριστικών, εκμάθηση συνόλου και συστήματα συστάσεων. Ακολουθούν μερικοί από τους υποστηριζόμενους αλγόριθμους: LDA, Max Entropy, Naive Bayes, SVM, Bootstrap Aggregating, Adaboost, Kmeans, Hierarchical Clustering, Dirichlet Process Mixture Models, Softmax Regression, Ordinal Regression, Linear Regression, Stepwise Regression, PCA and more Regression.

Datumbox Framework VS Mahout VS Scikit-Learn

Τόσο το Mahout όσο και το Scikit-Learn είναι εξαιρετικά έργα και και τα δύο έχουν εντελώς διαφορετικούς στόχους. Ο Mahout υποστηρίζει μόνο έναν πολύ περιορισμένο αριθμό αλγορίθμων που μπορούν να παραλληλιστούν και επομένως να χρησιμοποιήσουν το πλαίσιο Map-Reduce του Hadoop για να χειριστούν Big Data. Από την άλλη το Scikit-Learn υποστηρίζει μεγάλο αριθμό αλγορίθμων αλλά δεν μπορεί να χειριστεί τεράστιο όγκο δεδομένων. Επιπλέον, έχει αναπτυχθεί σε Python, η οποία είναι μια εξαιρετική γλώσσα για πρωτότυπα και επιστημονικά υπολογιστικά, αλλά δεν είναι η προσωπική μου αγαπημένη για ανάπτυξη λογισμικού.

Το πλαίσιο Datumbox βρίσκεται στη μέση των δύο λύσεων. Προσπαθεί να υποστηρίξει μεγάλο αριθμό αλγορίθμων και είναι γραμμένο σε Java. Αυτό σημαίνει ότι μπορεί να ενσωματωθεί ευκολότερα στον κώδικα παραγωγής, μπορεί να προσαρμοστεί ευκολότερα για να μειωθεί η κατανάλωση μνήμης και μπορεί να χρησιμοποιηθεί σε συστήματα πραγματικού χρόνου. Τέλος, παρόλο που επί του παρόντος το Datumbox Framework είναι ικανό να χειρίζεται μεσαίου μεγέθους σύνολα δεδομένων, είναι στα σχέδιά μου να το επεκτείνω για να χειρίζομαι σύνολα δεδομένων μεγάλου μεγέθους.

Πόσο σταθερό είναι;

Οι πρώτες εκδόσεις του πλαισίου (έως 0.3.x) αναπτύχθηκαν τον Αύγουστο και τον Σεπτέμβριο του 2013 και γράφτηκαν σε PHP (yeap!). Τον Μάιο και τον Ιούνιο του 2014 (εκδόσεις 0.4.x), το πλαίσιο γράφτηκε ξανά σε Java και βελτιώθηκε με πρόσθετες δυνατότητες. Και οι δύο κλάδοι δοκιμάστηκαν σε μεγάλο βαθμό σε εμπορικές εφαρμογές, συμπεριλαμβανομένου του Datumbox API. Η τρέχουσα έκδοση είναι 0.5.0 και φαίνεται αρκετά ώριμη ώστε να κυκλοφορήσει ως η πρώτη δημόσια άλφα έκδοση του πλαισίου. Τούτου λεχθέντος, είναι σημαντικό να σημειωθεί ότι ορισμένες λειτουργίες του πλαισίου ελέγχονται πιο διεξοδικά από άλλες. Επιπλέον, δεδομένου ότι αυτή η έκδοση είναι alpha, θα πρέπει να περιμένετε δραστικές αλλαγές στις μελλοντικές εκδόσεις.

Γιατί το έγραψα και γιατί το έκανα ανοιχτό κώδικα;

Η ενασχόλησή μου με τη Μηχανική Μάθηση και το NLP χρονολογείται από το 2009 όταν συνίδρυσα το WebSEOAnalytics.com. Από τότε αναπτύσσω υλοποιήσεις διαφόρων αλγορίθμων μηχανικής μάθησης για διάφορα έργα και εφαρμογές. Δυστυχώς, οι περισσότερες από τις αρχικές υλοποιήσεις ήταν πολύ συγκεκριμένες για προβλήματα και δύσκολα θα μπορούσαν να χρησιμοποιηθούν σε οποιοδήποτε άλλο πρόβλημα. Τον Αύγουστο του 2013 αποφάσισα να ξεκινήσω το Datumbox ως προσωπικό έργο και να αναπτύξω ένα πλαίσιο που παρέχει τα εργαλεία για την ανάπτυξη μοντέλων μηχανικής μάθησης με επίκεντρο τον τομέα του NLP και της Ταξινόμησης Κειμένων. Στόχος μου ήταν να δημιουργήσω ένα πλαίσιο που θα επαναχρησιμοποιηθεί στο μέλλον για την ανάπτυξη μοντέλων γρήγορης μηχανικής εκμάθησης, ενσωματώνοντάς το σε έργα που απαιτούν στοιχεία μηχανικής εκμάθησης ή το προσφέρουν ως υπηρεσία (Μηχανική μάθηση ως υπηρεσία).

Και εδώ είμαι τώρα, αρκετές γραμμές κώδικα αργότερα, με ανοιχτό κώδικα το έργο. Γιατί; Η ειλικρινής απάντηση είναι ότι σε αυτό το σημείο, δεν είναι στα σχέδιά μου να περάσω από ένα ταξίδι «ας χτίσουμε μια νέα εκκίνηση». Ταυτόχρονα ένιωσα ότι δεν έχει νόημα να κρατήσω τον κωδικό στον σκληρό μου δίσκο σε περίπτωση που τον χρειαστώ στο μέλλον. Οπότε το μόνο λογικό που έπρεπε να κάνουμε ήταν να το ανοίξουμε. 🙂

Τεκμηρίωση?

Αν διαβάσετε τις δύο προηγούμενες παραγράφους, μάλλον θα πρέπει να το δείτε να έρχεται. Δεδομένου ότι το πλαίσιο δεν αναπτύχθηκε έχοντας κατά νου ότι θα το μοιραστώ με άλλους, η τεκμηρίωση είναι κακή/ανύπαρκτη. Οι περισσότερες κλάσεις και δημόσιες μέθοδοι δεν σχολιάζονται σωστά και δεν υπάρχει έγγραφο που να περιγράφει την αρχιτεκτονική του κώδικα. Ευτυχώς όλα τα ονόματα των κλάσεων είναι αυτονόητα και το πλαίσιο παρέχει δοκιμές JUnit για κάθε δημόσια μέθοδο και αλγόριθμο και αυτά μπορούν να χρησιμοποιηθούν ως παραδείγματα για τον τρόπο χρήσης του κώδικα. Ελπίζω ότι με τη βοήθεια της κοινότητας θα φτιάξουμε μια σωστή τεκμηρίωση, οπότε βασίζομαι σε εσάς!

Τρέχοντες περιορισμοί και μελλοντική ανάπτυξη

Όπως σε κάθε λογισμικό (και ειδικά τα έργα ανοιχτού κώδικα σε έκδοση alpha), το Datumbox Machine Learning Framework έχει τους δικούς του μοναδικούς και αξιολάτρευτους περιορισμούς. Ας τα ψάξουμε:

  1. Απόδειξη με έγγραφα: Όπως αναφέρθηκε προηγουμένως, η τεκμηρίωση είναι φτωχή.
  2. Χωρίς Multithreading: Δυστυχώς το πλαίσιο δεν υποστηρίζει επί του παρόντος Multithreading. Φυσικά θα πρέπει να σημειώσουμε ότι δεν μπορούν να παραλληλιστούν όλοι οι αλγόριθμοι μηχανικής μάθησης.
  3. Παραδείγματα κώδικα: Δεδομένου ότι το πλαίσιο μόλις δημοσιεύτηκε, δεν μπορείτε να βρείτε παραδείγματα κώδικα στον ιστό εκτός από αυτά που παρέχονται από το πλαίσιο με τη μορφή δοκιμών JUnit.
  4. Δομή κώδικα: Η δημιουργία μιας σταθερής αρχιτεκτονικής για κάθε μεγάλο έργο είναι πάντα προκλητική, πόσο μάλλον όταν έχετε να αντιμετωπίσετε αλγόριθμους Μηχανικής Μάθησης που διαφέρουν σημαντικά (επιβλεπόμενη μάθηση, μάθηση χωρίς επίβλεψη, αλγόριθμοι μείωσης διαστάσεων κ.λπ.).
  5. Μοντέλο Εμμονής και Μεγάλες Συλλογές Δεδομένων: Επί του παρόντος, τα μοντέλα μπορούν να εκπαιδευτούν και να αποθηκευτούν είτε σε αρχεία στο δίσκο είτε σε βάσεις δεδομένων MongoDB. Για να μπορέσετε να χειριστείτε μεγάλο όγκο δεδομένων, πρέπει να διερευνηθούν άλλες λύσεις. Για παράδειγμα MapDB φαίνεται καλός υποψήφιος για την αποθήκευση δεδομένων και παραμέτρων κατά την εκπαίδευση. Επιπλέον, είναι σημαντικό να αφαιρέσετε οποιοδήποτε 3rd βιβλιοθήκες πάρτι που χειρίζονται επί του παρόντος την ανθεκτικότητα των μοντέλων και αναπτύσσουν μια καλύτερη στεγνή και αρθρωτή λύση.
  6. Νέοι αλγόριθμοι/δοκιμές/μοντέλα: Υπάρχουν τόσες πολλές εξαιρετικές τεχνικές που δεν υποστηρίζονται επί του παρόντος (ειδικά για την ανάλυση χρονοσειρών).

Δυστυχώς όλα τα παραπάνω είναι πάρα πολλή δουλειά και υπάρχει τόσο λίγος χρόνος. Γι' αυτό, αν σας ενδιαφέρει το έργο, προχωρήστε και δώστε μου ένα χέρι με οποιοδήποτε από τα παραπάνω. Επιπλέον, θα ήθελα πολύ να ακούσω από άτομα που έχουν εμπειρία σε έργα ανοιχτού κώδικα μεσαίας-μεγάλης πηγής και θα μπορούσαν να παρέχουν συμβουλές για το πώς να τα διαχειρίζεσαι. Επιπλέον, θα ήμουν ευγνώμων σε κάθε γενναία ψυχή που θα τολμούσε να εξετάσει τον κώδικα και να τεκμηριώσει ορισμένες τάξεις ή δημόσιες μεθόδους. Τελευταίο, αλλά όχι λιγότερο σημαντικό, αν χρησιμοποιείτε το πλαίσιο για οτιδήποτε ενδιαφέρον, στείλτε μου μια γραμμή ή μοιραστείτε το με μια ανάρτηση ιστολογίου.

Τέλος, θα ήθελα να ευχαριστήσω την αγάπη μου Κυριακή που με ανέχτηκε ενώ έγραφα αυτό το έργο, τον φίλο μου και super-ninja-Java-developer Ελευθέριος Μπαμπαλατάκης για τη βοήθεια σε σημαντικά ζητήματα Java και εσάς για τη συμμετοχή σας στο έργο. Ανυπομονώ για τα σχόλιά σας.

Σφραγίδα ώρας:

Περισσότερα από Databox