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

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

Μπορείτε να δημιουργήσετε το δικό σας φίλτρο ανεπιθύμητης αλληλογραφίας χρησιμοποιώντας ως κύριες βιβλιοθήκες NLTK, regex και scikit-learn. Θα χρειαστείτε επίσης ένα σύνολο δεδομένων για να εκπαιδεύσετε το μοντέλο σας.

Κατανόηση του συνόλου δεδομένων σας

Το "Spam Classification for Basic NLP" είναι δωρεάν διαθέσιμο Δεδομένα Kaggle. Περιέχει ένα μείγμα ανεπιθύμητων μηνυμάτων και μηνυμάτων ακατέργαστης αλληλογραφίας. Έχει 5.796 σειρές και 3 στήλες.

ο ΚΑΤΗΓΟΡΙΑ

instagram viewer
Η στήλη υποδεικνύει εάν ένα μήνυμα είναι ανεπιθύμητο ή μη. Το νούμερο ένα αντιπροσωπεύει spam ενώ το μηδέν αντιπροσωπεύει το ham. ο ΜΗΝΥΜΑ στήλη περιέχει την πραγματική ακατέργαστη αλληλογραφία. ο ΟΝΟΜΑ ΑΡΧΕΙΟΥ κατηγορία είναι ένα μοναδικό αναγνωριστικό μηνύματος.

Προετοιμασία του Περιβάλλοντος σας

Για να ακολουθήσετε, θα πρέπει να έχετε ένα βασική κατανόηση της Python και μηχανικής μάθησης. Θα πρέπει επίσης να αισθάνεστε άνετα να εργάζεστε με Google Colab ή Σημειωματάριο Jupyter.

Για το Jupyter Notebook, μεταβείτε στον φάκελο στον οποίο θέλετε να βρίσκεται το έργο. Δημιουργήστε ένα νέο εικονικό περιβάλλον και εκτελέστε το Σημειωματάριο Jupyter από αυτόν τον φάκελο. Το Google Colab δεν χρειάζεται αυτό το βήμα. Δημιουργήστε ένα νέο σημειωματάριο είτε στο Google Colab είτε στο Σημειωματάριο Jupyter.

Ο πλήρης πηγαίος κώδικας και το σύνολο δεδομένων είναι διαθέσιμα σε α Αποθετήριο GitHub.

Εκτελέστε την ακόλουθη μαγική εντολή για να εγκαταστήσετε τις απαιτούμενες βιβλιοθήκες.

!pip install nltk scikit-learn regex numpy pandas

Θα χρησιμοποιήσετε:

  • NLTK για επεξεργασία φυσικής γλώσσας (NLP).
  • scikit-learn για τη δημιουργία του μοντέλου μηχανικής μάθησης.
  • regex για εργασία με κανονικές εκφράσεις.
  • NumPy για εργασία με πίνακες.
  • Panda για να χειριστούν το σύνολο δεδομένων σας.

Εισαγωγή Βιβλιοθηκών

Εισαγάγετε τις βιβλιοθήκες που εγκαταστήσατε στο περιβάλλον σας. Εισαγάγετε τη βιβλιοθήκη regex ως re και scikit-learn ως sklearn.

εισαγωγή παντα όπως και πδ
εισαγωγή μουδιασμένος όπως και np
εισαγωγή nltk
από nltk.stem εισαγωγή WordNetLemmatizer
από nltk.corpus εισαγωγή ενδιάμεσες λέξεις
εισαγωγή σχετικά με
από sklearn.model_selection εισαγωγή train_test_split
από sklearn.metrics εισαγωγή ταξινόμηση_αναφοράς
από sklearn.feature_extraction.text εισαγωγή CountVetorizer
από sklearn.feature_extraction.text εισαγωγή TfidfVetorizer

Θα χρησιμοποιήσετε λειτουργικές μονάδες WordNetLemmatizer και stopwords από το NLTK για την προεπεξεργασία των πρωτογενών μηνυμάτων στο σύνολο δεδομένων. Θα χρησιμοποιήσετε εισαγόμενες μονάδες sklearn κατά την κατασκευή μοντέλων.

Προεπεξεργασία των Δεδομένων

Καλέστε τη συνάρτηση pandas read_csv για να φορτώσετε το σύνολο δεδομένων. Βεβαιωθείτε ότι αποθηκεύετε το σύνολο δεδομένων στον ίδιο κατάλογο με το έργο σας. Εμφανίστε τις πέντε πρώτες σειρές του συνόλου δεδομένων για να δείτε μια εικόνα του συνόλου δεδομένων.

