Οικονομικό Πανεπιστήμιο Αθηνών, Τμήμα Πληροφορικής Μάθημα: Γλωσσική Τεχνολογία, Διδάσκων: Ι. Ανδρουτσόπουλος

Μέγεθος: px
Εμφάνιση ξεκινά από τη σελίδα:

Download "Οικονομικό Πανεπιστήμιο Αθηνών, Τμήμα Πληροφορικής Μάθημα: Γλωσσική Τεχνολογία, 2014 15 Διδάσκων: Ι. Ανδρουτσόπουλος"

Transcript

1 Οικονομικό Πανεπιστήμιο Αθηνών, Τμήμα Πληροφορικής Μάθημα: Γλωσσική Τεχνολογία, Διδάσκων: Ι. Ανδρουτσόπουλος Ασκήσεις μελέτης της 4 ης ενότητας (σημασιολογική ανάλυση) 4.1. Παραστήστε σε πρωτοβάθμια κατηγορηματική λογική τις παρακάτω προτάσεις. Μπορείτε να παραστήσετε με x = y το ότι οι μεταβλητές x και y παριστάνουν το ίδιο αντικείμενο. (i) Ο Γιάννης είναι φοιτητής. (ii) Κάθε φοιτητής είναι έξυπνος. (iii) Κάθε φοιτητής που έχει περάσει την Τεχνητή Νοημοσύνη είναι έξυπνος. (iv) Ο Γιάννης έχει περάσει τουλάχιστον ένα μάθημα. (v) Ο Γιάννης έχει περάσει ακριβώς ένα μάθημα. (vi) Κάθε φοιτητής που έχει περάσει τουλάχιστον ένα μάθημα είναι έξυπνος. (i) Student(John) (ii) x (Student(x) Clever(x)) (iii) x ((Student(x) Passed(x, AI)) Clever(x)) (iv) x (Course(x) Passed(John, x)) (v) x (Course(x) Passed(John, x) y ((Course(y) Passed(John, y)) (x = y)) ) (vi) x ((Student(x) y (Course(y) Passed(x, y))) Clever(x)) 4.2. Παραστήστε σε πρωτοβάθμια κατηγορηματική λογική τα ακόλουθα. i. Ο Μίλος και ο Σούζος είναι σκύλοι. ii. Η Ψίτα και η Ράνα είναι γάτες. iii. Η Ψίτα συμπαθεί το Μίλο. iv. Τη Ράνα τη δάγκωσε ο Μίλος ή ο Σούζος. v. Κάποιος σκύλος δάγκωσε κάποια γάτα. vi. Καμία γάτα δε συμπαθεί το Σούζο. vii. Αν κάποιος σκύλος δάγκωσε κάποια γάτα, τότε καμία γάτα δε συμπαθεί αυτό το σκύλο. (i) (Dog(Milos) Dog(Suzos)) (ii) (Cat(Psita) Cat(Rana)) (iii) Likes(Psita, Milos) (iv) (Bite(Milos, Rana) Bite(Suzos, Rana)) (v) x y (Dog(x) Cat(y) Bite(x, y)) (vi) y (Cat(y) Likes(y, Suzos)) (vii) x ((Dog(x) y (Cat(y) Bite(x, y))) z (Cat(z) Likes(z, x))) 4.3. Παραστήστε σε πρωτοβάθμια κατηγορηματική λογική τη σημασία των αντιστοίχων ελληνικών προτάσεων. Υπάρχει μία γάτα που την αγαπά ο Μίλος. y (Cat(y) Loves(Milos, y)) Όλες οι γάτες νιαουρίζουν. x (Cat(x) Miaou(x))

