Πώς να ξεκινήσετε με το Word2Vec - και μετά πώς να το κάνετε να λειτουργεί

Η ιδέα πίσω από το Word2Vec είναι πολύ απλή. Υποθέτουμε ότι η έννοια μιας λέξης μπορεί να συναχθεί από την εταιρεία που διατηρεί. Αυτό είναι ανάλογο με το ρητό, « δείξε μου τους φίλους σου και θα σου πω ποιος είσαι. "

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

Χρησιμοποιώντας αυτήν την υποκείμενη υπόθεση, μπορείτε να χρησιμοποιήσετε το Word2Vec για να εμφανίσετε παρόμοιες έννοιες, να βρείτε άσχετες έννοιες, να υπολογίσετε την ομοιότητα μεταξύ δύο λέξεων και πολλά άλλα!

Κάτω από την επιχείρηση

Σε αυτό το σεμινάριο, θα μάθετε πώς να χρησιμοποιείτε την εφαρμογή Gensim του Word2Vec και να το κάνετε πραγματικά να λειτουργεί. Έχω ακούσει εδώ και καιρό παράπονα για κακή απόδοση γενικά, αλλά είναι πραγματικά ένας συνδυασμός δύο πραγμάτων: (1) τα δεδομένα εισόδου σας και (2) οι ρυθμίσεις παραμέτρων σας .

Σημειώστε ότι οι αλγόριθμοι εκπαίδευσης στο πακέτο Gensim μεταφέρθηκαν στην πραγματικότητα από την αρχική εφαρμογή Word2Vec από την Google και επεκτάθηκαν με επιπλέον λειτουργικότητα.

Εισαγωγές και καταγραφή

Αρχικά, ξεκινάμε με τις εισαγωγές μας και καθιερώνουμε την υλοτομία:

# imports needed and loggingimport gzipimport gensim import logging
logging.basicConfig(format=’%(asctime)s : %(levelname)s : %(message)s’, level=logging.INFO)

Σύνολο δεδομένων

Η επόμενη εργασία μας είναι να βρούμε ένα πολύ καλό σύνολο δεδομένων. Το μυστικό για να λειτουργήσει πραγματικά το Word2Vec για εσάς είναι να έχετε πολλά και πολλά δεδομένα κειμένου στον σχετικό τομέα. Για παράδειγμα, εάν ο στόχος σας είναι να δημιουργήσετε ένα λεξικό συναισθημάτων, τότε η χρήση ενός συνόλου δεδομένων από τον ιατρικό τομέα ή ακόμη και η Wikipedia ενδέχεται να μην είναι αποτελεσματική. Επιλέξτε λοιπόν με σύνεση το σύνολο δεδομένων σας.

Για αυτό το σεμινάριο, θα χρησιμοποιήσω δεδομένα από το σύνολο δεδομένων OpinRank από κάποια από τις διδακτορικές μου εργασίες. Αυτό το σύνολο δεδομένων περιέχει πλήρεις κριτικές χρηστών για αυτοκίνητα και ξενοδοχεία. Έχω συγκεντρώσει συγκεκριμένα όλες τις κριτικές του ξενοδοχείου σε ένα μεγάλο αρχείο που είναι περίπου 97 MB συμπιεσμένο και 229 MB χωρίς συμπίεση. Θα χρησιμοποιήσουμε το συμπιεσμένο αρχείο για αυτό το σεμινάριο. Κάθε γραμμή σε αυτό το αρχείο αντιπροσωπεύει μια κριτική ξενοδοχείου.

Τώρα, ας ρίξουμε μια πιο προσεκτική ματιά σε αυτά τα δεδομένα παρακάτω εκτυπώνοντας την πρώτη γραμμή.

Θα πρέπει να δείτε τα εξής:

b"Oct 12 2009 \tNice trendy hotel location not too bad.\tI stayed in this hotel for one night. As this is a fairly new place some of the taxi drivers did not know where it was and/or did not want to drive there. Once I have eventually arrived at the hotel, I was very pleasantly surprised with the decor of the lobby/ground floor area. It was very stylish and modern. I found the reception's staff geeting me with 'Aloha' a bit out of place, but I guess they are briefed to say that to keep up the coroporate image.As I have a Starwood Preferred Guest member, I was given a small gift upon-check in. It was only a couple of fridge magnets in a gift box, but nevertheless a nice gesture.My room was nice and roomy, there are tea and coffee facilities in each room and you get two complimentary bottles of water plus some toiletries by 'bliss'.The location is not great. It is at the last metro stop and you then need to take a taxi, but if you are not planning on going to see the historic sites in Beijing, then you will be ok.I chose to have some breakfast in the hotel, which was really tasty and there was a good selection of dishes. There are a couple of computers to use in the communal area, as well as a pool table. There is also a small swimming pool and a gym area.I would definitely stay in this hotel again, but only if I did not plan to travel to central Beijing, as it can take a long time. The location is ok if you plan to do a lot of shopping, as there is a big shopping centre just few minutes away from the hotel and there are plenty of eating options around, including restaurants that serve a dog meat!\t\r\n"

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

Για να αποφευχθεί η σύγχυση, το πρόγραμμα εκμάθησης Word2Vec του Gensim λέει ότι πρέπει να περάσετε μια ακολουθία προτάσεων ως εισαγωγή στο Word2Vec. Ωστόσο, μπορείτε πραγματικά να περάσετε σε μια ολόκληρη κριτική ως πρόταση (δηλαδή, πολύ μεγαλύτερο μέγεθος κειμένου) εάν έχετε πολλά δεδομένα και δεν πρέπει να κάνει μεγάλη διαφορά. Στο τέλος, το μόνο που χρησιμοποιούμε είναι να πάρουμε όλες τις γειτονικές λέξεις για μια δεδομένη λέξη-στόχο.

Διαβάστε τα αρχεία σε μια λίστα

Τώρα που είχαμε μια κρυφή κορυφή του συνόλου δεδομένων μας, μπορούμε να το διαβάσουμε σε μια λίστα, ώστε να το μεταφέρουμε στο μοντέλο Word2Vec. Παρατηρήστε στον παρακάτω κώδικα ότι διαβάζω απευθείας το συμπιεσμένο αρχείο. Κάνω επίσης μια ήπια προεπεξεργασία των κριτικών χρησιμοποιώντας gensim.utils.simple_preprocess (line). Αυτό κάνει κάποια βασική προεπεξεργασία, όπως διακριτικοποίηση, πεζά γράμματα και ούτω καθεξής και επιστρέφει μια λίστα με διακριτικά (λέξεις). Η τεκμηρίωση αυτής της μεθόδου προεπεξεργασίας διατίθεται στον επίσημο ιστότοπο τεκμηρίωσης Gensim.

Εκπαίδευση του μοντέλου Word2Vec

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

Αφού δημιουργήσουμε το λεξιλόγιο, πρέπει απλώς να καλέσουμε train(...)για να ξεκινήσουμε την εκπαίδευση του μοντέλου Word2Vec. Πίσω από τα παρασκήνια εκπαιδεύουμε ένα απλό νευρωνικό δίκτυο με ένα μόνο κρυφό στρώμα. Αλλά στην πραγματικότητα δεν πρόκειται να χρησιμοποιήσουμε το νευρικό δίκτυο μετά την προπόνηση. Αντ 'αυτού, ο στόχος είναι να μάθουμε τα βάρη του κρυμμένου στρώματος. Αυτά τα βάρη είναι ουσιαστικά τα διανύσματα λέξεων που προσπαθούμε να μάθουμε.

Η εκπαίδευση στο σύνολο δεδομένων του Word2Vec OpinRank διαρκεί περίπου 10-15 λεπτά. οπότε παραμείνετε υπομονετικοί κατά την εκτέλεση του κώδικα σε αυτό το σύνολο δεδομένων

Το διασκεδαστικό μέρος - μερικά αποτελέσματα!

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

Ω, αυτό φαίνεται αρκετά καλό. Ας δούμε περισσότερα.

Παρόμοιο με το ευγενικό:

Παρόμοια με τη Γαλλία:

Παρόμοιο με σοκαρισμένο:

Συνολικά, τα αποτελέσματα έχουν νόημα. Όλες οι σχετικές λέξεις τείνουν να χρησιμοποιούνται στο ίδιο πλαίσιο για τη δεδομένη λέξη ερωτήματος.

Now you could even use Word2Vec to compute similarity between two words in the vocabulary by invoking the similarity(...) function and passing in the relevant words.

Under the hood, the above three snippets compute the cosine similarity between the two specified words using word vectors of each. From the scores above, it makes sense that dirty is highly similar to smelly but dirty is dissimilar to clean. If you do a similarity between two identical words, the score will be 1.0 as the range of the cosine similarity score will always be between [0.0-1.0]. You can read more about cosine similarity scoring here.

You will find more examples of how you could use Word2Vec in my Jupyter Notebook.

A closer look at the parameter settings

To train the model earlier, we had to set some parameters. Now, let’s try to understand what some of them mean. For reference, this is the command that we used to train the model.

model = gensim.models.Word2Vec (documents, size=150, window=10, min_count=2, workers=10)

size

The size of the dense vector that is to represent each token or word. If you have very limited data, then size should be a much smaller value. If you have lots of data, its good to experiment with various sizes. A value of 100–150 has worked well for me for similarity lookups.

window

The maximum distance between the target word and its neighboring word. If your neighbor’s position is greater than the maximum window width to the left or the right, then some neighbors are not considered as being related to the target word. In theory, a smaller window should give you terms that are more related. If you have lots of data, then the window size should not matter too much, as long as its not overly narrow or overly broad. If you are not too sure about this, just use the default value.

min_count

Minimium frequency count of words. The model would ignore words that do not statisfy the min_count. Extremely infrequent words are usually unimportant, so its best to get rid of those. Unless your dataset is really tiny, this does not really affect the model.

workers

How many threads to use behind the scenes?

When should you use Word2Vec?

There are many application scenarios for Word2Vec. Imagine if you need to build a sentiment lexicon. Training a Word2Vec model on large amounts of user reviews helps you achieve that. You have a lexicon for not just sentiment, but for most words in the vocabulary.

Beyond raw unstructured text data, you could also use Word2Vec for more structured data. For example, if you had tags for a million StackOverflow questions and answers, you could find related tags and recommend those for exploration. You can do this by treating each set of co-occuring tags as a “sentence” and train a Word2Vec model on this data. Granted, you still need a large number of examples to make it work.

Source code

Για να χρησιμοποιήσετε το Σημειωματάριο Jupyter αυτού του σεμιναρίου, μπορείτε να μεταβείτε στο repo GitHub και να ακολουθήσετε τις οδηγίες σχετικά με τον τρόπο λειτουργίας του φορητού υπολογιστή τοπικά. Σκοπεύω να ανεβάσω τα προ-εκπαιδευμένα διανύσματα που θα μπορούσαν να χρησιμοποιηθούν για τη δική σας δουλειά.

Για να ακολουθήσετε το άρθρο της Kavita μέσω email, εγγραφείτε στο blog της.

Αυτό το άρθρο δημοσιεύθηκε αρχικά στο kavita-ganesan.com