Μάθετε TensorFlow, το μοντέλο Word2Vec και τον αλγόριθμο TSNE χρησιμοποιώντας ροκ συγκροτήματα

Η εκμάθηση του «τρόπου TensorFlow» για τη δημιουργία ενός νευρικού δικτύου μπορεί να φαίνεται σαν ένα μεγάλο εμπόδιο για να ξεκινήσετε με τη μηχανική μάθηση. Σε αυτό το σεμινάριο, θα το κάνουμε βήμα προς βήμα και θα εξηγήσουμε όλα τα κρίσιμα στοιχεία που εμπλέκονται καθώς δημιουργούμε ένα μοντέλο Bands2Vec χρησιμοποιώντας δεδομένα Pitchfork από την Kaggle.

Για τον πλήρη κωδικό, ρίξτε μια ματιά στη σελίδα GitHub.

Το μοντέλο Word2Vec

Τα νευρικά δίκτυα καταναλώνουν αριθμούς και παράγουν αριθμούς. Είναι πολύ καλοί σε αυτό. Αλλά δώστε τους λίγο κείμενο, και θα ρίξουν ένα ξέσπασμα και δεν θα κάνουν τίποτα απομακρυσμένο ενδιαφέρον.

Εάν είναι δουλειά του νευρικού δικτύου να μειώσουμε τους αριθμούς και να παράγουμε σημαντική παραγωγή, τότε είναι δική μας δουλειά να διασφαλίσουμε ότι ό, τι κι αν ταΐζουμε, έχει νόημα. Αυτή η αναζήτηση για μια ουσιαστική αναπαράσταση πληροφοριών γέννησε το μοντέλο Word2Vec.

Μία προσέγγιση για την εργασία με λέξεις είναι να σχηματιστούν διανύσματα κωδικοποιημένα εν θερμώ. Δημιουργήστε μια μακρά (ο αριθμός των διακριτών λέξεων στο λεξιλόγιο μας) λίστα μηδενικών και κάθε λέξη δείχνει ένα μοναδικό ευρετήριο αυτής της λίστας. Εάν βλέπουμε αυτήν τη λέξη, κάντε αυτόν τον κατάλογο στη λίστα έναν αριθμό.

Ενώ αυτή η προσέγγιση λειτουργεί, απαιτεί πολύ χώρο και στερείται σημασίας. Το «Καλό» και το «Εξαιρετικό» είναι παρόμοιο με το «Duck» και το «Blackhole». Αν μόνο υπήρχε ένας τρόπος να διανύσουμε τις λέξεις έτσι ώστε να διατηρήσουμε αυτήν την ομοιότητα με βάση τα συμφραζόμενα…

Ευτυχώς, υπάρχει τρόπος!

Χρησιμοποιώντας ένα νευρωνικό δίκτυο, μπορούμε να παράγουμε «ενσωματώσεις» των λέξεων μας. Πρόκειται για διανύσματα που αντιπροσωπεύουν κάθε μοναδική λέξη που εξάγεται από τα βάρη των συνδέσεων εντός του δικτύου μας.

Αλλά το ερώτημα παραμένει: πώς μπορούμε να βεβαιωθούμε ότι έχουν νόημα; Η απάντηση: τροφοδοσία σε ζεύγη λέξεων ως λέξη στόχος και λέξη περιβάλλοντος. Κάνετε αυτό αρκετές φορές, ρίχνοντας και μερικά κακά παραδείγματα, και το νευρικό δίκτυο αρχίζει να μαθαίνει ποιες λέξεις εμφανίζονται μαζί και πώς αυτό σχηματίζει σχεδόν ένα γράφημα. Σαν ένα κοινωνικό δίκτυο λέξεων που διασυνδέονται με περιβάλλοντα. «Καλό» πηγαίνει στο «χρήσιμο» που πηγαίνει στο «φροντίδα» και ούτω καθεξής. Ο στόχος μας είναι να τροφοδοτήσουμε αυτά τα δεδομένα στο νευρωνικό δίκτυο.

Μία από τις πιο συνηθισμένες προσεγγίσεις είναι το μοντέλο Skipgram, δημιουργώντας αυτές τις αντιστοιχίσεις περιβάλλοντος-στόχου με βάση τη μετακίνηση ενός παραθύρου σε ένα σύνολο δεδομένων κειμένου. Τι γίνεται όμως αν τα δεδομένα μας δεν είναι προτάσεις, αλλά εξακολουθούμε να έχουμε σημασία στα συμφραζόμενα;

