ΠΟΛΥΤΕΧΝΕΙΟ ΚΡΗΤΗΣ Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υπολογιστών Τοµέας Τηλεπικοινωνιών Αναπληρωτής Καθηγητής: Αλέξανδρος Ποταµιάνος ΤΗΛ 413 : Συστήµατα Επικοινωνίας Φυσικής Γλώσσας 8 ο Εξάµηνο 2003 2004 3 η Εργαστηριακή Άσκηση Ονοµατεπώνυµο 1: Α. Μ. : Ονοµατεπώνυµο 2: Α. Μ. : Ονοµατεπώνυµο 3: Α. Μ. : ΗΜΕΡΟΜΗΝΙΑ: 1
HTK LANGUAGE MODELS EXERCISES Για την εργαστηριακή άσκηση αυτή κατεβάστε τα binaries του HTK τα οποία έχουν γίνει compile για το cygwin. Στη συνέχεια αποσυµπιέστε τα αρχεία αυτά και αντιγράψτε τα στο /usr/bin/. Στη συνέχεια κατεβάσετε από την ίδια σελίδα του site του µαθήµατος τα (samples του HTK). Για την συγκεκριµένη εργαστηριακή άσκηση καλείστε να εκπαιδεύσετε δηµιουργήσετε unigram, bigram, και trigram language models. Για την εκπαίδευση των µοντέλων δίνονται training set από text αρχεία τα οποία βρίσκονται µέσα στα sample του ΗΤΚ. Συγκεκριµένα στο directory Tutorial βρίσκονται δύο subdirectories µε ονόµατα train και test. ηµιουργήστε ένα φάκελο για την άσκηση αυτή και αντιγράψτε σε αυτόν τους φακέλους test και train καθώς και το αρχείο 5k.wlist. ΕΠΙΣΚΟΠΗΣΗ ΤΗΣ ΙΑ ΙΚΑΣΙΑΣ ΤΗΣ ΗΜΙΟΥΡΓΙΑΣ ΜΟΝΤΕΛΩΝ N- GRAM Η διαδικασία για την δηµιουργία n-gram language models µε την χρήση των HTK Tools περιγράφετε παρακάτω και περιλαµβάνει τρία στάδια. Αρχικά σκανάρετε το training text και η απαρίθµηση των διαφόρων n-gram αποθηκεύετε σε ένα σετ από gram αρχεία. Στο επόµενο στάδιο το οποίο είναι προαιρετικό οι αριθµήσεις στα αρχεία αυτά αλλάζουν για την δηµιουργία vocabulary kai class mapping. Τέλος µε τα τελικά αυτά gram αρχεία χτίζουµε το LM. εδοµένου κάποιου text κειµένου η συνάρτηση LGPrep σκανάρει την ακολουθία του κειµένου και υπολογίζει τις απαριθµήσεις των διαφόρων unigram, bigram, trigram µοντέλων δηλαδή κάθε ένα από αυτά πόσες φορές το συνάντησε. Αυτές οι απαριθµήσεις αποθηκεύονται στα διάφορα gram files. Όλες οι λέξεις και τα σύµβολα γενικά αναπαρίστανται στο ΗΤΚ µε µοναδικά id s. Αυτή η αντιστοίχηση ανάµεσα σε λέξεις και id s καταγράφετε σε ένα αρχείο word map. Όταν ξεκινάει η LGPrep παίρνει σαν είσοδο ένα word map αρχείο και κάθε νέα λέξη που συναντά στο κείµενο εισόδου της δίνει ένα νέο id και την προσθέτει στο word map. Προσοχή τα αρχεία gram που υπάρχει η απαρίθµηση των διαφόρων εκφράσεων που συναντήθηκαν στο κείµενο παρουσιάζουν κάποια επικάλυψη δηλαδή έχουν κάποιες κοινές εισαγωγές. Πιο συγκεκριµένα για να δηµιουργήσουµε ένα LM όλες οι απαριθµήσεις των n-grams θα πρέπει να εισαχθούν µε αύξουσα σειρά έτσι ώστε λέξεις µε παρόµοια ιστορία να οµαδοποιούνται. Για το λόγο αυτό δηµιουργούµε ένα νέο αντίγραφο αυτών των gram files µέσω της συνάρτησης LGCopy έτσι ώστε τα περιεχόµενά τους να είναι τοποθετηµένα διαδοχικά και να µην παρουσιάζουν επικάλυψη µε αποτέλεσµα να µπορούν να διαβαστούν σαν ένα stream. 2
Στο επόµενο στάδιο της διαδικασίας δηµιουργίας του LM είναι να οριστεί το vocabulary (λεξιλόγιο) του µοντέλου και να µετατραπούν όλα τα n-grams τα οποία περιέχουν OOV λέξεις (out of vocabulary words) έτσι ώστε κάθε λέξη που δεν περιέχεται στο λεξιλόγιο να αντικατασταθεί από κάποιο σύµβολο που αναπαριστά την άγνωστη κλάση. Η διαδικασία αυτή γίνεται ξανά µε την χρήση της LGCopy. Άσκηση Για την άσκηση αυτή θα πρέπει να εκπαιδεύσετε ένα unigram, ένα bigram και ένα trigram µοντέλο µέσω κάποιου training set και στη συνέχεια για να ελέγξετε πόσο καλό είναι το εκάστοτε µοντέλο σας θα υπολογίσετε το perplexity πάνω στο ίδιο test text για το κάθε µοντέλο. Για την δηµιουργία του Language Model ακολουθούµε τα εξής βήµατα: Αρχικά δηµιουργούµε ένα φάκελο µε την εντολή mkdir holmes.0 Η LGPrep αναµένει πάντα να της δοθεί σαν όρισµα κάποιος χάρτης λέξης (word map ). Έτσι για να προετοιµάσετε το πρώτο αρχείο n- gram πρέπει να περάσετε ένα κενό αρχείο word map. Μπορείτε να προετοιµάσετε ένα αρχικό, word map µε την χρήση της συνάρτησης LNewMap. Πρέπει να περαστεί το όνοµα που χρησιµοποιείτε εσωτερικά στο word map καθώς επίσης και ένα όνοµα αρχείων για να το γράψει. Εκτελέστε το ακόλουθο : $ LNewMap -f WFC Holmes empty.wmap Το switch f WFC λέει στην LNewMap στο αρχείο που θα δηµιουργήσει εκτός από την αντιστοίχηση λέξης σε id να έχει και ένα count field για κάθε λέξη που να δείχνει πόσες φορές την συναντήσαµε στο corpus. Θα επεξεργαστούµε τώρα τα κείµενα εκπαίδευσης µε την ακόλουθη εντολή: $ LGPrep -T 1 -a 100000 -b 200000 -d holmes.0 -n 4 -s "Sherlock Holmes" empty.wmap train/*.txt Όταν τελειώσει η διαδικασία ο φάκελος homes.0 θα πρέπει να περιέχει τα ακόλουθα αρχεία : gram.0, gram.1, gram.2, wmap Τα περιεχόµενα των gram αρχείων µπορούµε να τα δούµε µε την εντολή: LGList holmes.0/wmap holmes.0/gram.2 more Για να δηµιουργήσουµε gram αρχεία χωρίς επικάλυψη (να µην υπάρχουν δηλαδή κοινά n-grams σε διαφορετικά αρχεία) χρησιµοποιούµε την LGCopy Αρχικά δηµιουργήστε έναν νέα φάκελο: mkdir holmes.1 Στην συνέχεια εκτελέστε την εντολή : LGCopy -T 1 -b 200000 -d holmes.1 holmes.0/wmap holmes.0/gram.* Τα καινούργια gram αρχεία µαζί µε το word map µπορούν να χρησιµοποιηθούν για την δηµιουργία του Language model για τον συγκεκριµένο κατάλογο λεξιλογίου. 3
LGPrep Usage LGPrep is invoked by typing the command line: LGPrep [options] wordmap [textfile...] Options -a n Allow up to n new words in input texts (default 100000). -b n Set the internal gram buffer size to n (default 2000000). LGPrep stores incoming n-grams in this buffer. When the buffer is full, the contents are sorted and written to an output gram file. Thus, the buffer size determines the amount of process memory that LGPrep will use and the size of the individual output gram files. -c Add word counts to the output word map. This overrides the setting in the input word map (default off). -d Directory in which to store the output gram files (default current directory). -T n Verbosity -n n Set the output n-gram size to n (default 3). -wordmap File that contains the mapping from words to id s -textfiles The are the training test files. Αντιστοιχίζοντας OOV (out of vocabulary words) λέξεις. Αρχικά δηµιουργήστε τον φάκελο lm_5k µε την εντολή: mkdir lm_5k Μόλις ορισθεί το λεξιλόγιο του συστήµατος, το εργαλείο LGCopy πρέπει να χρησιµοποιηθεί για να φιλτράρει όλες τις λέξεις (OOV). Εκτελέστε την LGCopy ξανά : $ LGCopy -T 1 -o -m lm_5k/5k.wmap -b 200000 -d lm_5k -w 5k.wlist holmes.0/wmap holmes.1/data.* Επειδή χρησιµοποιήσαµε την επιλογή -ο, όλα τα n-grams που περιέχουν OOVs θα εξαχθούν από τα αρχεία εισαγωγής και οι λέξεις OOV χαρτογραφούνται στο άγνωστο σύµβολο και τα αποτελέσµατα αποθηκεύονται στα αρχείαlm 5k/data.*. Ένα νέο word map που περιέχει τα νέα σύµβολα κατηγορίας (!!UNK σε αυτήν την περίπτωση) και τις λέξεις του λεξιλογίου θα δηµιουργηθεί στο lm 5k/5k.wmap. 4
ηµιουργία Language Model Τα Language models χτίζονται χρησιµοποιώντας την εντολή LBuild. Η παρακάτω εντολή θα δηµιουργήσει ένα unigram µοντέλο. $ LBuild -T 1 -n 1 f TEXT lm_5k/5k.wmap lm_5k/ug holmes.1/data.* lm_5k/data.* Τώρα θα δηµιουργήσουµε ένα bigram µοντέλο µε cut-off 1. Εκτελέστε την εντολή: $ LBuild -T 1 -c 2 1 -n 2 f TEXT k 7 lm_5k/5k.wmap lm_5k/bg1 holmes.1/data.* lm_5k/data.* Τελικά το trigram µοντέλο δηµιουργείται εκτελώντας την εντολή : $ LBuild -T 1 -c 3 1 -n 3 f TEXT k 7 lm_5k/5k.wmap lm_5k/trigram holmes.1/data.* lm_5k/data.* Εναλλακτικά θα µπορούσαµε τα τρία παραπάνω στάδια να τα κάνουµε σε ένα µε την εντολή : $ LBuild -T 1 -c 2 1 -c 3 1 -n 3 f TEXT k 7 lm_5k/5k.wmap lm_5k/tg2-1_1 holmes.1/data.* lm_5k/data.* LBuild is invoked by typing the command line LBuild [options] wordmap outfile [mult] gramfile.. [mult] gramfile.. Options -c n c Set cutoff for n-gram to c. -f t Set output model format to t (TEXT, BIN, ULTRA). -k n Set discounting range for Good-Turing discounting to [1::n]. -n n Set final model order to n. Testing the LM perplexity Αφού δηµιουργηθεί το γλωσσικό µοντέλο η ποιότητά του µπορεί αξιολογηθεί µετρώντας το perplexity κειµένου που είναι άγνωστο στο µοντέλο µας. Το perplexity µπορεί να θεωρηθεί ως ένα µέσο µέτρο του πόσες διαφορετικές και µε ίση πιθανότητα λέξεις µπορεί να ακολουθήσουν µία λέξη. Ορίζεται σαν lim 2 H 1 PP = όπου Η= log 2 Pww ( 1 2... w m) n m 5
Ο φάκελος test περιέχει ένα κείµενο το οποίο έχει δηµιουργηθεί για σκοπούς αξιολόγησης. Η αξιολόγηση του perplexity γίνεται µε την εντολή LPLex. Εκτελέστε την εντολή: LPlex -n 2 -n 3 -t lm_5k/tg1_1 test/red-headed_league.txt Τα πολλαπλά n swithes δηλώνουν στην LPlex να κάνει δύο ξεχωριστά τεστ. Το πρώτο (-n 2) θα χρησιµοποιήσει µόνο το bigram κοµµάτι του µοντέλου µας ενώ το (-n 3) θα χρησιµοποιήσει το trigram. ΠΑΡΑ ΟΤΕΑ Υπολογίστε το perplexity για unigram, bigram, trigram γλωσσικά µοντέλα για το training text και test text. Perplexity Perplexity TRAIN TEXT TEST TEXT Unigram Bigram Trigram Unigram Bigram Trigram CREATE RANDOM SENTENCES Εκτελέστε το script : generate_random_sentence.pl grammar.arpa [1 2 3] για να δηµιουργήσετε µία random πρόταση χρησιµοποιώντας unigram, bigram, trigram. Ορίζετε το µοντέλο που θα χρησιµοποιήσετε ανάλογα µε το όρισµα 1 ή 2 ή 3 που θα δώσετε σαν είσοδο στο script. 6