2 Κάθε γάτα που νιαουρίζει φοβάται έναν (πιθανώς διαφορετικό) σκύλο. x ((Cat(x) Miaou(x)) y (Dog(y) AfraidOf(x, y))) Υπάρχει τουλάχιστον ένας σκύλος που τον φοβούνται (τον ίδιο όλες) οι γάτες που νιαουρίζουν. y (Dog(y) x ((Cat(x) Miaou(x)) AfraidOf(x, y))) Κάθε σκύλος αγαπά ακριβώς μία (πιθανώς διαφορετική ανά σκύλο) γάτα. y (Dog(y) x (Cat(x) Likes(y, x) z (Cat(z) Likes(y, z) z = x))) 4.4. Μετατρέψτε τη γραμματική του σκέλους (α) της άσκησης 3.2 της ενότητας 3 σε γραμματική DCG της Prolog, φροντίζοντας η γραμματική να υπολογίζει και το μήκος της συμβολοσειράς εισόδου, όπως στο παρακάτω παράδειγμα:?- phrase( s(length), [a, a, b, b, b, c, c]). Length = 7?- phrase( s(length), [a, a, b, b, b, c]). no s(newvalue) --> [a], p(value), [c], {NewValue is Value + 2}. p(newvalue) --> [a], p(value), [c], {NewValue is Value + 2}. p(value) --> q(value). q(1) --> b. q(newvalue) --> b, q(value), {NewValue is Value + 1} Τροποποιήστε τη γραμματική του σκέλους (β) της άσκησης 3.6 της ενότητας 3, ώστε αν τη δώσουμε στην Prolog μαζί με το στόχο: phrase(s(action, Agent, Object), [ο, σκύλος, κυνήγησε, τη, γάτα]). η Prolog να απαντήσει: Action = chase, Agent = dog, Object = cat, ενώ στην περίπτωση του στόχου: phrase(s(action, Agent, Object), [ο, σκύλος, δάγκωσε, τη, γάτα]). η Prolog να απαντήσει: Action = bite, Agent = dog, Object = cat. s(action, Agent, Object) --> np(agent), vp(action, Object). np(entity) --> det(gender), n(entity, Gender). vp(action, Object) --> v(action), np(object). det(masc) --> [ο]. det(fem) --> [η]. det(masc) --> [το]. det(fem) --> [τη]. n(dog, masc) --> [σκύλος].

3 n(dog, masc) --> [σκύλο]. n(cat, fem) --> [γάτα]. v(chase) --> [κυνήγησε]. v(bite) --> [δάγκωσε] Τροποποιήστε τη γραμματική DCG της διαφάνειας «Σημασιολογία αριθμητικής γλώσσας», ώστε να επιτρέπει αριθμητικές πράξεις μεταξύ αριθμών από το μηδέν ως και το Ως απλούστευση, το δέκα να γράφεται ως [one, ten], το δώδεκα ως [one, ten, two], το 23 ως [two, ten, three], το εκατό ως [one, hundred], το 110 ως [one, hundred, one, ten], το 123 ως [one, hundred, two, ten, three], το 1000 ως [one, thousand], το 1123 ως [one, thousand, one, hundred, two, ten, three] κ.ο.κ. Για παράδειγμα, η ακόλουθη εντολή:?-phrase(expression(v), [open, two, thousand, three, hundred, five, ten, two, plus, two, ten, one, close]). θα πρέπει να επιστρέφει: V = 2373 και η εντολή:?-phrase(expression(v), [open, open, two, thousand, three, hundred, five, ten, two, plus, two, ten, one, close, minus, one, thousand, seven, ten, close]). V = 1303 digit(0) --> [zero]. digit(2) --> [two]. digit(4) --> [four]. digit(6) --> [six]. digit(8) --> [eight]. digit(1) --> [one]. digit(3) --> [three]. digit(5) --> [five]. digit(7) --> [seven]. digit(9) --> [nine]. number(value) --> digit(value). number(newvalue) --> digit(value1), [ten], number(value2), {Value2 < 10, NewValue is Value1 * 10 + Value2}. number(newvalue) --> digit(value1), [ten], {NewValue is Value1 * 10}. number(newvalue) --> digit(value1), [hundred], number(value2), {Value2 < 100, NewValue is Value1 * Value2}. number(newvalue) --> digit(value1), [hundred], {NewValue is Value1 * 100}. number(newvalue) --> digit(value1), [thousand], number(value2), {Value2 < 1000, NewValue is Value1 * Value2}. number(newvalue) --> digit(value1), [thousand], {NewValue is Value1 * 1000}. expression(value) --> number(value). expression(newvalue) --> [open], expression(value1), [plus], expression(value2), [close], {NewValue is Value1 + Value2}. expression(newvalue) --> [open], expression(value1), [minus], expression(value2), [close], {NewValue is Value1 - Value2} Γράψτε μια γραμματική DCG που να επιτρέπει προτάσεις όπως: [άνοιξε,τα,παράθυρα,του,σαλονιού], [κλείσε,το,μικρό,παράθυρο,του,σαλονιού], [σβήσε,το,μεγάλο,φως,της,μικρής,κουζίνας], [άναψε,τα,φώτα,των,μικρών,μπάνιων]

