22 KiB
Κοινές εργασίες και τεχνικές επεξεργασίας φυσικής γλώσσας
Για τις περισσότερες εργασίες επεξεργασίας φυσικής γλώσσας, το κείμενο που πρόκειται να επεξεργαστεί πρέπει να διασπαστεί, να εξεταστεί και τα αποτελέσματα να αποθηκευτούν ή να διασταυρωθούν με κανόνες και σύνολα δεδομένων. Αυτές οι εργασίες επιτρέπουν στον προγραμματιστή να εξάγει το νόημα ή την πρόθεση ή μόνο τη συχνότητα των όρων και των λέξεων σε ένα κείμενο.
Προ-διάλεξη κουίζ
Ας ανακαλύψουμε κοινές τεχνικές που χρησιμοποιούνται στην επεξεργασία κειμένου. Σε συνδυασμό με τη μηχανική μάθηση, αυτές οι τεχνικές σας βοηθούν να αναλύσετε μεγάλες ποσότητες κειμένου αποτελεσματικά. Πριν εφαρμόσετε τη μηχανική μάθηση σε αυτές τις εργασίες, ας κατανοήσουμε τα προβλήματα που αντιμετωπίζει ένας ειδικός στην επεξεργασία φυσικής γλώσσας.
Κοινές εργασίες στην επεξεργασία φυσικής γλώσσας
Υπάρχουν διάφοροι τρόποι για να αναλύσετε ένα κείμενο με το οποίο εργάζεστε. Υπάρχουν εργασίες που μπορείτε να εκτελέσετε και μέσω αυτών μπορείτε να κατανοήσετε το κείμενο και να εξαγάγετε συμπεράσματα. Συνήθως εκτελείτε αυτές τις εργασίες με μια συγκεκριμένη ακολουθία.
Διαχωρισμός σε λέξεις (Tokenization)
Πιθανώς το πρώτο πράγμα που πρέπει να κάνουν οι περισσότεροι αλγόριθμοι επεξεργασίας φυσικής γλώσσας είναι να διασπάσουν το κείμενο σε tokens, δηλαδή λέξεις. Ενώ αυτό ακούγεται απλό, η ανάγκη να ληφθούν υπόψη τα σημεία στίξης και οι διαφορετικοί διαχωριστές λέξεων και προτάσεων σε διάφορες γλώσσες μπορεί να το κάνει δύσκολο. Ίσως χρειαστεί να χρησιμοποιήσετε διάφορες μεθόδους για να προσδιορίσετε τα όρια.
Διαχωρισμός μιας πρότασης από το Περηφάνια και Προκατάληψη. Γραφικό από Jen Looper
Ενσωματώσεις (Embeddings)
Ενσωματώσεις λέξεων είναι ένας τρόπος να μετατρέψετε τα δεδομένα του κειμένου σας σε αριθμητική μορφή. Οι ενσωματώσεις γίνονται με τέτοιο τρόπο ώστε λέξεις με παρόμοιο νόημα ή λέξεις που χρησιμοποιούνται μαζί να ομαδοποιούνται.
"Έχω τον μέγιστο σεβασμό για τα νεύρα σας, είναι παλιοί μου φίλοι." - Ενσωματώσεις λέξεων για μια πρόταση από το Περηφάνια και Προκατάληψη. Γραφικό από Jen Looper
✅ Δοκιμάστε αυτό το ενδιαφέρον εργαλείο για να πειραματιστείτε με ενσωματώσεις λέξεων. Κάνοντας κλικ σε μια λέξη εμφανίζονται ομάδες παρόμοιων λέξεων: 'toy' ομαδοποιείται με 'disney', 'lego', 'playstation' και 'console'.
Ανάλυση & Ετικέτες μέρους του λόγου (Parsing & Part-of-speech Tagging)
Κάθε λέξη που έχει διαχωριστεί μπορεί να επισημανθεί ως μέρος του λόγου - ουσιαστικό, ρήμα ή επίθετο. Η πρόταση the quick red fox jumped over the lazy brown dog
μπορεί να επισημανθεί ως fox = ουσιαστικό, jumped = ρήμα.
Ανάλυση μιας πρότασης από το Περηφάνια και Προκατάληψη. Γραφικό από Jen Looper
Η ανάλυση είναι η αναγνώριση των λέξεων που σχετίζονται μεταξύ τους σε μια πρόταση - για παράδειγμα the quick red fox jumped
είναι μια ακολουθία επίθετο-ουσιαστικό-ρήμα που είναι ξεχωριστή από την ακολουθία lazy brown dog
.
Συχνότητες λέξεων και φράσεων
Μια χρήσιμη διαδικασία κατά την ανάλυση ενός μεγάλου σώματος κειμένου είναι η δημιουργία ενός λεξικού με κάθε λέξη ή φράση ενδιαφέροντος και πόσο συχνά εμφανίζεται. Η φράση the quick red fox jumped over the lazy brown dog
έχει συχνότητα λέξης 2 για τη λέξη "the".
Ας δούμε ένα παράδειγμα κειμένου όπου μετράμε τη συχνότητα των λέξεων. Το ποίημα του Rudyard Kipling "The Winners" περιέχει τον ακόλουθο στίχο:
What the moral? Who rides may read.
When the night is thick and the tracks are blind
A friend at a pinch is a friend, indeed,
But a fool to wait for the laggard behind.
Down to Gehenna or up to the Throne,
He travels the fastest who travels alone.
Καθώς οι συχνότητες φράσεων μπορούν να είναι ευαίσθητες ή μη ευαίσθητες στη χρήση κεφαλαίων γραμμάτων, η φράση a friend
έχει συχνότητα 2, το the
έχει συχνότητα 6 και το travels
έχει συχνότητα 2.
N-grams
Ένα κείμενο μπορεί να διασπαστεί σε ακολουθίες λέξεων συγκεκριμένου μήκους, μια λέξη (unigram), δύο λέξεις (bigram), τρεις λέξεις (trigram) ή οποιονδήποτε αριθμό λέξεων (n-grams).
Για παράδειγμα, η φράση the quick red fox jumped over the lazy brown dog
με βαθμολογία n-gram 2 παράγει τα εξής n-grams:
- the quick
- quick red
- red fox
- fox jumped
- jumped over
- over the
- the lazy
- lazy brown
- brown dog
Μπορεί να είναι πιο εύκολο να το οπτικοποιήσετε ως ένα κινούμενο πλαίσιο πάνω από την πρόταση. Εδώ είναι για n-grams των 3 λέξεων, το n-gram είναι έντονο σε κάθε πρόταση:
- the quick red fox jumped over the lazy brown dog
- the quick red fox jumped over the lazy brown dog
- the quick red fox jumped over the lazy brown dog
- the quick red fox jumped over the lazy brown dog
- the quick red fox jumped over the lazy brown dog
- the quick red fox jumped over the lazy brown dog
- the quick red fox jumped over the lazy brown dog
- the quick red fox jumped over the lazy brown dog
Τιμή N-gram 3: Γραφικό από Jen Looper
Εξαγωγή φράσεων με ουσιαστικά
Στις περισσότερες προτάσεις υπάρχει ένα ουσιαστικό που είναι το υποκείμενο ή το αντικείμενο της πρότασης. Στα Αγγλικά, συχνά αναγνωρίζεται από το ότι προηγείται το 'a', 'an' ή 'the'. Η αναγνώριση του υποκειμένου ή του αντικειμένου μιας πρότασης μέσω της 'εξαγωγής της φράσης με ουσιαστικό' είναι μια κοινή εργασία στην επεξεργασία φυσικής γλώσσας όταν προσπαθείτε να κατανοήσετε το νόημα μιας πρότασης.
✅ Στην πρόταση "I cannot fix on the hour, or the spot, or the look or the words, which laid the foundation. It is too long ago. I was in the middle before I knew that I had begun.", μπορείτε να εντοπίσετε τις φράσεις με ουσιαστικά;
Στην πρόταση the quick red fox jumped over the lazy brown dog
υπάρχουν 2 φράσεις με ουσιαστικά: quick red fox και lazy brown dog.
Ανάλυση συναισθήματος
Μια πρόταση ή κείμενο μπορεί να αναλυθεί για το συναίσθημα, δηλαδή πόσο θετικό ή αρνητικό είναι. Το συναίσθημα μετριέται σε πολικότητα και αντικειμενικότητα/υποκειμενικότητα. Η πολικότητα μετριέται από -1.0 έως 1.0 (αρνητικό έως θετικό) και 0.0 έως 1.0 (πιο αντικειμενικό έως πιο υποκειμενικό).
✅ Αργότερα θα μάθετε ότι υπάρχουν διαφορετικοί τρόποι για να προσδιορίσετε το συναίσθημα χρησιμοποιώντας μηχανική μάθηση, αλλά ένας τρόπος είναι να έχετε μια λίστα λέξεων και φράσεων που έχουν κατηγοριοποιηθεί ως θετικές ή αρνητικές από έναν ανθρώπινο ειδικό και να εφαρμόσετε αυτό το μοντέλο στο κείμενο για να υπολογίσετε μια βαθμολογία πολικότητας. Μπορείτε να δείτε πώς αυτό θα λειτουργούσε σε ορισμένες περιπτώσεις και λιγότερο καλά σε άλλες;
Κλίση (Inflection)
Η κλίση σας επιτρέπει να πάρετε μια λέξη και να βρείτε τον ενικό ή τον πληθυντικό της λέξης.
Λημματοποίηση (Lemmatization)
Ένα λήμμα είναι η ρίζα ή η κύρια λέξη για ένα σύνολο λέξεων, για παράδειγμα flew, flies, flying έχουν ως λήμμα το ρήμα fly.
Υπάρχουν επίσης χρήσιμες βάσεις δεδομένων διαθέσιμες για τον ερευνητή επεξεργασίας φυσικής γλώσσας, όπως:
WordNet
WordNet είναι μια βάση δεδομένων λέξεων, συνωνύμων, αντωνύμων και πολλών άλλων λεπτομερειών για κάθε λέξη σε πολλές διαφορετικές γλώσσες. Είναι εξαιρετικά χρήσιμη όταν προσπαθείτε να δημιουργήσετε μεταφράσεις, διορθωτές ορθογραφίας ή εργαλεία γλώσσας οποιουδήποτε τύπου.
Βιβλιοθήκες επεξεργασίας φυσικής γλώσσας
Ευτυχώς, δεν χρειάζεται να δημιουργήσετε όλες αυτές τις τεχνικές μόνοι σας, καθώς υπάρχουν εξαιρετικές βιβλιοθήκες Python διαθέσιμες που τις καθιστούν πολύ πιο προσιτές σε προγραμματιστές που δεν είναι εξειδικευμένοι στην επεξεργασία φυσικής γλώσσας ή στη μηχανική μάθηση. Τα επόμενα μαθήματα περιλαμβάνουν περισσότερα παραδείγματα από αυτές, αλλά εδώ θα μάθετε μερικά χρήσιμα παραδείγματα για να σας βοηθήσουν με την επόμενη εργασία.
Άσκηση - χρήση της βιβλιοθήκης TextBlob
Ας χρησιμοποιήσουμε μια βιβλιοθήκη που ονομάζεται TextBlob καθώς περιέχει χρήσιμα APIs για την αντιμετώπιση αυτών των τύπων εργασιών. Το TextBlob "βασίζεται στους γίγαντες NLTK και pattern, και συνεργάζεται καλά και με τα δύο." Έχει σημαντική ποσότητα μηχανικής μάθησης ενσωματωμένη στο API του.
Σημείωση: Ένας χρήσιμος Οδηγός Γρήγορης Εκκίνησης είναι διαθέσιμος για το TextBlob και συνιστάται για έμπειρους προγραμματιστές Python.
Όταν προσπαθείτε να εντοπίσετε φράσεις με ουσιαστικά, το TextBlob προσφέρει αρκετές επιλογές εξαγωγέων για να βρείτε φράσεις με ουσιαστικά.
-
Ρίξτε μια ματιά στο
ConllExtractor
.from textblob import TextBlob from textblob.np_extractors import ConllExtractor # import and create a Conll extractor to use later extractor = ConllExtractor() # later when you need a noun phrase extractor: user_input = input("> ") user_input_blob = TextBlob(user_input, np_extractor=extractor) # note non-default extractor specified np = user_input_blob.noun_phrases
Τι συμβαίνει εδώ; Το ConllExtractor είναι "Ένας εξαγωγέας φράσεων με ουσιαστικά που χρησιμοποιεί chunk parsing εκπαιδευμένο με το ConLL-2000 training corpus." Το ConLL-2000 αναφέρεται στο Συνέδριο του 2000 για την Υπολογιστική Μάθηση Φυσικής Γλώσσας. Κάθε χρόνο το συνέδριο φιλοξενούσε ένα εργαστήριο για την αντιμετώπιση ενός δύσκολου προβλήματος επεξεργασίας φυσικής γλώσσας, και το 2000 ήταν το noun chunking. Ένα μοντέλο εκπαιδεύτηκε στο Wall Street Journal, με "sections 15-18 ως δεδομένα εκπαίδευσης (211727 tokens) και section 20 ως δεδομένα δοκιμής (47377 tokens)". Μπορείτε να δείτε τις διαδικασίες που χρησιμοποιήθηκαν εδώ και τα αποτελέσματα.
Πρόκληση - βελτίωση του bot σας με επεξεργασία φυσικής γλώσσας
Στο προηγούμενο μάθημα δημιουργήσατε ένα πολύ απλό bot ερωτήσεων και απαντήσεων. Τώρα, θα κάνετε τον Marvin λίγο πιο συμπαθητικό αναλύοντας την είσοδο σας για συναίσθημα και εκτυπώνοντας μια απάντηση που ταιριάζει με το συναίσθημα. Θα χρειαστεί επίσης να εντοπίσετε μια noun_phrase
και να ρωτήσετε γι' αυτήν.
Τα βήματά σας για τη δημιουργία ενός καλύτερου συνομιλητικού bot:
- Εκτυπώστε οδηγίες που συμβουλεύουν τον χρήστη πώς να αλληλεπιδράσει με το bot.
- Ξεκινήστε έναν βρόχο:
- Αποδεχτείτε την είσοδο του χρήστη.
- Εάν ο χρήστης έχει ζητήσει έξοδο, τότε τερματίστε.
- Επεξεργαστείτε την είσοδο του χρήστη και προσδιορίστε την κατάλληλη απάντηση συναισθήματος.
- Εάν εντοπιστεί μια φράση με ουσιαστικό στο συναίσθημα, μετατρέψτε την σε πληθυντικό και ζητήστε περισσότερες πληροφορίες για αυτό το θέμα.
- Εκτυπώστε την απάντηση.
- Επιστρέψτε στο βήμα 2.
Ακολουθεί το απόσπασμα κώδικα για τον προσδιορισμό του συναισθήματος χρησιμοποιώντας το TextBlob. Σημειώστε ότι υπάρχουν μόνο τέσσερις βαθμίδες απάντησης συναισθήματος (θα μπορούσατε να έχετε περισσότερες αν θέλετε):
if user_input_blob.polarity <= -0.5:
response = "Oh dear, that sounds bad. "
elif user_input_blob.polarity <= 0:
response = "Hmm, that's not great. "
elif user_input_blob.polarity <= 0.5:
response = "Well, that sounds positive. "
elif user_input_blob.polarity <= 1:
response = "Wow, that sounds great. "
Ακολουθεί ένα δείγμα εξόδου για καθοδήγηση (η είσοδος του χρήστη είναι στις γραμμές που ξεκινούν με >):
Hello, I am Marvin, the friendly robot.
You can end this conversation at any time by typing 'bye'
After typing each answer, press 'enter'
How are you today?
> I am ok
Well, that sounds positive. Can you tell me more?
> I went for a walk and saw a lovely cat
Well, that sounds positive. Can you tell me more about lovely cats?
> cats are the best. But I also have a cool dog
Wow, that sounds great. Can you tell me more about cool dogs?
> I have an old hounddog but he is sick
Hmm, that's not great. Can you tell me more about old hounddogs?
> bye
It was nice talking to you, goodbye!
Μια πιθανή λύση για την εργασία βρίσκεται εδώ
✅ Έλεγχος Γνώσεων
- Πιστεύετε ότι οι συμπαθητικές απαντήσεις θα 'ξεγελούσαν' κάποιον ώστε να πιστέψει ότι το bot πραγματικά τον καταλαβαίνει;
- Κάνει η αναγνώριση της φράσης με ουσιαστικό το bot πιο 'πιστευτό';
- Γιατί θα ήταν χρήσιμο να εξάγετε μια 'φράση με ουσιαστικό' από μια πρόταση;
Υλοποιήστε το bot στον προηγούμενο έλεγχο γνώσεων και δοκιμάστε το σε έναν φίλο. Μπορεί να τον ξεγελάσει; Μπορείτε να κάνετε το bot σας πιο 'πιστευτό';
🚀Πρόκληση
Πάρτε μια εργασία από τον προηγούμενο έλεγχο γνώσεων και προσπαθήστε να την υλοποιήσετε. Δοκιμάστε το bot σε έναν φίλο. Μπορεί να τον ξεγελάσει; Μπορείτε να κάνετε το bot σας πιο 'πιστευτό';
Μετά-διάλεξη κουίζ
Ανασκόπηση & Αυτομελέτη
Στα επόμενα μαθήματα θα μάθετε περισσότερα για την ανάλυση συναισθήματος. Ερευνήστε αυτήν την ενδιαφέρουσα τεχνική σε άρθρα όπως αυτά στο KDNuggets
Εργασία
Αποποίηση ευθύνης:
Αυτό το έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία αυτόματης μετάφρασης Co-op Translator. Παρόλο που καταβάλλουμε προσπάθειες για ακρίβεια, παρακαλούμε να έχετε υπόψη ότι οι αυτοματοποιημένες μεταφράσεις ενδέχεται να περιέχουν σφάλματα ή ανακρίβειες. Το πρωτότυπο έγγραφο στη μητρική του γλώσσα θα πρέπει να θεωρείται η αυθεντική πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική ανθρώπινη μετάφραση. Δεν φέρουμε ευθύνη για τυχόν παρεξηγήσεις ή εσφαλμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης.