1 / 23

LING 388: Language and Computers

LING 388: Language and Computers. Sandiway Fong 10/6 Lecture 13. Last Time. Grammars what is a grammar ? informally set of “rewrite” rules to parse or “diagram” a sentence derivation top-down (from the sentence symbol), bottom-up (from the words)

eloise
Download Presentation

LING 388: Language and Computers

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. LING 388: Language and Computers Sandiway Fong 10/6 Lecture 13

  2. Last Time • Grammars • what is a grammar? • informally • set of “rewrite” rules to parse or “diagram” a sentence • derivation • top-down (from the sentence symbol), bottom-up (from the words) • Definite Clause Grammar (DCG) System • built-in Prolog support for writing grammars • --> is the rewrite symbol • [book], [took] terminals are enclosed in brackets • sentence, vp, npterminals and non-terminal symbols begin with lowercase letters Sentence → NP VP VP → Verb NP Verb → took NP → the man NP → the book sentence --> np, vp. vp --> verb, np. verb --> [took]. np --> [the], [man]. np --> [the], [book].

  3. Exercise 1 • example grammar (from last time) • sentence --> np, vp. • vp --> verb, np. • verb --> [took]. • np --> [the], [man]. • np --> [the], [book]. • query format • ?- sentence(S,[]). • S = sentence (as a list) • [] = empty list • i.e. call the start symbol as a predicate and • supply two arguments, a list and an empty list

  4. Exercise 1 • Steps: • Put the grammar in a file • Consult it • ?- listing. • (see the underlying Prolog translation of the rules) • Queries ?- sentence([the,man,took,the,book],[]). ?- sentence([the,man|L],[]). ?- sentence(L,[]). ?- sentence([the,X,took,the,Y],[]), \+ X=Y.

  5. ?- listing. • Prolog translates DCG rules into ordinary Prolog rules • listing • vp(A, B) :- • verb(A, C), • np(C, B). • np(A, B) :- • det(A, C), • 'C'(C, man, B). • np(A, B) :- • det(A, C), • 'C'(C, book, B). • verb([took|A], A). • det([the|A], A). • det([a|A], A). • sentence(A, B) :- • np(A, C), • vp(C, B). • example • sentence --> np, vp. • vp --> verb, np. • verb --> [took]. • np --> det, [man]. • np --> det, [book]. • det --> [the]. • det --> [a]. variables A,B,C are all going to be lists 'C'(C, man, B) is true when man is the head of C and B is the tail of C i.e. C = [man|B]

  6. Exercise 2 • Let’s follow the computation steps Prolog uses to prove it can derive a sentence from the starting non-terminal

  7. ?- trace. • listing • vp(A, B) :- • verb(A, C), • np(C, B). • np(A, B) :- • det(A, C), • 'C'(C, man, B). • np(A, B) :- • det(A, C), • 'C'(C, book, B). • verb([took|A], A). • det([the|A], A). • det([a|A], A). • sentence(A, B) :- • np(A, C), • vp(C, B). • derivation • ?- sentence([the,man,took,the,book],[]). • Call: (7) sentence([the, man, took, the, book], []) ? creep • Call: (8) np([the, man, took, the, book], _G353) ? creep • Call: (9) det([the, man, took, the, book], _G353) ? creep • Exit: (9) det([the, man, took, the, book], [man, took, the, book]) ? creep • Call: (9) 'C'([man, took, the, book], man, _G357) ? creep • Exit: (9) 'C'([man, took, the, book], man, [took, the, book]) ? creep • Exit: (8) np([the, man, took, the, book], [took, the, book]) ? creep • Call: (8) vp([took, the, book], []) ? creep • Call: (9) verb([took, the, book], _G353) ? creep • Exit: (9) verb([took, the, book], [the, book]) ? creep • Call: (9) np([the, book], []) ? creep • Call: (10) det([the, book], _G353) ? creep • Exit: (10) det([the, book], [book]) ? creep • Call: (10) 'C'([book], man, []) ? creep • Fail: (10) 'C'([book], man, []) ? creep • Redo: (10) det([the, book], _G353) ? creep • Fail: (10) det([the, book], _G353) ? creep • Redo: (9) np([the, book], []) ? creep • Call: (10) det([the, book], _G353) ? creep • Exit: (10) det([the, book], [book]) ? creep • Call: (10) 'C'([book], book, []) ? creep • Exit: (10) 'C'([book], book, []) ? creep • Exit: (9) np([the, book], []) ? creep • Exit: (8) vp([took, the, book], []) ? creep • Exit: (7) sentence([the, man, took, the, book], []) ? creep • Yes

  8. np([the,man,took,the,book],C). vp([took,the,book],[]). vp(C,[]). det([the,man,took,the,book],C’). verb([took,the,book],C”). ‘C’(C’,man,C). np(C”,[]). det([the,man,took,the,book],[man,took,the,book]). verb([took,the,book],[the,book]). ‘C’([man,took,the,book],man,C). ‘C’([man,took,the,book],man,[took,the,book]). np([the,book],[]). det([the,book],C”’). det([the,book],C”’). ‘C’(C”’,man,[]). ‘C’(C”’,book,[]). det([the,book],[book]). ‘C’([book],man,[]). ‘C’([book],book,[]). Grammar Computation ?- sentence([the,man,took,the,book],[]). Underlying Prolog vp(A, B) :- verb(A, C), np(C, B). np(A, B) :- det(A, C), 'C'(C, man, B). np(A, B) :- det(A, C), 'C'(C, book, B). verb([took|A], A). det([the|A], A). det([a|A], A). sentence(A, B) :- np(A, C), vp(C, B). DCG rules vp --> verb, np. np --> det,[man]. np --> det, [book]. verb --> [took]. det --> [the]. det --> [a]. sentence --> np, vp. C=[took,the,book] Animation

  9. np([the,man,took,the,book],C). vp(C,[]). det([the,book],[book]). ‘C’([book],book,[]). Grammar Computation Note: the computation tree resembles a parse tree ?- sentence([the,man,took,the,book],[]). verb([took,the,book],C”). np(C”,[]). det([the,man,took,the,book],C’). ‘C’(C’,man,C). verb([took,the,book],[the,book]). det([the,man,took,the,book],[man,took,the,book]). np([the,book],[]). ‘C’([man,took,the,book],man,C). det([the,book],C”’). ‘C’(C”’,book,[]). ‘C’([man,took,the,book],man,[took,the,book]).

  10. Grammar Computation Note: the computation tree resembles a parse tree

  11. Exercise 3 • Getting Prolog to build a representation of the parse tree [S [NP [Det the] man][VP [V took][NP [Det the] book]]] sentence(np(det(the),man),vp(verb(took),np(det(the),book)))

  12. observation ?- trace. computation tree disappears after computation is finished would be nice to keep a parse tree around technique add one argument to each grammar rule to hold part of the parse tree compositionality: combine sub-trees to form larger trees and the complete parse tree Computing Parse Trees

  13. Computing Parse Trees • use a recursive Prolog data structure to represent a parse • examples • data structure:verb(took) • functor = verb • argument = took • data structure:det(the) • functor = det • argument = the • data structure:np(det(the),man) • functor = np • 1st argument = det(the) • functor = det • argument = the • 2nd argument = man (1) verb | took (2) det | the (3) np / \ det man | the

  14. np([the,man,took,the,book],C). vp(C,[]). det([the,book],[book]). ‘C’([book],book,[]). Computing Parse Trees let’s look at how to create a tree for “the book” ?- sentence([the,man,took,the,book],[]). verb([took,the,book],C”). np(C”,[]). det([the,man,took,the,book],C’). ‘C’(C’,man,C). verb([took,the,book],[the,book]). np --> det, [book]. det([the,man,took,the,book],[man,took,the,book]). np([the,book],[]). ‘C’([man,took,the,book],man,C). det([the,book],C”’). ‘C’(C”’,book,[]). ‘C’([man,took,the,book],man,[took,the,book]).

  15. np([the,man,took,the,book],C). vp(C,[]). det(X,[the,book],[book]). ‘C’([book],book,[]). Computing Parse Trees computation tree = parse tree ?- sentence([the,man,took,the,book],[]). X is the extra parameter verb([took,the,book],C”). np(C”,[]). det([the,man,took,the,book],C’). ‘C’(C’,man,C). np --> det, [book]. np(X) --> det(D),[book]. np(np(D,book)) --> det(D),[book]. verb([took,the,book],[the,book]). np --> det, [book]. det([the,man,took,the,book],[man,took,the,book]). det --> [the]. det(X) --> [the]. det(det(the)) --> [the]. np([the,book],[]). ‘C’([man,took,the,book],man,C). np(D,book) det(the) det(X,[the,book],C”’). ‘C’(C”’,book,[]). ‘C’([man,took,the,book],man,[took,the,book]).

  16. Computing Parse Trees • original DCG • sentence --> np, vp. • vp --> verb, np. • verb --> [took]. • np --> det, [man]. • np --> det, [book]. • det --> [the]. • revised DCG • sentence(s(NP,VP)) --> np(NP), vp(VP). • vp(vp(V,NP)) --> verb(V), np(NP). • verb(v(took)) --> [took]. • np(np(D,man)) --> det(D), [man]. • np(np(D,book)) --> det(D), [book]. • det(det(the)) --> [the].

  17. Computing Parse Trees • revised DCG • sentence(s(NP,VP)) --> np(NP), vp(VP). • vp(vp(V,NP)) --> verb(V), np(NP). • verb(v(took)) --> [took]. • np(np(D,man)) --> det(D), [man]. • np(np(D,book)) --> det(D), [book]. • det(det(the)) --> [the]. • query (with an extra argument) • ?- sentence(P,List,[]). • P = parse tree • List = sentence s(np(det(the),man),vp(v(took),np(det(the),man)))

  18. Examples • query • what parse P corresponds to the sentence “the man took the book”? • ?- sentence(P,[the,man,took,the,book],[]). • P = s(np(det(the),man),vp(v(took),np(det(the),book))) ? ; • no • query • what are the possible parses P and word X for the sentence “the man took the X”? • ?- sentence(P,[the,man,took,the,X],[]). • P = s(np(det(the),man),vp(v(took),np(det(the),man))), • X = man ? ; • P = s(np(det(the),man),vp(v(took),np(det(the),book))), • X = book ? ; • no

  19. Examples • query • given a parse, what is the corresponding Sentence? • ?- sentence(s(np(det(the),man),vp(v(took),np(det(the),book))),Sentence,[]). • Sentence = [the,man,took,the,book] ? ; • no • query • supply no information, i.e. Parse and Sentence are both variables, • what are the possible sentences and parses? • ?- sentence(Parse,Sentence,[]). • Parse = s(np(det(the),man),vp(v(took),np(det(the),man))), • Sentence = [the,man,took,the,man] ? ; • Parse = s(np(det(the),man),vp(v(took),np(det(the),book))), • Sentence = [the,man,took,the,book] ? ; • Parse = s(np(det(the),book),vp(v(took),np(det(the),man))), • Sentence = [the,book,took,the,man] ? ; • Parse = s(np(det(the),book),vp(v(took),np(det(the),book))), • Sentence = [the,book,took,the,book] ? ; • no

  20. Exercise 4 • Idiom chunks • kicked the bucket • has both a literal meaning • and is also a VP (verb phrase) idiom • meaning: • died

  21. Exercise 4 • add new rule • “kicked the bucket” is a VP idiom meaning “died” • vp(vp(v(died))) --> [kicked,the,bucket]. • example illustrates the ability to return any parse we like for a given rule • query • what are the possible parses for “the man kicked the bucket”? • ?- sentence(Parse,[the,man,kicked,the,bucket],[]). • Parse = s(np(det(the),man),vp(v(died))) ? ; • no • idiomatic meaning only

  22. Exercise 4 • add new rules • for “kicked” and “bucket” as a verb and noun, respectively • verb(v(kicked)) --> [kicked]. • np(np(D,bucket)) --> det(D), [bucket]. • provides the ability to return the literal parse for “kicked the bucket”

  23. Exercise 4 • query • what are the possible parses for “the man kicked the bucket”? • ?- sentence(Parse,[the,man,kicked,the,bucket],[]). • Parse = s(np(det(the),man),vp(v(kicked),np(det(the),bucket))) ? ; • Parse = s(np(det(the),man),vp(v(died))) ? ; • no • both idiomatic and literal meanings are now possible • which one comes first? is preferred?

More Related