4 αλλά να μην επιτρέπει προτάσεις με ασυμφωνία γένους, αριθμού ή πτώσης, όπως οι παρακάτω: Χ [άνοιξε,το,παράθυρα,του,σαλονιού], Χ [κλείσε,το,μικρή,παράθυρο,του,σαλονιού], Χ [σβήσε,το,μεγάλου,φως,της,μικρής,κουζίνας], Χ [άναψε,τα,φώτα,το,μικρού,μπάνιων] και να απαιτεί τα ρήματα «ανάβω» και «σβήνω» να χρησιμοποιούνται μόνο με φώτα, ενώ τα «ανοίγω» και «κλείνω» μόνο με παράθυρα. Για παράδειγμα, να μην επιτρέπονται προτάσεις όπως: Χ [σβήσε,το,μικρό,παράθυρο,του,σαλονιού], Χ [άνοιξε,το,μεγάλο,φως,της,μικρής,κουζίνας] Για τις επιτρεπόμενες προτάσεις, θέλουμε η γραμματική να μπορεί να χρησιμοποιηθεί όπως φαίνεται στα παρακάτω παραδείγματα:?- phrase(s(action, Type1, Size1, Number1, Type2, Size2, Number2, [άνοιξε,τα,μεγάλα,παράθυρα,του,μικρού,σαλονιού]). Action = open, Type1 = window, Size1 = large, Number1 = plur, Type2 = livingroom, Size2=small, Number2 = sing?- phrase(s(action, Type1, Size1, Number1, Type2, Size2, Number2, [άναψε,τα,φώτα,των,μικρών,μπάνιων]). Action = on, Type1 = light, Size1 = unknown, Number1 = plur, Type2 = bathroom, Size2=small, Number2 = plur?- phrase(s(action, Type1, Size1, Number1, Type2, Size2, Number2, [κλείσε,τα,παράθυρα]). Action = close, Type1 = window, Size1 = unknown, Number1 = plur, Type2 = unknown, Size2=unknown, Number2 = unknown s(action, Type1, Size1, Number1, Type2, Size2, Number2) --> vp(action, Type1, Size1, Number1, Type2, Size2, Number2). vp(action, Type, Size, Number, uknown, uknown, unknown) --> v(action, Type), np(gender, Number, Case, Type, Size). vp(action, Type1, Size1, Number1, Type2, Size2, Number2) --> v(action, Type1), np(gender1, Number1, Case1, Type1, Size1), np(gender2, Number2, gen, Type2, Size2). np(gender, Number, Case, Type, Size) --> det(gender, Number, Case), nominal(gender, Number, Case, Type, Size). nominal(gender, Number, Case, Type, Size) --> adj(gender, Number, Case, Size), n(gender, Number, Case, Type).

5 nominal(gender, Number, Case, Type, unknown) --> n(gender, Number, Case, Type). v(on, light) --> [άναψε]. v(open, window) --> [άνοιξε]. det(neut, sing, acc) --> [το]. det(neut, sing, gen) --> [του]. det(gender, plur, gen) --> [των]. v(off, light) --> [σβήσε]. v(close, window) --> [κλείσε]. det(neut, plur, acc) --> [τα]. det(fem, sing, gen) --> [της]. n(neut, sing, acc, window) --> [παράθυρο]. n(neut, plur, acc, window) --> [παράθυρα]. n(neut,sing,acc, light) --> [φως]. n(neut, plur, acc, light) --> [φώτα]. n(neut, sing, gen, livingroom) --> [σαλονιού]. n(neut, plur, gen, livingroom) --> [σαλονιών]. n(neut, sing, gen, bathroom) --> [μπάνιου]. n(neut, plur, gen, bathroom) --> [μπάνιων]. n(fem, sing, gen, kitchen) --> [κουζίνας]. n(fem, plur, gen, kitchen) --> [κουζινών]. adj(neut, sing, acc, small) --> [μικρό]. adj(neut, sing, gen, small) --> [μικρού]. adj(fem, sing, acc, small) --> [μικρή]. adj(fem, sing, gen, small) --> [μικρής]. adj(gender, plur, gen, small) --> [μικρών]. adj(neut, sing, acc, large) --> [μεγάλο]. adj(neut, sing, gen, large) --> [μεγάλου]. adj(fem, sing, acc, large) --> [μεγάλη]. adj(fem, sing, gen, large) --> [μεγάλης]. adj(gender, plur, gen, large) --> [μεγάλων] Δίνουμε στην Prolog την ακόλουθη γραμματική DCG: v(event(saw, we, What, How)) --> [είδαμε]. det --> [τον]. det --> [το]. n(entity(scientist, Specifier)) --> [επιστήμονα]. n(entity(telescope, Specifier)) --> [τηλεσκόπιο]. pn(paris) --> [παρίσι]. prep(with) --> [με]. prep(from) --> [από]. pp(specifier(psem, NPSem)) --> prep(psem), np(npsem). nominal(nsem)--> n(nsem). nominal(entity(type, Specifier)) --> n(entity(type, Specifier)), pp(specifier). np(nominalsem) --> det, nominal(nominalsem). np(pnsem) --> det, pn(pnsem).

6 vp(event(type, Who, NPSem, How)) --> v(event(type, Who, NPSem, How)), np(npsem). vp(event(type, Who, NPSem, How)) --> v(event(type, Who, NPSem, How)), np(npsem), pp(how). s(vpsem) --> vp(vpsem). Γράψτε τις απαντήσεις που θα επιστρέψει η Prolog για τη μεταβλητή Sem, όταν της δώσουμε το στόχο: phrase(s(sem), [είδαμε, τον, επιστήμονα, με, το, τηλεσκόπιο]). Παραστήστε με «_» μεταβλητές που δεν θα έχουν συγκεκριμένες τιμές. Εξηγήστε πώς προκύπτουν οι απαντήσεις. Προκύπτουν δύο συντακτικά δέντρα και δύο απαντήσεις, όπως δείχνουν τα παρακάτω σχήματα. Οι δύο απαντήσεις είναι: Sem = event(saw, we, entity(scientist, specifier(with, entity(telescope, _))), _) Sem = event(saw, we, entity(scientist, _), specifier(with, entity(telescope, _)))

7

8 Μπορείτε (από περιέργεια) να δοκιμάσετε τη γραμματική και με την πρόταση «είδαμε τον επιστήμονα με το τηλεσκόπιο από το Παρίσι».

9 4.9. (Να παραδοθεί.) (α) Τροποποιήστε τη γραμματική των διαφανειών 12 και 15 της 4 ης ενότητας, ώστε να επιτρέπεται επίσης το ρήμα «θέλει», καθώς και τα επίθετα «φτηνή» και «ακριβή» (δεν χρειάζεται να επιτρέπονται περισσότερα από ένα επίθετα ανά ουσιαστικό). Για παράδειγμα, η πρόταση «Κάθε πελάτης θέλει μια φτηνή πτήση» να απεικονίζεται στον ακόλουθο τύπο. Δεν πειράζει αν χρησιμοποιούνται τύποι με ποσοδείκτες (π.χ. x Customer(x)) ως όροι. Wants ( x Customer(x), y (Flight(y) Cheap(y))) (β) Τροποποιήστε τώρα τους κανόνες του λεξικού για τα ρήματα, ώστε να εισάγουν μεταβλητές γεγονότων (βλ. διαφάνεια 22 της 4 ης ενότητας) και οι προτάσεις «Κάθε πελάτης θέλει μια πτήση» και «Κάθε πελάτης θέλει μια φτηνή πτήση» να απεικονίζονται στους ακόλουθους τύπους. e (Want(e) Agent(e, x Customer(x)) Wanted(e, y Flight(y))) e (Want(e) Agent(e, x Customer(x)) Wanted(e, y (Flight(y) Cheap(y))) (γ) Σχεδιάστε συντακτικό δέντρο (σαν εκείνο της 16 ης διαφάνειας της 4 ης ενότητας) που να δείχνει και τον τρόπο υπολογισμού της σημασιολογικής παράστασης της πρότασης «Κάθε πελάτης θέλει μια φτηνή πτήση», με τις τροποποιήσεις του προηγούμενου σκέλους. (δ) Προαιρετικά μετατρέψτε σε DCG τη γραμματική του πρώτου ή/και δεύτερου σκέλους και δείξτε ότι παράγει όντως τους επιθυμητούς τύπους