Πώς εργαζόμαστε για την ποιότητα και την ταχύτητα επιλογής προτάσεων

Το όνομά μου είναι Pavel Parkhomenko, είμαι προγραμματιστής ML. Σε αυτό το άρθρο, θα ήθελα να μιλήσω για τη δομή της υπηρεσίας Yandex.Zen και να μοιραστώ τεχνικές βελτιώσεις, η εφαρμογή των οποίων κατέστησε δυνατή την αύξηση της ποιότητας των συστάσεων. Από αυτήν την ανάρτηση θα μάθετε πώς να βρίσκετε τα πιο σχετικά για τον χρήστη ανάμεσα σε εκατομμύρια έγγραφα σε λίγα μόνο χιλιοστά του δευτερολέπτου. πώς να κάνετε συνεχή αποσύνθεση ενός μεγάλου πίνακα (που αποτελείται από εκατομμύρια στήλες και δεκάδες εκατομμύρια σειρές) έτσι ώστε τα νέα έγγραφα να λαμβάνουν το διάνυσμά τους σε δεκάδες λεπτά. πώς να επαναχρησιμοποιήσετε την αποσύνθεση μήτρας χρήστη-άρθρου για να έχετε μια καλή διανυσματική αναπαράσταση για βίντεο.

Πώς εργαζόμαστε για την ποιότητα και την ταχύτητα επιλογής προτάσεων

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

  • Διαχωρίστε τις εργασίες υπολογιστών: κάντε όλες τις βαριές λειτουργίες εκτός σύνδεσης και σε πραγματικό χρόνο εκτελέστε μόνο γρήγορη εφαρμογή μοντέλων για να είστε υπεύθυνοι για 100-200 ms.
  • Λάβετε γρήγορα υπόψη τις ενέργειες των χρηστών. Για να γίνει αυτό, είναι απαραίτητο όλα τα συμβάντα να παραδίδονται άμεσα στον εισηγητή και να επηρεάζουν τα αποτελέσματα των μοντέλων.
  • Κάντε τη ροή έτσι ώστε για τους νέους χρήστες να προσαρμόζεται γρήγορα στη συμπεριφορά τους. Τα άτομα που μόλις εντάχθηκαν στο σύστημα θα πρέπει να αισθάνονται ότι τα σχόλιά τους επηρεάζουν τις συστάσεις.
  • Κατανοήστε γρήγορα σε ποιον να προτείνετε ένα νέο άρθρο.
  • Ανταποκριθείτε γρήγορα στη συνεχή εμφάνιση νέου περιεχομένου. Δεκάδες χιλιάδες άρθρα δημοσιεύονται καθημερινά και πολλά από αυτά έχουν περιορισμένη διάρκεια ζωής (ας πούμε ειδήσεις). Αυτό είναι που τους διακρίνει από ταινίες, μουσική και άλλο μακρόβιο και ακριβό περιεχόμενο για δημιουργία.
  • Μεταφορά γνώσης από μια περιοχή τομέα σε μια άλλη. Εάν ένα σύστημα συστάσεων έχει εκπαιδευμένα μοντέλα για άρθρα κειμένου και προσθέσουμε βίντεο σε αυτό, μπορούμε να χρησιμοποιήσουμε ξανά τα υπάρχοντα μοντέλα, ώστε ο νέος τύπος περιεχομένου να κατατάσσεται καλύτερα.

Θα σας πω πώς λύσαμε αυτά τα προβλήματα.

Επιλογή υποψηφίων

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

Ας υποθέσουμε ότι εκπαιδεύσαμε πολλά μοντέλα ML, δημιουργήσαμε χαρακτηριστικά με βάση αυτά και εκπαιδεύσαμε ένα άλλο μοντέλο που ταξινομεί έγγραφα για τον χρήστη. Όλα θα ήταν καλά, αλλά δεν μπορείτε απλώς να πάρετε και να υπολογίσετε όλα τα σημάδια για όλα τα έγγραφα σε πραγματικό χρόνο, εάν υπάρχουν εκατομμύρια από αυτά τα έγγραφα και οι συστάσεις πρέπει να δημιουργηθούν σε 100-200 ms. Το καθήκον είναι να επιλέξετε ένα συγκεκριμένο υποσύνολο από εκατομμύρια, το οποίο θα ταξινομηθεί για τον χρήστη. Αυτό το στάδιο συνήθως ονομάζεται επιλογή υποψηφίου. Υπάρχουν αρκετές απαιτήσεις για αυτό. Πρώτον, η επιλογή πρέπει να γίνει πολύ γρήγορα, ώστε να μείνει όσο το δυνατόν περισσότερος χρόνος για την ίδια την κατάταξη. Δεύτερον, έχοντας μειώσει σημαντικά τον αριθμό των εγγράφων για κατάταξη, πρέπει να διατηρήσουμε όσο το δυνατόν πληρέστερα έγγραφα σχετικά με τον χρήστη.

Η αρχή της επιλογής υποψηφίων έχει εξελιχθεί και αυτή τη στιγμή έχουμε φτάσει σε ένα σύστημα πολλαπλών σταδίων:

Πώς εργαζόμαστε για την ποιότητα και την ταχύτητα επιλογής προτάσεων

Πρώτον, όλα τα έγγραφα χωρίζονται σε ομάδες και τα πιο δημοφιλή έγγραφα λαμβάνονται από κάθε ομάδα. Οι ομάδες μπορεί να είναι ιστότοποι, θέματα, συμπλέγματα. Για κάθε χρήστη, με βάση το ιστορικό του, επιλέγονται οι πιο κοντινές του ομάδες και λαμβάνονται από αυτές τα καλύτερα έγγραφα. Χρησιμοποιούμε επίσης το ευρετήριο kNN για να επιλέξουμε έγγραφα που είναι πιο κοντά στον χρήστη σε πραγματικό χρόνο. Υπάρχουν πολλές μέθοδοι για την κατασκευή ενός ευρετηρίου kNN· η δική μας λειτούργησε καλύτερα HNSW (Ierarchical Navigable Small World graphs). Αυτό είναι ένα ιεραρχικό μοντέλο που σας επιτρέπει να βρείτε τα N πλησιέστερα διανύσματα για έναν χρήστη από μια βάση δεδομένων εκατομμυρίων σε λίγα χιλιοστά του δευτερολέπτου. Αρχικά καταχωρούμε ολόκληρη τη βάση δεδομένων εγγράφων εκτός σύνδεσης. Δεδομένου ότι η αναζήτηση στο ευρετήριο λειτουργεί αρκετά γρήγορα, εάν υπάρχουν πολλές ισχυρές ενσωματώσεις, μπορείτε να δημιουργήσετε πολλά ευρετήρια (ένα ευρετήριο για κάθε ενσωμάτωση) και να αποκτήσετε πρόσβαση σε καθένα από αυτά σε πραγματικό χρόνο.

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

Βήμα ALS στο χρόνο εκτέλεσης

Πώς να λάβετε υπόψη τα σχόλια των χρηστών αμέσως μετά από ένα κλικ;

Ένας σημαντικός παράγοντας στις συστάσεις είναι ο χρόνος απόκρισης στα σχόλια των χρηστών. Αυτό είναι ιδιαίτερα σημαντικό για τους νέους χρήστες: όταν ένα άτομο αρχίζει να χρησιμοποιεί το σύστημα συστάσεων, λαμβάνει μια μη εξατομικευμένη ροή εγγράφων διαφόρων θεμάτων. Μόλις κάνει το πρώτο κλικ, πρέπει να το λάβετε αμέσως υπόψη σας και να προσαρμοστείτε στα ενδιαφέροντά του. Εάν υπολογίσετε όλους τους παράγοντες εκτός σύνδεσης, η γρήγορη απόκριση του συστήματος θα καταστεί αδύνατη λόγω της καθυστέρησης. Επομένως, είναι απαραίτητο να επεξεργαστούμε τις ενέργειες των χρηστών σε πραγματικό χρόνο. Για αυτούς τους σκοπούς, χρησιμοποιούμε το βήμα ALS κατά την εκτέλεση για να δημιουργήσουμε μια διανυσματική αναπαράσταση του χρήστη.

Ας υποθέσουμε ότι έχουμε μια διανυσματική αναπαράσταση για όλα τα έγγραφα. Για παράδειγμα, μπορούμε να δημιουργήσουμε ενσωματώσεις εκτός σύνδεσης με βάση το κείμενο ενός άρθρου χρησιμοποιώντας ELMo, BERT ή άλλα μοντέλα μηχανικής εκμάθησης. Πώς μπορούμε να αποκτήσουμε μια διανυσματική αναπαράσταση χρηστών στον ίδιο χώρο με βάση τις αλληλεπιδράσεις τους στο σύστημα;

Γενική αρχή σχηματισμού και αποσύνθεσης της μήτρας χρήστη-εγγράφουΑς έχουμε m χρήστες και n έγγραφα. Για ορισμένους χρήστες, η σχέση τους με ορισμένα έγγραφα είναι γνωστή. Στη συνέχεια, αυτές οι πληροφορίες μπορούν να αναπαρασταθούν ως μια μήτρα mxn: οι σειρές αντιστοιχούν σε χρήστες και οι στήλες αντιστοιχούν σε έγγραφα. Εφόσον το άτομο δεν έχει δει τα περισσότερα από τα έγγραφα, τα περισσότερα από τα κελιά του πίνακα θα παραμείνουν κενά, ενώ άλλα θα γεμίσουν. Για κάθε συμβάν (μου αρέσει, δεν μου αρέσει, κλικ) παρέχεται κάποια τιμή στη μήτρα - αλλά ας εξετάσουμε ένα απλοποιημένο μοντέλο στο οποίο το "μου αρέσει" αντιστοιχεί στο 1 και το "δεν μου αρέσει" αντιστοιχεί στο -1.

