Tutorial Word Embedding: word2vec χρησιμοποιώντας το Gensim (ΠΑΡΑΔΕΙΓΜΑ)

Πίνακας περιεχομένων:

Anonim

Τι είναι η ενσωμάτωση του Word;

Το Word Embedding είναι ένας τύπος αναπαράστασης λέξεων που επιτρέπει την κατανόηση λέξεων με παρόμοιο νόημα από αλγόριθμους μηχανικής μάθησης. Από τεχνικής απόψεως, είναι μια χαρτογράφηση λέξεων σε διανύσματα πραγματικών αριθμών χρησιμοποιώντας το νευρικό δίκτυο, το πιθανολογικό μοντέλο ή τη μείωση των διαστάσεων στον πίνακα συν-εμφάνισης λέξεων. Είναι η τεχνική εκμάθησης γλωσσών και εκμάθησης χαρακτηριστικών. Η ενσωμάτωση λέξεων είναι ένας τρόπος εκτέλεσης χαρτογράφησης χρησιμοποιώντας ένα νευρωνικό δίκτυο. Υπάρχουν διάφορα διαθέσιμα μοντέλα ενσωμάτωσης λέξεων, όπως word2vec (Google), Glove (Stanford) και ταχύτερα (Facebook).

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

Σε αυτό το σεμινάριο, θα μάθετε

  • Τι είναι η ενσωμάτωση του Word;
  • Πού χρησιμοποιείται το Word Embedding;
  • Τι είναι το word2vec;
  • Τι κάνει το word2vec;
  • Γιατί το Word2vec;
  • Αρχιτεκτονική Word2vec
  • Συνεχής τσάντα λέξεων.
  • Skip-Gram Μοντέλο
  • Η σχέση μεταξύ Word2vec και NLTK
  • Ενεργοποιητές και Word2Vec
  • Τι είναι το Gensim;
  • Εφαρμογή κώδικα του word2vec χρησιμοποιώντας το Gensim

Πού χρησιμοποιείται το Word Embedding;

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

  • Υπολογίστε παρόμοιες λέξεις: Η ενσωμάτωση λέξεων χρησιμοποιείται για να προτείνει παρόμοιες λέξεις με τη λέξη που υπόκειται στο μοντέλο πρόβλεψης. Μαζί με αυτό προτείνει επίσης ανόμοιες λέξεις, καθώς και τις περισσότερες κοινές λέξεις.
  • Δημιουργήστε μια ομάδα σχετικών λέξεων: Χρησιμοποιείται για σημασιολογική ομαδοποίηση που θα ομαδοποιεί πράγματα παρόμοιου χαρακτηριστικού μαζί και ανόμοια μακριά.
  • Χαρακτηριστικό για την ταξινόμηση κειμένου: Το κείμενο χαρτογραφείται σε πίνακες διανυσμάτων που τροφοδοτούνται στο μοντέλο για εκπαίδευση καθώς και προβλέψεις. Τα μοντέλα ταξινομητή που βασίζονται σε κείμενο δεν μπορούν να εκπαιδευτούν στη συμβολοσειρά, επομένως αυτό θα μετατρέψει το κείμενο σε μηχανοκίνητη μορφή. Περαιτέρω τα χαρακτηριστικά της δημιουργίας σημασιολογικής βοήθειας στην ταξινόμηση βάσει κειμένου.
  • Η ομαδοποίηση εγγράφων είναι μια άλλη εφαρμογή όπου η ενσωμάτωση λέξεων χρησιμοποιείται ευρέως
  • Επεξεργασία φυσικής γλώσσας: Υπάρχουν πολλές εφαρμογές όπου η ενσωμάτωση λέξεων είναι χρήσιμη και κερδίζει σε φάσεις εξαγωγής χαρακτηριστικών, όπως τμήματα ετικετών ομιλίας, συναισθηματική ανάλυση και συντακτική ανάλυση.

    Τώρα έχουμε κάποια γνώση της ενσωμάτωσης λέξεων. Κάποιο φως ρίχνεται επίσης σε διαφορετικά μοντέλα για την εφαρμογή ενσωμάτωσης λέξεων. Όλο αυτό το σεμινάριο επικεντρώνεται σε ένα από τα μοντέλα (word2vec).

