5. AN ´ ALISIS SINT ´ ACTICO II

Anuncio
5.
5.1.
ANÁLISIS SINTÁCTICO II
ANÁLISIS SINTÁCTICO ROBUSTO
Capacidad de analizar sintácticamente cualquier texto en LN
• en cualquier dominio
• sin restricciones
Objetivo: devolver un análisis correcto o muy cercano al correcto
• en presencia de errores
• con partes desconocidas en la entrada
Cuestiones a resolver:
1. Desambigüación: selección de la etiqueta más correcta entre las múltiples
posibilidades existentes.
2. Troceado (chunking): división del texto en segmentos analizables
sintácticamente.
3. Tratamiento de entradas fuera de cobertura léxica y/o sintáctica del
analizador.
• Problemas de subgeneración (undergeneration)
Tratamiento de las entradas fuera de cobertura
• Es difı́cil (casi imposible) definir completamente toda la gramática de un
LN debido a la carencia de formalismos gramaticales apropiados.
◦ Sólo actualmente comienzan a construı́rse formalismos apropiados
para representar lenguajes sensibles al contexto.
• Es necesario admitir y manejar entradas incompletas y con errores.
• Dos aproximciones:
◦ Uso de gramáticas aproximadas y de técnicas de corrección automática
de errores.
◦ Uso de técnicas de inducción estadı́stica.
⋄ “Aprendizaje” de la gramática correcta a partir de un corpus
analizado.
⋄ La gramatica está formada de reglas con probabilidades asociadas.
Se busca el/los análisis más probable/s.
1
Corrección automática de errores.
• Modo pánico:
◦ Aproximación más simple, usada en compiladores.
◦ Cuando el analizador se topa con un error deshace parte del análisis
realizado y/o ignora parte de la entrada restante hasta llegar a un
punto en el que puede proseguir con el análisis.
◦ Uso de sı́mbolos especiales de error.
• Uso de contextos de error:
◦ Proceso más complejo que el del modo pánico, pero se obtienen
correcciones mejores.
◦ Tres familias de algoritmos:
⋄ Algoritmos globales:
Examinan la totalidad del texto.
Carácter minimal en el texto.
Coste computacional elevado.
Ausencia de errores en cascada.
Calidad óptima.
⋄ Algoritmos locales:
Examinan el contexto inmediato.
Zona fija de validación.
Carácter minimal en dicha zona.
Coste computacional bajo.
Abundancia de errores en cascada.
Calidad pobre.
⋄ Algoritmos regionales:
Examinan el contexto del error.
Zona variable de validación.
Carácter minimal en dicha zona.
Coste computacional equivalente al local en el mejor de los casos,
equivalente al global en el peor de los casos.
Capacidad de reconsideración de errores en cascada.
Calidad óptima (equivalente a los globales).
• Operaciones de edición:
◦ Usadas en los tres modelos anteriores de correción de errores.
◦ Modificaciones simples de la entrada.
⋄ inserción de un terminal previamente al próximo a analizar.
⋄ borrado del próximo terminal a analizar.
⋄ reemplazamiento del próximo terminal a analizar por otro.
2
◦ Se seleccionan secuencias de operaciones que permiten obtener una
entrada concordante con la gramática.
◦ Asociación de costes a las operaciones de edición y elección de la
reparación con menor coste.
5.1.1.
ALGORITMO DE LYON
Algoritmo de corrección automática de errores global.
Construı́do a partir del algoritmo de Earley, aplicando tres hipótesis de error:
inserción, borrado y modificación de un terminal.
El objetivo del algoritmo es reconocer la cadena o cadenas pertenecientes al
lenguaje con un número mı́nimo de hipótesis de error respecto a la entrada.
Este problema es abordable por métodos de programación dinámica debido a
que el cálculo del error acumulado en el reconocimiento de un no terminal es
separable. Esto es, los subanálisis de las diferentes categorı́as presentes en el
mismo análisis contribuyen a su cálculo sin interferencia entre ellos. Para una
regla “X → Y Z” el error acumulado en el reconocimiento de X será la suma
de los errores acumulados en el reconocimiento de Y y Z. Si estos son mı́nimos,
entonces el error en el reconocimiento de X también lo será.
OPERACIÓN
Se adoptan los mismos conceptos de chart y estado que en el algoritmo de
Earley. Para llevar cuenta de las hipótesis de error en cada rama de análisis se
añade al estado un nuevo campo llamado contador de errores.
La adición de estados se rige por el criterio de optimalidad. Si un estado
I = A → α.β (i, j, e), donde e es el contador de error, es candidato al
almacenamiento en la entrada del chart j, donde ya existe un estado similar
I ′ = A → α.β (i, j, e′ ), I es rechazado si e′ ≤ e. Sin embargo, si e < e′ , entonces
I ′ es reemplazado por I.
El algoritmo procesa en orden de derecha a izquierda todas las entradas del
chart.
1. Cada i entrada es inicializada con un estado A → .α(i, i, 0) para cada
regla A → α de la gramática.
2. Se aplica el operador scanner a cada uno de los estados de la entrada.
3. Se aplica el operador complección a cada uno de los estados finales
obtenidos. Se sigue aplicando mientras haya estados finales no cubiertos.
4. Se repiten los pasos 2 y 3.
3
En la última entrada del chart, una vez terminado el procesamiento, se busca
un ı́tem final Φ → S. (0, n, e) que expresa el reconocimiento de la cadena de
entrada con un error acumulado mı́nimo e.
SCANNER
Es el operador responsable de la aplicación de las hipótesis de error. Dado un
estado A → α.aβ (i, j, e):
• Coincidencia.- Si el siguiente terminal en la cadena de entrada es “a”,
se genera un nuevo estado A → αa.β (i, j + 1, e), representando el
reconocimiento de dicho terminal con coste cero, de la misma forma que
en el algoritmo de Earley.
• Hipótesis de reemplazamiento.- Si el siguiente terminal en la cadena de
entrada no es “a”, se genera un nuevo estado A → αa.β (i, j + 1, e + 1),
simulando el reconocimiento de “a”. Se supone que el error proviene de
haber reemplazado dicho terminal por otro en la entrada.
• Hipótesis de borrado.- Se genera un nuevo estado A → αa.β (i, j, e + 1),
simulando la inserción del terminal “a”. Se supone que el error proviene
del borrado de “a” en la entrada.
• Hipótesis de inserción.- Se genera el estado A → α.aβ (i, j + 1, e + 1),
simulando el borrado del sı́mbolo actual de la entrada. Se asume que el
error proviene de haber insertado dicho sı́mbolo.
El reconocedor aplica todas las hipótesis a los estados, es decir, cubre todas
las posibilidades. Esto tiene su explicación en el hecho de que en un contexto
de errores ninguna posibilidad puede ser descartada, puesto que tal contexto
no es fiable.
COMPLETER
Es el mismo operador que en el algoritmo de Earley, con la diferencia de que
ahora debemos calcular el contador de error y la selección de los estados finales
sobre los que se aplicará completer se realizará siguiendo un cierto orden.
Para cada uno de los estados finales A → α. (i, j, e), se busca en la entrada del
chart i designada por su puntero de retroceso, los estados B → β.Aγ (l, i, e′ )
a la espera del reconocimiento del sı́mbolo no terminal “A”. Para cada uno de
estos estados se crea uno nuevo B → βA.γ (l, j, e′ + e) en la entrada actual del
chart.
4
Los estados finales se procesan en orden descendente por su puntero de
retroceso. Esto es, seleccionan primero aquellos estados finales con un puntero
de retroceso más a la derecha. De este modo, se asegura que si esposible volver
a generar mediante completer un ı́tem final ya existente, de forma que el nuevo
estado tenga un contador menor, se haga antes de procesar dicho ı́tem ya
existente.
Cuando se procesa un grupo de estados con el mismo puntero de retroceso,
se seleccionan en orden ascendente por su contador de error. Esto es, Se elige
primero a aquellos estados finales con un contador de error mı́nimo. De esa
manera, si al aplicar este operador generamos dos estados iguales excepto en
el contador de error, nos aseguramos de que primero se genere aquel con el
menor contador.
Sea la gramática aumentada definida por las reglas:
(0) Φ → S
(1) S → Y
(2) Y → b
(3) Y → U
(4) U → a
y los algunos ı́tems generados en el reconocimiento de “a”.
Φ
S
Y
Y
U
Entrada 0
→ .S (0, 0, 0)
→ .Y (0, 0, 0)
→ .b (0, 0, 0)
→ .U (0, 0, 0)
→ .a (0, 0, 0)
S
Y
Y
U
Entrada 1
→ Y. (0, 1, 0)
→ b. (0, 1, 1)
→ U. (0, 1, 0)
→ a. (0, 1, 0)
Ej.- Supongamos que el primer estado final en 1 sobre el que se aplica la
operación completer es Y → b. (0, 1, 1). Se encontrarı́a S → .Y (0, 0, 0) como
estado abandonado sobre el que se puede reconocer Y , por lo que se genera un
nuevo estado I = S → Y. (0, 1, 1), sobre el que seguir operando.
Supongamos que, a continuación, se escoge como siguiente estado final objeto
de aplicación del operador completer a U → a. (0, 1, 0). Encontraremos
abandonado en 0 a Y → .U (0, 0, 0), y se genera un nuevo estado final
Y → U., (0, 1, 0). Si aplicamos el operador de completer a este último estado,
encontramos abandonado en 0 a S → .Y (0, 0, 0) y se genera I ′ = S →
Y. (0, 1, 0). Nótese que I e I ′ sólo difieren en el contador de error. Dado que el
de I ′ es menor, I ′ reemplazará a I.
El problema aquı́ no es la generación de dos estados en el mismo conjunto,
que sólo se diferencian en su contador de error, sino el orden en que han sido
generados. Cuando I ′ reemplaza a I, las operaciones de scanner o completer
aplicadas a éste deben ser repetidas para I ′ . De esta manera nos aseguramos
5
que el contador de error 0 de este nuevo subanálisis óptimo se propague por
todos los análisis que lo contienen.
Esta repetición de operaciones para I e I ′ no es necesaria si I ′ es generado
primero. En este caso, cuando se genera I con un contador de error 1, se chequea
que ya existe I ′ con un contador menor, y el primer estado es descartado.
Interesa que, de existir la posibilidad de generar dos estados idénticos excepto
en el contador de errores, se genere primero aquel con contador menor.
Sobre los estados resultantes de completer se aplica scanner de la forma
siguiente. Sea A → α.β(i, j, e) un estado resultante de la aplicación del
operador completer, se calculará los estados resultantes de reconocer la parte
β de la regla vı́a hipótesis de borrado (esto es, simulando inserciones). Entre
otros se obtendrá un nuevo estado final A → αβ.(i, k, e + e′ ), donde e′ es el
error acumulado en el reconocimiento de β.
Ej.- Supongamos una gramática
(0) Φ → A
(1) A → aV cXY
(2) V → b
(3) X → bb
(4) X → aba
(5) Y → d
Comenzando con el estado resultate de completer A → aV.cXY (0, 2, 1),
simuları́amos inserciones obteniendo los estados A → aV c.XY (0, 2, 2),
A → aV cX.Y (0, 2, 4), A → aV cXY. (0, 2, 1). Las cantidades añadidas a
los contadores de error cuando se aplica la hipótesis de borrado sobre los no
terminales “X” e “Y ”, se calculan previamente a la ejecución del algoritmo
como el número mı́nimo de hipótesis de borrado a aplicar para reconocer el
sı́mbolo no terminal correspondiente.
Ejemplo:
Queremos analizar “aa” , dada la siguiente gramática:
(0) Φ → S
(1) S → aS
(2) S → b
6
coste(Φ) = 2
coste(S) = 1
0
I1
I2
I3
I4
I5
I6
I7
Φ → . S (0, 0, 0)
S → . a S (0, 0, 0)
S → . b (0, 0, 0)
S → a . S (0, 0, 1)
S → b . (0, 0, 1)
Φ → S . (0, 0, 1)
S → a S . (0, 0, 2)
1
I8
I9
I10
I11
I12
I13
I14
I15
I16
I17
I18
S → . a S (1, 1, 0)
S → . b (1, 1, 0)
S → a . S (0, 1, 0)
S → . a S (0, 1, 1)
S → b . (0, 1, 1)
S → . b (0, 1, 1)
S → a . S (1, 1, 1)
S → b . (1, 1, 1)
S → a S . (0, 1, 1)
S → a S . (1, 1, 2)
Φ → S . (0, 1, 1)
3
I19
I20
I21
I22
I23
I24
I25
I26
I27
I28
I29
I30
I31
I32
I33
I34
S → . a S (2, 2, 0)
S → . b (2, 2, 0)
S → a . S (1, 2, 0)
S → . a S (1, 2, 1)
S → b . (1, 2, 1)
S → . b (1, 2, 1)
S → a . S (0, 2, 1)
S → .a S (0, 2, 2)
S → b . (0, 2, 2)
S → . b (0, 2, 2)
S → a . S (2, 2, 1)
S → b . (2, 2, 1)
S → a S . (1, 2, 1)
S → a S . (0, 2, 1)
S → a S . (2, 2, 2)
Φ → S . (0, 2, 1)
7
5.2.
GRAMÁTICAS DE CLÁUSULAS DEFINIDAS (GCDs ó DCGs)
INTRODUCCIÓN
Necesidad de formalismos sintácticos más expresivos.
Uso de gramáticas lógicas o de unificación:
• Los componentes tienen estructura:
◦ términos de lógica de predicados.
◦ estructuras de rasgos (feature estructures).
• Posibilidad de representar restricciones:
◦ concordancia de género y número.
◦ subcategorización verbal.
• Otras ventajas:
◦ modelización de fenómenos más complejos que los soportados por
CFGs.
◦ soporta la construcción de representaciones semánticas a partir de las
estructuras sintácticas.
GRAMÁTICAS DE CLÁUSULAS DEFINIDAS
Muchas implementaciones de Prolog permiten analizar DCGs:
• Ventajas:
◦ No hay que construı́r el analizador.
◦ Diseño y depuración de gramáticas muy rápido.
◦ Eficiencia razonable.
• Inconvenientes:
◦ Estrategia descendente fija.
◦ Orden de tratamiento fijo (izquierda a derecha).
◦ Orden de aplicación de cláusulas estricto.
◦ Gestión de la recursividad izquierda.
◦ Repetición de cálculos y generación de subárboles inútiles.
◦ Rigidez.
8
Notación DCGs:
• Oculta la implementación real.
• Reglas:
◦ no terminal -->cuerpo
◦ no terminales: átomos Prolog.
◦ cuerpo: terminales y no terminales separados por “,”.
◦ cadenas de terminales: listas de átomos Prolog.
S --> [a],[b],S.
S --> [c].
S --> fn,fv.
fn --> det,nom.
fv --> verbo,fn.
det --> [el].
nom --> [Pepe]
nom --> [ni~
no].
verb --> [come].
TRADUCCIÓN DE LA NOTACIÓN DCG A PROLOG
Construcción de cláusulas Prolog asociadas a las reglas.
Uso de la diferencia de listas (hay otras formas, con append).
• no terminales ≡ predicados.
• uso de argumentos adicionales para implementar la diferencia de listas.
S --> fn,fv.
det --> [el].
=>
=>
S(X,Z) :- fn(X,Y), fv(Y,Z).
det([el|X],X).
Análisis: llamada al axioma usando 2 listas
• Lista con texto a analizar.
• Lista con resto de entrada.
?- S([el, ni~
no, corre], []).
?- S([el, ni~
no, corre], [un,bocata]).
• Si hay atributos.
?- S(<...>, listaE, listaR).
9
USO DE RESTRICCIONES.
Adición de argumentos en los no terminales.
Concordancia: género, número, persona.
fn(Num,Gen) --> det(Num,Gen),nom(Num,Gen).
det(masc,sing) --> [el].
nom(masc,sing) --> [ni~
no].
Se representa:
• Propagación de atributos: “fn” toma los atributos de “nom”.
• Establecimiento de restricciones: “Num” y “Gen” deben coincidir para
“det” y “nom”.
Otra notación: uso de atributos nombrados.
fn(numero:N,genero:G) --> det(numero:N,genero:G),
nom(numero:N,genero:G).
det(numero:sg,genero:fem) --> [la].
Subcategorización verbal.
• Algunos verbos admiten determinadas estructuras acompañándolos.
• Codificar esas combinaciones (subcategorization frames) y añadirlas como
atributos en reglas y en los terminales para cada verbo (un verbo puede
tener más de un frame).
fv(Persona,Numero,fn) --> verb(Persona,Numero,fn),
fn(_,_).
fv(P,N,fn_fp) --> verb(P,n,fn_fp), fn(_,_), fp(_,_).
• Uso de estructuras más complejas (listas, etc...).
verbo(3p,sg,fn) --> [corre].
verbo(1p,sg,fn) --> [regalo].
verbo(1p,sg,fn_fp) --> [regalo]
regalo un coche
regalo un coche a mis alumnos
Existe subcategorización para otras categorı́as léxicas (adverbios, etc...).
10
PREDICADOS PROLOG
Se utiliza para codificar restricciones no codificables como atributos en los
átomos.
num1a100 --> [X], {integer(X), X >= 1, X =< 100}.
ÁRBOL DE ANÁLISIS
Hasta ahora hemos visto sólo la implemetación de DCGs como reconocedores.
Podemos obtener un árbol de análisis como un término Prolog.
s(fn(det(el),n(ni~
no)),fv(v(come))).
Para construı́r dichos términos podemos utilizar atributos y unificación.
s(s(FN,FV)) --> fn(FN),fv(FV).
fn(fn(DET,N)) --> det(DET),n(N).
fv(fv(V,FN)) --> v(V),fn(FN).
fv(fv(V)) --> v(V).
det(det(el)) --> [el].
det(det(un)) --> [un].
n(n(ni~
no)) --> [ni~
no].
n(n(guardia)) --> [guardia].
v(v(come)) --> [come].
LENGUAJES SENSIBLES AL CONTEXTO
Hasta ahora hemos utilizado las DCGs para analizar lenguajes independientes
del contexto.
Podemos utilizar las restricciones y la unificación para codificar lenguajes
sensibles al contexto.
an bn cn , 0 ≤ n es un ejemplo de lenguaje NO independiente del contexto.
Podemos codificarlo con una DCG. Para ello, utilizamos un atributo Cont
para asegurar que el número de terminales a, b y c es el mismo.
11
s(Cont) --> ablock(Cont),bblock(Cont),cblock(Cont).
bloquea(0) --> [].
bloquea(succ(Cont)) --> [a],bloquea(Cont).
bloqueb(0) --> [].
bloqueb(succ(Cont)) --> [b],bloqueb(Cont).
bloquec(0) --> [].
bloquec(succ(Cont)) --> [c],bloquec(Cont).
5.3.
ANÁLISIS SINTÁCTICO PARCIAL O SUPERFICIAL
Algunas aplicaciones no requieren análisis sintácticos de cobertura completa.
• Sólo es necesaria la identificación de ciertas estructuras.
• Ej.- Extracción/Recuperación de información.
Muchos sistemas de análisis parcial están basados en cascadas de autómatas
finitos.
• Más efificentes que análizadores de GICs.
• Menos cobertura que GICs (falta de ciertas reglas recursivas).
Estos sistemas identifican sintagmas o grupos básicos.
Ej.- FASTUS
Nombre Compañı́a:
Grupo verbal:
Grupo nominal:
Grupo verbal:
Grupo nominal:
Preposición:
Lugar:
...
Bridgestone Sports Co.
said
it
had set up
a joint venture
in
Taiwan
Vamos a ver un subconjunto de las reglas que permiten identificar grupos
nominales en FASTUS. Vamos a utilizar una notación basada en reglas de
producción.
En primer lugar un grupo nominal puede estar constituı́do de un pronombre,
un grupo de tiempo (yesterday) o una fecha:
GN → P ronombre | GrupoT iempo | F echa
12
También puede estar compuesto de pronombres demostrativos (this, that, ...)
o un nombre principal precedido de: a) una secuencia de adjetivos, b) un grupo
que actua como modificador (thequick and dirty solution); y c) un gerundio.
(the rising index)
GN → (Adjs) (GM ) N P s
| GM Ger N P s
| GM C (and N P s)
Los paréntesis indican opcionalidad.
Puede haber dos variedades de grupos modificadores: Parciales y completos.
GM → GM C | GM P
Los grupos modificadores completos son: a) sintagmas
(only five, another three, this, many, hers, all y the
que pueden aparecer antes de un número (almost five,
pronombres posesivos que pueden aparecer como frases
(mine, his); y d) cuantificadores como many, few, much.
nominales completos
most); b) adverbios
precisely five, ...); c)
nominales completas
GM C → ( { Adv pre num | another |
| { Det | P ro P os } ( { Adv pre num | only (other) } ) } )N umero
| Cu | Cu + er | (the) Cu + est | another
| Det cp | Det Cu | P ro P os C
Los grupos modificadores parciales son aquellos que no sirven como sintagmas
nominales completos (the, his only, every, a) o pronombres posesivos que
tampoco tienen entidad suficiente como sintagma nominal.
GM C → { { Det | P ro P os } only | a | an | Det in | P ro P os in } (other)
| (GM C) other
Una secuencia de adjetivos consiste en uno o más adjetivos (o gerundios o
participios actuando como adjetivos) separados por comas o conjunciones (big,
bad and ugly o interesting but outdated).
Adjs → SAdj ( {, |(, ) Conj} {SAdj|P articipio} )∗
Los sintagmas adjetivos pueden ser adjetivos, participios, ordinales,
combinaciones nombre-verbo (man-eating) y pueden ser modificados por
cuantificadores comparativos o superlativos (more, fewest, most, fewest, ...).
A su vez, los nombres pueden ser combinados usando conjunciones.
N P s → N P (and N P )
13
También hay nombres compuestos y comninaciones de nombres (gasoline and
oil tanks, California wines o quick-reaction strike).
N P → N omP ropio
| {P reN s | N omP ropio} N ombre
| {N omP ropio N ombreComun}
Donde P reN s se refiere a modificadores nominales formados por nombres
compuestos y adjetivos que pueden aparecer en ese rol (presidential retreat).
P reN s → P reN ( and P reN 2 )∗
P reN → ( Adj −)N omComunSingular
P reN 2 → P reN | Ordinal | AdjN ominal
Estas raglas se usarı́an para construir un traductor finito o una red de transicion
recursiva (RTN)
El principal fenómeno que no pueden reproducir estas construcciones es el de
la recursividad. En el caso anterior de los grupos nominales, seria imposible
reproducir grupos nominales superiores formados por la combinación de varios
grupos nominales (cláusulas relativas ...)
La solución a esto es una cascada de autómatas (o más bien traductores) finitos.
La salida de cada uno de ellos sirve para alimentar al siguiente, de forma que
si no encontramos un grupo nominal formado por la combinación de otros dos,
el primer autómata identificará estos y el segundo aquel.
En FASTUS, sólo se permite un número de pasos recursivos fijos de antemano.
El segundo nivel de FASTUS encuentra grupos nominales no recursivos, el
tercero los combina en sintagmas nominales como:
• Frases de medida: 2000 iron and “metal wood” clubs a month
• Frases preposicionales: production of 2000 iron and “metal wood” clubs a
month
• Conjunción de grupos nominales: a local concern and a Japanese company.
En un sistema de un sólo nivel, serı́a necesario tratar con reglas recursivas
(GN → GN and GN ), lo que no serı́a posible usando autómatas finitos. El
usar cascadas de autómatas evita ese problema convirtiendo los GN del lado
derecho de la regla en antidades distintas del GN del lado izquierdo de la regla.
14
5.4.
ANÁLISIS SINTÁCTICO ESTADÍSTICO
5.4.1.
Introducción
GICs estocásticas o probabilı́sticas: incorporan una probabilidad asociada a
cada regla de producción, que indica el hecho de que algunas reescrituras son
más comunes que otras.
La única restricción impuesta es que las probabilidades de todas las reglas con
la misma parte izquierda (reescritura de un mismo sı́mbolo) tienen que sumar
1.
Formalmente, una GICs estocástica es una tupla G = {N, Σ, P, S} donde
N es el conjunto de sı́mbolos no terminales o categorı́as sintácticas, Σ es el
conjunto de sı́mbolo terminales o categorı́as léxicas, S es el sı́mbolo raı́z de la
gramática y P es el conjunto de reglas de producción A → α, con A ∈ N y
α ∈ (N ∪ T )∗ . Cada regla, además, tiene
P asociada una probabilidad, y este
conjunto de probabilidades verifica que α P (A → α) = 1, ∀A ∈ N .
Es importante recordar que al decir P (A → α) nos referimos en realidad
a P (A → α|A), con lo que para cualquier sı́mbolo no terminal A, la
gramática proporciona la distribución de probabilidades de todas sus posibles
transformaciones α.
El cálculo de una gramática estocástica puede ser manual (en casos pequeños)
o automático a partir de un corpus anotado (sintácticamente).
El objetivo de las gramáticas estocásticas es que, en caso de analizar una frase
ambigüa, obtener aquel análisis con mayor probabilidad (pueden ser varios).
Para asignar una probabilidad a una frase s de acuerdo a una gramática G
X
X
P (s) =
P (s, t) =
P (t)
t
t:hojas(t)=s
donde la variable t recorre el espacio de todos los posibles árboles de análisis
para las cuales la secuencia de nodos hoja, leı́da de derecha a izquierda, coincide
con la frase s. Asumiendo la hipótesis de que todas las reglas de una gramática
estocástica G son independientes, la probabilidad de un nodo cualquiera de un
árbol t se calcula recursivamente como el producto de las probabilidades de
sus subárboles locales y de la probabilidad de la regla de producción de G que
los une. La probabilidad de un árbol t viene dada, pues por la probabilidad de
su nodo raı́z.
Ejemplo: Sea una GICs estocástica G = {N, Σ, P, S}, con N = {S, A, B, C},
T = {a, b} y el conjunto P de producciones (con sus respectivas probabilidades)
15
es:
S → A B (0,25)
S → B C (0,75)
A → B A (0,25)
A→a
(0,5)
B → C C (0,1)
B→b
(0,9)
C → A B (0,2)
C→a
(0,8)
La frase s = bbab tiene dos posibles árboles de análisis. En la siguiente figura
aparecen ambos árboles, en cuyos nodos internos aparece como subı́ndice
la probabilidad de las reglas mediante la cual generan los subárboles que
encabezan.
La probabilidad de cada árbol serı́a:
P (t1 ) = 0,9 ∗ 0,9 ∗ 0,5 ∗ 0,5 ∗ 0,5 ∗ 0,9 ∗ 0,25 = 0,02278
P (t2 ) = 0,9 ∗ 0,9 ∗ 0,5 ∗ 0,5 ∗ 0,9 ∗ 0,2 ∗ 0,75 = 0,02733
Y la probabilidad ds s es P (s) = P (t1 ) + P (t2 ) = 0,02278 + 0,02733 = 0,05011
5.4.2.
Caracterı́sticas de las gramáticas estocásticas
Permiten determinar la probabilidad de cada árbol de análisis en caso de
tener varias alternativas. Esto es útil en gramáticas muy complejas donde
la posibilidad de ambigüedad es muy alta, porque nos permite, en lugar de
ofrecer todos los análisis posibles, seleccionar el que tiene asociada una mayor
probabilidad.
Un método muy utilizado para la construcción de gramáticas complejas es
la inferencia a partir de un corpus. Aunque lo usual es partir de un corpus
anotado, también es posible utilizar uno sin anotar. En este caso, es necesario
16
utilizar ejemplos negativos (gramaticalmente incorrectos) para poder inferir
una GIC. Tales ejemplos negativos no son necesarios si el objetivo es obtener
una GIC estocástica.
Las gramáticas estocásticas representan un buen compromiso de robustez.
En muchos casos, estas gramáticas son aprendidas a partir de corpora, en
donde aparecen, junto a textos correctos, los errores más comunes cometidos
por los hablantes. Si esos errores se utilizan en el proceso de entrenamiento
para generar la gramática, darán lugar a reglas (erróneas) con probabilidades
muy bajas, que servirán para analizar frases o textos conteniendo esos mismos
errores.
Existen idiomas para los que nos n-gramas (con n > 1) podrı́an constituı́r
un modelo de lenguaje mejor que las gramáticas estocásticas. Los n-gramas
tienen en cuenta ciertas dependencias contextuales entre elementos concretos
del léxico que, en general, las gramáticas no usan.
Las gramáticas estocásticas no son del todo imparciales. En primer lugar, la
probabilidad de un árbol pequeño es mayor que un árbol grave, asignándose
mayor masa de probabilidad a los árboles pequeños que a los grandes. Además,
los sı́mbolos no terminales con un número bajo de posibles reescrituras
(aparecen en la parte izquierda de un pequeño número de reglas) se ven
favorecidos frente a los no terminales con un gran número de posibilidades, ya
que las reglas idividuales de estos últimos tendrán probabilidades más bajas.
Las gramáticas independientes del contexto, incluso las estocásticas, no parecen
representar bien ciertos fenómenos tı́picos de los lenguajes naturales.
Si las producciones de una gramática estocástica cumplen la restricción de que
las probabilidades de todas las reglas con la misma parte izquierda sumen 1,
cabe esperar que:
X
X
P (s) =
P (t) = 1
t
s∈L(G)
es decir, la suma de las probabilidades de las frases reconocidas por la gramática
es 1, al igual que la suma de probabilidades de sus árboles de análisis. En
realidad, esto sólo ocurre si las masa de probabilidad de las reglas se acumula
en un número finito de árboles de análisis.
Ejemplo: Sea una gramática estocástica G con N = {S}, Σ = {a} y
P = {S → a ( 31 ), S → SS ( 32 )} Esta gramática genera frases de la forma
a, aa, aaa, . . . . Sin embargo, las probabilidades de estas frases son:
P (a)
= 31
2
P (aa) = 23 ∗ 31 ∗ 13 = 27
P (aaa) = ( 32 )2 ∗ ( 13 )3 ∗ 2 =
..
.
17
8
243
2
La probabilidad del lenguaje L(G) serı́a la suma de la serie infinita 13 + 27
+
1
8
+ . . . , la cual tiende a 2 . Por tanto, la mitad de la masa de probabilidad ha
243
desaparecido en en conjunto infinito de árboles que no generan frases de este
lenguaje.
Distribuciones de probabilidad como la del ejemplo anterior se denominan
normalmente distribuciones inconsistentes. En la práctica, la posibilidad
de distribuciones inconsistentes no presenta grandes problemas, dado que
lo que interesa en en análisis sintáctico estocástico es la comparación de
probabilidades entre diferentes análisis, y, además, está demostrado que si
los parámetros de una gramática estocástica son obtenidos a través de un
corpus anotado (bancos de árboles) siempre se puede obtener distribuciones de
probabilidad consistentes.
5.4.3.
Relación entre gramáticas estocásticas y HMMs
Las mismas preguntas fundamentales que se han planteado para los Modelos
de Markov, son también aplicables a gramáticas estocásticas. De hecho, un
HMM puede ser visto como una gramática regular estocástica.
Preguntas fundamentales de las gramáticas estocásticas:
1. Dada una frase s y una gramática G, ¿cuál es la probabilidad P (s|G), es
decir, la probabilidad de la frase s de acuerdo con la gramática G?
2. ¿Cuál es el argmaxt P (t|s, G), es decir, el árbol de análisis más probable
para la frase s?
3. ¿Cómo podemos elegir el argmaxG P (s|G), es decir, las probabilidades de
las reglas de G que maximizan la probabilidad de una frase s?
Primera pregunta: la probabilidad de una frase de acuerdo con una gramática
se puede calcular como la suma de las probabilidades de todos sus árboles
de análisis. Sin embargo, una simple suma no es un buen método de cálculo,
porque el número de análisis puede crecer exponencialmente con la longitud
de la frase. Para solucionar este problema, existen algoritmos especializados
para realizar esta cálculo de una manera más eficiente como el algoritmo de
las probabilidades externas y el algoritmo de las probabilidades internas, que se
apoyan en las siguientes definiciones de probabilidad de un nodo del árbol:
j
P robabilidades externas : αj (p, q) = P (w1(p−1) , Npq
, w(q+1)n |G)
j
P robabilidades internas : βj (p, q) = P (wpq |Npq
, G)
j
donde wik es la secuencia de palabras wi , wi+1 , . . . , wk y Npq
es el subárbol
j
encabezado por el sı́mbolo no terminal N que produce la secuencia de palabras
wpq . El algoritmo de probabilidades externas es un algoritmo de programación
18
dinámica similar al algoritmo hacia adelante de HMMs, mientras que el
algoritmo de probabilidades internas es similar al algoritmo hacia atrás.
Segunda pregunta: existe un algoritmo especializado para buscar el análisis
más probable para una frase, parecido al algoritmo de Viterbi para buscar el
camino más probable a través de un HMM. Sin embargo, lo más habitual es
tomar un algoritmo de análisis sintáctico ya existente y modificarlo para tener
en cuenta la presencia de probabilidades.
Tercera pregunta: existen algoritmos de entrenamiento de gramáticas
estocásticas. Se asume que la estructura previa de la gramática (conjuntos
sı́mbolos terminales, no terminales y reglas) se conoce de antemano, de modo
que proceso de entrenamiento sólo intenta optimizar las probabilidades de las
reglas. Para respetar la restricción de que las probabilidades de las reglas con
la misma parte izquierda sumen 1, se pueden determinar las probabilidades
como:
veces que aparece A → α
P (A → α) = P
β veces que aparece A → β
con A ∈ N y α, β ∈ (N ∪ Σ)∗
En un banco de árboles, estas probabilidades pueden calcularse directamente.
Si no se tiene un corpus anotado, se puede utilizar un algoritmo EM
(Expectation-Maximization) que toma una gramática estocástica inicial y un
corpus no anotado, y ajusta las probabilidades de las reglas de la gramática
de manera que las frases de dicho corpus obtengan la máxima probabilidad
posible.
5.4.4.
Algoritmo de Earley
Una forma de responder a las preguntas fundamentales 1 y 2 es utilizar un
algoritmo de análisis sintáctico para GICs y modificarlo para tener en cuenta
el cálculo de las probabilidades de los árboles.
El algoritmo de Earley puede contemplar las probabilidades de las reglas con
las siguientes modificaciones:
• Se añade a la estructura del ı́tem un nuevo campo con la probabilidad del
análisis hasta el momento.
• El operador predictor añade items con probabilidad 1.
• El operador scanner añade un item con la misma probabilidad que el ı́tem
de partida.
• El operador completer calcula la probabilidad del ı́tem resultante de de
su aplicación como el producto de las probabilidades de a) el estado final,
b) la regla del estado final y c) el ı́tem en espera del reconocimiento del
no terminal.
19
• Si sólo que quieren obtener el/los árbol/es de análisis más probables:
◦ Introducir un test de incorporación de un ı́tem a su entrada de chart
correspondiente, parecido al del algortimo de Lyon: si ya hay un item
igual a él en la regla de la gramática, posición del pto y punteros,
pero con probabilidad diferente, nos quedamos con el item con mayor
probabilidad.
◦ Prescribir un orden de aplicación de completer análogo al del algoritmo
de Lyon: orden descendente de puntero de retroceso y descendente
de probabilidad.
5.5.
Gramáticas de Adjunción de Árboles
20
Descargar