Σε αυτό το σεμινάριο, οι λέξεις μας είναι ονόματα καλλιτεχνών και τα περιεχόμενά μας είναι είδη και μέσες βαθμολογίες κριτικής. Θέλουμε ο καλλιτέχνης Α να είναι κοντά στον καλλιτέχνη Β εάν μοιράζεται ένα είδος και έχει μέση βαθμολογία κριτικής που είναι παρόμοια. Ας ξεκινήσουμε λοιπόν.

Δημιουργία του συνόλου δεδομένων μας

Το Pitchfork είναι ένα διαδικτυακό αμερικανικό μουσικό περιοδικό που καλύπτει κυρίως ροκ, ανεξάρτητη και νέα μουσική. Τα δεδομένα που κυκλοφόρησαν στο Kaggle αποσπάστηκαν από τον ιστότοπό τους και περιέχουν πληροφορίες όπως κριτικές, είδη και ημερομηνίες που συνδέονται με κάθε καλλιτέχνη.

Ας δημιουργήσουμε μια τάξη καλλιτεχνών και λεξικό για να αποθηκεύσουμε όλες τις χρήσιμες πληροφορίες που θέλουμε.

Μεγάλος! Τώρα θέλουμε να κατασκευάσουμε τις αντιστοιχίσεις στόχου-πλαισίου με βάση το είδος και τη μέση βαθμολογία κριτικής. Για να το κάνουμε αυτό, θα δημιουργήσουμε δύο λεξικά: ένα για τα διαφορετικά μοναδικά είδη και ένα για τα σκορ (διακριτά σε ακέραιους αριθμούς).

Θα προσθέσουμε όλους τους καλλιτέχνες μας στο αντίστοιχο είδος και τη μέση βαθμολογία σε αυτά τα λεξικά για χρήση αργότερα κατά τη δημιουργία ζευγών καλλιτεχνών.

Ένα τελευταίο βήμα πριν βυθίσουμε τον κώδικα TensorFlow: δημιουργία παρτίδας! Η παρτίδα είναι σαν ένα δείγμα δεδομένων που θα χρησιμοποιήσει το νευρωνικό μας δίκτυο για κάθε εποχή. Μια εποχή είναι ένα σκούπισμα στο νευρικό δίκτυο σε μια φάση προπόνησης. Θέλουμε να δημιουργήσουμε δύο ευέλικτες συστοιχίες. Θα περιέχει τον ακόλουθο κωδικό:

TensorFlow

Υπάρχουν αμέτρητα μαθήματα TensorFlow και πηγές γνώσης εκεί έξω. Οποιοδήποτε από αυτά τα εξαιρετικά άρθρα θα σας βοηθήσει καθώς και την τεκμηρίωση. Ο ακόλουθος κώδικας βασίζεται σε μεγάλο βαθμό στον οδηγό word2vec από τους ίδιους τους ανθρώπους του TensorFlow. Ας ελπίσουμε ότι μπορώ να απομυθοποιήσω μερικά από αυτά και να τα βράσω στα βασικά.

Το πρώτο βήμα είναι η κατανόηση της παράστασης «γράφημα». Αυτό είναι εξαιρετικά χρήσιμο για τις απεικονίσεις του TensorBoard και για τη δημιουργία μιας διανοητικής εικόνας των ροών δεδομένων εντός του νευρικού δικτύου.

Αφιερώστε λίγο χρόνο για να διαβάσετε τον κώδικα και τα παρακάτω σχόλια. Πριν τροφοδοτήσουμε δεδομένα σε ένα νευρωνικό δίκτυο, πρέπει να προετοιμάσουμε όλα τα μέρη που πρόκειται να χρησιμοποιήσουμε. Τα σύμβολα κράτησης θέσης είναι τα στοιχεία που λαμβάνουν ό, τι δίνουμε το «feed_dict». Οι μεταβλητές είναι μεταβλητά μέρη του γραφήματος που τελικά θα τροποποιήσουμε. Το πιο σημαντικό μέρος του μοντέλου μας είναι η λειτουργία απώλειας. Είναι η βαθμολογία του πόσο καλά κάναμε και ο χάρτης θησαυρού για το πώς μπορούμε να βελτιωθούμε.

Η εκτίμηση αντίθεσης θορύβου (NCE) είναι μια λειτουργία απώλειας. Συνήθως θα χρησιμοποιούσαμε cross-εντροπία και softmax, αλλά στον κόσμο της επεξεργασίας φυσικής γλώσσας, όλες οι τάξεις μας αντιστοιχούν σε κάθε μοναδική λέξη.