df = pd.read_csv('/content/Spam Ανεπεξέργαστο κείμενο ηλεκτρονικού ταχυδρομείου για το NLP.csv')
df.head()

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

df.drop('ΟΝΟΜΑ ΑΡΧΕΙΟΥ', άξονας=1, εντοπίζω=Αληθής)

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

df. CATEGORY.value_counts()

Πραγματοποιήστε λήψη των ενδιάμεσων λέξεων corpus από τη βιβλιοθήκη NLTK. Οι ενδιάμεσες λέξεις είναι ένα σύνολο λέξεων που απαντώνται συχνά. Η προεπεξεργασία τους αφαιρεί από τα μηνύματα. Φορτώστε τις αγγλικές λέξεις-κλειδιά και αποθηκεύστε τις σε μια μεταβλητή ενδιάμεσης λέξης.

nltk.download("σταματίες")
stopword = nltk.corpus.stopwords.words('Αγγλικά')

Κατεβάστε το ανοιχτό Multilingual WordNet. Είναι μια λεξιλογική βάση δεδομένων αγγλικών λέξεων και της σημασιολογικής τους σημασίας.

nltk.download('omw-1,4')

Κατεβάστε το wordnet corpus. Θα το χρησιμοποιήσετε για ταξινόμηση κειμένου. Δημιουργήστε ένα αντικείμενο WordNetLemmatizer(). Θα χρησιμοποιήσετε το αντικείμενο κατά τη λήμματοποίηση. Η Lemmatization είναι μια τεχνική που χρησιμοποιείται στο NLP για τη μείωση των παραγώγων μορφών λέξεων στη σημασία τους στο λεξικό.

Για παράδειγμα: Η μείωση της λέξης "γάτες" θα σας δώσει "γάτα". Μια λέξη μετά τη λημματοποίηση γίνεται λήμμα.

nltk.download(«wordnet»)
lemmatizer = WordNetLemmatizer()

Δημιουργήστε μια κενή λίστα που θα χρησιμοποιήσετε για να αποθηκεύσετε τα προεπεξεργασμένα μηνύματα.

corpus=[]

Δημιουργήστε έναν βρόχο for για την επεξεργασία κάθε μηνύματος στη στήλη MESSAGE του συνόλου δεδομένων. Καταργήστε όλους τους μη αλφαριθμητικούς χαρακτήρες. Μετατρέψτε το μήνυμα σε πεζά. Χωρίστε το κείμενο σε λέξεις. Αφαιρέστε τα ενδιάμεσα και νομοθετήστε τις λέξεις. Μετατρέψτε τις λέξεις ξανά σε προτάσεις. Προσθέστε το προεπεξεργασμένο μήνυμα στη λίστα corpus.

Για Εγώ σε εύρος (len (df)):
# κατάργηση όλων των μη αλφαριθμητικών χαρακτήρων
μήνυμα = re.sub('[^a-zA-Z0-9]', ' ', df['ΜΗΝΥΜΑ'][Εγώ])

# μετατροπή του μηνύματος σε πεζά
message = message.lower()

# χωρισμός της πρότασης σε λέξεις για λημματοποίηση
message = message.split()

# αφαίρεση ενδιάμεσων λέξεων και λημματοποίηση
message = [lemmatizer.lemmatize (λέξη) Για λέξη σε μήνυμα
αν λέξη δενσε σύνολο (stopwords.words('Αγγλικά'))]

# Μετατροπή των λέξεων ξανά σε προτάσεις
μήνυμα = ' '.join (μήνυμα)

# Προσθήκη του προεπεξεργασμένου μηνύματος στη λίστα corpus
corpus.append (μήνυμα)

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

Χαρακτηριστικά Μηχανικής με χρήση της Τεχνικής Bag-of-Words Model vs TF-IDF

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

Μοντέλο Bag-of-Words

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

Χρησιμοποιήστε την κλάση CountVetorizer από το scikit-learn για να μετατρέψετε τα δεδομένα κειμένου σε αριθμητικά διανύσματα. Προσαρμόστε το σώμα των προεπεξεργασμένων μηνυμάτων και μετατρέψτε το σώμα σε έναν αραιό πίνακα.

# Αποκτήστε τα κορυφαία 2500 χαρακτηριστικά 
cv = CountVetorizer (max_features=2500, ngram_range=(1,3))
X = cv.fit_transform (corpus).toarray()
y = df['ΚΑΤΗΓΟΡΙΑ']

Διαχωρίστε τα μετασχηματισμένα δεδομένα σε σετ εκπαίδευσης και δοκιμών. Χρησιμοποιήστε το είκοσι τοις εκατό των δεδομένων για δοκιμές και το ογδόντα τοις εκατό για την εκπαίδευση.

x_train, x_test, y_train, y_test = train_test_split(
X, y, test_size=0.20, τυχαία_κατάσταση=1, στρωματοποιώ=y)

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

Τεχνική TF-IDF

Ο όρος Συχνότητα-Αντίστροφη Συχνότητα Εγγράφου (TF-IDF) λειτουργεί με την ανάθεση βαρών σε λέξεις σε ένα έγγραφο με βάση τη συχνότητα εμφάνισης τους. Το TF-IDF δίνει λέξεις που εμφανίζονται συχνά σε ένα έγγραφο, αλλά είναι σπάνιες στο σώμα υψηλότερου βάρους. Αυτό επιτρέπει στους αλγόριθμους μηχανικής μάθησης να κατανοούν καλύτερα το νόημα του κειμένου.

tf = TfidfVetorizer (ngram_range=(1,3), max_features=2500)
X = tf.fit_transform (corpus).toarray()

x_train, x_test, y_train, y_test = train_test_split(
X, y, test_size=0.20, τυχαία_κατάσταση=1, στρωματοποιώ=y)

Για να εξαγάγετε σημασιολογικό νόημα από τα μηνύματα και να ταξινομήσετε τα δικά σας μηνύματα, χρησιμοποιήστε το TF-IDF.

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

Ξεκινήστε δημιουργώντας και αρχικοποιώντας ένα μοντέλο Naive Bayes χρησιμοποιώντας την κλάση Sicit-learn MultinomialNB.

μοντέλο = MultinomialNB()

Προσαρμόστε τα δεδομένα εκπαίδευσης, επιτρέποντας στο μοντέλο να εκπαιδευτεί στο σετ εκπαίδευσης:

model.fit (x_train, y_train)

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

train_pred = model.predict (x_train)
test_pred = model.predict (x_test)

Αυτές οι προβλέψεις θα σας βοηθήσουν να αξιολογήσετε το μοντέλο σας.

Αξιολόγηση Μοντέλου

Αξιολογήστε την απόδοση του μοντέλου σας χρησιμοποιώντας τη συνάρτηση classification_report από το scikit-learn. Περάστε τις προβλέψεις του σετ εκπαίδευσης και τις ετικέτες του πραγματικού συνόλου εκπαίδευσης ως είσοδο. Κάντε το ίδιο για το σετ δοκιμής.

εκτύπωση (classification_report (train_pred, y_train))
εκτύπωση (classification_report (test_pred, y_test))

Όσο μεγαλύτερη είναι η ακρίβεια, η ανάκληση και η ακρίβεια και για τις δύο κατηγορίες τόσο καλύτερο είναι το μοντέλο.

Αποτελέσματα ταξινόμησης των δικών σας μηνυμάτων

Μετατρέψτε το μήνυμα σε διάνυσμα χρησιμοποιώντας την τεχνική TF-IDF. Χρησιμοποιήστε το μοντέλο για να προβλέψετε εάν το μήνυμα είναι ανεπιθύμητο ή ζαμπόν και, στη συνέχεια, εμφανίστε αυτήν την πρόβλεψη στην οθόνη.

Τυπώνω(«Πρόβλεψη...»)

μήνυμα = [«Κερδίσατε 10000 δολάρια, δώστε τον λογαριασμό σας
λεπτομέρειες, Για να μπορέσουμε να μεταφέρουμε τα χρήματα"]

message_vector = tf.transform (μήνυμα)
κατηγορία = model.predict (message_vector)
Τυπώνω("Το μήνυμα είναι", "ανεπιθυμητη αλληλογραφια"αν κατηγορία == 1αλλού"όχι ανεπιθύμητο")

Αντικαταστήστε το μήνυμα με το δικό σας.

Η έξοδος είναι η εξής:

Το μοντέλο μπορεί να ταξινομήσει νέα αόρατα μηνύματα ως ανεπιθύμητα ή ραμ.

Η πρόκληση που αντιμετωπίζει η ταξινόμηση των ανεπιθύμητων μηνυμάτων στις εφαρμογές

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