Το να δημιουργήσετε το δικό σας μοντέλο ανάλυσης συναισθημάτων μπορεί να φαίνεται τρομακτικό. Αυτός ο οδηγός σας καθοδηγεί στα βήματα για να ξεκινήσετε.
Η ανάλυση συναισθήματος είναι μια τεχνική επεξεργασίας φυσικής γλώσσας (NLP) που προσδιορίζει τη στάση πίσω από ένα κείμενο. Είναι επίσης γνωστό ως εξόρυξη γνώμης. Ο στόχος της ανάλυσης συναισθήματος είναι να προσδιορίσει εάν ένα συγκεκριμένο κείμενο έχει θετικό, αρνητικό ή ουδέτερο συναίσθημα. Χρησιμοποιείται ευρέως από τις επιχειρήσεις για την αυτόματη ταξινόμηση του συναισθήματος στις κριτικές πελατών. Η ανάλυση μεγάλου όγκου κριτικών βοηθά στην απόκτηση πολύτιμων πληροφοριών για τις προτιμήσεις των πελατών.
Ρύθμιση του περιβάλλοντος σας
Πρέπει να είστε εξοικειωμένοι με Βασικά στοιχεία Python να ακολουθήσει. Πλοηγηθείτε στο Google Colab ή ανοίξτε το Jupyter Notebook. Στη συνέχεια, δημιουργήστε ένα νέο σημειωματάριο. Εκτελέστε την ακόλουθη εντολή για να εγκαταστήσετε τις απαιτούμενες βιβλιοθήκες στο περιβάλλον σας.
Ο πλήρης πηγαίος κώδικας αυτού του έργου είναι διαθέσιμος σε αυτό Αποθετήριο GitHub.
! pip install tensorflow scikit-learn pandas numpy pickle5
Θα χρησιμοποιήσετε το NumPy και βιβλιοθήκη pandas για χειρισμό του συνόλου δεδομένων. TensorFlow για τη δημιουργία και την εκπαίδευση του μοντέλου μηχανικής μάθησης. Scikit-learn για τον διαχωρισμό του συνόλου δεδομένων σε σετ εκπαίδευσης και δοκιμών. Τέλος, θα χρησιμοποιήσετε το pickle5 για σειριοποίηση και αποθήκευση του αντικειμένου tokenizer.
Εισαγωγή των Απαιτούμενων Βιβλιοθηκών
Εισαγάγετε τις απαραίτητες βιβλιοθήκες που θα χρησιμοποιήσετε για την προεπεξεργασία των δεδομένων και τη δημιουργία του μοντέλου.
εισαγωγή μουδιασμένος όπως και np
εισαγωγή παντα όπως και πδ
εισαγωγή tensorflow όπως και tf
από sklearn.model_selection εισαγωγή train_test_split
από sklearn.metrics εισαγωγή accuracy_score
από tensorflow.keras.προεπεξεργασία.κείμενο εισαγωγή Tokenizer
από tensorflow.keras.προεπεξεργασία.ακολουθία εισαγωγή pad_sequences
από tensorflow.keras.μοντέλα εισαγωγή Ακολουθητικός
από tensorflow.keras.layers εισαγωγή Embedding, Conv1D, GlobalMaxPooling1D, Dense, Dropout
εισαγωγή τουρσί5 όπως και πίκλα
Θα χρησιμοποιήσετε τις κλάσεις που εισάγετε από τις ενότητες αργότερα στον κώδικα.
Φόρτωση του συνόλου δεδομένων
Εδώ, θα χρησιμοποιήσετε το σύνολο δεδομένων Trip Advisor Hotel Reviews από Kaggle για τη δημιουργία του μοντέλου ανάλυσης συναισθήματος.
df = pd.read_csv('/content/tripadvisor_hotel_reviews.csv')
εκτύπωση (df.head())
Φορτώστε το σύνολο δεδομένων και εκτυπώστε τις πρώτες πέντε σειρές του. Η εκτύπωση των πρώτων πέντε γραμμών θα σας βοηθήσει να ελέγξετε τα ονόματα στηλών του συνόλου δεδομένων σας. Αυτό θα είναι κρίσιμο κατά την προεπεξεργασία του συνόλου δεδομένων.
Το σύνολο δεδομένων Trip Advisor Hotel Reviews έχει μια στήλη ευρετηρίου, μια στήλη Αξιολόγηση και μια στήλη Βαθμολογία.
Προεπεξεργασία δεδομένων
Επίλεξε το Ανασκόπηση και Εκτίμηση στήλες από το σύνολο δεδομένων. Δημιουργήστε μια νέα στήλη με βάση τη στήλη Βαθμολογία και ονομάστε την συναίσθημα. Εάν η βαθμολογία είναι μεγαλύτερη από 3, χαρακτηρίστε το συναίσθημα ως θετικός. Εάν η βαθμολογία είναι μικρότερη από 3, επισημάνετε την ως αρνητικός. Εάν η βαθμολογία είναι ακριβώς 3, χαρακτηρίστε την ως ουδέτερος.
Επιλέξτε μόνο τις στήλες Αναθεώρηση και συναίσθημα από το σύνολο δεδομένων. Ανακατέψτε τις σειρές τυχαία και επαναφέρετε το ευρετήριο του πλαισίου δεδομένων. Η ανακάτεμα και η επαναφορά διασφαλίζουν ότι τα δεδομένα κατανέμονται τυχαία, κάτι που είναι απαραίτητο για τη σωστή εκπαίδευση και δοκιμή του μοντέλου.
df = df[['Ανασκόπηση', 'Εκτίμηση']]
df['συναίσθημα'] = df['Εκτίμηση'].ισχύουν(λάμδα Χ: 'θετικός'αν x > 3
αλλού'αρνητικός'αν x < 3
αλλού'ουδέτερος')
df = df[['Ανασκόπηση', 'συναίσθημα']]
df = df.sample (frac=1.reset_index (drop=Αληθής)
Μετατρέψτε το Ανασκόπηση κείμενο σε μια ακολουθία ακεραίων χρησιμοποιώντας το tokenizer. Αυτό δημιουργεί ένα λεξικό με τις μοναδικές λέξεις που υπάρχουν στο κείμενο κριτικής και αντιστοιχίζει κάθε λέξη σε μια μοναδική ακέραια τιμή. Χρησιμοποιήστε το pad_sequences λειτουργία από την Keras για να διασφαλίσει ότι όλες οι ακολουθίες ανασκόπησης έχουν το ίδιο μήκος.
tokenizer = Tokenizer (αριθμός_λέξεων=5000, oov_token='' )
tokenizer.fit_on_texts (df['Ανασκόπηση'])
word_index = tokenizer.word_index
sequences = tokenizer.texts_to_sequences (df['Ανασκόπηση'])
padded_sequences = pad_sequences (ακολουθίες, maxlen=100, περικόπτοντας='Θέση')
Μετατρέψτε τις ετικέτες συναισθημάτων σε κωδικοποίηση One-hot.
sentiment_labels = pd.get_dummies (df['συναίσθημα']).αξίες
Η κωδικοποίηση One-hot αντιπροσωπεύει κατηγορηματικά δεδομένα σε μια μορφή που είναι πιο εύκολη για τα μοντέλα σας να δουλέψουν.
Διαχωρισμός του συνόλου δεδομένων σε σύνολα εκπαίδευσης και δοκιμών
Χρησιμοποιήστε το scikit-learn για να χωρίσετε τυχαία το σύνολο δεδομένων σε σετ εκπαίδευσης και δοκιμών. Θα χρησιμοποιήσετε το σετ εκπαίδευσης για να εκπαιδεύσετε το μοντέλο ώστε να ταξινομεί τα συναισθήματα των κριτικών. Και θα χρησιμοποιήσετε το σετ δοκιμών για να αποκτήσετε πρόσβαση στο πόσο καλό είναι το μοντέλο στην ταξινόμηση νέων αφανών κριτικών.
x_train, x_test, y_train, y_test = train_test_split (padded_sequences, sentiment_labels, test_size=0.2)
Το μέγεθος του διαχωρισμού δεδομένων είναι 0,2. Αυτό σημαίνει ότι το 80% των δεδομένων θα εκπαιδεύσει το μοντέλο. Και το υπόλοιπο 20% θα δοκιμάσει την απόδοση του μοντέλου.
Δημιουργία Νευρωνικού Δικτύου
Δημιουργώ ένα νευρικό σύστημα με έξι στρώσεις.
μοντέλο = Διαδοχική()
model.add (Ενσωμάτωση(5000, 100, input_length=100))
model.add (Conv1D(64, 5, ενεργοποίηση="relu"))
model.add (GlobalMaxPooling1D())
model.add (Πυκνό(32, ενεργοποίηση="relu"))
model.add (Dropout(0.5))
model.add (Πυκνό(3, ενεργοποίηση='softmax'))
model.compile (βελτιστοποιητής='Αδάμ', απώλεια='categorical_crossentropy', μετρήσεις=['ακρίβεια'])
model.summary()
Το πρώτο στρώμα του νευρωνικού δικτύου είναι ένα στρώμα ενσωμάτωσης. Αυτό το στρώμα μαθαίνει μια πυκνή αναπαράσταση λέξεων στο λεξιλόγιο. Το δεύτερο επίπεδο είναι ένα επίπεδο Conv1D με 64 φίλτρα και μέγεθος πυρήνα 5. Αυτό το επίπεδο εκτελεί λειτουργίες συνέλιξης στις ακολουθίες εισόδου, χρησιμοποιώντας ένα μικρό συρόμενο παράθυρο μεγέθους 5.
Το τρίτο επίπεδο μειώνει την ακολουθία των χαρτών χαρακτηριστικών σε ένα μόνο διάνυσμα. Παίρνει τη μέγιστη τιμή σε κάθε χάρτη χαρακτηριστικών. Το τέταρτο στρώμα εκτελεί έναν γραμμικό μετασχηματισμό στο διάνυσμα εισόδου. Το πέμπτο στρώμα ορίζει τυχαία ένα κλάσμα των μονάδων εισόδου στο 0 κατά τη διάρκεια της προπόνησης. Αυτό βοηθά στην αποφυγή υπερβολικής προσαρμογής. Το τελικό στρώμα μετατρέπει την έξοδο σε κατανομή πιθανότητας στις τρεις πιθανές κλάσεις: θετική, ουδέτερη και αρνητική.
Εκπαίδευση του Νευρωνικού Δικτύου
Προσαρμόστε τα σετ εκπαίδευσης και δοκιμών στο μοντέλο. Εκπαιδεύστε το μοντέλο για δέκα εποχές. Μπορείτε να αλλάξετε τον αριθμό των εποχών σύμφωνα με τις προτιμήσεις σας.
model.fit (x_train, y_train, epochs=10, batch_size=32, validation_data=(x_test, y_test))
Μετά από κάθε εποχή, αξιολογείται η απόδοση του μοντέλου στο σύνολο δοκιμών.
Αξιολόγηση της Απόδοσης του Εκπαιδευμένου Μοντέλου
Χρησιμοποιήστε το model.predict() μέθοδος πρόβλεψης των ετικετών συναισθήματος για το σύνολο δοκιμής. Υπολογίστε τη βαθμολογία ακρίβειας χρησιμοποιώντας το accuracy_score() λειτουργία από το scikit-learn.
y_pred = np.argmax (model.predict (x_test), axis=-1)
Τυπώνω("Ακρίβεια:", accuracy_score (np.argmax (y_test, axis=-1), y_pred))
Η ακρίβεια αυτού του μοντέλου είναι περίπου 84%.
Αποθήκευση του μοντέλου
Αποθηκεύστε το μοντέλο χρησιμοποιώντας το model.save() μέθοδος. Χρησιμοποιήστε pickle για σειριοποίηση και αποθήκευση του αντικειμένου tokenizer.
model.save('sentiment_analysis_model.h5')
με Άνοιξε('tokenizer.pickle', 'wb') όπως και λαβή:
pickle.dump (tokenizer, λαβή, πρωτόκολλο=τουρσί. ΥΨΗΛΟΣ_ΠΡΩΤΟΚΟΛΛΟ)
Το αντικείμενο tokenizer θα κάνει το δικό σας κείμενο εισόδου και θα το προετοιμάσει για τροφοδοσία στο εκπαιδευμένο μοντέλο.
Χρησιμοποιώντας το μοντέλο για να ταξινομήσετε το συναίσθημα του δικού σας κειμένου
Αφού δημιουργήσετε και αποθηκεύσετε το μοντέλο, μπορείτε να το χρησιμοποιήσετε για να ταξινομήσετε το συναίσθημα του δικού σας κειμένου. Πρώτα, φορτώστε το αποθηκευμένο μοντέλο και το tokenizer.
# Φορτώστε το αποθηκευμένο μοντέλο και το tokenizer
εισαγωγή κεράς
model = keras.models.load_model('sentiment_analysis_model.h5')
με Άνοιξε('tokenizer.pickle', 'rb') όπως και λαβή:
tokenizer = pickle.load (λαβή)
Καθορίστε μια συνάρτηση για την πρόβλεψη της αίσθησης του κειμένου εισαγωγής.
defpredict_sentiment(κείμενο):
# Κάντε tokenize και συμπληρώστε το κείμενο εισαγωγής
text_sequence = tokenizer.texts_to_sequences([κείμενο])
text_sequence = pad_sequences (text_sequence, maxlen=100)
# Κάντε μια πρόβλεψη χρησιμοποιώντας το εκπαιδευμένο μοντέλο
predicted_rating = model.predict (text_sequence)[0]
αν np.argmax (προβλεπόμενη_αξιολόγηση) == 0:
ΕΠΙΣΤΡΟΦΗ'Αρνητικός'
ελιφ np.argmax (προβλεπόμενη_αξιολόγηση) == 1:
ΕΠΙΣΤΡΟΦΗ'Ουδέτερος'
αλλού:
ΕΠΙΣΤΡΟΦΗ'Θετικός'
Τέλος, προβλέψτε το δικό σας κείμενο.
κείμενο_εισαγωγή = «Μου άρεσε πολύ η διαμονή μου σε αυτό το ξενοδοχείο. Το προσωπικό ήταν καταπληκτικό και το δωμάτιο ήταν φανταστικό!»
predicted_sentiment = predict_sentiment (εισαγωγή_κειμένου)
εκτύπωση (predicted_sentiment)
Το προβλεπόμενο συναίσθημα της παραπάνω ανασκόπησης έχει ως εξής:
Το μοντέλο είναι σε θέση να ταξινομήσει σωστά τα συναισθήματα και των τριών κριτικών.
Πρόβλεψη συναισθημάτων με χρήση προεκπαιδευμένων μοντέλων
Μερικές φορές στη μηχανική εκμάθηση, μπορεί να έχετε την πρόκληση να βρείτε το σωστό σύνολο δεδομένων. Μπορεί επίσης να σας λείπουν οι πόροι για να δημιουργήσετε το δικό σας σύνολο δεδομένων. Εδώ έρχονται τα προεκπαιδευμένα μοντέλα. Πρέπει να ξέρετε πώς να χρησιμοποιείτε το API τους και να τους αφήνετε να χειρίζονται τα υπόλοιπα.