You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ML-For-Beginners/translations/el/6-NLP/2-Tasks/README.md

228 lines
22 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "5f3cb462e3122e1afe7ab0050ccf2bd3",
"translation_date": "2025-09-05T01:22:29+00:00",
"source_file": "6-NLP/2-Tasks/README.md",
"language_code": "el"
}
-->
# Κοινές εργασίες και τεχνικές επεξεργασίας φυσικής γλώσσας
Για τις περισσότερες εργασίες επεξεργασίας *φυσικής γλώσσας*, το κείμενο που πρόκειται να επεξεργαστεί πρέπει να διασπαστεί, να εξεταστεί και τα αποτελέσματα να αποθηκευτούν ή να διασταυρωθούν με κανόνες και σύνολα δεδομένων. Αυτές οι εργασίες επιτρέπουν στον προγραμματιστή να εξάγει το _νόημα_ ή την ρόθεση_ ή μόνο τη _συχνότητα_ των όρων και των λέξεων σε ένα κείμενο.
## [Προ-διάλεξη κουίζ](https://ff-quizzes.netlify.app/en/ml/)
Ας ανακαλύψουμε κοινές τεχνικές που χρησιμοποιούνται στην επεξεργασία κειμένου. Σε συνδυασμό με τη μηχανική μάθηση, αυτές οι τεχνικές σας βοηθούν να αναλύσετε μεγάλες ποσότητες κειμένου αποτελεσματικά. Πριν εφαρμόσετε τη μηχανική μάθηση σε αυτές τις εργασίες, ας κατανοήσουμε τα προβλήματα που αντιμετωπίζει ένας ειδικός στην επεξεργασία φυσικής γλώσσας.
## Κοινές εργασίες στην επεξεργασία φυσικής γλώσσας
Υπάρχουν διάφοροι τρόποι για να αναλύσετε ένα κείμενο με το οποίο εργάζεστε. Υπάρχουν εργασίες που μπορείτε να εκτελέσετε και μέσω αυτών μπορείτε να κατανοήσετε το κείμενο και να εξαγάγετε συμπεράσματα. Συνήθως εκτελείτε αυτές τις εργασίες με μια συγκεκριμένη ακολουθία.
### Διαχωρισμός σε λέξεις (Tokenization)
Πιθανώς το πρώτο πράγμα που πρέπει να κάνουν οι περισσότεροι αλγόριθμοι επεξεργασίας φυσικής γλώσσας είναι να διασπάσουν το κείμενο σε tokens, δηλαδή λέξεις. Ενώ αυτό ακούγεται απλό, η ανάγκη να ληφθούν υπόψη τα σημεία στίξης και οι διαφορετικοί διαχωριστές λέξεων και προτάσεων σε διάφορες γλώσσες μπορεί να το κάνει δύσκολο. Ίσως χρειαστεί να χρησιμοποιήσετε διάφορες μεθόδους για να προσδιορίσετε τα όρια.
![tokenization](../../../../6-NLP/2-Tasks/images/tokenization.png)
> Διαχωρισμός μιας πρότασης από το **Περηφάνια και Προκατάληψη**. Γραφικό από [Jen Looper](https://twitter.com/jenlooper)
### Ενσωματώσεις (Embeddings)
[Ενσωματώσεις λέξεων](https://wikipedia.org/wiki/Word_embedding) είναι ένας τρόπος να μετατρέψετε τα δεδομένα του κειμένου σας σε αριθμητική μορφή. Οι ενσωματώσεις γίνονται με τέτοιο τρόπο ώστε λέξεις με παρόμοιο νόημα ή λέξεις που χρησιμοποιούνται μαζί να ομαδοποιούνται.
![word embeddings](../../../../6-NLP/2-Tasks/images/embedding.png)
> "Έχω τον μέγιστο σεβασμό για τα νεύρα σας, είναι παλιοί μου φίλοι." - Ενσωματώσεις λέξεων για μια πρόταση από το **Περηφάνια και Προκατάληψη**. Γραφικό από [Jen Looper](https://twitter.com/jenlooper)
✅ Δοκιμάστε [αυτό το ενδιαφέρον εργαλείο](https://projector.tensorflow.org/) για να πειραματιστείτε με ενσωματώσεις λέξεων. Κάνοντας κλικ σε μια λέξη εμφανίζονται ομάδες παρόμοιων λέξεων: 'toy' ομαδοποιείται με 'disney', 'lego', 'playstation' και 'console'.
### Ανάλυση & Ετικέτες μέρους του λόγου (Parsing & Part-of-speech Tagging)
Κάθε λέξη που έχει διαχωριστεί μπορεί να επισημανθεί ως μέρος του λόγου - ουσιαστικό, ρήμα ή επίθετο. Η πρόταση `the quick red fox jumped over the lazy brown dog` μπορεί να επισημανθεί ως fox = ουσιαστικό, jumped = ρήμα.
![parsing](../../../../6-NLP/2-Tasks/images/parse.png)
> Ανάλυση μιας πρότασης από το **Περηφάνια και Προκατάληψη**. Γραφικό από [Jen Looper](https://twitter.com/jenlooper)
Η ανάλυση είναι η αναγνώριση των λέξεων που σχετίζονται μεταξύ τους σε μια πρόταση - για παράδειγμα `the quick red fox jumped` είναι μια ακολουθία επίθετο-ουσιαστικό-ρήμα που είναι ξεχωριστή από την ακολουθία `lazy brown dog`.
### Συχνότητες λέξεων και φράσεων
Μια χρήσιμη διαδικασία κατά την ανάλυση ενός μεγάλου σώματος κειμένου είναι η δημιουργία ενός λεξικού με κάθε λέξη ή φράση ενδιαφέροντος και πόσο συχνά εμφανίζεται. Η φράση `the quick red fox jumped over the lazy brown dog` έχει συχνότητα λέξης 2 για τη λέξη "the".
Ας δούμε ένα παράδειγμα κειμένου όπου μετράμε τη συχνότητα των λέξεων. Το ποίημα του Rudyard Kipling "The Winners" περιέχει τον ακόλουθο στίχο:
```output
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:
1. the quick
2. quick red
3. red fox
4. fox jumped
5. jumped over
6. over the
7. the lazy
8. lazy brown
9. brown dog
Μπορεί να είναι πιο εύκολο να το οπτικοποιήσετε ως ένα κινούμενο πλαίσιο πάνω από την πρόταση. Εδώ είναι για n-grams των 3 λέξεων, το n-gram είναι έντονο σε κάθε πρόταση:
1. <u>**the quick red**</u> fox jumped over the lazy brown dog
2. the **<u>quick red fox</u>** jumped over the lazy brown dog
3. the quick **<u>red fox jumped</u>** over the lazy brown dog
4. the quick red **<u>fox jumped over</u>** the lazy brown dog
5. the quick red fox **<u>jumped over the</u>** lazy brown dog
6. the quick red fox jumped **<u>over the lazy</u>** brown dog
7. the quick red fox jumped over <u>**the lazy brown**</u> dog
8. the quick red fox jumped over the **<u>lazy brown dog</u>**
![n-grams sliding window](../../../../6-NLP/2-Tasks/images/n-grams.gif)
> Τιμή N-gram 3: Γραφικό από [Jen Looper](https://twitter.com/jenlooper)
### Εξαγωγή φράσεων με ουσιαστικά
Στις περισσότερες προτάσεις υπάρχει ένα ουσιαστικό που είναι το υποκείμενο ή το αντικείμενο της πρότασης. Στα Αγγλικά, συχνά αναγνωρίζεται από το ότι προηγείται το '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](https://wordnet.princeton.edu/) είναι μια βάση δεδομένων λέξεων, συνωνύμων, αντωνύμων και πολλών άλλων λεπτομερειών για κάθε λέξη σε πολλές διαφορετικές γλώσσες. Είναι εξαιρετικά χρήσιμη όταν προσπαθείτε να δημιουργήσετε μεταφράσεις, διορθωτές ορθογραφίας ή εργαλεία γλώσσας οποιουδήποτε τύπου.
## Βιβλιοθήκες επεξεργασίας φυσικής γλώσσας
Ευτυχώς, δεν χρειάζεται να δημιουργήσετε όλες αυτές τις τεχνικές μόνοι σας, καθώς υπάρχουν εξαιρετικές βιβλιοθήκες Python διαθέσιμες που τις καθιστούν πολύ πιο προσιτές σε προγραμματιστές που δεν είναι εξειδικευμένοι στην επεξεργασία φυσικής γλώσσας ή στη μηχανική μάθηση. Τα επόμενα μαθήματα περιλαμβάνουν περισσότερα παραδείγματα από αυτές, αλλά εδώ θα μάθετε μερικά χρήσιμα παραδείγματα για να σας βοηθήσουν με την επόμενη εργασία.
### Άσκηση - χρήση της βιβλιοθήκης `TextBlob`
Ας χρησιμοποιήσουμε μια βιβλιοθήκη που ονομάζεται TextBlob καθώς περιέχει χρήσιμα APIs για την αντιμετώπιση αυτών των τύπων εργασιών. Το TextBlob "βασίζεται στους γίγαντες [NLTK](https://nltk.org) και [pattern](https://github.com/clips/pattern), και συνεργάζεται καλά και με τα δύο." Έχει σημαντική ποσότητα μηχανικής μάθησης ενσωματωμένη στο API του.
> Σημείωση: Ένας χρήσιμος [Οδηγός Γρήγορης Εκκίνησης](https://textblob.readthedocs.io/en/dev/quickstart.html#quickstart) είναι διαθέσιμος για το TextBlob και συνιστάται για έμπειρους προγραμματιστές Python.
Όταν προσπαθείτε να εντοπίσετε *φράσεις με ουσιαστικά*, το TextBlob προσφέρει αρκετές επιλογές εξαγωγέων για να βρείτε φράσεις με ουσιαστικά.
1. Ρίξτε μια ματιά στο `ConllExtractor`.
```python
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](https://textblob.readthedocs.io/en/dev/api_reference.html?highlight=Conll#textblob.en.np_extractors.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)". Μπορείτε να δείτε τις διαδικασίες που χρησιμοποιήθηκαν [εδώ](https://www.clips.uantwerpen.be/conll2000/chunking/) και τα [αποτελέσματα](https://ifarm.nl/erikt/research/np-chunking.html).
### Πρόκληση - βελτίωση του bot σας με επεξεργασία φυσικής γλώσσας
Στο προηγούμενο μάθημα δημιουργήσατε ένα πολύ απλό bot ερωτήσεων και απαντήσεων. Τώρα, θα κάνετε τον Marvin λίγο πιο συμπαθητικό αναλύοντας την είσοδο σας για συναίσθημα και εκτυπώνοντας μια απάντηση που ταιριάζει με το συναίσθημα. Θα χρειαστεί επίσης να εντοπίσετε μια `noun_phrase` και να ρωτήσετε γι' αυτήν.
Τα βήματά σας για τη δημιουργία ενός καλύτερου συνομιλητικού bot:
1. Εκτυπώστε οδηγίες που συμβουλεύουν τον χρήστη πώς να αλληλεπιδράσει με το bot.
2. Ξεκινήστε έναν βρόχο:
1. Αποδεχτείτε την είσοδο του χρήστη.
2. Εάν ο χρήστης έχει ζητήσει έξοδο, τότε τερματίστε.
3. Επεξεργαστείτε την είσοδο του χρήστη και προσδιορίστε την κατάλληλη απάντηση συναισθήματος.
4. Εάν εντοπιστεί μια φράση με ουσιαστικό στο συναίσθημα, μετατρέψτε την σε πληθυντικό και ζητήστε περισσότερες πληροφορίες για αυτό το θέμα.
5. Εκτυπώστε την απάντηση.
3. Επιστρέψτε στο βήμα 2.
Ακολουθεί το απόσπασμα κώδικα για τον προσδιορισμό του συναισθήματος χρησιμοποιώντας το TextBlob. Σημειώστε ότι υπάρχουν μόνο τέσσερις *βαθμίδες* απάντησης συναισθήματος (θα μπορούσατε να έχετε περισσότερες αν θέλετε):
```python
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. "
```
Ακολουθεί ένα δείγμα εξόδου για καθοδήγηση (η είσοδος του χρήστη είναι στις γραμμές που ξεκινούν με >):
```output
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!
```
Μια πιθανή λύση για την εργασία βρίσκεται [εδώ](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/2-Tasks/solution/bot.py)
✅ Έλεγχος Γνώσεων
1. Πιστεύετε ότι οι συμπαθητικές απαντήσεις θα 'ξεγελούσαν' κάποιον ώστε να πιστέψει ότι το bot πραγματικά τον καταλαβαίνει;
2. Κάνει η αναγνώριση της φράσης με ουσιαστικό το bot πιο 'πιστευτό';
3. Γιατί θα ήταν χρήσιμο να εξάγετε μια 'φράση με ουσιαστικό' από μια πρόταση;
---
Υλοποιήστε το bot στον προηγούμενο έλεγχο γνώσεων και δοκιμάστε το σε έναν φίλο. Μπορεί να τον ξεγελάσει; Μπορείτε να κάνετε το bot σας πιο 'πιστευτό';
## 🚀Πρόκληση
Πάρτε μια εργασία από τον προηγούμενο έλεγχο γνώσεων και προσπαθήστε να την υλοποιήσετε. Δοκιμάστε το bot σε έναν φίλο. Μπορεί να τον ξεγελάσει; Μπορείτε να κάνετε το bot σας πιο 'πιστευτό';
## [Μετά-διάλεξη κουίζ](https://ff-quizzes.netlify.app/en/ml/)
## Ανασκόπηση & Αυτομελέτη
Στα επόμενα μαθήματα θα μάθετε περισσότερα για την ανάλυση συναισθήματος. Ερευνήστε αυτήν την ενδιαφέρουσα τεχνική σε άρθρα όπως αυτά στο [KDNuggets](https://www.kdnuggets.com/tag/nlp)
## Εργασία
[Κάντε ένα bot να απαντά](assignment.md)
---
**Αποποίηση ευθύνης**:
Αυτό το έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία αυτόματης μετάφρασης [Co-op Translator](https://github.com/Azure/co-op-translator). Παρόλο που καταβάλλουμε προσπάθειες για ακρίβεια, παρακαλούμε να έχετε υπόψη ότι οι αυτοματοποιημένες μεταφράσεις ενδέχεται να περιέχουν σφάλματα ή ανακρίβειες. Το πρωτότυπο έγγραφο στη μητρική του γλώσσα θα πρέπει να θεωρείται η αυθεντική πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική ανθρώπινη μετάφραση. Δεν φέρουμε ευθύνη για τυχόν παρεξηγήσεις ή εσφαλμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης.