Μια επισκόπηση του συστήματος συστάσεων και πώς να το εφαρμόσετε από το μηδέν

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

Φωτογραφία από τον Edo Nugroho στο Unsplash

Παρελθόν παρόν και μέλλον:

Αν δούμε την ιστορία του συστήματος συστάσεων, η ιδέα ξεκίνησε από το 1992-1996. Πριν φανταστούμε τα συστήματα συστάσεων, ακόμη και πριν μιλάνε για φιλτράρισμα συνεργασίας, ήταν γνωστή ως εξατομίκευση. Αλλά ήταν όλα χειροκίνητα. Για παράδειγμα: Με το ταξιδιωτικό πράκτορα Α που γνωρίζει ότι σας ενδιαφέρει ένα σαφάρι θα κρατήσει τα μάτια του έξω για το είδος του ταξιδιού που θα θέλατε, όχι μόνο κάτι που κάποιος θα ήθελε να κάνει. Ως δεύτερο παράδειγμα: οι προσωπικοί αγοραστές είχαν κάποιες απλές βάσεις δεδομένων όπου θα μπορούσαν να τρέξουν τα προφίλ των ανθρώπων μέσω της εισαγωγής νέων προϊόντων και να πάρουν μια ιδέα για το ποιοι θα θελήσουν να θεωρήσουν ότι θα ήταν καλός υποψήφιος για ένα νέο προϊόν. Το 2007, η Netflix ανήγγειλε έναν διαγωνισμό ύψους 1 εκατομμυρίου δολαρίων και άλλαξε την πορεία του συστήματος συστάσεων. Προσέλκυσε πολλούς ανθρώπους από το παρελθόν για να συμμετάσχουν στον διαγωνισμό. Παρουσιάστηκαν νέοι αλγόριθμοι μαζί με νέους μαθηματικούς τύπους. Με τον τρόπο που η βιβλιοθήκη έκπληξη που θα χρησιμοποιήσω για να φτιάξω ένα σύστημα σύστασης αστείο είναι πλήρως ανεπτυγμένη, παρακολουθώντας το ερευνητικό έγγραφο που δημοσίευσε η νικήτρια ομάδα του Βραβείου Netflix. Όπως περιμένουμε, υπάρχουν ακόμα πολλά πράγματα που δεν γνωρίζουμε. Το πρόβλημα της προσωρινής σύστασης. Πώς μπορώ να διατυπώσω τις συστάσεις μου όχι μόνο σε θέματα όπως η εποχή στην οποία οι άνθρωποι εργάστηκαν για λίγο, αλλά και η αλληλουχία, τι καταναλώσατε στη συνέχεια δεδομένου ότι έχετε ήδη καταναλώσει αυτό. Η σύσταση για την εκπαίδευση που είναι ένας από τους τομείς ήταν πολύ χρονικά.

Ευρεία διάκριση του συστήματος συστάσεων:

Υπάρχουν κυρίως δύο κατηγορίες συστημάτων συστάσεων. 1. Συνεργατικό φιλτράρισμα 2. Φιλτράρισμα βάσει περιεχομένου

Συνεργατική Φιλτράρισμα: Το κλειδί για το συνεργατικό φιλτράρισμα βασίζεται στην υπόθεση ότι οι άνθρωποι που συμφώνησαν στο παρελθόν θα συμφωνήσουν στο μέλλον και ότι θα αρέσουν παρόμοια είδη που τους άρεσε στο παρελθόν. Οι τρεις κύριες κατηγορίες συνεργατικού φιλτραρίσματος είναι: 1. Ομοιότητα χρήστη-χρήστη 2. Ομοιότητα στοιχείου στοιχείου 3. Βασισμένο σε μοντέλο

Ομοιότητα χρήστη-χρήστη και στοιχείο-στοιχείο

Φιλτράρισμα βάσει περιεχομένου: Οι μέθοδοι φιλτραρίσματος βάσει περιεχομένου βασίζονται σε μια περιγραφή του στοιχείου και ενός προφίλ των προτιμήσεων του χρήστη. Αυτές οι μέθοδοι ταιριάζουν καλύτερα σε καταστάσεις όπου υπάρχουν γνωστά δεδομένα για ένα στοιχείο (όνομα, τοποθεσία, περιγραφή κ.λπ.), αλλά όχι στον χρήστη.

Συνδυαστική σύσταση βάσει συστάσεων

Προαπαιτούμενο

1. Βασική Python 2. Βασικές Pandas 3. Ευγένεια στην εξερεύνηση της βιβλιοθήκης έκπληξης 4. Keras (προαιρετικό)

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

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

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

Περιγραφή δεδομένων

Τώρα θα κάνω ένα σχέδιο για να προσεγγίσω το πρόβλημα στο χέρι και να προχωρήσω σιγά-σιγά προς λύση. Θα περάσουμε από κάθε βήμα με αποσπάσματα κώδικα. 1. Συλλογή δεδομένων 2. Διάρθρωση δοκιμής αμαξοστοιχίας 3. Απλές στατιστικές 4. Δομή δεδομένων σε συμβατή μορφή της βιβλιοθήκης έκπληξης 5. Καθορισμός μέτρησης σφάλματος 6. Χρήση μοντέλου βάσης 7. Δοκιμάστε διαφορετικά μοντέλα 8. Αποτέλεσμα

