Ενσωμάτωση λέξεων και μοντέλο Word2Vec με Παράδειγμα
Τι είναι η ενσωμάτωση λέξεων;
Ενσωμάτωση λέξεων είναι ένας τύπος αναπαράστασης λέξεων που επιτρέπει στους αλγόριθμους μηχανικής μάθησης να κατανοούν λέξεις με παρόμοια σημασία. Είναι μια τεχνική μοντελοποίησης γλώσσας και εκμάθησης χαρακτηριστικών για την αντιστοίχιση λέξεων σε διανύσματα πραγματικών αριθμών χρησιμοποιώντας νευρωνικά δίκτυα, πιθανολογικά μοντέλα ή μείωση διαστάσεων στον πίνακα συν-εμφάνισης λέξεων. Ορισμένα μοντέλα ενσωμάτωσης λέξεων είναι το Word2vec (Google), το Glove (Στάνφορντ) και το πιο γρήγορο (Facebook).
Η ενσωμάτωση λέξεων ονομάζεται επίσης κατανεμημένο σημασιολογικό μοντέλο ή κατανεμημένο αντιπροσωπευόμενο ή σημασιολογικό διανυσματικό χώρο ή μοντέλο διανυσματικού χώρου. Καθώς διαβάζετε αυτά τα ονόματα, συναντάτε τη λέξη semantic που σημαίνει κατηγοριοποίηση παρόμοιων λέξεων μαζί. Για παράδειγμα, φρούτα όπως μήλο, μάνγκο, μπανάνα πρέπει να τοποθετούνται κοντά, ενώ τα βιβλία θα είναι πολύ μακριά από αυτές τις λέξεις. Με μια ευρύτερη έννοια, η ενσωμάτωση λέξεων θα δημιουργήσει το διάνυσμα των φρούτων που θα τοποθετηθούν μακριά από τη διανυσματική αναπαράσταση των βιβλίων.
Πού χρησιμοποιείται το Word Embedding;
Η ενσωμάτωση λέξεων βοηθά στη δημιουργία χαρακτηριστικών, τη ομαδοποίηση εγγράφων, την ταξινόμηση κειμένου και τις εργασίες επεξεργασίας φυσικής γλώσσας. Ας τις απαριθμήσουμε και ας συζητήσουμε για καθεμία από αυτές τις εφαρμογές.
- Υπολογίστε παρόμοιες λέξεις: Η ενσωμάτωση λέξεων χρησιμοποιείται για να προτείνει παρόμοιες λέξεις με τη λέξη που υποβάλλεται στο μοντέλο πρόβλεψης. Μαζί με αυτό προτείνει και ανόμοιες λέξεις, καθώς και τις πιο συνηθισμένες λέξεις.
- Δημιουργήστε μια ομάδα σχετικών λέξεων: Χρησιμοποιείται για σημασιολογική ομαδοποίηση που ομαδοποιεί πράγματα παρόμοιων χαρακτηριστικών μαζί και ανόμοια μακριά.
- Δυνατότητα ταξινόμησης κειμένου: Το κείμενο αντιστοιχίζεται σε πίνακες διανυσμάτων που τροφοδοτούνται στο μοντέλο για εκπαίδευση καθώς και πρόβλεψη. Τα μοντέλα ταξινομητών που βασίζονται σε κείμενο δεν μπορούν να εκπαιδευτούν στη συμβολοσειρά, επομένως αυτό θα μετατρέψει το κείμενο σε μορφή εκπαιδεύσιμη από μηχανή. Περαιτέρω τα χαρακτηριστικά της οικοδόμησης σημασιολογικής βοήθειας στην ταξινόμηση βάσει κειμένου.
- Ομαδοποίηση εγγράφων: είναι μια άλλη εφαρμογή όπου το Word Embedding Word2vec χρησιμοποιείται ευρέως
- Επεξεργασία φυσικής γλώσσας: Υπάρχουν πολλές εφαρμογές όπου η ενσωμάτωση λέξεων είναι χρήσιμη και κερδίζει τις φάσεις εξαγωγής χαρακτηριστικών, όπως μέρη της προσθήκης ετικετών ομιλίας, της συναισθηματικής ανάλυσης και της συντακτικής ανάλυσης. Τώρα έχουμε κάποιες γνώσεις για την ενσωμάτωση λέξεων. Κάποιο φως ρίχνεται επίσης σε διαφορετικά μοντέλα για την υλοποίηση της ενσωμάτωσης λέξεων. Όλο αυτό το σεμινάριο Ενσωμάτωσης Word επικεντρώνεται σε ένα από τα μοντέλα (Word2vec).
Τι είναι το Word2vec;
Word2vec είναι μια τεχνική/μοντέλο για την παραγωγή ενσωμάτωσης λέξεων για καλύτερη αναπαράσταση λέξεων. Είναι μια μέθοδος επεξεργασίας φυσικής γλώσσας που καταγράφει έναν μεγάλο αριθμό ακριβών συντακτικών και σημασιολογικών σχέσεων λέξεων. Είναι ένα ρηχό νευρωνικό δίκτυο δύο επιπέδων που μπορεί να ανιχνεύσει συνώνυμες λέξεις και να προτείνει πρόσθετες λέξεις για μερικές προτάσεις μόλις εκπαιδευτεί.
Πριν προχωρήσετε περαιτέρω σε αυτό το σεμινάριο Word2vec, δείτε τη διαφορά μεταξύ ρηχού και βαθύ νευρωνικού δικτύου όπως φαίνεται στο παρακάτω παράδειγμα διάγραμμα ενσωμάτωσης του Word:
Το ρηχό νευρωνικό δίκτυο αποτελείται από το μόνο ένα κρυφό στρώμα μεταξύ εισόδου και εξόδου, ενώ το βαθύ νευρωνικό δίκτυο περιέχει πολλαπλά κρυφά στρώματα μεταξύ εισόδου και εξόδου. Η είσοδος υπόκειται σε κόμβους, ενώ το κρυφό στρώμα, καθώς και το επίπεδο εξόδου, περιέχει νευρώνες.
Το Word2vec είναι ένα δίκτυο δύο επιπέδων όπου υπάρχει είσοδος ένα κρυφό στρώμα και έξοδος.
Το Word2vec αναπτύχθηκε από μια ομάδα ερευνητών με επικεφαλής τον Tomas Mikolov στη Google. Το Word2vec είναι καλύτερο και πιο αποτελεσματικό από το μοντέλο λανθάνουσας σημασιολογικής ανάλυσης.
Γιατί Word2vec;
Το Word2vec αντιπροσωπεύει λέξεις σε αναπαράσταση διανυσματικού χώρου. Οι λέξεις αναπαρίστανται με τη μορφή διανυσμάτων και η τοποθέτηση γίνεται με τέτοιο τρόπο ώστε λέξεις παρόμοιας σημασίας να εμφανίζονται μαζί και ανόμοιες λέξεις να βρίσκονται μακριά. Αυτό ονομάζεται επίσης σημασιολογική σχέση. Τα νευρωνικά δίκτυα δεν καταλαβαίνουν κείμενο αντίθετα καταλαβαίνουν μόνο αριθμούς. Το Word Embedding παρέχει έναν τρόπο μετατροπής κειμένου σε αριθμητικό διάνυσμα.
Το Word2vec αναδομεί το γλωσσικό πλαίσιο των λέξεων. Πριν προχωρήσουμε περαιτέρω, ας καταλάβουμε, τι είναι το γλωσσικό πλαίσιο; Σε γενικό σενάριο ζωής, όταν μιλάμε ή γράφουμε για να επικοινωνήσουμε, άλλοι άνθρωποι προσπαθούν να καταλάβουν ποιος είναι ο στόχος της πρότασης. Για παράδειγμα, «Τι είναι η θερμοκρασία της Ινδίας», εδώ το πλαίσιο είναι ότι ο χρήστης θέλει να μάθει τη «θερμοκρασία της Ινδίας» που είναι το πλαίσιο. Εν ολίγοις, ο κύριος στόχος μιας πρότασης είναι το πλαίσιο. Λέξη ή πρόταση που περιβάλλει την προφορική ή γραπτή γλώσσα (αποκάλυψη) βοηθά στον προσδιορισμό της έννοιας του συμφραζομένου. Το Word2vec μαθαίνει την διανυσματική αναπαράσταση λέξεων μέσα από τα συμφραζόμενα.
Τι κάνει το Word2vec;
Πριν από την ενσωμάτωση λέξεων
Είναι σημαντικό να γνωρίζουμε ποια προσέγγιση χρησιμοποιείται πριν από την ενσωμάτωση λέξης και ποια είναι τα μειονεκτήματά της και στη συνέχεια θα περάσουμε στο θέμα του πώς ξεπερνιούνται τα μειονεκτήματα με την ενσωμάτωση του Word χρησιμοποιώντας την προσέγγιση Word2vec. Τέλος, θα μετακινήσουμε τον τρόπο λειτουργίας του Word2vec επειδή είναι σημαντικό να κατανοήσουμε ότι λειτουργεί.
Προσέγγιση Λανθάνουσας Σημασιολογικής Ανάλυσης
Αυτή είναι η προσέγγιση που χρησιμοποιήθηκε πριν από την ενσωμάτωση λέξεων. Χρησιμοποίησε την έννοια του Bag of words όπου οι λέξεις αναπαρίστανται με τη μορφή κωδικοποιημένων διανυσμάτων. Είναι μια αραιή διανυσματική αναπαράσταση όπου η διάσταση είναι ίση με το μέγεθος του λεξιλογίου. Εάν η λέξη εμφανίζεται στο λεξικό, μετράται, αλλιώς όχι. Για να καταλάβετε περισσότερα, δείτε το παρακάτω πρόγραμμα.
Παράδειγμα Word2vec
from sklearn.feature_extraction.text import CountVectorizer vectorizer = CountVectorizer() data_corpus = ["guru99 is the best site for online tutorials. I love to visit guru99."] vocabulary = vectorizer.fit(data_corpus) X = vectorizer.transform(data_corpus) print(X.toarray()) print(vectorizer.get_feature_names_out())
Παραγωγή:
[[1 2 1 1 1 1 1 1 1 1]]
[u'best', u'guru99', u'is', u'love', u'online', u'sitefor', u'the', u'to', u'tutorials', u'visit']
Επεξήγηση κώδικα
- Το CountVetorizer είναι η ενότητα που χρησιμοποιείται για την αποθήκευση του λεξιλογίου με βάση την προσαρμογή των λέξεων σε αυτό. Αυτό εισάγεται από το sklearn.
- Δημιουργήστε το αντικείμενο χρησιμοποιώντας την κλάση CountVetorizer.
- Γράψτε τα δεδομένα στη λίστα που θα τοποθετηθούν στο CountVetorizer.
- Τα δεδομένα προσαρμόζονται στο αντικείμενο που δημιουργήθηκε από την κλάση CountVetorizer.
- Εφαρμόστε μια προσέγγιση λέξεων για να μετρήσετε λέξεις στα δεδομένα χρησιμοποιώντας λεξιλόγιο. Εάν η λέξη ή το διακριτικό δεν είναι διαθέσιμο στο λεξιλόγιο, τότε αυτή η θέση ευρετηρίου ορίζεται στο μηδέν.
- Η μεταβλητή στη γραμμή 5 που είναι x μετατρέπεται σε πίνακα (μέθοδος διαθέσιμη για το x). Αυτό θα παρέχει την καταμέτρηση κάθε διακριτικού στην πρόταση ή στη λίστα που παρέχεται στη Γραμμή 3.
- Αυτό θα εμφανίσει τα χαρακτηριστικά που αποτελούν μέρος του λεξιλογίου όταν προσαρμόζεται χρησιμοποιώντας τα δεδομένα στη Γραμμή 4.
Στην λανθάνουσα σημασιολογική προσέγγιση, η σειρά αντιπροσωπεύει μοναδικές λέξεις ενώ η στήλη αντιπροσωπεύει τον αριθμό του χρόνου που εμφανίζεται αυτή η λέξη στο έγγραφο. Είναι μια αναπαράσταση λέξεων με τη μορφή του πίνακα εγγράφων. Αντίστροφη συχνότητα εγγράφου όρου-συχνότητας (TFIDF) χρησιμοποιείται για τη μέτρηση της συχνότητας των λέξεων στο έγγραφο που είναι η συχνότητα του όρου στο έγγραφο/συχνότητα του όρου σε ολόκληρο το σώμα.
Έλλειψη της μεθόδου Bag of Words
- Αγνοεί τη σειρά της λέξης, για παράδειγμα, αυτό είναι κακό = κακό είναι αυτό.
- Αγνοεί το πλαίσιο των λέξεων. Ας υποθέσουμε ότι αν γράψω την πρόταση «Αγαπούσε τα βιβλία. Η εκπαίδευση βρίσκεται καλύτερα στα βιβλία». Θα δημιουργούσε δύο διανύσματα ένα για το «Αγάπησε τα βιβλία» και άλλο για το «Η εκπαίδευση βρίσκεται καλύτερα στα βιβλία». Θα αντιμετώπιζε και τα δύο ορθογώνια που τους κάνει ανεξάρτητους, αλλά στην πραγματικότητα, σχετίζονται μεταξύ τους
Για να ξεπεραστούν αυτοί οι περιορισμοί, αναπτύχθηκε η ενσωμάτωση λέξεων και το Word2vec είναι μια προσέγγιση για την υλοποίηση αυτού του είδους.
Πώς λειτουργεί το Word2vec;
Το Word2vec μαθαίνει τη λέξη προβλέποντας το περιβάλλον της. Για παράδειγμα, ας πάρουμε τη λέξη «Αυτός αγαπά Ποδόσφαιρο."
Θέλουμε να υπολογίσουμε το Word2vec για τη λέξη: loves.
Υποθέτω
loves = Vin. P(Vout / Vin) is calculated where, Vin is the input word. P is the probability of likelihood. Vout is the output word.
λέξη αγαπά μετακινείται πάνω από κάθε λέξη στο σώμα. Κωδικοποιείται η συντακτική αλλά και η σημασιολογική σχέση μεταξύ των λέξεων. Αυτό βοηθά στην εύρεση όμοιων και αναλογικών λέξεων.
Όλα τα τυχαία χαρακτηριστικά της λέξης αγαπά υπολογίζεται. Αυτά τα χαρακτηριστικά αλλάζουν ή ενημερώνονται σχετικά με λέξεις γείτονα ή πλαισίου με τη βοήθεια του a Πίσω διάδοση μέθοδος.
Ένας άλλος τρόπος μάθησης είναι ότι εάν το πλαίσιο δύο λέξεων είναι παρόμοιο ή δύο λέξεις έχουν παρόμοια χαρακτηριστικά, τότε τέτοιες λέξεις σχετίζονται.
Word2vec Archiδομή
Υπάρχουν δύο αρχιτεκτονικές που χρησιμοποιούνται από το Word2vec:
- Continuous Bag of words (CBOW)
- Παράλειψη γραμμαρίου
Πριν προχωρήσουμε περαιτέρω σε αυτό το σεμινάριο Word2vec, ας συζητήσουμε γιατί αυτές οι αρχιτεκτονικές ή μοντέλα είναι σημαντικές από την άποψη της αναπαράστασης λέξεων. Η αναπαράσταση μαθησιακών λέξεων είναι ουσιαστικά χωρίς επίβλεψη, αλλά απαιτούνται στόχοι/ετικέτες για την εκπαίδευση του μοντέλου. Το Skip-gram και το CBOW μετατρέπουν την αναπαράσταση χωρίς επίβλεψη σε εποπτευόμενη φόρμα για εκπαίδευση μοντέλων.
Στο CBOW, η τρέχουσα λέξη προβλέπεται χρησιμοποιώντας το παράθυρο των παραθύρων περιβάλλοντος περιβάλλοντος. Για παράδειγμα, αν wi-1,wi-2,wi + 1,wi + 2δίνονται λέξεις ή πλαίσιο, αυτό το μοντέλο θα παρέχει wi
Το Skip-Gram εκτελεί το αντίθετο του CBOW που σημαίνει ότι προβλέπει τη δεδομένη ακολουθία ή το πλαίσιο από τη λέξη. Μπορείτε να αντιστρέψετε το παράδειγμα για να το καταλάβετε. Αν wi δίνεται, αυτό θα προβλέψει το πλαίσιο ή wi-1,wi-2,wi + 1,wi+2.
Το Word2vec παρέχει μια επιλογή μεταξύ CBOW (συνεχής τσάντα λέξεων) και skim-gram. Τέτοιες παράμετροι παρέχονται κατά την εκπαίδευση του μοντέλου. Κάποιος μπορεί να έχει την επιλογή να χρησιμοποιήσει αρνητική δειγματοληψία ή ιεραρχικό επίπεδο softmax.
Συνεχής τσάντα με λέξεις
Ας σχεδιάσουμε ένα απλό παράδειγμα διάγραμμα Word2vec για να κατανοήσουμε τη συνεχή τσάντα της αρχιτεκτονικής λέξεων.
Ας υπολογίσουμε τις εξισώσεις μαθηματικά. Ας υποθέσουμε ότι το V είναι το μέγεθος του λεξιλογίου και το N είναι το μέγεθος του κρυφού στρώματος. Η είσοδος ορίζεται ως { xi-1, Χi-2, xi+1, xi + 2}. Λαμβάνουμε τον πίνακα βάρους πολλαπλασιάζοντας το V * N. Ένας άλλος πίνακας προκύπτει πολλαπλασιάζοντας το διάνυσμα εισόδου με τον πίνακα βάρους. Αυτό μπορεί να γίνει κατανοητό και από την ακόλουθη εξίσωση.
h=xitW
όπου xit? W είναι το διάνυσμα εισόδου και ο πίνακας βάρους αντίστοιχα,
Για να υπολογίσετε την αντιστοίχιση μεταξύ του περιβάλλοντος και της επόμενης λέξης, ανατρέξτε στην παρακάτω εξίσωση
u=προβλεπόμενη αναπαράσταση*η
όπου προκύπτει η προβλεπόμενη αναπαράσταση μοντέλο?h στην παραπάνω εξίσωση.
Μοντέλο Skip-Gram
Η προσέγγιση Skip-Gram χρησιμοποιείται για την πρόβλεψη μιας πρότασης στην οποία δίνεται μια λέξη εισαγωγής. Για να το καταλάβουμε καλύτερα, ας σχεδιάσουμε το διάγραμμα όπως φαίνεται στο παρακάτω παράδειγμα Word2vec.
Κάποιος μπορεί να το αντιμετωπίσει ως το αντίστροφο του μοντέλου Continuous bag of word όπου η είσοδος είναι η λέξη και το μοντέλο παρέχει το πλαίσιο ή την ακολουθία. Μπορούμε επίσης να συμπεράνουμε ότι ο στόχος τροφοδοτείται στο επίπεδο εισόδου και εξόδου αναπαράγεται πολλές φορές για να φιλοξενήσει τον επιλεγμένο αριθμό λέξεων περιβάλλοντος. Το διάνυσμα σφαλμάτων από όλο το επίπεδο εξόδου συνοψίζεται για να ρυθμίσει τα βάρη μέσω μιας μεθόδου οπισθοδιάδοσης.
Ποιο μοντέλο να διαλέξω;
Το CBOW είναι αρκετές φορές ταχύτερο από το gram skip και παρέχει καλύτερη συχνότητα για συχνές λέξεις, ενώ το skip gram χρειάζεται μικρό όγκο δεδομένων εκπαίδευσης και αντιπροσωπεύει ακόμη και σπάνιες λέξεις ή φράσεις.
Η σχέση μεταξύ Word2vec και NLTK
NLTK είναι η εργαλειοθήκη φυσικής γλώσσας. Χρησιμοποιείται για την προεπεξεργασία του κειμένου. Κάποιος μπορεί να κάνει διαφορετικές λειτουργίες, όπως μέρη της προσθήκης ετικετών ομιλίας, τη λήμματοποίηση, την αφαίρεση λέξεων, την αφαίρεση σπάνιων λέξεων ή λέξεων που χρησιμοποιούνται λιγότερο. Βοηθά στον καθαρισμό του κειμένου καθώς και στην προετοιμασία των χαρακτηριστικών από τις αποτελεσματικές λέξεις. Με τον άλλο τρόπο, το Word2vec χρησιμοποιείται για σημασιολογική (στενά συνδεδεμένα στοιχεία μαζί) και συντακτική (ακολουθία) αντιστοίχιση. Χρησιμοποιώντας το Word2vec, μπορεί κανείς να βρει παρόμοιες λέξεις, ανόμοιες λέξεις, μείωση διαστάσεων και πολλές άλλες. Ένα άλλο σημαντικό χαρακτηριστικό του Word2vec είναι η μετατροπή της αναπαράστασης υψηλότερων διαστάσεων του κειμένου σε χαμηλότερη διάσταση διανυσμάτων.
Πού να χρησιμοποιήσετε το NLTK και το Word2vec;
Εάν κάποιος πρέπει να ολοκληρώσει κάποιες εργασίες γενικού σκοπού όπως αναφέρθηκε παραπάνω, όπως το tokenization, η προσθήκη ετικετών POS και η ανάλυση, πρέπει να χρησιμοποιήσει το NLTK ενώ για την πρόβλεψη λέξεων σύμφωνα με κάποιο πλαίσιο, μοντελοποίηση θέματος ή ομοιότητα εγγράφων πρέπει να χρησιμοποιήσει το Word2vec.
Σχέση NLTK και Word2vec με τη βοήθεια κώδικα
Το NLTK και το Word2vec μπορούν να χρησιμοποιηθούν μαζί για να βρουν παρόμοια αναπαράσταση λέξεων ή συντακτική αντιστοίχιση. Η εργαλειοθήκη NLTK μπορεί να χρησιμοποιηθεί για τη φόρτωση πολλών πακέτων που συνοδεύουν το NLTK και το μοντέλο μπορεί να δημιουργηθεί χρησιμοποιώντας το Word2vec. Στη συνέχεια, μπορεί να δοκιμαστεί σε λέξεις σε πραγματικό χρόνο. Ας δούμε τον συνδυασμό και των δύο στον παρακάτω κώδικα. Πριν προχωρήσετε σε περαιτέρω επεξεργασία, ρίξτε μια ματιά στα corpora που παρέχει η NLTK. Μπορείτε να κάνετε λήψη χρησιμοποιώντας την εντολή
nltk(nltk.download('all'))
Δείτε το στιγμιότυπο οθόνης για τον κωδικό.
import nltk import gensim from nltk.corpus import abc model= gensim.models.Word2Vec(abc.sents()) X= list(model.wv.vocab) data=model.most_similar('science') print(data)
Παραγωγή:
[('law', 0.9415997266769409), ('practice', 0.9276568293571472), ('discussion', 0.9259148836135864), ('agriculture', 0.9257254004478455), ('media', 0.9232194423675537), ('policy', 0.922248125076294), ('general', 0.9166069030761719), ('undertaking', 0.916458249092102), ('tight', 0.9129181504249573), ('board', 0.9107444286346436)]
Επεξήγηση Κώδικα
- Εισάγεται η βιβλιοθήκη nltk από όπου μπορείτε να κατεβάσετε το σώμα abc το οποίο θα χρησιμοποιήσουμε στο επόμενο βήμα.
- Το Gensim εισάγεται. Εάν το Gensim Word2vec δεν είναι εγκατεστημένο, εγκαταστήστε το χρησιμοποιώντας την εντολή "pip3 install gensim". Δείτε το παρακάτω στιγμιότυπο οθόνης.
- Εισαγάγετε το corpus abc που έχει ληφθεί χρησιμοποιώντας το nltk.download('abc').
- Περάστε τα αρχεία στο μοντέλο Word2vec που εισάγεται χρησιμοποιώντας το Gensim ως προτάσεις.
- Το λεξιλόγιο αποθηκεύεται με τη μορφή της μεταβλητής.
- Το μοντέλο ελέγχεται σε δείγμα word Science καθώς αυτά τα αρχεία σχετίζονται με την επιστήμη.
- Εδώ η παρόμοια λέξη της «επιστήμης» προβλέπεται από το μοντέλο.
Activators και Word2Vec
Η συνάρτηση ενεργοποίησης του νευρώνα ορίζει την έξοδο αυτού του νευρώνα δεδομένου ενός συνόλου εισόδων. Βιολογικά εμπνευσμένο από μια δραστηριότητα στον εγκέφαλό μας όπου διαφορετικοί νευρώνες ενεργοποιούνται χρησιμοποιώντας διαφορετικά ερεθίσματα. Ας κατανοήσουμε τη συνάρτηση ενεργοποίησης μέσα από το παρακάτω διάγραμμα.
Εδώ x1,x2,..x4 είναι ο κόμβος του νευρωνικού δικτύου.
w1, w2, w3 είναι το βάρος του κόμβου,
? είναι το άθροισμα όλων των τιμών βάρους και κόμβου που λειτουργούν ως συνάρτηση ενεργοποίησης.
Γιατί η λειτουργία ενεργοποίησης;
Εάν δεν χρησιμοποιείται συνάρτηση ενεργοποίησης, η έξοδος θα είναι γραμμική, αλλά η λειτουργικότητα της γραμμικής συνάρτησης είναι περιορισμένη. Για την επίτευξη πολύπλοκων λειτουργιών, όπως η ανίχνευση αντικειμένων, η ταξινόμηση εικόνων, η πληκτρολόγηση κειμένου με χρήση φωνής και πολλές άλλες μη γραμμικές εξόδους απαιτούνται, κάτι που επιτυγχάνεται χρησιμοποιώντας τη λειτουργία ενεργοποίησης.
Πώς υπολογίζεται το επίπεδο ενεργοποίησης στην ενσωμάτωση λέξης (Word2vec)
Το στρώμα Softmax (κανονικοποιημένη εκθετική συνάρτηση) είναι η συνάρτηση επιπέδου εξόδου που ενεργοποιεί ή ενεργοποιεί κάθε κόμβο. Μια άλλη προσέγγιση που χρησιμοποιείται είναι το Hierarchical softmax όπου η πολυπλοκότητα υπολογίζεται από το O(log2V) όπου το softmax είναι O(V) όπου V είναι το μέγεθος του λεξιλογίου. Η διαφορά μεταξύ αυτών είναι η μείωση της πολυπλοκότητας στο ιεραρχικό επίπεδο softmax. Για να κατανοήσετε τη λειτουργικότητά του (Hierarchical softmax), δείτε το παρακάτω παράδειγμα ενσωμάτωσης Word:
Ας υποθέσουμε ότι θέλουμε να υπολογίσουμε την πιθανότητα να παρατηρήσουμε τη λέξη αγάπη δεδομένου ενός συγκεκριμένου πλαισίου. Η ροή από τη ρίζα στον κόμβο του φύλλου θα είναι η πρώτη κίνηση στον κόμβο 2 και μετά στον κόμβο 5. Επομένως, εάν έχουμε το μέγεθος λεξιλογίου 8, χρειάζονται μόνο τρεις υπολογισμοί. Έτσι επιτρέπει την αποσύνθεση, τον υπολογισμό της πιθανότητας μιας λέξης (αγάπη).
Ποιες άλλες επιλογές είναι διαθέσιμες εκτός από το Hierarchical Softmax;
Εάν μιλάμε με γενική έννοια για την ενσωμάτωση λέξεων, οι διαθέσιμες επιλογές είναι το διαφοροποιημένο Softmax, το CNN-Softmax, το Importance Sampling, το Adaptive Importance Sampling, το Noise Contrastive Estimations, το Negative Sampling, η Self-Normalization και η σπάνια κανονικοποίηση.
Μιλώντας συγκεκριμένα για το Word2vec, έχουμε διαθέσιμη αρνητική δειγματοληψία.
Η αρνητική δειγματοληψία είναι ένας τρόπος δειγματοληψίας των δεδομένων εκπαίδευσης. Μοιάζει κάπως με στοχαστική κλίση, αλλά με κάποια διαφορά. Η αρνητική δειγματοληψία αναζητά μόνο αρνητικά παραδείγματα εκπαίδευσης. Βασίζεται σε εκτίμηση αντίθεσης θορύβου και δειγματοληπτικά τυχαία λέξεις, όχι στο πλαίσιο. Είναι μια γρήγορη μέθοδος εκπαίδευσης και επιλέγει το πλαίσιο τυχαία. Εάν η προβλεπόμενη λέξη εμφανίζεται στο τυχαία επιλεγμένο πλαίσιο και τα δύο διανύσματα είναι κοντά το ένα στο άλλο.
Τι συμπέρασμα μπορεί να εξαχθεί;
Οι ενεργοποιητές πυροδοτούν τους νευρώνες ακριβώς όπως οι νευρώνες μας πυροδοτούνται χρησιμοποιώντας τα εξωτερικά ερεθίσματα. Το στρώμα Softmax είναι μια από τις λειτουργίες του επιπέδου εξόδου που ενεργοποιεί τους νευρώνες σε περίπτωση ενσωματώσεων λέξεων. Στο Word2vec έχουμε επιλογές όπως ιεραρχικό softmax και αρνητική δειγματοληψία. Χρησιμοποιώντας ενεργοποιητές, μπορεί κανείς να μετατρέψει τη γραμμική συνάρτηση σε μη γραμμική συνάρτηση και ένας πολύπλοκος αλγόριθμος μηχανικής μάθησης μπορεί να εφαρμοστεί χρησιμοποιώντας τέτοιους.
Τι είναι το Gensim;
Τζένσιμ είναι μια εργαλειοθήκη μοντελοποίησης θεμάτων ανοιχτού κώδικα και επεξεργασίας φυσικής γλώσσας που υλοποιείται στο Python και Cython. Η εργαλειοθήκη Gensim επιτρέπει στους χρήστες να εισάγουν το Word2vec για μοντελοποίηση θεμάτων για να ανακαλύψουν κρυφή δομή στο σώμα του κειμένου. Το Gensim παρέχει όχι μόνο μια υλοποίηση του Word2vec αλλά και για Doc2vec και FastText επίσης.
Αυτό το σεμινάριο αφορά το Word2vec, επομένως θα παραμείνουμε στο τρέχον θέμα.
Πώς να εφαρμόσετε το Word2vec χρησιμοποιώντας το Gensim
Μέχρι τώρα έχουμε συζητήσει τι είναι το Word2vec, τις διαφορετικές αρχιτεκτονικές του, γιατί υπάρχει μια μετατόπιση από μια τσάντα λέξεων στο Word2vec, τη σχέση μεταξύ Word2vec και NLTK με ζωντανό κώδικα και λειτουργίες ενεργοποίησης.
Παρακάτω είναι η μέθοδος βήμα προς βήμα για την υλοποίηση του Word2vec χρησιμοποιώντας το Gensim:
Βήμα 1) Συλλογή δεδομένων
Το πρώτο βήμα για την εφαρμογή οποιουδήποτε μοντέλου μηχανικής μάθησης ή την εφαρμογή επεξεργασίας φυσικής γλώσσας είναι η συλλογή δεδομένων
Παρακαλούμε παρατηρήστε τα δεδομένα για να δημιουργήσετε ένα έξυπνο chatbot όπως φαίνεται στο παρακάτω παράδειγμα Gensim Word2vec.
[{"tag": "welcome", "patterns": ["Hi", "How are you", "Is any one to talk?", "Hello", "hi are you available"], "responses": ["Hello, thanks for contacting us", "Good to see you here"," Hi there, how may I assist you?"] }, {"tag": "goodbye", "patterns": ["Bye", "See you later", "Goodbye", "I will come back soon"], "responses": ["See you later, thanks for visiting", "have a great day ahead", "Wish you Come back again soon."] }, {"tag": "thankful", "patterns": ["Thanks for helping me", "Thank your guidance", "That's helpful and kind from you"], "responses": ["Happy to help!", "Any time!", "My pleasure", "It is my duty to help you"] }, {"tag": "hoursopening", "patterns": ["What hours are you open?", "Tell your opening time?", "When are you open?", "Just your timing please"], "responses": ["We're open every day 8am-7pm", "Our office hours are 8am-7pm every day", "We open office at 8 am and close at 7 pm"] }, {"tag": "payments", "patterns": ["Can I pay using credit card?", " Can I pay using Mastercard?", " Can I pay using cash only?" ], "responses": ["We accept VISA, Mastercard and credit card", "We accept credit card, debit cards and cash. Please don’t worry"] } ]
Εδώ είναι τι καταλαβαίνουμε από τα δεδομένα
- Αυτά τα δεδομένα περιέχουν τρία πράγματα ετικέτα, μοτίβο και απαντήσεις. Η ετικέτα είναι η πρόθεση (ποιο είναι το θέμα συζήτησης).
- Τα δεδομένα είναι σε μορφή JSON.
- Ένα μοτίβο είναι μια ερώτηση που θα κάνουν οι χρήστες στο bot
- Οι απαντήσεις είναι η απάντηση που θα δώσει το chatbot στην αντίστοιχη ερώτηση/μοτίβο.
Βήμα 2) Προεπεξεργασία δεδομένων
Είναι πολύ σημαντικό να επεξεργάζεστε τα ακατέργαστα δεδομένα. Εάν τα καθαρισμένα δεδομένα τροφοδοτηθούν στο μηχάνημα, τότε το μοντέλο θα ανταποκριθεί με μεγαλύτερη ακρίβεια και θα μάθει τα δεδομένα πιο αποτελεσματικά.
Αυτό το βήμα περιλαμβάνει την αφαίρεση λέξεων διακοπής, βασικών, περιττών λέξεων κ.λπ. Πριν προχωρήσετε, είναι σημαντικό να φορτώσετε δεδομένα και να τα μετατρέψετε σε πλαίσιο δεδομένων. Παρακαλούμε δείτε τον παρακάτω κώδικα για τέτοια
import json json_file =’intents.json' with open('intents.json','r') as f: data = json.load(f)
Επεξήγηση Κώδικα:
- Καθώς τα δεδομένα έχουν τη μορφή μορφής json, επομένως εισάγεται το json
- Το αρχείο αποθηκεύεται στη μεταβλητή
- Το αρχείο είναι ανοιχτό και φορτώνεται στη μεταβλητή δεδομένων
Τώρα τα δεδομένα εισάγονται και ήρθε η ώρα να μετατραπούν τα δεδομένα σε πλαίσιο δεδομένων. Δείτε τον παρακάτω κώδικα για να δείτε το επόμενο βήμα
import pandas as pd df = pd.DataFrame(data) df['patterns'] = df['patterns'].apply(', '.join)
Επεξήγηση Κώδικα:
1. Τα δεδομένα μετατρέπονται σε πλαίσιο δεδομένων χρησιμοποιώντας panda που εισήχθησαν παραπάνω.
2. Θα μετατρέψει τη λίστα σε μοτίβα στηλών σε συμβολοσειρά.
from nltk.corpus import stopwords from textblob import Word stop = stopwords.words('english') df['patterns'] = df['patterns'].apply(lambda x:' '.join(x.lower() for x in x.split())) df['patterns't']= df['patterns''].apply(lambda x: ' '.join(x for x in x.split() if x not in string.punctuation) df['patterns']= df['patterns'].str.replace('[^\w\s]','') df['patterns']= df['patterns'].apply(lambda x: ' '.join(x for x in x.split() if not x.isdigit())) df['patterns'] = df['patterns'].apply(lambda x:' '.join(x for x in x.split() if not x in stop)) df['patterns'] = df['patterns'].apply(lambda x: " ".join([Word(word).lemmatize() for word in x.split()]))
Επεξήγηση κώδικα:
1. Οι αγγλικές λέξεις διακοπής εισάγονται με τη χρήση της ενότητας λέξης τερματισμού από το κιτ εργαλείων nltk
2. Όλες οι λέξεις του κειμένου μετατρέπονται σε πεζά χρησιμοποιώντας για συνθήκη και συνάρτηση λάμδα. Λειτουργία λάμδα είναι μια ανώνυμη συνάρτηση.
3. Όλες οι σειρές του κειμένου στο πλαίσιο δεδομένων ελέγχονται για σημεία στίξης συμβολοσειρών και φιλτράρονται.
4. Χαρακτήρες όπως αριθμοί ή τελείες αφαιρούνται χρησιμοποιώντας μια τυπική έκφραση.
5. Digits αφαιρούνται από το κείμενο.
6. Οι λέξεις διακοπής αφαιρούνται σε αυτό το στάδιο.
7. Οι λέξεις φιλτράρονται τώρα και η διαφορετική μορφή της ίδιας λέξης αφαιρείται με τη χρήση λημματοποίησης. Με αυτά, ολοκληρώσαμε την προεπεξεργασία δεδομένων.
Παραγωγή:
, patterns, responses, tag 0,hi one talk hello hi available,"['Hello, thanks for contacting us', 'Good to see you here', ' Hi there, how may I assist you?']",welcome 1,bye see later goodbye come back soon,"['See you later, thanks for visiting', 'have a great day ahead', 'Wish you Come back again soon.']",goodbye 2,thanks helping thank guidance thats helpful kind,"['Happy to help!', 'Any time!', 'My pleasure', 'It is my duty to help you']",thankful 3,hour open tell opening time open timing please,"[""We're open every day 8am-7pm"", 'Our office hours are 8am-7pm every day', 'We open office at 8 am and close at 7 pm']",hoursopening 4,pay using credit card pay using mastercard pay using cash,"['We accept VISA, Mastercard and credit card', 'We accept credit card, debit cards and cash. Please don’t worry']",payments
Βήμα 3) Κατασκευή νευρωνικού δικτύου με χρήση του Word2vec
Τώρα είναι ώρα να δημιουργήσετε ένα μοντέλο χρησιμοποιώντας τη μονάδα Gensim Word2vec. Πρέπει να εισάγουμε το Word2vec από το Gensim. Ας το κάνουμε αυτό, και μετά θα φτιάξουμε και στο τελικό στάδιο θα ελέγξουμε το μοντέλο σε δεδομένα σε πραγματικό χρόνο.
from gensim.models import Word2Vec
Τώρα σε αυτό το σεμινάριο Gensim Word2vec, μπορούμε να δημιουργήσουμε με επιτυχία το μοντέλο χρησιμοποιώντας το Word2Vec. Ανατρέξτε στην επόμενη γραμμή κώδικα για να μάθετε πώς να δημιουργήσετε το μοντέλο χρησιμοποιώντας το Word2Vec. Το κείμενο παρέχεται στο μοντέλο με τη μορφή λίστας, επομένως θα μετατρέψουμε το κείμενο από πλαίσιο δεδομένων σε λίστα χρησιμοποιώντας τον παρακάτω κώδικα
Bigger_list=[] for i in df['patterns'] li = list(i.split("")) Bigger_list.append(li) Model= Word2Vec(Bigger_list,min_count=1,size=300,workers=4)
Επεξήγηση Κώδικα:
1. Δημιουργήθηκε η bigger_list όπου προσαρτάται η εσωτερική λίστα. Αυτή είναι η μορφή που τροφοδοτείται στο μοντέλο Word2Vec.
2. Ο βρόχος υλοποιείται και κάθε καταχώρηση της στήλης μοτίβων του πλαισίου δεδομένων επαναλαμβάνεται.
3. Κάθε στοιχείο των μοτίβων στηλών χωρίζεται και αποθηκεύεται στην εσωτερική λίστα li
4. Η εσωτερική λίστα επισυνάπτεται με την εξωτερική λίστα.
5. Αυτή η λίστα παρέχεται στο μοντέλο Word2Vec. Ας κατανοήσουμε μερικές από τις παραμέτρους που παρέχονται εδώ
Min_count: Θα αγνοήσει όλες τις λέξεις με συνολική συχνότητα μικρότερη από αυτή.
Μέγεθος: Λέει τη διάσταση των διανυσμάτων λέξεων.
Εργαζόμενοι: Αυτά είναι τα νήματα για την εκπαίδευση του μοντέλου
Υπάρχουν επίσης και άλλες διαθέσιμες επιλογές και μερικές σημαντικές εξηγούνται παρακάτω
Παράθυρο: Μέγιστη απόσταση μεταξύ της τρέχουσας και της προβλεπόμενης λέξης μέσα σε μια πρόταση.
Sg: Είναι ένας αλγόριθμος εκπαίδευσης και 1 για skip-gram και 0 για Continuous bag of words. Τα έχουμε συζητήσει λεπτομερώς παραπάνω.
Hs: Αν αυτό είναι 1 τότε χρησιμοποιούμε ιεραρχικό softmax για εκπαίδευση και αν 0 τότε χρησιμοποιείται αρνητική δειγματοληψία.
Αλφα: Αρχικό ρυθμό μάθησης
Ας εμφανίσουμε τον τελικό κωδικό παρακάτω:
#list of libraries used by the code import string from gensim.models import Word2Vec import logging from nltk.corpus import stopwords from textblob import Word import json import pandas as pd #data in json format json_file = 'intents.json' with open('intents.json','r') as f: data = json.load(f) #displaying the list of stopwords stop = stopwords.words('english') #dataframe df = pd.DataFrame(data) df['patterns'] = df['patterns'].apply(', '.join) # print(df['patterns']) #print(df['patterns']) #cleaning the data using the NLP approach print(df) df['patterns'] = df['patterns'].apply(lambda x:' '.join(x.lower() for x in x.split())) df['patterns']= df['patterns'].apply(lambda x: ' '.join(x for x in x.split() if x not in string.punctuation)) df['patterns']= df['patterns'].str.replace('[^\w\s]','') df['patterns']= df['patterns'].apply(lambda x: ' '.join(x for x in x.split() if not x.isdigit())) df['patterns'] = df['patterns'].apply(lambda x:' '.join(x for x in x.split() if not x in stop)) df['patterns'] = df['patterns'].apply(lambda x: " ".join([Word(word).lemmatize() for word in x.split()])) #taking the outer list bigger_list=[] for i in df['patterns']: li = list(i.split(" ")) bigger_list.append(li) #structure of data to be taken by the model.word2vec print("Data format for the overall list:",bigger_list) #custom data is fed to machine for further processing model = Word2Vec(bigger_list, min_count=1,size=300,workers=4) #print(model)
Βήμα 4) Αποθήκευση μοντέλου
Το μοντέλο μπορεί να αποθηκευτεί με τη μορφή κάδου και φόρμας μοντέλου. Το Bin είναι η δυαδική μορφή. Δείτε τις παρακάτω γραμμές για να αποθηκεύσετε το μοντέλο
model.save("word2vec.model") model.save("model.bin")
Επεξήγηση του παραπάνω κώδικα
1. Το μοντέλο αποθηκεύεται με τη μορφή αρχείου .model.
2. Το μοντέλο αποθηκεύεται με τη μορφή αρχείου .bin
Θα χρησιμοποιήσουμε αυτό το μοντέλο για να κάνουμε δοκιμές σε πραγματικό χρόνο, όπως Παρόμοιες λέξεις, ανόμοιες λέξεις και πιο συνηθισμένες λέξεις.
Βήμα 5) Φόρτωση μοντέλου και εκτέλεση δοκιμών σε πραγματικό χρόνο
Το μοντέλο φορτώνεται χρησιμοποιώντας τον παρακάτω κώδικα:
model = Word2Vec.load('model.bin')
Εάν θέλετε να εκτυπώσετε το λεξιλόγιο από αυτό, γίνεται χρησιμοποιώντας την παρακάτω εντολή:
vocab = list(model.wv.vocab)
Δείτε το αποτέλεσμα:
['see', 'thank', 'back', 'thanks', 'soon', 'open', 'mastercard', 'card', 'time', 'pay', 'talk', 'cash', 'one', 'please', 'goodbye', 'thats', 'helpful', 'hour', 'credit', 'hi', 'later', 'guidance', 'opening', 'timing', 'hello', 'helping', 'bye', 'tell', 'come', 'using', 'kind', 'available']
Βήμα 6) Έλεγχος των περισσότερων παρόμοιων λέξεων
Ας εφαρμόσουμε τα πράγματα πρακτικά:
similar_words = model.most_similar('thanks') print(similar_words)
Δείτε το αποτέλεσμα:
[('kind', 0.16104359924793243), ('using', 0.1352398842573166), ('come', 0.11500970274209976), ('later', 0.09989878535270691), ('helping', 0.04855936020612717), ('credit', 0.04659383371472359), ('pay', 0.0329081267118454), ('thank', 0.02484947443008423), ('hour', 0.0202352125197649), ('opening', 0.018177658319473267)]
Βήμα 7) Δεν ταιριάζει με τις λέξεις που παρέχονται
dissimlar_words = model.doesnt_match('See you later, thanks for visiting'.split()) print(dissimlar_words)
Έχουμε δώσει τις λέξεις «Τα λέμε αργότερα, ευχαριστώ για την επίσκεψη». Αυτό θα εκτυπώστε τις πιο ανόμοιες λέξεις από αυτές τις λέξεις. Ας τρέξουμε αυτόν τον κώδικα και ας βρούμε το αποτέλεσμα
Το αποτέλεσμα μετά την εκτέλεση του παραπάνω κώδικα:
Thanks
Βήμα 8) Εύρεση της ομοιότητας μεταξύ δύο λέξεων
Αυτό θα δείξει ως αποτέλεσμα την πιθανότητα ομοιότητας μεταξύ δύο λέξεων. Δείτε τον παρακάτω κώδικα πώς να εκτελέσετε αυτήν την ενότητα.
similarity_two_words = model.similarity('please','see') print("Please provide the similarity between these two words:") print(similarity_two_words)
Το αποτέλεσμα του παραπάνω κώδικα είναι το παρακάτω
0.13706
Μπορείτε περαιτέρω να βρείτε παρόμοιες λέξεις εκτελώντας τον παρακάτω κώδικα
similar = model.similar_by_word('kind') print(similar)
Έξοδος του παραπάνω κώδικα:
[('credit', 0.11764447391033173), ('cash', 0.11440904438495636), ('one', 0.11151769757270813), ('hour', 0.0944807156920433), ('using', 0.0705675333738327), ('thats', 0.05206916481256485), ('later', 0.04502468928694725), ('bye', 0.03960943967103958), ('back', 0.03837274760007858), ('thank', 0.0380823090672493)]
Συμπέρασμα
- Η ενσωμάτωση λέξεων είναι ένας τύπος αναπαράστασης λέξεων που επιτρέπει σε λέξεις με παρόμοια σημασία να γίνονται κατανοητές από αλγόριθμους μηχανικής εκμάθησης
- Η ενσωμάτωση λέξεων χρησιμοποιείται για τον υπολογισμό παρόμοιων λέξεων, τη δημιουργία μιας ομάδας σχετικών λέξεων, τη δυνατότητα ταξινόμησης κειμένου, την ομαδοποίηση εγγράφων, την επεξεργασία φυσικής γλώσσας
- Το Word2vec εξήγησε: Το Word2vec είναι ένα ρηχό μοντέλο νευρωνικού δικτύου δύο επιπέδων για την παραγωγή ενσωματώσεων λέξεων για καλύτερη αναπαράσταση λέξεων
- Το Word2vec αντιπροσωπεύει λέξεις σε αναπαράσταση διανυσματικού χώρου. Οι λέξεις αναπαρίστανται με τη μορφή διανυσμάτων και η τοποθέτηση γίνεται με τέτοιο τρόπο ώστε λέξεις παρόμοιας σημασίας να εμφανίζονται μαζί και ανόμοιες λέξεις να βρίσκονται μακριά
- Ο αλγόριθμος Word2vec χρησιμοποιεί 2 αρχιτεκτονικές Continuous Bag of words (CBOW) και skip gram
- Το CBOW είναι αρκετές φορές ταχύτερο από το gram skip και παρέχει καλύτερη συχνότητα για συχνές λέξεις, ενώ το skip gram χρειάζεται μικρό όγκο δεδομένων εκπαίδευσης και αντιπροσωπεύει ακόμη και σπάνιες λέξεις ή φράσεις.
- Το NLTK και το Word2vec μπορούν να χρησιμοποιηθούν μαζί για τη δημιουργία ισχυρών εφαρμογών
- Η συνάρτηση ενεργοποίησης του νευρώνα ορίζει την έξοδο αυτού του νευρώνα δεδομένου ενός συνόλου εισόδων. Στο Word2vec. Το στρώμα Softmax (κανονικοποιημένη εκθετική συνάρτηση) είναι η συνάρτηση επιπέδου εξόδου που ενεργοποιεί ή ενεργοποιεί κάθε κόμβο. Το Word2vec διαθέτει επίσης αρνητική δειγματοληψία
- Το Gensim είναι μια εργαλειοθήκη μοντελοποίησης θεμάτων που υλοποιείται σε python