Post on 17-Jan-2016
description
Natuurlijke Taalverwerking
3e trimester 98/99docent: Gosse Bouma
Transducers en fonologische regels in FSA
Week 3
Natuurlijke Taalverwerking 3
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 Taalverwerking 4
Transducer
l:la:a
k:k
o:oo:
p:p
+:
+:k
e:e
n:n
lak+en -> lakken, loop+en -> lopen
Natuurlijke Taalverwerking 5
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 Taalverwerking 6
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 Taalverwerking 7
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 Taalverwerking 8
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 Taalverwerking 9
Non-deterministisch
h:h
a:a
r:r
a:aa:
r:r
+:
d:d
e:e
n:n
haar+en -> haren, haard+en -> haarden
Natuurlijke Taalverwerking 10
Getallen -> woorden
• Macro(eentallen,[{1:een, 2:twee, 3:drie}]).
• Macro(twintig,[2:[],eentallen,[]:entwintig]).
• 21 -> eenentwintig
Natuurlijke Taalverwerking 11
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 Taalverwerking 12
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 Taalverwerking 13
(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 Taalverwerking 14
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 Taalverwerking 15
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 Taalverwerking 16
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 Taalverwerking 17
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 Taalverwerking 18
Opdracht 2
• G2P conversie voor letters• a e i o u d n r s t