Τι είναι το word2vec;

Το Word2vec είναι η τεχνική / μοντέλο για την παραγωγή ενσωμάτωσης λέξεων για καλύτερη αναπαράσταση λέξεων. Καταγράφει έναν μεγάλο αριθμό ακριβών συντακτικών και σημασιολογικών λέξεων. Είναι ένα ρηχό νευρωνικό δίκτυο δύο επιπέδων. Πριν προχωρήσετε περαιτέρω, δείτε τη διαφορά μεταξύ ρηχού και βαθύ νευρωνικού δικτύου:

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

Σχήμα: Ρηχή και βαθιά μάθηση

Το word2vec είναι ένα δίκτυο δύο επιπέδων όπου υπάρχει είσοδος ένα κρυφό επίπεδο και έξοδος.

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

Τι κάνει το word2vec;

Το Word2vec αντιπροσωπεύει λέξεις σε αναπαράσταση διανυσμάτων. Οι λέξεις αντιπροσωπεύονται με τη μορφή διανυσμάτων και η τοποθέτηση γίνεται με τέτοιο τρόπο ώστε παρόμοιες λέξεις νοήματος να εμφανίζονται μαζί και ανόμοιες λέξεις να βρίσκονται μακριά. Αυτό ονομάζεται επίσης ως σημασιολογική σχέση. Τα νευρωνικά δίκτυα δεν καταλαβαίνουν το κείμενο αλλά αντιλαμβάνονται μόνο τους αριθμούς. Το Word Embedding παρέχει έναν τρόπο μετατροπής κειμένου σε αριθμητικό διάνυσμα.

Το Word2vec ανακατασκευάζει το γλωσσικό πλαίσιο των λέξεων. Πριν προχωρήσουμε περαιτέρω, ας καταλάβουμε, τι είναι το γλωσσικό πλαίσιο; Σε γενικές γραμμές του σεναρίου ζωής όταν μιλάμε ή γράφουμε για να επικοινωνήσουμε, άλλοι άνθρωποι προσπαθούν να καταλάβουν ποιος είναι ο στόχος της πρότασης. Για παράδειγμα, "Ποια είναι η θερμοκρασία της Ινδίας", εδώ το πλαίσιο είναι ότι ο χρήστης θέλει να μάθει "θερμοκρασία της Ινδίας" που είναι το πλαίσιο. Εν ολίγοις, ο κύριος στόχος μιας πρότασης είναι το πλαίσιο. Η λέξη ή η πρόταση που περιβάλλει την προφορική ή γραπτή γλώσσα (αποκάλυψη) βοηθά στον προσδιορισμό της σημασίας του περιβάλλοντος. Το Word2vec μαθαίνει τη διανυσματική αναπαράσταση των λέξεων μέσω των πλαισίων.

Γιατί το Word2vec;

Πριν από την ενσωμάτωση του Word

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

Προσέγγιση για λανθάνουσα σημασιολογική ανάλυση

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

from sklearn.feature_extraction.text import CountVectorizervectorizer=CountVectorizer()data_corpus=["guru99 is the best sitefor online tutorials. I love to visit guru99."]vocabulary=vectorizer.fit(data_corpus)X= vectorizer.transform(data_corpus)print(X.toarray())print(vocabulary.get_feature_names())

Παραγωγή:

