28/5/10

Lingüística computacional (VI)









(El capítulo anterior de la serie puede verse aquí)


El acercamiento a las gramáticas formales puede hacerse desde dos ámbitos diferentes. Por un lado, el de los teóricos (como Chomsky) intentando crear modelos lo más completos y coherentes posible, con un interés por comprender los mecanismos intrínsecos del lenguaje. Por otro, desde el ámbito práctico de la computación, donde los que abordan las gramáticas formales desde esta dirección no muestran demasiado interés en la perfección, completitud y coherencia teórica del modelo sino en que este sea programable en un ordenador. Estrictamente, de este enfoque proviene el nombre de lingüística computacional. Mi acercamiento personal a este campo viene, de hecho, desde esta vertiente. Siempre estuve menos interesado en comprender los modelos teóricos que en programar algoritmos que funcionaran aunque respondieran a bases no científicas. Esta dicotomía entre ambas aproximaciones fue bastante patente desde principios de los años ochenta cuando, en el marco del estudio de la inteligencia artificial, los lingüistas que buscaban modelos computables comenzaron a obtener éxitos apreciables al desarrollar las gramáticas de unificación y rasgos, mucho más manejables por un ordenador que las transformacionales. Por otro lado, el estilo críptico y complejo de Chomsky no ayudaba tampoco a que los especialistas informáticos le cogieran el gusto a sus propuestas.

Para entender mejor las gramáticas de unificación es aconsejable estudiar dos de sus componentes fundamentales: los sistemas de rasgos y el concepto de unificación.


Sistema de rasgos

La idea fundamental que subyace en el sistema de rasgos proviene de la programación dedicada a objetos en donde cada componente tiene una serie de características internas variadas que le son propias y que arrastra siempre con él. En este sentido, las categorías léxicas pueden ser consideradas como objetos que engloban en su interior una serie de datos y valores.

Se define rasgo como una pareja compuesta por un atributo (una cualidad) y un valor (el valor que toma dicha cualidad). Por ejemplo, un rasgo podría ser el género donde el atributo sería precisamente el “género de la palabra” y el valor tomado, por ejemplo, el de “masculino”. Cada rasgo puede tener un único valor a fin de que no haya incertidumbre.
El atributo debe ser un elemento constante que no pueda ser subdividido en subcomponentes. Se le denomina átomo y normalmente da nombre al rasgo, aunque esto no es obligatorio en la computación.

Un valor puede ser un único dato o un conjunto (estructura) de rasgos.

Veamos esto más claramente con un ejemplo.

Sea el rasgo llamado género y supongamos que, en este caso particular, toma el valor: femenino

[Género= femenino]

En este ejemplo, el valor es un atributo único. Pero otro rasgo podría ser el que determina la concordancia:



que es un valor complejo, una estructura de rasgos.

Aunque un rasgo puede tener sólo un valor, cada atributo podría tener una serie de valores distintos correspondientes al rasgo. Es lo que llamamos tipificación de rasgos.. Por ejemplo:

GÉNERO -> masculino, femenino
NÚMERO -> singular, plural
PERSONA -> 1ª, 2ª, 3ª


Asimismo, no todos los rasgos son aplicables a todas las categorías de modo que podemos ampliar la tipificación con las categorías afectadas. Por ejemplo:

NÚMERO-> singular, plural [N, V, ADJ, PRON, DET, O]



Cada categoría léxica puede ser entonces considerada como un conjunto de rasgos (o, en términos matemáticos, una matriz de rasgos). Así el lexema canciones podría expresarse como:


De igual manera, un pronombre personal podría representarse en estructura de rasgos del modo siguiente:



y un verbo como:



Defecto, Restricción y Herencia

Los rasgos son objetos fáciles de programar en un ordenador pero se intuye rápidamente que necesitan mucho espacio de memoria y una capacidad de cómputo importante. Si a cada palabra del diccionario (incluidas las flexiones verbales) les tenemos que asignar todos los rasgos posibles, no sólo tendremos un volumen enorme de datos sino que muchos de ellos serán redundantes.

Echando mano de técnicas de programación, se ha simplificado el establecimiento de rasgos mediante algunas asunciones como son:

Asignación de valores por defecto

Podemos asignar valores por defecto sin necesidad de haberlos determinado en el lexicón siguiendo ciertas reglas. Por ejemplo, podríamos memorizar una regla que diga que todos los nombres de un diccionario tienen como valor del rasgo persona, el de “3” excepto que haya otro valor explícitamente especificado. Si el lexicón tiene 20.000 nombres, sólo con esta regla nos habremos ahorrado 20.000 rasgos.