Συλλογή δεδομένων

  1. Υπάρχουν 3 φύλλα excel που παρέχονται στα δεδομένα. Θα τα συνδυάσουμε και θα δημιουργήσουμε ένα συνδυασμένο python pandas dataFrame. Έχουμε συνολικά 73421 χρήστες.
Συγχώνευση όλων των δεδομένων

2. Όπως περιγράφεται στις πληροφορίες του συνόλου δεδομένων, η βαθμολογία 99 σημαίνει ότι ο χρήστης δεν έχει αξιολογήσει αυτό το αστείο. Θα καταργήσουμε αυτά τα αρχεία και θα προετοιμάσουμε τα δεδομένα με τη μορφή ['user_id', 'joke_id', 'rating'].

Προετοιμασία δεδομένων

Διαίρεση δοκιμής αμαξοστοιχίας

Θα χρησιμοποιήσουμε το scikit-learn train_test_split και θα χωρίσουμε τα δεδομένα ως 70-30. Θα διατεθούν 70% για την αμαξοστοιχία και 30% για τη δοκιμή

Βασικά στατιστικά στοιχεία

1. Μέση βαθμολογία ανά χρήστη και ανά αστείο

διανομή της βαθμολογίας όλων των χρηστώνδιανομή βαθμολογίας όλων των ανέκδοτων

Στοιχεία δομής σε συμβατή μορφή βιβλιοθήκης έκπληξης

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

να προετοιμάσει τα δεδομένα με εκπληκτικό στυλ βιβλιοθήκης

Ορισμός της μέτρησης σφάλματος

θα χρησιμοποιήσουμε το Κανονικοποιημένο Μέσο Απόλυτο Σφάλμα ως μετρική σφάλματος.

Μέθοδος κανονικοποιημένου μέσου απόλυτου σφάλματος (NAME)κώδικα για τον υπολογισμό του NMAE

Χρησιμοποιώντας μοντέλο βάσης

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

Δοκιμάστε διαφορετικά μοντέλα

  1. KNN Βασικό μοντέλο: Χρησιμοποιεί τεχνική που βασίζεται στην ομοιότητα για να προβλέψει την αξιολόγηση των χρηστών για νέα αστεία. Στην περίπτωση μας το σφάλμα NMAE είναι 0,196

2. XGBoost on userAverageRating, jokeAverageRating, έξοδος της γραμμής βάσης και της εξόδου του KNN Βασική γραμμή: Έχουμε συνδυάσει όλες τις εξόδους του προηγούμενου μοντέλου έκπληξη και έτρεξε ένα μοντέλο XGB παλινδρόμησης στα δεδομένα μετά από ρύθμιση υπερμέτρων. Εδώ έχουμε ένα ελαφρώς καλύτερο αποτέλεσμα 0.1928 NMAE

3. Μοντέλο SVD: Το μοντέλο SVD χρησιμοποιεί τεχνικές παραγοντοποίησης μήτρας για την επίλυση προβλήματος ολοκλήρωσης μήτρας και προβλέπει την αξιολόγηση.

4. XGBoost on userAverageRating, jokeAverageRating, έξοδος της γραμμής βάσης, έξοδος KNN Βασική γραμμή και έξοδος μοντέλου SVD. Αυτό το μοντέλο δίνει 0,18 NMAE και είναι το καλύτερο μέχρι τώρα.

5. Μοντέλο με τεχνολογία χαρακτηριστικών: Έχω αποκομίσει δύο εύκολες λειτουργίες για να ελέγξω την επίδρασή τους στο μοντέλο. Ένα χαρακτηριστικό είναι το user_average + joke_avg-global_avg. Αυτό το μοντέλο δίνει ως συνήθως NMAE όπως 20.2. Είχα δοκιμάσει και άλλες τεχνικές μηχανικής. Δεν λειτούργησαν καλά.

6. Μοντέλα Depp Learning χρησιμοποιώντας keras: Καθώς η μηχανική των χαρακτηριστικών δεν λειτούργησε καλά σχεδιάζω να δοκιμάσω μερικά απλά μοντέλα νευρωνικών δικτύων που χρησιμοποιούν keras. Δοκίμασα 3 διαφορετικά μοντέλα. Ένας με όλα τα βασικά χαρακτηριστικά όπως ο μέσος χρήστης, μέσος αστείο - δεύτερος και τρίτος με όλα τα χαρακτηριστικά αλλά με διαφορετικές αρχιτεκτονικές. Ένα μοντέλο είχε 14,9% NMAE.

Αποτελέσματα

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

Τελικές σκέψεις

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

Ως δεύτερο σημείωμα μπορώ να πω ότι τα συστήματα συστάσεων αυξάνονται τώρα ημέρες. Η βιβλιοθήκη έκπληξη κάνει πολύ πιο εύκολη τη ζωή των προγραμματιστών, δίνοντας όλα τα διάσημα μοντέλα υλοποίησης. Για τη δημιουργία βασικού συστήματος συστάσεων είναι πραγματικά χρήσιμο. Νομίζω ότι έχω εκπληρώσει το σκοπό μου να γράψω αυτό το blog και έκανα τους προγραμματιστές να ξέρουν για την βιβλιοθήκη έκπληξη με μια μικρή εισαγωγική κωδικοποίηση. Ολόκληρος ο κώδικας είναι διαθέσιμος εδώ στο git.