[[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']

Επεξήγηση κώδικα

  1. Το CountVectorizer είναι η ενότητα που χρησιμοποιείται για την αποθήκευση του λεξιλογίου με βάση την τοποθέτηση των λέξεων σε αυτό. Αυτό εισάγεται από το sklearn
  2. Κάντε το αντικείμενο χρησιμοποιώντας την κλάση CountVectorizer.
  3. Γράψτε τα δεδομένα στη λίστα που πρόκειται να τοποθετηθεί στο CountVectorizer.
  4. Τα δεδομένα ταιριάζουν στο αντικείμενο που δημιουργήθηκε από την κλάση CountVectorizer.
  5. Εφαρμόστε μια προσέγγιση με τη λέξη για να μετρήσετε λέξεις στα δεδομένα χρησιμοποιώντας λεξιλόγιο. Εάν η λέξη ή το διακριτικό δεν είναι διαθέσιμο στο λεξιλόγιο, τότε η θέση του ευρετηρίου τίθεται στο μηδέν.
  6. Μεταβλητή στη γραμμή 5 που είναι x μετατρέπεται σε πίνακα (διαθέσιμη μέθοδος για x). Αυτό θα παρέχει τον αριθμό κάθε διακριτικού στην πρόταση ή στη λίστα που παρέχεται στη Γραμμή 3.
  7. Αυτό θα δείξει τα χαρακτηριστικά που αποτελούν μέρος του λεξιλογίου όταν προσαρμόζεται χρησιμοποιώντας τα δεδομένα στη γραμμή 4.

Στην προσέγγιση Latent Semantic, η σειρά αντιπροσωπεύει μοναδικές λέξεις, ενώ η στήλη αντιπροσωπεύει τον αριθμό χρόνου που αυτή η λέξη εμφανίζεται στο έγγραφο. Είναι μια αναπαράσταση λέξεων με τη μορφή του πίνακα εγγράφων. Όρος-συχνότητα αντίστροφη συχνότητα εγγράφου (TFIDF) χρησιμοποιείται για να μετρήσει τη συχνότητα των λέξεων στο έγγραφο που είναι η συχνότητα του όρου στο έγγραφο / συχνότητα του όρου σε ολόκληρο το σώμα.

Αδυναμία της μεθόδου Bag of Words

  • Αγνοεί τη σειρά της λέξης, για παράδειγμα, αυτό είναι κακό = κακό είναι αυτό.
  • Αγνοεί το πλαίσιο των λέξεων. Ας υποθέσουμε ότι αν γράψω την πρόταση «Αγαπούσε τα βιβλία. Η εκπαίδευση βρίσκεται καλύτερα στα βιβλία». Θα δημιουργούσε δύο διανύσματα ένα για το "Αγαπούσε τα βιβλία" και άλλο για "Η εκπαίδευση βρίσκεται καλύτερα στα βιβλία." Θα αντιμετώπιζε και τα δύο ορθογώνια που τα καθιστούν ανεξάρτητα, αλλά στην πραγματικότητα συνδέονται μεταξύ τους

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

Πώς λειτουργεί το Word2vec;

Το Word2vec μαθαίνει τη λέξη προβλέποντας το περιβάλλον του. Για παράδειγμα, ας πάρουμε τη λέξη " Αγαπά το ποδόσφαιρο".

Θέλουμε να υπολογίσουμε το word2vec για τη λέξη: loves.

Υποθέτω

loves = Vin. P(Vout / Vin) is calculatedwhere,Vin is the input word.P is the probability of likelihood.Vout is the output word.

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

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

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

Αρχιτεκτονική Word2vec

Υπάρχουν δύο αρχιτεκτονικές που χρησιμοποιούνται από το word2vec

  1. Συνεχής τσάντα λέξεων (CBOW)
  2. παραλείψτε το γραμμάριο

Πριν προχωρήσουμε περαιτέρω, ας συζητήσουμε γιατί αυτές οι αρχιτεκτονικές ή τα μοντέλα είναι σημαντικά από την άποψη της αναπαράστασης λέξεων. Η εκμάθηση της αναπαράστασης λέξεων είναι ουσιαστικά χωρίς επίβλεψη, αλλά απαιτούνται στόχοι / ετικέτες για την εκπαίδευση του μοντέλου. Το Skip-gram και το CBOW μετατρέπουν την μη επίβλεψη αναπαράσταση σε εποπτευόμενη φόρμα για εκπαίδευση μοντέλου.

Στο CBOW, η τρέχουσα λέξη προβλέπεται να χρησιμοποιεί το παράθυρο των παραθύρων περιβάλλοντος περιβάλλοντος. Για παράδειγμα, εάν τα w i-1 , w i-2 , w i + 1 , w i + 2 έχουν λέξεις ή περιβάλλον, αυτό το μοντέλο θα παρέχει w i

Το Skip-Gram αποδίδει αντίθετα από το CBOW που σημαίνει ότι προβλέπει τη δεδομένη ακολουθία ή περιβάλλον από τη λέξη. Μπορείτε να αντιστρέψετε το παράδειγμα για να το καταλάβετε. Εάν δοθεί w i , αυτό θα προβλέψει το πλαίσιο ή w i-1 , w i-2 , w i + 1 , w i + 2.

Το Word2vec παρέχει τη δυνατότητα επιλογής μεταξύ CBOW (συνεχής τσάντα λέξεων) και skim-gram. Τέτοιες παράμετροι παρέχονται κατά την εκπαίδευση του μοντέλου. Κάποιος μπορεί να έχει την επιλογή να χρησιμοποιεί αρνητικό δείγμα ή ιεραρχικό επίπεδο softmax.

Συνεχής τσάντα λέξεων.

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

Σχήμα Συνεχής τσάντα της αρχιτεκτονικής του Word

Ας υπολογίσουμε τις εξισώσεις μαθηματικά. Ας υποθέσουμε ότι το V είναι το μέγεθος του λεξιλογίου και το N είναι το μέγεθος του κρυφού επιπέδου. Η είσοδος ορίζεται ως {x i-1 , x i-2, x i + 1, x i + 2 }. Λαμβάνουμε τον πίνακα βάρους πολλαπλασιάζοντας το V * N. Ένας άλλος πίνακας λαμβάνεται πολλαπλασιάζοντας τον φορέα εισόδου με τον πίνακα βάρους. Αυτό μπορεί επίσης να γίνει κατανοητό με την ακόλουθη εξίσωση.

h = xi t Δ

όπου xi t ∧ W είναι ο φορέας εισόδου και η μήτρα βάρους αντίστοιχα,

Για να υπολογίσετε την αντιστοίχιση μεταξύ περιβάλλοντος και επόμενης λέξης, ανατρέξτε στην παρακάτω εξίσωση

u = προβλεπόμενη παρουσίαση * h

όπου η προβλεπόμενη παρουσίαση λαμβάνεται μοντέλο∧h στην παραπάνω εξίσωση.

Skip-Gram Μοντέλο

Η προσέγγιση Skip-Gram χρησιμοποιείται για την πρόβλεψη μιας πρότασης με δεδομένη λέξη εισαγωγής. Για να το καταλάβουμε καλύτερα, ας σχεδιάσουμε το διάγραμμα.

Σχήμα Skip-Gram Model

Κάποιος μπορεί να το αντιμετωπίσει ως το αντίστροφο του μοντέλου Continuous bag of word όπου η εισαγωγή είναι η λέξη και το μοντέλο παρέχει το πλαίσιο ή την ακολουθία. Μπορούμε επίσης να συμπεράνουμε ότι ο στόχος τροφοδοτείται στο επίπεδο εισόδου και εξόδου επαναλαμβάνεται πολλές φορές για να φιλοξενήσει τον επιλεγμένο αριθμό λέξεων περιβάλλοντος. Το διάνυσμα σφαλμάτων από όλο το επίπεδο εξόδου συνοψίζεται για να ρυθμίσετε τα βάρη μέσω μιας μεθόδου backpropagation.

Ποιο μοντέλο να επιλέξετε;

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

Η σχέση μεταξύ Word2vec και NLTK

Το NLTK είναι μια εργαλειοθήκη φυσικής γλώσσας. Χρησιμοποιείται για την προεπεξεργασία του κειμένου. Κάποιος μπορεί να κάνει διαφορετικές λειτουργίες, όπως μέρη επισήμανσης ομιλίας, λεματοποίηση, βλάβη, διακοπή αφαίρεσης λέξεων, αφαίρεση σπάνιων λέξεων ή λέξεων που χρησιμοποιούνται λιγότερο. Βοηθά στον καθαρισμό του κειμένου καθώς και στην προετοιμασία των χαρακτηριστικών από τις αποτελεσματικές λέξεις. Με τον άλλο τρόπο, το word2vec χρησιμοποιείται για σημασιολογική (στενά συνδεδεμένα αντικείμενα μαζί) και συντακτική (ακολουθία) αντιστοίχιση. Χρησιμοποιώντας το word2vec, μπορεί κανείς να βρει παρόμοιες λέξεις, ανόμοιες λέξεις, μείωση διαστάσεων και πολλές άλλες. Ένα άλλο σημαντικό χαρακτηριστικό του word2vec είναι να μετατρέψει την υψηλότερη διάσταση αναπαράσταση του κειμένου σε χαμηλότερη διάσταση διανυσμάτων.

Πού να χρησιμοποιήσετε το NLTK και το Word2vec;

Αν κάποιος πρέπει να ολοκληρώσει κάποιες εργασίες γενικού σκοπού όπως αναφέρθηκε παραπάνω όπως το tokenization, POS tagging και parsing κάποιος πρέπει να πάει για τη χρήση NLTK ενώ για την πρόβλεψη λέξεων σύμφωνα με κάποιο πλαίσιο, μοντελοποίηση θεμάτων ή ομοιότητα εγγράφων πρέπει να χρησιμοποιήσετε το Word2vec.

Σχέση NLTK και Word2vec με τη βοήθεια κώδικα

Το NLTK και το Word2vec μπορούν να χρησιμοποιηθούν μαζί για να βρουν αναπαράσταση παρόμοιων λέξεων ή συντακτική αντιστοίχιση. Το κιτ εργαλείων NLTK μπορεί να χρησιμοποιηθεί για τη φόρτωση πολλών πακέτων που συνοδεύουν το NLTK και το μοντέλο μπορεί να δημιουργηθεί χρησιμοποιώντας το word2vec. Στη συνέχεια μπορεί να δοκιμαστεί με τις λέξεις σε πραγματικό χρόνο. Ας δούμε τον συνδυασμό και των δύο στον ακόλουθο κώδικα. Πριν από την περαιτέρω επεξεργασία, ρίξτε μια ματιά στην εταιρεία που παρέχει η NLTK. Μπορείτε να πραγματοποιήσετε λήψη χρησιμοποιώντας την εντολή

nltk(nltk.download('all'))

Το Figure Corpora κατεβάστηκε χρησιμοποιώντας το NLTK

Δείτε το στιγμιότυπο οθόνης για τον κωδικό.

import nltkimport gensimfrom nltk.corpus import abcmodel= 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)]

Επεξήγηση του κώδικα

  1. Εισάγεται η βιβλιοθήκη nltk από όπου μπορείτε να κατεβάσετε το abc corpus το οποίο θα χρησιμοποιήσουμε στο επόμενο βήμα.
  2. Το Gensim εισάγεται. Εάν το Gensim δεν είναι εγκατεστημένο, εγκαταστήστε το χρησιμοποιώντας την εντολή "pip3 install gensim". Δείτε το παρακάτω στιγμιότυπο οθόνης.

Εικόνα Εγκατάσταση του Gensim με χρήση PIP

  1. εισαγάγετε το corpus abc που έχει ληφθεί χρησιμοποιώντας το nltk.download ('abc').
  2. Περάστε τα αρχεία στο μοντέλο word2vec που εισάγεται χρησιμοποιώντας το Gensim ως προτάσεις.
  3. Το λεξιλόγιο αποθηκεύεται με τη μορφή της μεταβλητής.
  4. Το μοντέλο δοκιμάζεται σε δείγμα word science καθώς αυτά τα αρχεία σχετίζονται με την επιστήμη.
  5. Εδώ η παρόμοια λέξη της «επιστήμης» προβλέπεται από το μοντέλο.

Ενεργοποιητές και Word2Vec

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

Σχήμα Κατανόηση της λειτουργίας ενεργοποίησης

Εδώ x1, x2,… x4 είναι ο κόμβος του νευρικού δικτύου.

w1, w2, w3 είναι το βάρος του κόμβου,

∑ είναι η άθροιση όλου του βάρους και της τιμής κόμβου που λειτουργούν ως λειτουργία ενεργοποίησης.

Γιατί η λειτουργία ενεργοποίησης;

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

Πώς υπολογίζεται το επίπεδο ενεργοποίησης στη λέξη ενσωμάτωση (word2vec)

Το Softmax Layer (κανονικοποιημένη εκθετική συνάρτηση) είναι η συνάρτηση επιπέδου εξόδου που ενεργοποιεί ή ενεργοποιεί κάθε κόμβο. Μια άλλη προσέγγιση που χρησιμοποιείται είναι το Ιεραρχικό softmax όπου η πολυπλοκότητα υπολογίζεται από το O (log 2 V) όπου το softmax είναι O (V) όπου το V είναι το μέγεθος του λεξιλογίου. Η διαφορά μεταξύ αυτών είναι η μείωση της πολυπλοκότητας στο ιεραρχικό στρώμα softmax. Για να κατανοήσετε τη λειτουργικότητά του (Ιεραρχική softmax), ανατρέξτε στο παρακάτω παράδειγμα:

Σχήμα Ιεραρχική δομή που μοιάζει με δέντρο

Ας υποθέσουμε ότι θέλουμε να υπολογίσουμε την πιθανότητα να παρατηρήσουμε τη λέξη αγάπη δεδομένου ενός συγκεκριμένου πλαισίου. Η ροή από τη ρίζα προς τον κόμβο των φύλλων θα είναι η πρώτη κίνηση στον κόμβο 2 και μετά στον κόμβο 5. Επομένως, εάν είχαμε το μέγεθος του λεξιλογίου 8, χρειάζονται μόνο τρεις υπολογισμοί. Έτσι επιτρέπει την αποσύνθεση, τον υπολογισμό της πιθανότητας μιας λέξης ( αγάπη ).

Ποιες άλλες επιλογές είναι διαθέσιμες εκτός από το Hierarchical Softmax;

Εάν μιλάμε με μια γενική έννοια για τις επιλογές ενσωμάτωσης λέξεων που διατίθενται είναι το διαφοροποιημένο Softmax, το CNN-Softmax, η δειγματοληψία σπουδαιότητας, η προσαρμογή της προσαρμογής της σημασίας, οι εκτιμήσεις αντίθεσης θορύβου, η αρνητική δειγματοληψία, η αυτο-κανονικοποίηση και η σπάνια κανονικοποίηση.

Μιλώντας συγκεκριμένα για το Word2vec έχουμε διαθέσιμο αρνητικό δείγμα.

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

Τι συμπέρασμα μπορεί να εξαχθεί;

Οι ενεργοποιητές πυροδοτούν τους νευρώνες όπως οι νευρώνες μας πυροδοτούνται χρησιμοποιώντας τα εξωτερικά ερεθίσματα. Το στρώμα Softmax είναι μία από τις λειτουργίες επιπέδου που εξάγει τους νευρώνες σε περίπτωση ενσωμάτωσης λέξεων. Στο word2vec έχουμε επιλογές όπως ιεραρχικό softmax και αρνητικό δείγμα. Χρησιμοποιώντας ενεργοποιητές, μπορεί κανείς να μετατρέψει τη γραμμική συνάρτηση σε μη γραμμική συνάρτηση, και ένας πολύπλοκος αλγόριθμος μηχανικής μάθησης μπορεί να εφαρμοστεί χρησιμοποιώντας τέτοια.

Τι είναι το Gensim;

Το Gensim είναι μια εργαλειοθήκη μοντελοποίησης θεμάτων που εφαρμόζεται στο python. Το μοντέλο μοντελοποίησης ανακαλύπτει κρυφή δομή στο σώμα κειμένου. Το Word2vec εισάγεται από το κιτ εργαλείων Gensim. Λάβετε υπόψη ότι το Gensim όχι μόνο παρέχει μια εφαρμογή του word2vec, αλλά και του Doc2vec και του FastText, αλλά αυτό το σεμινάριο αφορά το word2vec, οπότε θα εμμείνουμε στο τρέχον θέμα.

Εφαρμογή του word2vec με χρήση του Gensim

Μέχρι τώρα έχουμε συζητήσει τι είναι το word2vec, τις διαφορετικές αρχιτεκτονικές του, γιατί υπάρχει μια αλλαγή από μια τσάντα λέξεων σε word2vec, η σχέση μεταξύ word2vec και NLTK με ζωντανές λειτουργίες κώδικα και ενεργοποίησης. Σε αυτήν την ενότητα, θα εφαρμοστεί το word2vec χρησιμοποιώντας το Gensim

Βήμα 1) Συλλογή δεδομένων

Το πρώτο βήμα για την εφαρμογή οποιουδήποτε μοντέλου μηχανικής εκμάθησης ή την εφαρμογή φυσικής γλώσσας είναι η συλλογή δεδομένων