Υπολογιστικά, αυτό είναι κακό. Το NCE αλλάζει τη διαμόρφωση του προβλήματος από πιθανότητες κλάσεων σε εάν η αντιστοίχιση-στόχου-περιβάλλοντος είναι σωστή (μια δυαδική ταξινόμηση). Παίρνει ένα πραγματικό ζεύγος και στη συνέχεια δείγματα για να πάρει κακά ζευγάρια, η συνεχής num_sampledελέγχει αυτό. Το νευρικό μας δίκτυο μαθαίνει να διακρίνει ανάμεσα σε αυτά τα καλά και τα κακά ζευγάρια. Τελικά, μαθαίνει τα πλαίσια! Μπορείτε να διαβάσετε περισσότερα για το NCE και πώς λειτουργεί εδώ.

Εκτελέστε το νευρικό δίκτυο

Τώρα που όλα έχουν ρυθμιστεί όμορφα, πρέπει απλώς να πατήσουμε το μεγάλο πράσινο κουμπί «go» και να στριφογυρίσουμε τους αντίχειρές μας για λίγο.

Οπτικοποίηση με χρήση TSNE

Εντάξει, δεν έχουμε τελειώσει. Έχουμε τώρα πλούσια σε περιβάλλοντα, διαστατικά διανύσματα 64 για τους καλλιτέχνες μας, αλλά ίσως είναι πάρα πολλές διαστάσεις για να απεικονίσουμε πραγματικά τη χρησιμότητά του.

Τυχεροί για εμάς μπορούμε να σκουπίσουμε αυτές τις πληροφορίες σε δύο διαστάσεις διατηρώντας ταυτόχρονα τόσες από τις ιδιότητες που είχαν οι 64 διαστάσεις! Αυτό είναι T-κατανεμημένο Stochastic Neighbor Embedding, ή TSNE για συντομία. Αυτό το βίντεο κάνει εξαιρετική δουλειά για να εξηγήσει την κύρια ιδέα πίσω από το TSNE, αλλά θα προσπαθήσω να δώσω μια ευρεία επισκόπηση.

Το TSNE είναι μια προσέγγιση για τη μείωση της διαστάσεων που διατηρεί τις ομοιότητες (όπως η ευκλείδη απόσταση) υψηλότερων διαστάσεων. Για να γίνει αυτό, δημιουργεί πρώτα έναν πίνακα ομοιότητας από σημείο σε σημείο που υπολογίζεται χρησιμοποιώντας μια κανονική κατανομή. Το κέντρο της διανομής είναι το πρώτο σημείο και η ομοιότητα του δεύτερου σημείου είναι η τιμή της κατανομής στην απόσταση μεταξύ των σημείων μακριά από το κέντρο της διανομής.

Then we project randomly onto the dimension below and do exactly the same process using a t-distribution. Now we have two matrices of point-to-point similarities. The algorithm then slowly moves the points in the lower dimension to try and make it look like the matrix for the higher dimension where the similarities were preserved. And repeat. Thankfully, Sci-kit Learn has a function which can do the number crunching for us.

The Results

The amazing aspect of these embeddings is that, just like vectors, they support mathematical operations. The classic example being: King — Man + Woman = Queen , or at least very close to it. Let’s try an example.

Πάρτε τις χαμηλές διαστάσεις ενσωματώσεις του Coil, μιας μπάντας με τα ακόλουθα είδη [‘electronic’, ‘experimental', ‘rock’]και της μέσης βαθμολογίας 7.9. Τώρα αφαιρέστε τις χαμηλές διαστάσεις ενσωματώσεις του Elder Ones, μια μπάντα με είδη ['electronic']και το μέσο σκορ 7.8. Με αυτήν τη διαφορά ενσωμάτωσης, βρείτε τα πλησιέστερα συγκροτήματα σε αυτό και εκτυπώστε τα ονόματα και τα είδη τους.

Artist: black lips, Mean Score: 7.48, Genres: ['rock', 'rock', 'rock', 'rock', 'rock']
Artist: crookers, Mean Score: 5.5, Genres: ['electronic']
Artist: guided by voices, Mean Score: 7.23043478261, Genres: ['rock', 'rock', 'rock', 'rock', 'rock', 'rock', 'rock', 'rock', 'rock', 'rock', 'rock', 'rock', 'rock', 'rock', 'rock', 'rock', 'rock', 'rock', 'rock', 'rock', 'rock', 'rock', 'rock']

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