Igualmente, podemos establecer, quizá, que en castellano todos los nombres terminados en “a” tienen “femenino” como valor del rasgo género, excepto allá donde se especifique lo contrario. Nos ahorraremos, también, un buen número de datos en memoria.


Restricciones de rasgos

Existen rasgos que son incompatibles entre sí, es decir no pueden aparecer simultáneamente. Por ejemplo, si la categoría es un nombre no pueden aparecer los rasgos de tiempo y modo verbales. Teniendo en cuenta las reglas de incompatibilidad podremos asimismo reducir notablemente la base de datos.

Herencias

Si logramos jerarquizar los rasgos de manera ordenada podremos aplicar el concepto de herencia tal como se entiende en informática. Es decir, los niveles inferiores de la jerarquía comparten automáticamente- sin necesidad de señalarlo- las características de los niveles superiores.

En la práctica, esto se logra recurriendo a plantillas (template) o moldes que sustituyen a un conjunto de rasgos. Así, señalando que se cumple el molde estamos señalando que se cumplen todos los rasgos que esa plantilla incluye.

Por ejemplo, podríamos tener la plantilla correspondiente a un verbo intransitivo como:




De manera que la entrada sonrió podría escribirse como:




Entendiéndose que el rasgo Vintra incluye lo anteriormente descrito sin necesidad de repetirlo.


Un caso particular de la herencia es la denominada herencia por defecto. En muchos casos, ocurre que un nivel debe heredar “casi” todos los valores del nivel superior pero no todos. Esto se soluciona admitiendo que la plantilla sólo se aplica a aquellos atributos que no existan en el nivel inferior (por defecto) pero que si un dato existe entonces este predomina sobre la herencia.

Por ejemplo, imaginemos que tenemos la plantilla palabras_terminadas_en_a, como

[género =femenino, número=singular]


Las entradas mesa y puerta heredarían todos los rasgos de la plantilla (que se denota por <>=), es decir:

Mesa<>= palabras_terminadas_en_a
Puerta<>= palabras_terminadas_en_a


Pero la entrada aroma no heredaría el rasgo género:

Aroma <>= palabras_terminadas_en_a
género=masculino



El uso de rasgos en la gramática


Vimos en la gramática transformacional que había que recurrir a una pléyade de reglas para definir todas las posibles combinaciones de las oraciones del idioma.

Usando el concepto de rasgos podemos reducir la complejidad de reglas. Así, podremos definir que:

O -> SN SV




SN-> (DET) N (ADJ)





de modo que para el ordenador será sencillo encontrar palabras que cumplan los requisitos de concordancia del sintagma. Las palabras deberán ser tales que tengan un mismo valor allá donde los rasgos así lo indiquen.

Rasgos compartidos

En ocasiones, dentro de una estructura de rasgos, dos componentes comparten la misma información. En vez de repetir la información varias veces podemos añadir un marcador que dirige a una de las componentes hacia el otro. Por ejemplo:


La marca M1 indica que el determinante debe buscar sus propiedades allá donde esta se encuentra definida que es, justamente, en la componente del sustantivo. Las ventajas de utilizar rasgos compartidos son que, por un lado, se reducen los datos a almacenar y que, por otro, basta actualizar una vez las características en la definición de la marca para que todas las otras componentes que usan esta marca queden afectadas.

En muchas ocasiones, se indica una marca con un cuadrado dentro del cual se encuentra la referencia de la marca:




Subsunción


Las estructuras de rasgos pueden ser más o menos detalladas. Por ejemplo, en la figura podemos ver dos niveles de profundización para una misma palabra.




Decimos que la estructura menos completa y por tanto más genérica (la superior) subsume la más precisa (la inferior).

Unificación

Se entiende por unificación de estructuras de rasgos el proceso por el cual se combinan dos o más estructuras de rasgos para obtener una nueva más completa que contenga toda la información de las primeras.

Desde un punto de vista matemático, la unificación no puede considerarse exactamente como la unión de dos conjuntos ya que, en la unificación, dos elementos a unificar se subsumen, no se añaden uno al otro.

Para que la unificación de estructuras de rasgos sea posible debe ocurrir que los rasgos sean compatibles:





Si dos estructuras de rasgos tienen componentes con rasgos contradictorios no pueden unificarse. Por ejemplo, las dos estructuras del dibujo no pueden unificarse:




De igual manera, dos estructuras no son unificables si para un mismo atributo, una estructura tiene un valor atómico y otra tiene un valor complejo.





To be continued














0 comentarios :