Ας αποσυνθέσουμε τον πίνακα σε δύο: P (mxd) και Q (dxn), όπου d είναι η διάσταση της αναπαράστασης του διανύσματος (συνήθως ένας μικρός αριθμός). Στη συνέχεια, κάθε αντικείμενο θα αντιστοιχεί σε ένα διάνυσμα d (για έναν χρήστη - μια γραμμή στον πίνακα P, για ένα έγγραφο - μια στήλη στον πίνακα Q). Αυτά τα διανύσματα θα είναι οι ενσωματώσεις των αντίστοιχων αντικειμένων. Για να προβλέψετε εάν ένας χρήστης θα αρέσει σε ένα έγγραφο, μπορείτε απλώς να πολλαπλασιάσετε τις ενσωματώσεις του.

Πώς εργαζόμαστε για την ποιότητα και την ταχύτητα επιλογής προτάσεων
Ένας από τους πιθανούς τρόπους αποσύνθεσης μιας μήτρας είναι το ALS (Alternating Least Squares). Θα βελτιστοποιήσουμε την ακόλουθη συνάρτηση απώλειας:

Πώς εργαζόμαστε για την ποιότητα και την ταχύτητα επιλογής προτάσεων

Εδώ το rui είναι η αλληλεπίδραση του χρήστη u με το έγγραφο i, το qi είναι το διάνυσμα του εγγράφου i, το pu είναι το διάνυσμα του χρήστη u.

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

Αυτό ονομάζεται "βήμα ALS". Και ο ίδιος ο αλγόριθμος ALS είναι ότι διορθώνουμε εναλλάξ τη μία από τις πίνακες (χρήστες και άρθρα) και ενημερώνουμε την άλλη, βρίσκοντας τη βέλτιστη λύση.

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

Κατανεμημένο συνεργατικό φιλτράρισμα

Πώς να κάνετε αυξητική παραγοντοποίηση κατανεμημένων πινάκων και να βρείτε γρήγορα διανυσματικές αναπαραστάσεις νέων άρθρων;

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

1. Έχουμε εκατομμύρια έγγραφα και δεκάδες εκατομμύρια χρήστες. Η μήτρα δεν ταιριάζει εξ ολοκλήρου σε ένα μηχάνημα και η αποσύνθεση θα διαρκέσει πολύ χρόνο.
2. Το μεγαλύτερο μέρος του περιεχομένου του συστήματος έχει μικρή διάρκεια ζωής: τα έγγραφα παραμένουν σχετικά μόνο για λίγες ώρες. Επομένως, είναι απαραίτητο να κατασκευαστεί η διανυσματική τους αναπαράσταση όσο το δυνατόν γρηγορότερα.
3. Εάν δημιουργήσετε μια αποσύνθεση αμέσως μετά τη δημοσίευση του εγγράφου, ένας επαρκής αριθμός χρηστών δεν θα έχει χρόνο να το αξιολογήσει. Επομένως, η διανυσματική του αναπαράσταση πιθανότατα δεν θα είναι πολύ καλή.
4. Εάν ένας χρήστης αρέσει ή δεν του αρέσει, δεν θα μπορούμε να το λάβουμε αμέσως υπόψη κατά την αποσύνθεση.

Για να λύσουμε αυτά τα προβλήματα, εφαρμόσαμε μια κατανεμημένη αποσύνθεση του πίνακα χρήστη-εγγράφου με συχνές σταδιακές ενημερώσεις. Πώς ακριβώς λειτουργεί;

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

Πώς εργαζόμαστε για την ποιότητα και την ταχύτητα επιλογής προτάσεων

Θα χρησιμοποιήσουμε τον αλγόριθμο αποσύνθεσης ALS που περιγράφεται παραπάνω. Ας δούμε πώς να εκτελέσετε ένα βήμα ALS με κατανεμημένο τρόπο - τα υπόλοιπα βήματα θα είναι παρόμοια. Ας υποθέσουμε ότι έχουμε μια σταθερή μήτρα εγγράφων και θέλουμε να δημιουργήσουμε μια μήτρα χρηστών. Για να γίνει αυτό, θα το χωρίσουμε σε N μέρη ανά γραμμές, κάθε τμήμα θα περιέχει περίπου τον ίδιο αριθμό γραμμών. Θα στείλουμε σε κάθε μηχάνημα μη κενά κελιά των αντίστοιχων σειρών, καθώς και τη μήτρα των ενσωματώσεων εγγράφων (εξ ολοκλήρου). Δεδομένου ότι το μέγεθός του δεν είναι πολύ μεγάλο και η μήτρα εγγράφου χρήστη είναι συνήθως πολύ αραιή, αυτά τα δεδομένα θα χωρέσουν σε ένα κανονικό μηχάνημα.

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

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

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

Μεταφορά σε άλλη περιοχή τομέα

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

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

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

Συμπέρασμα

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

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

Πηγή: www.habr.com

Προσθέστε ένα σχόλιο