Παρατηρήστε τα δεδομένα για να δημιουργήσετε ένα έξυπνο chatbot.

[{"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 jsonjson_file =’intents.json'with open('intents.json','r') as f:data = json.load(f)

Επεξήγηση του CODE.

  1. Δεδομένου ότι τα δεδομένα έχουν τη μορφή json, επομένως εισάγεται το json
  2. Το αρχείο αποθηκεύεται στη μεταβλητή
  3. Το αρχείο είναι ανοιχτό και φορτώνεται σε μεταβλητή δεδομένων

Τώρα εισάγονται δεδομένα και ήρθε η ώρα να μετατρέψετε δεδομένα σε πλαίσιο δεδομένων. Ανατρέξτε στον παρακάτω κώδικα για να δείτε το επόμενο βήμα

import pandas as pddf = pd.DataFrame(data)df['patterns'] = df['patterns'].apply(', '.join)

Επεξήγηση του CODE

1. Τα δεδομένα μετατρέπονται σε πλαίσιο δεδομένων χρησιμοποιώντας pandas που εισήχθησαν παραπάνω.

2. Θα μετατρέψει τη λίστα σε μοτίβα στηλών σε συμβολοσειρά.

from nltk.corpus import stopwordsfrom textblob import Wordstop = 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. Όλες οι λέξεις του κειμένου μετατρέπονται σε πεζά χρησιμοποιώντας τη συνθήκη και τη λειτουργία λάμδα. Η συνάρτηση Lambda είναι μια ανώνυμη συνάρτηση.

3. Όλες οι σειρές του κειμένου στο πλαίσιο δεδομένων ελέγχονται για σημεία στίξης και φιλτράρονται.

4. Χαρακτήρες όπως αριθμοί ή τελείες αφαιρούνται χρησιμοποιώντας μια κανονική έκφραση.

5. Τα ψηφία αφαιρούνται από το κείμενο.

6. Οι λέξεις διακοπής αφαιρούνται σε αυτό το στάδιο.

7. Οι λέξεις φιλτράρονται τώρα και η διαφορετική μορφή της ίδιας λέξης αφαιρείται χρησιμοποιώντας λεμετοποίηση. Με αυτά, ολοκληρώσαμε την προεπεξεργασία δεδομένων.

Παραγωγή:

, patterns, responses, tag0,hi one talk hello hi available,"['Hello, thanks for contacting us', 'Good to see you here', ' Hi there, how may I assist you?']",welcome1,bye see later goodbye come back soon,"['See you later, thanks for visiting', 'have a great day ahead', 'Wish you Come back again soon.']",goodbye2,thanks helping thank guidance thats helpful kind,"['Happy to help!', 'Any time!', 'My pleasure', 'It is my duty to help you']",thankful3,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']",hoursopening4,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 module word2vec. Πρέπει να εισαγάγουμε το word2vec από το Gensim. Ας το κάνουμε αυτό, και στη συνέχεια θα χτίσουμε και στο τελικό στάδιο θα ελέγξουμε το μοντέλο σε δεδομένα πραγματικού χρόνου.

from gensim.models import 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. Δημιουργήθηκε η μεγαλύτερη_ λίστα όπου προσαρτάται η εσωτερική λίστα. Αυτή είναι η μορφή που τροφοδοτείται στο μοντέλο Word2Vec.

2. Ο βρόχος εφαρμόζεται και κάθε καταχώρηση της στήλης προτύπων του πλαισίου δεδομένων επαναλαμβάνεται.

3. Κάθε στοιχείο των προτύπων στηλών χωρίζεται και αποθηκεύεται στον εσωτερικό κατάλογο li

4. Η εσωτερική λίστα επισυνάπτεται με την εξωτερική λίστα.

5. Αυτή η λίστα παρέχεται στο μοντέλο Word2Vec. Ας καταλάβουμε μερικές από τις παραμέτρους που παρέχονται εδώ

Ελάχιστος αριθμός: Θα αγνοήσει όλες τις λέξεις με συνολική συχνότητα χαμηλότερη από αυτήν.

Μέγεθος: Λέει τη διάσταση των διανυσμάτων λέξης.

Εργαζόμενοι: Αυτά είναι τα νήματα για την εκπαίδευση του μοντέλου

Υπάρχουν επίσης άλλες διαθέσιμες επιλογές, και μερικές σημαντικές εξηγούνται παρακάτω

Παράθυρο: Μέγιστη απόσταση μεταξύ της τρέχουσας και της προβλεπόμενης λέξης σε μια πρόταση.

Sg: Πρόκειται για έναν αλγόριθμο εκπαίδευσης και 1 για το skip-gram και 0 για μια συνεχή σακούλα λέξεων. Τα συζητήσαμε λεπτομερώς παραπάνω.

Hs: Αν είναι 1, τότε χρησιμοποιούμε ιεραρχικό softmax για εκπαίδευση και αν 0 χρησιμοποιείται αρνητική δειγματοληψία.

Άλφα: Αρχικό ποσοστό εκμάθησης

Ας εμφανίσουμε τον τελικό κώδικα παρακάτω

#list of libraries used by the codeimport stringfrom gensim.models import Word2Vecimport loggingfrom nltk.corpus import stopwordsfrom textblob import Wordimport jsonimport pandas as pd#data in json formatjson_file = 'intents.json'with open('intents.json','r') as f:data = json.load(f)#displaying the list of stopwordsstop = stopwords.words('english')#dataframedf = pd.DataFrame(data)df['patterns'] = df['patterns'].apply(', '.join)# print(df['patterns'])#print(df['patterns'])#cleaning the data using the NLP approachprint(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 listbigger_list=[]for i in df['patterns']:li = list(i.split(" "))bigger_list.append(li)#structure of data to be taken by the model.word2vecprint("Data format for the overall list:",bigger_list)#custom data is fed to machine for further processingmodel = 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 = λίστα (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)]

συμπέρασμα

  • Το Word Embedding είναι ένας τύπος αναπαράστασης λέξεων που επιτρέπει την κατανόηση λέξεων με παρόμοιο νόημα από αλγόριθμους μηχανικής μάθησης
  • Το Word Embedding χρησιμοποιείται για τον υπολογισμό παρόμοιων λέξεων, τη δημιουργία μιας ομάδας σχετικών λέξεων, Δυνατότητα ταξινόμησης κειμένου, Ομαδοποίηση εγγράφων, Επεξεργασία φυσικής γλώσσας
  • Το Word2vec είναι ένα ρηχό νευρωνικό δίκτυο δύο επιπέδων για την παραγωγή ενσωμάτωσης λέξεων για καλύτερη αναπαράσταση λέξεων
  • Το Word2vec αντιπροσωπεύει λέξεις σε αναπαράσταση διανυσμάτων. Οι λέξεις αντιπροσωπεύονται με τη μορφή διανυσμάτων και η τοποθέτηση γίνεται με τέτοιο τρόπο ώστε παρόμοιες λέξεις με νόημα να εμφανίζονται μαζί και ανόμοιες λέξεις να βρίσκονται μακριά
  • Το Word2vec χρησιμοποίησε 2 αρχιτεκτονικές Continuous Bag of Word (CBOW) και skip gram
  • Το CBOW είναι αρκετές φορές ταχύτερο από το γραμμάριο παράλειψης και παρέχει καλύτερη συχνότητα για συχνές λέξεις, ενώ το γραμμάριο παράλειψης χρειάζεται μικρό αριθμό δεδομένων εκπαίδευσης και αντιπροσωπεύει ακόμη και σπάνιες λέξεις ή φράσεις.
  • Το NLTK και το word2vec μπορούν να χρησιμοποιηθούν μαζί για να δημιουργήσουν ισχυρές εφαρμογές
  • Η συνάρτηση ενεργοποίησης του νευρώνα καθορίζει την έξοδο αυτού του νευρώνα δεδομένου ενός συνόλου εισόδων. Στο word2vec. Το Softmax Layer (κανονικοποιημένη εκθετική συνάρτηση) είναι η συνάρτηση επιπέδου εξόδου που ενεργοποιεί ή ενεργοποιεί κάθε κόμβο. Το Word2vec διαθέτει επίσης αρνητικό δείγμα
  • Το Gensim είναι μια εργαλειοθήκη μοντελοποίησης θεμάτων που εφαρμόζεται στο python