Πρόβλεψη επόμενου token: embeddings και τι σημαίνει το perplexity
Εκπαιδεύουμε μοντέλο χαρακτήρων σε 32.033 ονόματα και βλέπουμε το gradient descent να ξαναβρίσκει πίνακα μετρήσεων.
Σε αυτή τη σελίδα
Εδώ είναι δέκα ονόματα που παρήγαγε ένα πρόγραμμα το οποίο δεν έχει δει ποτέ λέξη:
cexze momakurailezitynn konimittain llayn ka
da moliellavo emia sade ftlspΚανένα τους δεν είναι όνομα. Σχεδόν όλα όμως προσπαθούν. Προφέρονται, τελειώνουν εκεί όπου τελειώνουν τα ονόματα, και ένα από αυτά — emia — απέχει ένα γράμμα από ένα πραγματικό. Το πρόγραμμα που τα παρήγαγε κρατά 729 αριθμούς, δεν έχει καμία έννοια λέξης, συλλαβής ή ανθρώπου, και προσαρμόστηκε με ένα μόνο πέρασμα μέτρησης γειτονικών ζευγών γραμμάτων.
Ως το τέλος αυτού του κεφαλαίου, ένα νευρωνικό δίκτυο θα έχει μειώσει τη βαθμολογία αυτού του προγράμματος κατά ένα τρίτο στην ίδια μέτρηση. Το σημείο για το οποίο αξίζει να μείνετε είναι αυτό που κάνει πρώτα το δίκτυο: αναπαράγει τον πίνακα μετρήσεων με ακρίβεια τριών δεκαδικών σε κάθε καλά γεμάτη γραμμή, χωρίς να του ζητηθεί, επειδή τα δύο αντικείμενα είναι απαντήσεις στην ίδια ερώτηση. Όλα μετά από αυτό είναι όσα η μέτρηση δεν θα μπορούσε ποτέ να κάνει.
Ο στόχος είναι ταυτότητα, όχι σχεδιαστική επιλογή
Σύνδεσμος στην ενότητα: Ο στόχος είναι ταυτότητα, όχι σχεδιαστική επιλογήΤο Κεφάλαιο 7 σας άφησε με μια ακολουθία ακεραίων και κανέναν λόγο για τον οποίο ο ένας να ακολουθεί τον άλλον. Εδώ είναι ο λόγος, και είναι μία γραμμή από το Κεφάλαιο 2.
Ένα γλωσσικό μοντέλο είναι μια συνάρτηση που παίρνει τα token μέχρι τώρα και επιστρέφει μια κατανομή για το ποιο token έρχεται μετά: έναν αριθμό ανά καταχώριση λεξιλογίου, μη αρνητικό, με άθροισμα ίσο με ένα. Τίποτα άλλο. Για να πάμε από αυτό σε μια πιθανότητα για ένα ολόκληρο έγγραφο, εφαρμόζουμε τον κανόνα της αλυσίδας της πιθανότητας:
Αυτό είναι μια ταυτότητα, αληθής για οποιαδήποτε ακολουθία από οτιδήποτε, χωρίς καμία υπόθεση. Άρα ένα μοντέλο που κάνει τη μικρή δουλειά — επόμενο token δεδομένων των προηγούμενων — έχει ήδη κάνει τη μεγάλη δουλειά της απόδοσης πιθανότητας σε κάθε πιθανό έγγραφο, ακριβώς και δωρεάν. Η δημοφιλής διατύπωση ότι αυτό είναι ένα φτηνό κόλπο («προβλέπει μόνο την επόμενη λέξη») έχει τη λογική ανάποδα: η πρόβλεψη του επόμενου token είναι η μοντελοποίηση της κοινής κατανομής. Δεν υπήρξε ποτέ δεύτερο πράγμα να γίνει.
Η απώλεια προκύπτει εξίσου μηχανικά. Σε κάθε θέση το μοντέλο παράγει μια κατανομή και η αλήθεια είναι ένα μόνο γνωστό token, οπότε η cross-entropy του Κεφαλαίου 4 εφαρμόζεται αμετάβλητη:
Αυτό είναι η μέση αρνητική log-likelihood — η συνταγή του Κεφαλαίου 2 με μια κατηγορική κατανομή στη θέση όπου βρισκόταν η Gaussian. Και επειδή η αληθινή κατανομή είναι one-hot, η εντροπία της είναι μηδέν, οπότε σύμφωνα με την ταυτότητα του Κεφαλαίου 4 η cross-entropy ισούται με την απόκλιση KL: το να κατεβάζουμε αυτόν τον αριθμό και το να τραβάμε τις πεποιθήσεις του μοντέλου προς τα δεδομένα είναι η ίδια πράξη.
Μία συνέπεια αξίζει δική της πρόταση, επειδή είναι το οικονομικό γεγονός κάτω από ολόκληρο το πεδίο. Τα labels είναι τα δεδομένα, μετατοπισμένα κατά μία θέση. Κανείς δεν επισημειώνει τίποτα. Ένα τρισεκατομμύριο token κειμένου είναι ένα τρισεκατομμύριο προ-επισημασμένα παραδείγματα, γι’ αυτό και το σώμα εκπαίδευσης ενός σύγχρονου μοντέλου είναι «το internet» και όχι «ένα dataset που έφτιαξε κάποιος».
Το τίμιο baseline: μέτρηση
Σύνδεσμος στην ενότητα: Το τίμιο baseline: μέτρησηΠριν από οποιοδήποτε δίκτυο, το baseline: 32.033 ονόματα, ένα ανά γραμμή, και η δουλειά να παραχθούν περισσότερα, ένα γράμμα κάθε φορά.1
Το λεξιλόγιο είναι 26 γράμματα συν ένα σύμβολο ορίου . που σηματοδοτεί και την αρχή και το τέλος ενός ονόματος, οπότε το μοντέλο πρέπει να μάθει πού αρχίζουν τα ονόματα και πού σταματούν. Αυτό είναι 27 σύμβολα, και το μικρότερο δυνατό μοντέλο είναι ένας πίνακας του πόσο συχνά κάθε σύμβολο ακολούθησε κάθε άλλο σύμβολο.
N = torch.zeros((27, 27), dtype=torch.int32)
for w in words:
cs = ["."] + list(w) + ["."]
for a, b in zip(cs, cs[1:]):
N[stoi[a], stoi[b]] += 1
P = N.float()
P = P / P.sum(1, keepdim=True) # one distribution per row Δύο γραμμές αριθμητικής και το μοντέλο έχει προσαρμοστεί — και δεν είναι ευρετική: η διαίρεση των μετρήσεων με τα σύνολα των γραμμών είναι η εκτίμηση μέγιστης πιθανοφάνειας για μια κατηγορική κατανομή, δηλαδή η συνταγή του Κεφαλαίου 2 με τον λογισμό ήδη λυμένο.
names: 32033 train/val/test: 25626 / 3203 / 3204
training bigrams: 182583
the six most likely letters after 'a':
a -> '.' 0.1944 a -> 'n' 0.1600 a -> 'r' 0.0967
a -> 'l' 0.0749 a -> 'h' 0.0690 a -> 'y' 0.0606Κάντε δειγματοληψία από αυτό — επιλέξτε ένα γράμμα από τη γραμμή του τρέχοντος γράμματος, μετακινηθείτε σε εκείνη τη γραμμή, επαναλάβετε μέχρι να εμφανιστεί το σύμβολο ορίου — και παίρνετε τα ονόματα στην αρχή αυτού του κεφαλαίου. Αποτυγχάνουν με συγκεκριμένο και διαφωτιστικό τρόπο: τοπικά εύλογα, συνολικά ανοησία. Κάθε γειτονικό ζευγάρι γραμμάτων στο momakurailezitynn είναι ζευγάρι που εμφανίζεται σε πραγματικά ονόματα· απλώς υπάρχουν δεκαεπτά τέτοια στη σειρά. Το μοντέλο έχει μνήμη ενός γράμματος, άρα δεν μπορεί να ξέρει ότι συνεχίζει για υπερβολικά πολύ.
Perplexity, και πώς να το διαβάζετε
Σύνδεσμος στην ενότητα: Perplexity, και πώς να το διαβάζετεΗ απώλεια σε ονόματα που κρατήθηκαν εκτός είναι 2,4546 nats. Αυτός ο αριθμός δεν σημαίνει τίποτα από μόνος του, γι’ αυτό υπάρχει το perplexity:
Γραμμένο αναλυτικά, χωρίς καμία βιβλιοθήκη να κάνει τη δουλειά:
@torch.no_grad()
def perplexity(logits, Y):
logp = F.log_softmax(logits, dim=1) # log q for every symbol
chosen = logp[torch.arange(len(Y)), Y] # log q of the one that came next
return torch.exp(-chosen.mean()) Η εκθετικοποίηση αναιρεί τον λογάριθμο και επιστρέφει τον αριθμό στις μονάδες της μέτρησης πραγμάτων. Ο καθαρός τρόπος να δούμε τι μετρά είναι να μετρήσουμε ένα μοντέλο που δεν ξέρει απολύτως τίποτα — ένα που αποδίδει πιθανότητα σε κάθε σύμβολο ανεξάρτητα από το context:
uniform over 27 symbols loss 3.2958 nats ppl 27.000
bigram counts, add-one smoothed loss 2.4546 nats ppl 11.642Ακριβώς 27,000, επειδή . Το perplexity είναι ο αποτελεσματικός αριθμός εξίσου πιθανών επιλογών ανάμεσα στις οποίες επιλέγει το μοντέλο. Perplexity 27 σημαίνει «καμία ιδέα, θα μπορούσε να είναι οτιδήποτε». Το 11,642 του μοντέλου μετρήσεων σημαίνει ότι ένα γράμμα context το αφήνει τόσο αβέβαιο όσο κάποιον που διαλέγει στα τυφλά από περίπου δώδεκα επιλογές αντί για είκοσι επτά — γι’ αυτό παρατίθεται το perplexity και όχι η ωμή απώλεια.
Δύο πράγματα πάνε στραβά με αυτό, και το δεύτερο πάει στραβά σε δημοσιευμένες εργασίες.
Οι μηδενικές πιθανότητες είναι μοιραίες. Από τα 729 κελιά του πίνακα, 113 δεν εμφανίζονται ποτέ στην εκπαίδευση — το 15,5 % του είναι άδειο. Αυτό είναι εντάξει μέχρι το held-out σύνολο να πέσει σε ένα από αυτά, και επτά bigrams στο validation πέφτουν, μεταξύ τους τα d→q, z→j και q→o δύο φορές. Πιθανότητα μηδέν σημαίνει log , που σημαίνει άπειρη απώλεια και άπειρο perplexity: ένα όνομα σε τρεις χιλιάδες καταστρέφει τη μετρική. Η συνηθισμένη πρόχειρη λύση είναι να προσθέσουμε 1 σε κάθε μέτρηση πριν την κανονικοποίηση, κάτι που εδώ κοστίζει σχεδόν τίποτα (2,4546 αντί για 2,4524). Αλλά η πρόχειρη λύση είναι ομολογία. Ένα μοντέλο μετρήσεων δεν μπορεί να γενικεύσει καθόλου. Δεν έχει τρόπο να υποψιαστεί ότι το q→o είναι εύλογο επειδή το q→u είναι συνηθισμένο και το o συμπεριφέρεται όπως το u αλλού, αφού δεν έχει καμία έννοια ότι δύο σύμβολα μπορούν να μοιάζουν μεταξύ τους. Κάθε κελί μαθαίνεται μόνο του, και η διόρθωση αυτού είναι ο λόγος ύπαρξης του υπόλοιπου κεφαλαίου.
Το perplexity είναι τιμή ανά token, και το token είναι ελεύθερη παράμετρος. Αυτό είναι το λάθος που εμφανίζεται συνεχώς όταν συγκρίνονται μοντέλα, και είναι εύκολο να το δείτε μόλις κοιτάξετε. Πάρτε το ίδιο σώμα αγγλικής πρόζας από το Κεφάλαιο 7, το ίδιο παρεμβαλλόμενο bigram μοντέλο, και αλλάξτε μόνο το πώς κόβεται το κείμενο:
| μονάδα | λεξιλόγιο | tokens στο test | cross-entropy | perplexity | bits ανά χαρακτήρα |
|---|---|---|---|---|---|
| χαρακτήρες | 76 | 14.469 | 2,5217 | 12,45 | 3,6378 |
| BPE, 512 συγχωνεύσεις | 329 | 6.871 | 3,8547 | 47,21 | 2,6407 |
| BPE, 2.048 συγχωνεύσεις | 1.820 | 4.233 | 5,7468 | 313,20 | 2,4254 |
| λέξεις | 2.991 | 6.284 | 3,5627 | 35,26 | 2,2322 |
Το perplexity διαφέρει κατά παράγοντα 25 ανάμεσα σε αυτές τις γραμμές. Τίποτα στο μοντέλο δεν άλλαξε· μόνο το μέγεθος του πράγματος που προβλέπεται. Το να προβλέπεις μια ολόκληρη λέξη είναι δυσκολότερο από το να προβλέπεις ένα γράμμα, άρα κοστίζει περισσότερο ανά πρόβλεψη — και υπάρχουν λιγότερες προβλέψεις να γίνουν.
Τώρα διαβάστε την τελευταία στήλη, που αντίθετα διαιρεί το συνολικό κόστος με τον αριθμό των χαρακτήρων και το μετατρέπει σε bits. Αναδιατάσσει τον πίνακα. Με βάση το perplexity η κατάταξη είναι χαρακτήρες, λέξεις, BPE-512, BPE-2048· με βάση τα bits ανά χαρακτήρα είναι λέξεις, BPE-2048, BPE-512, χαρακτήρες. Το μοντέλο χαρακτήρων πηγαίνει από την πρώτη θέση στην τελευταία. Το μοντέλο με 2.048 συγχωνεύσεις, που με βάση το perplexity φαίνεται 6,6 φορές χειρότερο από εκείνο με 512 συγχωνεύσεις, είναι στην πραγματικότητα το καλύτερο από τα δύο με 2,4254 bits έναντι 2,6407.
Άρα ένα perplexity είναι συγκρίσιμο μόνο ανάμεσα σε δύο μοντέλα που μοιράζονται tokenizer, και μοντέλα με διαφορετικούς tokenizers μπορούν να συγκριθούν μόνο σε bits ανά χαρακτήρα — την ποσότητα που μέτρησε ο Shannon το 1951 βάζοντας ανθρώπους να μαντέψουν το επόμενο γράμμα αγγλικού κειμένου, και την οριοθέτησε περίπου στο ένα bit ανά χαρακτήρα.2 Το καλύτερο bigram μας βρίσκεται στα 2,23 bits, μια δίκαιη σύνοψη του πόσο δρόμο έχει ακόμη να διανύσει αυτό το κεφάλαιο.
Το ίδιο πράγμα, μαθημένο
Σύνδεσμος στην ενότητα: Το ίδιο πράγμα, μαθημένοΤώρα φτιάξτε το ίδιο μοντέλο ως δίκτυο. Θα χρειαστεί τάξεις μεγέθους περισσότερη αριθμητική για να φτάσει στο ίδιο σημείο, και το ότι φτάνει στο ίδιο σημείο είναι ακριβώς το θέμα.
Αντικαταστήστε τον πίνακα με έναν πίνακα βαρών σχήματος . Μετατρέψτε το τρέχον γράμμα σε one-hot διάνυσμα, πολλαπλασιάστε, και ονομάστε το αποτέλεσμα logits — τις μη κανονικοποιημένες βαθμολογίες από το Κεφάλαιο 4. Έπειτα softmax, έπειτα cross-entropy, έπειτα gradient descent.
W = torch.randn((27, 27), requires_grad=True)
for step in range(3000):
logits = W[xs]
loss = F.cross_entropy(logits, ys)
W.grad = None
loss.backward()
W.data -= 50.0 * W.gradΗ επισημασμένη γραμμή περιέχει έναν ορισμό που αξίζει να έχουμε. Ο πολλαπλασιασμός ενός one-hot διανύσματος με έναν πίνακα επιλέγει μία γραμμή του, άρα ο πολλαπλασιασμός είναι ένα lookup — και κάθε υλοποίηση παραλείπει την αριθμητική και κάνει το lookup απευθείας, που είναι αυτό που είναι το W[xs].
Αυτό είναι ένας embedding πίνακας. Ένας πίνακας με μία γραμμή ανά καταχώριση λεξιλογίου, δεικτοδοτημένος από token id. Καμία γεωμετρία, καμία σημασιολογία, κανένας ξεχωριστός αλγόριθμος: ένας lookup πίνακας του οποίου τα περιεχόμενα τυχαίνει να μαθαίνονται με gradient descent μαζί με όλα τα άλλα. Κάθε μυστικιστικός ισχυρισμός για τον «embedding χώρο» καταλήγει εδώ.
Εκπαιδεύστε το και δείτε πού πηγαίνει:
step 1 train 3.7550 val 3.3882 max gap to the count table 0.757269
step 100 train 2.4732 val 2.4726 max gap to the count table 0.388354
step 1000 train 2.4557 val 2.4549 max gap to the count table 0.041862
step 3000 train 2.4547 val 2.4544 max gap to the count table 0.004048Η τελευταία στήλη είναι η μεγαλύτερη απόλυτη διαφορά ανάμεσα σε οποιοδήποτε κελί του softmax(W) και στο αντίστοιχο κελί του πίνακα μετρήσεων, και πηγαίνει στο μηδέν. Μετά από 3.000 βήματα η μεγαλύτερη διαφωνία οπουδήποτε στα 729 κελιά είναι 0,004048 και ο μέσος όρος είναι 0,000224. Το χειρότερο κελί είναι q→i, που εμφανίστηκε δώδεκα φορές σε όλο το σύνολο εκπαίδευσης· ανάμεσα στις 22 γραμμές με περισσότερες από χίλιες εμφανίσεις η χειρότερη διαφωνία είναι 0,000562.
count table network
a -> '.' 0.1945 0.1945
a -> 'n' 0.1601 0.1601
a -> 'r' 0.0967 0.0967Το gradient descent, ξεκινώντας από τυχαίους αριθμούς και χωρίς να του πουν τίποτα πέρα από «κάνε μεγάλη τη log-πιθανότητα του επόμενου γράμματος», ξαναανακάλυψε τον πίνακα μετρήσεων. Και έπρεπε: οι μετρήσεις είναι η εκτίμηση μέγιστης πιθανοφάνειας, η cross-entropy είναι η αρνητική log-likelihood, άρα και οι δύο διαδικασίες βελτιστοποιούν τον ίδιο στόχο και αυτός ο στόχος έχει ένα optimum. Το δίκτυο δεν έμαθε κάτι σαν τη μέτρηση. Συνέκλινε στη μέτρηση, αργά.
Πράγμα που γεννά το δίκαιο ερώτημα γιατί να μπει κανείς στον κόπο. Επειδή ο πίνακας μετρήσεων δεν έχει πού να πάει από εδώ, ενώ το δίκτυο έχει.
Το context είναι το bottleneck, όχι η χωρητικότητα
Σύνδεσμος στην ενότητα: Το context είναι το bottleneck, όχι η χωρητικότηταΕπεκτείνετε το μοντέλο ώστε να κοιτάζει περισσότερους από έναν προηγούμενους χαρακτήρες. Αυτή είναι η αρχιτεκτονική του Bengio το 2003, ο άμεσος πρόγονος κάθε μοντέλου στο υπόλοιπο αυτού του μαθήματος:4 πάρτε τους τελευταίους τρεις χαρακτήρες, περάστε τον καθένα από έναν embedding πίνακα σε μια 10-διάστατη γραμμή, συνενώστε τις γραμμές σε 30 αριθμούς, σπρώξτε τους μέσα από το κρυφό επίπεδο του Κεφαλαίου 5, και ολοκληρώστε με ένα επίπεδο εξόδου που παράγει ένα logit ανά καταχώριση λεξιλογίου.
C = torch.randn((27, 10)) # the embedding table
W1 = torch.randn((3 * 10, 200)) # the hidden layer from Chapter 5
W2 = torch.randn((200, 27)) # one output per vocabulary entry
emb = C[X].view(-1, 30) # three lookups, concatenated
h = torch.tanh(emb @ W1 + b1)
logits = h @ W2 + b2
loss = F.cross_entropy(logits, Y)Σημειώστε τι είναι καινούργιο και τι όχι. Το κρυφό επίπεδο είναι εκείνο του Κεφαλαίου 5, αμετάβλητο· η απώλεια είναι εκείνη του Κεφαλαίου 4, αμετάβλητη. Οι καινοτομίες είναι ο embedding πίνακας στην αρχή και ένα επίπεδο εξόδου τόσο πλατύ όσο το λεξιλόγιο του Κεφαλαίου 7 — και αυτό το δεύτερο είναι το ακριβό μέρος κάθε γλωσσικού μοντέλου που φτιάχτηκε ποτέ, επειδή ένα πραγματικό λεξιλόγιο έχει 100.000 καταχωρίσεις και αυτός ο πολλαπλασιασμός πίνακα τρέχει σε κάθε θέση.
Ο ίδιος κώδικας, εκπαιδευμένος πανομοιότυπα, με μόνη αλλαγή το μέγεθος του context window:
| context | παράμετροι | απώλεια validation | perplexity validation |
|---|---|---|---|
| μέτρηση, 1 χαρακτήρας | 729 | 2,4546 | 11,642 |
| νευρωνικό, 1 χαρακτήρας | 7.897 | 2,4577 | 11,678 |
| νευρωνικό, 3 χαρακτήρες | 11.897 | 2,1145 | 8,285 |
| νευρωνικό, 8 χαρακτήρες | 21.897 | 2,0506 | 7,773 |
Η δεύτερη γραμμή είναι η ενδιαφέρουσα. Ένα δίκτυο με κρυφό επίπεδο 200 μονάδων και έντεκα φορές περισσότερες παραμέτρους από τον πίνακα μετρήσεων αποδίδει ακριβώς όσο καλά όσο ο πίνακας μετρήσεων και καθόλου καλύτερα. Η χωρητικότητα δεν ήταν ποτέ ο περιορισμός. Ένας χαρακτήρας context επιτρέπει μια συγκεκριμένη απώλεια και τίποτα που θα κολλήσετε από πάνω δεν μπορεί να πάει κάτω από αυτή, επειδή η πληροφορία δεν υπάρχει εκεί.
Δώστε του τρεις χαρακτήρες και το perplexity πέφτει από 11,68 σε 8,29 — μείωση 29 %, αγορασμένη με 4.000 επιπλέον παραμέτρους. Κερδίζει τη μέτρηση εδώ ακριβώς για τον λόγο που διαγνώστηκε νωρίτερα: ένα μοντέλο μετρήσεων πάνω σε context τριών χαρακτήρων χρειάζεται γραμμές, οι περισσότερες άδειες ή με μία μόνο παρατήρηση, και μαθαίνει την καθεμία μόνη της. Το δίκτυο μοιράζεται. Αν τα a, e και i καταλήξουν με παρόμοιες embedding γραμμές, αυτό που μαθαίνει μετά το bra μεταφέρεται στο bre χωρίς να έχει δει ποτέ το bre. Αυτή η μεταφορά είναι ολόκληρη η αξία του embedding πίνακα, και είναι το χάσμα ανάμεσα στις γραμμές δύο και τρία.
Τα δείγματα βελτιώνονται ανάλογα:
deliah nellara joce kael quintis
salayson reety khyrmin mahnen madiaryxiaΑκόμη δεν είναι λίστα πραγματικών ονομάτων. Αλλά τα deliah, nellara και kael δεν θα έμοιαζαν εκτός τόπου σε μία, και τα τέρατα που συνεχίζουν ασταμάτητα έχουν φύγει: το μεγαλύτερο από είκοσι δείγματα του μοντέλου μετρήσεων είναι δεκαεννέα γράμματα, το μεγαλύτερο από είκοσι αυτού του μοντέλου είναι δεκατρία.
Τι βρίσκεται πραγματικά μέσα στον embedding πίνακα
Σύνδεσμος στην ενότητα: Τι βρίσκεται πραγματικά μέσα στον embedding πίνακαΟ πίνακας είναι : μία γραμμή δέκα αριθμών ανά χαρακτήρα, όλοι αρχικοποιημένοι τυχαία και μετακινημένοι μόνο από το gradient της απώλειας επόμενου χαρακτήρα. Κανείς δεν έβαλε τίποτα εκεί μέσα. Τι κατέληξε λοιπόν μέσα του;
Το εργαλείο για να ρωτήσουμε είναι η cosine similarity, που είναι το εσωτερικό γινόμενο του Κεφαλαίου 1 με τα μήκη διαιρεμένα έξω:
Μετρά τη γωνία ανάμεσα σε δύο διανύσματα και αγνοεί τα μήκη τους, κάτι που θέλετε όταν το μήκος μιας γραμμής αντανακλά πόσο συχνά εμφανίστηκε το token της και όχι τι σημαίνει. Κανονικοποιήστε πρώτα κάθε διάνυσμα σε μήκος 1 — όπως κάνουν τα πραγματικά συστήματα, μία φορά, κατά την ευρετηρίαση — και η cosine similarity είναι απλώς το εσωτερικό γινόμενο.
Εδώ είναι οι κοντινότεροι γείτονες μερικών χαρακτήρων στον εκπαιδευμένο πίνακα:
'c' -> 'k':+0.598 'j' -> 'z':+0.650 'i' -> 'y':+0.541
'u' -> 'e':+0.482 'a' -> 'h':+0.367 '.' -> 'q':+0.077Κάποια από αυτά είναι όσα υπόσχεται η λαϊκή αφήγηση. Τα c και k είναι εναλλάξιμα σε ονόματα, όπως και τα i και y· τα j και z είναι και τα δύο σπάνια, κυρίως αρχικά σύμφωνα που συμπεριφέρονται παρόμοια. Το σύμβολο ορίου . δεν είναι κοντά σε τίποτα — 0,077 από το κοντινότερο γράμμα του — επειδή είναι το μόνο σύμβολο που σηματοδοτεί θέση αντί για ήχο.
Και κάποια δεν είναι. Ο κοντινότερος γείτονας του a είναι h, όχι άλλο φωνήεν. Κατά μέσο όρο σε όλα τα ζευγάρια:
mean cosine, vowel to vowel : +0.1889
mean cosine, consonant to consonant : +0.0765
mean cosine, vowel to consonant : -0.0042Τα φωνήεντα μοιάζουν περισσότερο μεταξύ τους παρά με τα σύμφωνα, και το αποτέλεσμα είναι πραγματικό αλλά μικρό. Δοκιμασμένο απέναντι σε 2.000 τυχαία επιλεγμένες ομάδες πέντε γραμμάτων, 58 από αυτές τις ομάδες διαχωρίζονται τουλάχιστον τόσο καθαρά — ένα χάσμα σημαντικό περίπου στο . Πραγματικό, λοιπόν, και καθόλου σαν το καθαρό γεωμετρικό νησί που υπονοούν οι δημοφιλείς αφηγήσεις για τα embeddings.
Αυτή είναι η τίμια περιγραφή ενός embedding πίνακα και αξίζει να την κρατήσουμε για το υπόλοιπο μάθημα. Δεν είναι χάρτης νοήματος. Είναι μια αλλαγή συντεταγμένων, μαθημένη αντί για σχεδιασμένη, της οποίας η μόνη δουλειά είναι να κάνει εύκολη τη δουλειά του επόμενου επιπέδου — η ίδια πρόταση που χρησιμοποίησε το Κεφάλαιο 5 για το κρυφό επίπεδο που δίπλωσε το επίπεδο για να λύσει το XOR. Οποιαδήποτε δομή βρίσκετε μέσα του υπάρχει επειδή μείωσε την απώλεια, και δομή που δεν μειώνει την απώλεια απλώς δεν υπάρχει.
word2vec, GloVe, και η αριθμητική που όλοι παραθέτουν
Σύνδεσμος στην ενότητα: word2vec, GloVe, και η αριθμητική που όλοι παραθέτουνΑν το χρήσιμο μέρος είναι ο πίνακας, μπορείτε να κυνηγήσετε απευθείας αυτόν. Αυτό είναι το word2vec: κρατήστε το embedding lookup, πετάξτε το γλωσσικό μοντέλο.5
Ο στόχος skip-gram with negative sampling είναι μία γραμμή. Για ένα πραγματικό ζευγάρι (κέντρο, context) που έχει ληφθεί από το σώμα, σπρώξτε το εσωτερικό τους γινόμενο προς τα πάνω· για ψεύτικα ζευγάρια που έχουν ληφθεί από μια κατανομή θορύβου, σπρώξτε το προς τα κάτω:6
Αυτό είναι binary classification — «συνέβησαν όντως αυτές οι δύο λέξεις μαζί;» — και είναι φτηνό ακριβώς επειδή δεν αγγίζει ποτέ ολόκληρο το λεξιλόγιο, πράγμα που έκανε πρακτική την εκπαίδευση σε δισεκατομμύρια λέξεις το 2013. Το GloVe φτάνει σε παρόμοια διανύσματα από την άλλη κατεύθυνση, παραγοντοποιώντας τον πίνακα των συνολικών μετρήσεων συν-εμφάνισης αντί να περνά ροϊκά μέσα από παραδείγματα.7 Και τα δύο προσαρμόζονται ακριβώς στη στατιστική από την οποία φτιάχτηκε ο πίνακας μετρήσεων. Είναι μέτρηση, συμπιεσμένη.
Εκπαιδευμένα στο text8 — 17.005.207 λέξεις της αγγλικής Wikipedia, 71.290 από αυτές με τουλάχιστον πέντε εμφανίσεις, 100 διαστάσεις, τρία περάσματα — τα διανύσματα βγαίνουν με την ιδιότητα που τα έκανε διάσημα:
king -> charles 0.700, son 0.693, queen 0.686, henry 0.669, throne 0.667
physics -> chemistry 0.672, electromagnetism 0.661, quantum 0.654, theoretical 0.624
guitar -> bass 0.733, vocals 0.732, acoustic 0.728, guitars 0.703, drums 0.685
three -> seven 0.892, two 0.877, one 0.875, five 0.871, four 0.870Κανείς δεν έδωσε κατηγορία για όργανα ή για αριθμητικά. Τώρα το διάσημο μέρος: πάρτε το king, αφαιρέστε το man, προσθέστε το woman, και βρείτε το κοντινότερο διάνυσμα στο αποτέλεσμα.
king - man + woman
nothing excluded : king 0.693, elizabeth 0.657, wife 0.629, woman 0.607
a, b, c excluded : elizabeth 0.657, wife 0.629, mary 0.607 (queen is 4th, 0.604)Το κοντινότερο διάνυσμα στο king - man + woman είναι king. Αυτό δεν είναι ιδιοτροπία ενός παραδείγματος. Το σύνολο αξιολόγησης του Mikolov θέτει ερωτήσεις της μορφής a : b :: c : ? — 8.869 σημασιολογικές (paris : france :: rome : italy) και 10.675 συντακτικές (walking : walked :: swimming : swam) — και σε όλες τις 4.103 σημασιολογικές ερωτήσεις που μπορεί να απαντήσει αυτό το λεξιλόγιο, ο νικητής είναι μία από τις τρεις λέξεις εισόδου στο 99,8 % των περιπτώσεων. Οι δημοσιευμένες επιδείξεις δεν το αναφέρουν, επειδή ο τυπικός κανόνας βαθμολόγησης διαγράφει τα a, b και c πριν κοιτάξει. Είναι θεμιτός κανόνας, και κάνει περισσότερη δουλειά από την αριθμητική:
| πώς επιλέγεται η απάντηση | σημασιολογικές | συντακτικές |
|---|---|---|
| offset, με τις εισόδους αποκλεισμένες (τυπικό) | 17,0 % | 11,9 % |
| offset, χωρίς να αποκλειστεί τίποτα | 0,1 % | 0,4 % |
κοντινότερος γείτονας μόνο του c, είσοδοι αποκλεισμένες | 13,1 % | 9,3 % |
κοντινότερος γείτονας μόνο του b, είσοδοι αποκλεισμένες | 2,3 % | 0,4 % |
Η τρίτη γραμμή είναι αυτή στην οποία αξίζει να σταθούμε. Πετάξτε τα a και b, μην κάνετε καθόλου αριθμητική, επιστρέψτε ό,τι είναι κοντινότερο στο c — και κρατάτε το 77 % της σημασιολογικής βαθμολογίας. Το μεγαλύτερο μέρος αυτού που μοιάζει με αναλογικό συλλογισμό είναι εγγύτητα συν ένας κανόνας που απαγορεύει τις προφανείς απαντήσεις, πράγμα που μέτρησε ο Linzen σε σωστά εκπαιδευμένα διανύσματα και που τα παραπάνω baselines αναπαράγουν.8 Τα συγκεκριμένα διανύσματα είναι μικρά — 17 εκατομμύρια λέξεις απέναντι στα δισεκατομμύρια πίσω από τα δημοσιευμένα μοντέλα — οπότε διαβάστε τα ποσοστά ως σχήμα, όχι ως state of the art. Το σχήμα είναι αυτό που επιβιώνει σε κάθε κλίμακα: η αριθμητική είναι πραγματική, και πολύ πιο αδύναμη από τη μία επίδειξη που παραθέτουν όλοι.
Στατικό και contextual: ένα διάνυσμα ανά λέξη, ή ένα ανά εμφάνιση
Σύνδεσμος στην ενότητα: Στατικό και contextual: ένα διάνυσμα ανά λέξη, ή ένα ανά εμφάνισηΌλα μέχρι τώρα έχουν ένα σκληρό όριο ενσωματωμένο στη δομή δεδομένων. Ένας πίνακας έχει μία γραμμή ανά token. Η λέξη bank παίρνει ένα διάνυσμα, το ίδιο σε μια πρόταση για ποτάμι και σε μια πρόταση για στεγαστικό δάνειο — αναγκαστικά, επειδή ένα lookup με βάση id δεν μπορεί να εξαρτάται από τίποτε άλλο.
Η λύση είναι να σταματήσουμε να διαβάζουμε το διάνυσμα από τον πίνακα και να αρχίσουμε να το υπολογίζουμε από την πρόταση. Αυτό είναι ένα contextual embedding, που εισήχθη από το ELMo το 2018 και έγινε πρότυπο από το BERT την ίδια χρονιά.910 Μετρημένα στο πραγματικό μοντέλο, τα νούμερα είναι πιο αιχμηρά από την εξήγηση:
sentence A: "He sat on the bank of the river and watched the water go by."
sentence B: "She deposited the cheque at the bank on the corner of the street."
static vector for 'bank' (a row of the input embedding table)
cosine A vs B ........................ 1.000000
contextual vector for 'bank', layer by layer
layer | A vs B | A vs another river sentence | B vs another money sentence
0 | 0.9512 | 0.9512 | 0.9359
4 | 0.5647 | 0.8987 | 0.7716
9 | 0.4284 | 0.8699 | 0.7568
12 | 0.5278 | 0.8702 | 0.7335Η πρώτη γραμμή είναι ακριβής, όχι προσεγγιστική: το στατικό διάνυσμα για το bank είναι οι ίδιοι 768 αριθμοί και στις δύο προτάσεις, άρα το cosine είναι 1 εκ κατασκευής. Εννέα επίπεδα αργότερα οι δύο εμφανίσεις βρίσκονται στο 0,43, ενώ το bank σε δύο διαφορετικές προτάσεις για ποτάμι μένει στο 0,87. Κανείς δεν επισήμανε καμία σημασία πουθενά σε αυτή τη διαδικασία· οι σημασίες διαχωρίστηκαν επειδή ο διαχωρισμός τους κάνει τον στόχο εκπαίδευσης — το να μαντεύεται ένα κρυμμένο token από τους γείτονές του — ευκολότερο να ικανοποιηθεί.
Δύο λεπτομέρειες αξίζουν προσοχή. Το επίπεδο 0 είναι ήδη 0,9512 αντί για 1,0, επειδή έχουν προστεθεί position embeddings και η λέξη βρίσκεται σε διαφορετικό σημείο σε κάθε πρόταση. Και η ομοιότητα ανεβαίνει ξανά στα επίπεδα 11 και 12: τα τελικά επίπεδα ενός pretrained μοντέλου είναι εξειδικευμένα στον στόχο εκπαίδευσής του, και συχνά δεν είναι το καλύτερο μέρος από όπου να πάρετε μια αναπαράσταση.
Εμφάνιση λεπτομερειών
Προαιρετικό: weight tying.
Στο bert-base-uncased ο embedding πίνακας είναι — 23.440.896 αριθμοί, 21,4 % των 109.482.240 παραμέτρων του μοντέλου. Σε ένα μικρό γλωσσικό μοντέλο το ποσοστό είναι ακόμη μεγαλύτερο, γι’ αυτό ένα κόλπο είναι σχεδόν καθολικό: ο πίνακας εισόδου και το επίπεδο εξόδου που παράγει τα logits είναι ο ίδιος πίνακας, που χρησιμοποιείται μία φορά με row lookup και μία φορά μετατεθειμένος.11 Το επίπεδο εξόδου ήδη αποδίδει σε κάθε καταχώριση λεξιλογίου ένα διάνυσμα — παίρνει ένα εσωτερικό γινόμενο με καθεμία — και το tying λέει ότι το διάνυσμα που χρησιμοποιείται για να διαβάσει ένα token και το διάνυσμα που χρησιμοποιείται για να το γράψει πρέπει να είναι το ίδιο αντικείμενο. Κόβει παραμέτρους και βελτιώνει το perplexity ταυτόχρονα, κάτι αρκετά σπάνιο ώστε να αξίζει προσοχή.
Ένα embedding model δεν είναι γλωσσικό μοντέλο
Σύνδεσμος στην ενότητα: Ένα embedding model δεν είναι γλωσσικό μοντέλοΓια να αναζητήσετε ένα σώμα κειμένων με βάση το νόημα χρειάζεστε ένα διάνυσμα ανά πρόταση. Με αυτά δεδομένα, η αναζήτηση είναι τετριμμένη — αυτό είναι το σύνολο του semantic retrieval, και το Κεφάλαιο 19 αφορά όλα όσα βρίσκονται γύρω του:
E = normalise(embed(sentences)) # (200, d), every row of length 1
q = normalise(embed([query])) # (1, d)
scores = q @ E.T # one matrix multiply
top5 = scores[0].argsort()[::-1][:5]Άρα η μόνη πραγματική ερώτηση είναι από πού προέρχεται το embed. Η προφανής κίνηση είναι να πάρετε ένα pretrained γλωσσικό μοντέλο, να περάσετε κάθε πρόταση μέσα από αυτό και να πάρετε τον μέσο όρο των token διανυσμάτων. Εδώ είναι αυτή η μέθοδος απέναντι σε τέσσερις εναλλακτικές, βαθμολογημένη με δύο τρόπους: τη rank correlation ανάμεσα στο cosine και στις ανθρώπινες κρίσεις ομοιότητας πάνω στα 1.379 ζευγάρια του STS benchmark, και top-1 retrieval σε ένα index χτισμένο από τα 200 ισχυρότερα παραφρασμένα ζευγάρια από αυτά — η μία πλευρά κάθε ζευγαριού ευρετηριασμένη, η άλλη χρησιμοποιημένη ως query.
| πώς γίνεται embedding της πρότασης | rank correlation | top-1 σε index 200 προτάσεων |
|---|---|---|
| δυαδική επικάλυψη λέξεων (κανένα μοντέλο) | 0,5500 | 89,0 % |
| μέσος όρος των στατικών διανυσμάτων που εκπαιδεύτηκαν παραπάνω | 0,5263 | 85,5 % |
BERT, το token [CLS] | 0,2030 | 67,0 % |
| BERT, μέσος όρος token διανυσμάτων | 0,4729 | 84,0 % |
| MiniLM, εκπαιδευμένο contrastively | 0,8203 | 92,0 % |
Διαβάστε τις τρεις μεσαίες γραμμές σε σχέση με τις δύο πρώτες. Ένας pretrained transformer 109 εκατομμυρίων παραμέτρων, χρησιμοποιημένος με τον προφανή τρόπο, είναι χειρότερος στο να κρίνει ομοιότητα προτάσεων από το να μετρά πόσες λέξεις μοιράζονται δύο προτάσεις — και χειρότερος από τον μέσο όρο των 100-διάστατων text8 διανυσμάτων που εκπαιδεύτηκαν πριν λίγο. Το token [CLS], που τα tutorials ακόμη προτείνουν επειδή το BERT ήταν pretrained με έναν στόχο επιπέδου πρότασης συνδεδεμένο πάνω του, είναι χειρότερο από το μισό αυτού.
Αυτό δεν είναι ελάττωμα του BERT. Είναι ο στόχος. Ένα γλωσσικό μοντέλο εκπαιδεύεται ώστε οι κρυφές του καταστάσεις να προβλέπουν ένα token· τίποτα εκεί δεν ζητά από δύο παραφράσεις να καταλήξουν κοντά η μία στην άλλη, και τίποτα δεν ανταμείβει μια γεωμετρία στην οποία το cosine σημαίνει «ίδιο νόημα». Η τελευταία γραμμή είναι ένα μοντέλο στο ένα πέμπτο του μεγέθους (22.713.216 παράμετροι) εκπαιδευμένο σε εντελώς διαφορετική απώλεια: contrastive learning, όπου τα παραδείγματα είναι ζευγάρια — μια ερώτηση και η απάντησή της, μια πρόταση και η παράφρασή της — και ο στόχος τραβά τα αληθινά ζευγάρια μαζί ενώ σπρώχνει δειγματοληπτημένα αρνητικά μακριά. Αυτή είναι η συνεισφορά του Sentence-BERT και η προέλευση ολόκληρης της βιομηχανίας embedding models.12 Το Dense Passage Retrieval εφαρμόζει την ίδια συνταγή απευθείας στην αναζήτηση, με έναν encoder για queries και έναν για passages.13
Άρα, ο πρακτικός κανόνας:
Ένα embedding model δεν είναι γλωσσικό μοντέλο με αφαιρεμένο το τελευταίο επίπεδο. Είναι διαφορετικό μοντέλο με διαφορετικό στόχο, συνήθως πολύ μικρότερο, του οποίου το cosine σημαίνει αυτό που θέλετε να σημαίνει επειδή εκπαιδεύτηκε σε ζευγάρια όπου αυτό ήταν ο στόχος. Ο παραπάνω πίνακας είναι το κόστος της αντικατάστασης του ενός με το άλλο.
Και η οικογένεια αποτυγχάνει στη σειρά των λέξεων. «The dog bit the man» και «the man bit the dog» έχουν πανομοιότυπα bags of words, άρα η επικάλυψη λέξεων και ο μέσος όρος στατικών διανυσμάτων τους δίνουν cosine ακριβώς 1,000000, και το mean-pooled BERT, που όντως βλέπει θέση, εξακολουθεί να καταλήγει σχεδόν εκεί — και το contrastively trained MiniLM εξακολουθεί να τα βάζει στο 0,979. Αν η εργασία retrieval σας εξαρτάται από το ποιος έκανε τι σε ποιον, κανένα cosine threshold δεν θα σας σώσει.
Το Κεφάλαιο 19 χτίζει ένα παραγωγικό σύστημα retrieval πάνω σε αυτή τη βάση και καταλήγει σε ένα συγκεκριμένο όριο cosine. Η τελευταία μέτρηση σε αυτό το κεφάλαιο είναι αυτό που κάνει έναν τέτοιο αριθμό υπερασπίσιμο αντί για μαγικό.
Η κατάρα της διαστατικότητας, σε έναν πίνακα
Σύνδεσμος στην ενότητα: Η κατάρα της διαστατικότητας, σε έναν πίνακαΤα πραγματικά embeddings έχουν εκατοντάδες ή χιλιάδες συνιστώσες, και οι αποστάσεις συμπεριφέρονται παράξενα εκεί πάνω. Πάρτε 1.000 τυχαία σημεία στον μοναδιαίο κύβο των διαστάσεων και κοιτάξτε τον λόγο ανάμεσα στη μεγαλύτερη και τη μικρότερη απόσταση μεταξύ οποιωνδήποτε δύο από αυτά:
| διαστάσεις | κοντινότερο ζευγάρι | μακρινότερο ζευγάρι | λόγος |
|---|---|---|---|
| 2 | 0,0007 | 1,3612 | 1921,66 |
| 10 | 0,2361 | 2,3397 | 9,91 |
| 100 | 3,0047 | 5,1752 | 1,72 |
| 1.000 | 11,7809 | 14,0306 | 1,19 |
| 10.000 | 39,6152 | 42,0125 | 1,06 |
Σε δέκα χιλιάδες διαστάσεις, το μακρινότερο ζευγάρι σημείων απέχει μόνο 6 % περισσότερο από το κοντινότερο ζευγάρι. Όλα είναι περίπου ισαπέχοντα από όλα τα άλλα, ο «κοντινότερος γείτονας» παύει να μεταφέρει πολλή πληροφορία, και αυτή είναι η κατάρα της διαστατικότητας — καθώς και ένας λόγος για τον οποίο οι μεγάλες vector databases δεν κάνουν ακριβή αναζήτηση κοντινότερου γείτονα. Η άλλη πλευρά του ίδιου νομίσματος είναι αυτό που κάνει τα cosine thresholds εφαρμόσιμα: μετρημένο σε χίλια ζευγάρια τυχαίων μοναδιαίων διανυσμάτων, το μέσο cosine βρίσκεται στο στις 100 διαστάσεις και στο στις 768, με τυπικές αποκλίσεις 0,0968 και 0,0357 — και στις 768 διαστάσεις μόνο το 0,2 % των τυχαίων ζευγαριών ξεπερνά το 0,1 σε απόλυτη τιμή. Μια μετρημένη ομοιότητα 0,4 επομένως δεν είναι «40 % όμοια»· είναι πολύ έξω από οτιδήποτε παράγει η τύχη, γι’ αυτό thresholds μεταξύ 0,3 και 0,7 χωρίζουν το σήμα από τον θόρυβο αντί να κάθονται στη μέση του.
Πού πηγαίνει αυτό μετά
Σύνδεσμος στην ενότητα: Πού πηγαίνει αυτό μετάΤο μοντέλο σε αυτό το κεφάλαιο διαβάζει έναν σταθερό αριθμό προηγούμενων χαρακτήρων, κάνει lookup στον καθένα και κολλά τα αποτελέσματα μαζί με τη σειρά. Αυτός ο σχεδιασμός έχει δύο προβλήματα, και είναι το ίδιο πρόβλημα.
Κοιτάξτε ξανά τον πίνακα context: η μετάβαση από τρεις χαρακτήρες σε οκτώ σχεδόν διπλασίασε τις παραμέτρους και αγόρασε 0,06 nats. Το κόστος μεγαλώνει γραμμικά με το context — κάθε επιπλέον θέση χρειάζεται τη δική της πλάκα του πρώτου πίνακα βαρών — και το όφελος όχι. Σπρώξτε το στα χίλια tokens και μόνο το πρώτο επίπεδο ζυγίζει περισσότερο από το υπόλοιπο μοντέλο, με το μεγαλύτερο μέρος του ξοδεμένο σε θέσεις που δεν έχουν σημασία για οποιαδήποτε δεδομένη πρόβλεψη.
Και αυτό είναι το δεύτερο πρόβλημα: το μοντέλο δεν έχει κανέναν τρόπο να αποφασίσει ποια από τα προηγούμενα tokens έχουν σημασία. Η θέση δύο παίρνει τα δικά της βάρη και η θέση επτά τα δικά της, μόνιμα, ό,τι κι αν υπάρχει μέσα τους. Όταν το μοντέλο συλλαβίζει nell, ο αποφασιστικός χαρακτήρας είναι ο αμέσως προηγούμενος. Όταν μια πρόταση περιέχει αντωνυμία, η λέξη που καθορίζει το αναφερόμενό της μπορεί να βρίσκεται σαράντα tokens πίσω — και κανένα σταθερό slot δεν μπορεί να ανατεθεί στο «σαράντα πίσω», επειδή την επόμενη φορά θα είναι έξι.
Αυτό που θέλουμε είναι ένα μοντέλο που υπολογίζει, για κάθε πρόβλεψη, πόσο πρέπει να μετρήσει κάθε προηγούμενο token — βάρη πάνω στο context που παράγονται από το περιεχόμενο αντί να καθορίζονται από τη διάταξη. Γράψτε το προσεκτικά και αρχίζει ως κάτι εντελώς κοινότοπο: ένας μέσος όρος πάνω στα προηγούμενα tokens. Έπειτα αφήστε τα βάρη αυτού του μέσου όρου να μαθευτούν, και αφήστε τα να εξαρτώνται από το ποιο token κάνει την ερώτηση.
Αυτό είναι το attention, και είναι το Κεφάλαιο 9.
Πηγές και μέθοδος
Σύνδεσμος στην ενότητα: Πηγές και μέθοδοςΑξίζει επίσης να διαβαστεί παράλληλα: το κεφάλαιο 3 του Speech and Language Processing των Jurafsky και Martin, που αντιμετωπίζει n-gram μοντέλα, smoothing και perplexity πολύ προσεκτικότερα απ’ όσο υπάρχει χώρος εδώ, συμπεριλαμβανομένου του γιατί το interpolation και το back-off νικούν την προσθήκη ενός· οι σημειώσεις Stanford CS229 §17.1–17.2 για τη γλωσσική μοντελοποίηση από την πιθανοκρατική πλευρά· και η παραπάνω εργασία του Linzen, που είναι σύντομη και αξίζει να διαβαστεί ολόκληρη.
Παραπομπές
Σύνδεσμος στην ενότητα: Παραπομπές-
Το παράδειγμα παραγωγής ονομάτων, το dataset και η εξέλιξη από πίνακα μετρήσεων σε δίκτυο τύπου Bengio ακολουθούν τη σειρά building makemore του Andrej Karpathy, της οποίας τα δύο πρώτα μέρη είναι ο καλύτερος συνοδός για αυτό το κεφάλαιο. ↩
-
Shannon, C. E. Prediction and Entropy of Printed English. Bell System Technical Journal 30(1), σελ. 50–64 (1951). Άνθρωποι που μαντεύουν το επόμενο γράμμα αγγλικού κειμένου, και η αρχική μέτρηση bits ανά χαρακτήρα. ↩
-
Shannon, C. E. A Mathematical Theory of Communication. Bell System Technical Journal 27 (1948). Το θεώρημα κωδικοποίησης πηγής, και η ταύτιση της πρόβλεψης με τη συμπίεση. ↩
-
Bengio, Y., Ducharme, R., Vincent, P. and Jauvin, C. A Neural Probabilistic Language Model. Journal of Machine Learning Research 3, σελ. 1137–1155 (2003). Η αρχιτεκτονική που χρησιμοποιήθηκε παραπάνω: ένα embedding ανά λέξη, συνενωμένο πάνω σε ένα σταθερό window, μέσα από ένα κρυφό επίπεδο, σε softmax πάνω στο λεξιλόγιο. ↩
-
Mikolov, T., Chen, K., Corrado, G. and Dean, J. Efficient Estimation of Word Representations in Vector Space. arXiv:1301.3781 (2013). CBOW και skip-gram, και το σύνολο αναλογιών που χρησιμοποιήθηκε παραπάνω. ↩
-
Mikolov, T., Sutskever, I., Chen, K., Corrado, G. and Dean, J. Distributed Representations of Words and Phrases and their Compositionality. arXiv:1310.4546 (2013). Negative sampling, subsampling συχνών λέξεων, και η κατανομή θορύβου υψωμένη στη δύναμη 3/4 που χρησιμοποιήθηκε παραπάνω. ↩
-
Pennington, J., Socher, R. and Manning, C. GloVe: Global Vectors for Word Representation. EMNLP 2014. Διανύσματα λέξεων από παραγοντοποίηση του συνολικού πίνακα συν-εμφάνισης αντί για ροϊκά τοπικά windows. ↩
-
Linzen, T. Issues in evaluating semantic spaces using word analogies. RepEval 2016, arXiv:1606.07736. Η πηγή των offset-free baselines που αναπαράχθηκαν παραπάνω. ↩
-
Peters, M. et al. Deep contextualized word representations. arXiv:1802.05365 (2018). ELMo: ένα διάνυσμα ανά εμφάνιση, υπολογισμένο από ένα αμφίδρομο γλωσσικό μοντέλο. ↩
-
Devlin, J., Chang, M.-W., Lee, K. and Toutanova, K. BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding. arXiv:1810.04805 (2018). Το μοντέλο που μετρήθηκε στο πείραμα με το bank. ↩
-
Press, O. and Wolf, L. Using the Output Embedding to Improve Language Models. arXiv:1608.05859 (2016), και Inan, H., Khosravi, K. and Socher, R. Tying Word Vectors and Word Classifiers. arXiv:1611.01462 (2016). Δύο ανεξάρτητα επιχειρήματα για το ίδιο κόλπο. ↩
-
Reimers, N. and Gurevych, I. Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks. arXiv:1908.10084 (2019). Η εναρκτήρια μέτρησή του — το mean-pooled BERT να υστερεί έναντι μέσων στατικών διανυσμάτων στην ομοιότητα προτάσεων — είναι αυτό που αναπαράγει ο παραπάνω πίνακας. ↩
-
Karpukhin, V. et al. Dense Passage Retrieval for Open-Domain Question Answering. arXiv:2004.04906 (2020). Contrastive training ενός retriever δύο encoders· ο άμεσος πρόγονος του retrieval stack του Κεφαλαίου 19. ↩