Natuurlijke Taalverwerking 3e trimester 98/99 docent: Gosse Bouma
Transducers en fonologische regels in FSA Week 3
Natuurlijke Taalverwerking3 Transducers Nut van herkenners (recognizers) is beperkt. Meeste finite state toepassingen gebruiken transducers. Een transducer vertaalt een invoerstring naar een uitvoerstring. apen -> a-pen 19 -> negentien KPN -> kapeEn
Natuurlijke Taalverwerking4 Transducer l:l a:a k:k o:o o: p:p +: +:k e:e n:n lak+en -> lakken, loop+en -> lopen
Natuurlijke Taalverwerking5 Reguliere expressies [a:b, c*] vertaalt accc in bccc ‘:’ is de ‘pair’-operator: A:B vertaalt symbool A in symbool B. [{a,e,i,o,u} x ‘V’] vertaalt strings uit taal {a,e,i,o,u} in de string ‘V’. ‘x’ is de ‘cross-product-operator’: A x B vertaalt strings uit taal A in strings uit taal B.
Natuurlijke Taalverwerking6 Reguliere expressies [a:b, c*] is eigenlijk een afkorting voor [a:b, (c:c)*] reguliere expressies zonder ‘:’ of ‘x’ worden dus gelezen als ‘identity- transducers’: ieder input-symbool verschijnt ongewijzigd in de output.
Natuurlijke Taalverwerking7 Reg Ex Voorbeeld {{a,e,i,u,o} x ‘V’,{b,c,d} x ‘C’}* abeceeidi -> VCVCVVVCV a:V, e:V, i:V b:C, c:C, d:C
Natuurlijke Taalverwerking8 Spellingsregels [lttr*, {[[a,a] x a, cons],[a,a,cons,cons]}, +:[], e,n] haar+en --> haren haard+en --> haarden Non-deterministisch? Echt non-determinisch: {[a:b,c*,b],[a:d,c*,d]}
Natuurlijke Taalverwerking9 Non-deterministisch h:h a:a r:r a:a a: r:r +: d:d e:e n:n haar+en -> haren, haard+en -> haarden
Natuurlijke Taalverwerking10 Getallen -> woorden Macro(eentallen, [{1:een, 2:twee, 3:drie}]). Macro(twintig, [2:[],eentallen,[]:entwintig]). 21 -> eenentwintig
Natuurlijke Taalverwerking11 Compositie Vertaal Nederlandse getalsnamen naar het Engels: eenentwintig -> 21 -> twentyone Een mogelijke benadering: schrijf een transducer die NL in getallen omzet, schrijf een transducer die getallen in ENG omzet, Knoop ze aan elkaar.
Natuurlijke Taalverwerking12 Compositie (2) macro(nl2num,{een x 1, twee x 2, …}). macro(num2eng,{1 x one, 2 x two,..}). macro(trans, nl2num o num2eng). A o B is een transducer waarbij output van A wordt gebruikt als input van B. eenentwintig -> A -> 21 -> B -> twentyone
Natuurlijke Taalverwerking13 (Fonologische) Regels Een transducer die de letter ‘x’ vervangt door ‘ks’: Poging 1 (fout): [[? *, ‘x’ x [k,s]]*, ?*] axax -> aksaks, axaks, aksaks, axax Poging 2 (goed): [[(? - x)*, ‘x’ x [k,s]]*, (? - x)*] axax -> aksaks Poging 3 (simpel): {? - x, ‘x’ x [k,s]}*
Natuurlijke Taalverwerking14 Regels met context c -> s, mits gevolgd door e of i (cent, politici) Poging 1: {?-c,[c:s,{e,i}]}* cent -> sent, cactus -> no output c -> k, anders Poging 2: {? -c,[c:k,{e,i}],[c:s,? - {e,i}]}* cent -> sent, cactus -> kaktus
Natuurlijke Taalverwerking15 De replace-operator Het handmatig definiëren van regels is moeizaam replace(A x B, LC, RC): vervang A door B in de context LC _ RC replace(c:s,[],{e,i}) replace(c:s,[],{e,i}) o replace(c:k,[],[])
Natuurlijke Taalverwerking16 Grafeem naar foneem conversie Stap 1: segmenteren g-r-a-f-ee-m, r-i-ng, s-ch-oo-l macro(segment,{a,aa,aai,…,z}). replace([segment,[] : -],[],[])
Natuurlijke Taalverwerking17 Grafeem naar foneem conversie Stap 2: conversie van gesegmenteerde input macro(g2p(Target,LC,RC), replace([Target,-:+],[LC,{-,+}],RC)) macro(lang, g2p({[a,a] x a, [e,e] x e},[],[]). slaapt -> slapt, weer -> wer
Natuurlijke Taalverwerking18 Opdracht 2 G2P conversie voor letters a e i o u d n r s t