Mostrando entradas con la etiqueta lingüística computacional. Mostrar todas las entradas
Mostrando entradas con la etiqueta lingüística computacional. Mostrar todas las entradas

viernes, 16 de julio de 2010

Lingüística computacional (XIII y último)



El capítulo anterior de esta serie puede verse aquí.

We’ve all heard that a million monkeys banging on a million typewriters will eventually reproduce the entire works of Shakespeare. Now, thanks to the Internet, we know this is not true.

Todo hemos oído que un millón de monos tecleando en un millón de máquinas de escribir pueden llegar eventualmente a reproducir la obra completa de Shakespeare. Ahora, gracias a Internet, sabemos que esto no es cierto.

Esta célebre frase de Robert Wilensky pronunciada en 1996 tiene una primera lectura referente a la crítica que debe hacerse a la mala literatura que se hace/hacemos en Internet.

Pero nos permite también reflexionar sobre si es posible una literatura digital.

En los capítulos anteriores hemos analizado cómo el lenguaje puede modelizarse mediante gramáticas formales; cómo pueden establecerse corpa que pueden luego examinarse mediante la fuerza bruta y la velocidad de los procesadores electrónicos; cómo pueden generarse frases correctamente construidas; traducir de un idioma a otro; emitir sonidos inteligibles; reconocer la voz; etc. Pero todo esto no nos permite crear literatura. La literatura es mucho más. Es una sucesión de texto con un sentido, con una idea, con un estilo, con un camino determinado por alguien para que ese camino- y no otro- nos emocione (ver comentarios aquí y aquí ).

¿Puede hacer esto un ordenador? ¿Puede crearse un algoritmo que sea capaz de inventar una historia o un poema que puedan competir con un ser humano? En 1726, Swift en Los viajes de Gulliver ya imaginaba una máquina capaz de crear literatura.

Aunque han aparecido intentonas en el mercado en este sentido (aquí por ejemplo ) la realidad es que, hoy por hoy, no existe ninguna aplicación informática que se acerque a la creatividad e inventiva humana para generar historias y textos de calidad. Existen algunos programas que son capaces de efectuar tareas muy particulares (como por ejemplo, hacer resúmenes de textos o generar partes meterológicos razonables) pero cuando nos adentramos en el campo de la literatura no encontramos soluciones a pesar de tratarse de un campo de notable estudio y experimentación.

¿Qué ocurre entonces con el axioma del encabezado? Por simple estadística, si dejamos a los monos (aunque hagan falta muchos millones) tecleando los años suficientes (y una buena dosis de plátanos para incitarles a hacerlo), alguno de ellos debería producir, si no las obras completas de William, al menos algún par de páginas de indiscutible calidad. Esta asunción es conocida como el teorema de los infinitos monos. Al fin y al cabo, es como funciona la evolución. Se dejan una serie de moléculas químicas inertes que se combinan al azar y, al cabo de unos pocos miles de millones de años, ese azar ha creado los peces, las azáleas, los dinosaurios, la resistencia de Zátopek y la impresionante belleza de Rita Hayworth. Más fácil parece escribir un par de buenas páginas. ¿Puede un ordenador crear literatura?


La fuerza bruta

Los monos son lentos (y las bananas escasas) pero un ordenador es extremadamente rápido y no come más que electricidad. Podemos pensar que usando una gramática formal nos lanzamos a crear frases gramaticalmente correctas con un algoritmo matemático. Digamos un par de millones de sentencias por segundo. En un año ese ordenador habría generado casi setenta billones de frases correctas. Pongamos que otro ordenador se dedica a combinarlas al ritmo de cien mil combinaciones por segundo. En un año podría haber generado más de 3 billones de combinaciones. ¿Y ninguna de estas sería buena? ¿Y si en vez de tener un ordenador, hacemos funcionar una red de un millón de ellos, muchísimos menos de los que existen en el mundo? ¿Nos sorprenderíamos viendo en pantalla El Rey Lear?

La realidad es que esto no ocurre. La realidad es que estos algoritmos que recurren a la fuerza bruta consiguen por lo general mala prosa o mala poesía. Mala y breve. Hay muchos intentos de crear literatura por la fuerza bruta (por ejemplo, los Oulipoemas aquí aunque en este caos los versos han sido escritos por humanos. El ordenador sólo los combina).

¿Qué ocurre entonces? ¿Acaso el cerebro humano dispone de un mecanismo literario que no puede ser recreado por un ordenador? ¿Hay un alma intangible creadora?¿La musa existe?

Se trata de un problema estadístico. Por fuerza bruta nunca conseguiremos recrear las obras de Shakespeare ni las de Moliere ni las de Espronceda. Hagamos uso de un poco de matemáticas.

Imaginemos una novela de cualquier escritor actual de 500.000 caracteres, algo bastante habitual. Estos caracteres incluyen las letras, los números, los espacios y todos lo signos de puntuación. De acuerdo a las codificaciones ASCII podemos decir que hay 45 caracteres diferentes a combinar (olvidémonos de las mayúsculas ahora para simplificar). Vamos a poner a nuestros monos a trabajar para ver si son capaces de reproducir –simplemente por azar- esta novela creada por un humano.

La probabilidad de que el mono teclee un carácter al azar es 1 entre 45, o sea 0,0222. Y que después teclee otro carácter es la misma, también 0,0222. El que teclee los dos caracteres correctos uno tras otro es de 0,022 elevado al cuadrado, o sea 0,0004928.

Pero tenemos que teclear 500.000 carecteres en un orden correcto. Entonces, la probabilidad de que esto ocurra es:


O sea, aproximadamente un uno dividido entre ochocientos mil ceros. Ninguna calculadora del mundo nos mostraría esa cifra tan pequeña ni siquiera en notación exponencial. Es decir, necesitamos teclar un uno seguido de 800.000 ceros de veces para reproducir por azar la novela

Supongamos que nuestro mono presiona una tecla por segundo. El universo, desde el big bang, lleva existiendo 15.000.000.000 de años, o sea, 4.7 seguido de “sólo” 17 ceros. ¡Pero necesitamos ochocientos mil ceros!!, es decir, nuestro mono precisaría el tiempo de cicuenta mil universos seguidos .

De acuerdo, de acuerdo. El ordenador es mucho más rápido que Cheetah. Digamos que es capaz de generar diez millones de letras por segundo. ¡Ah, esto es otra cosa!. Pero, desilusión, en todo el tiempo que lleva nuestro universo un ordenador habría generado un uno seguido de 24 ceros. Aún, necesitaríamos un universo treinta y cuatro mil veces más largo que el actual.

Imposible usar la fuerza bruta para crear literatura al azar.

Creación de textos por modelos

Se trata de una técnica usada para generar peomas sobre todo. Un algoritmo que permite una variedad de oraciones ya que, en vez de combinar frases preprogamadas para formar oraciones largas, se usan palabras que encajan en modelos de versos predeterminados.

Estos modelos (que en terminología inglesa suelen recibir el nombre de pattern o de template) son moldes en los que existen huecos que deben llenarse con ciertas palabras, elegidas de entre las de una lista. Algo así como si se tratara de encajar piezas de un puzzle al que se le han quitado algunas, quedando libres huecos en los que sólo caben ciertas fichas.

Así, por ejemplo, a partir de la frase:

Una oropéndola, eso eres. Como el manantial ansioso de la silenciosa poesía

Podríamos crear el siguiente molde:

PALABRA 1 , eso eres. Como el PALABRA 2 PALABRA 3 de la PALABRA 4 PALABRA 5

PALABRA 1 podría ser elegida de una lista, tan larga y variada como queramos, de sustantivos (una oropéndola, en el ejemplo). PALABRA 2 de una lista de sustantivos masculinos en singular (manantial, en el ejemplo). PALABRA 3 de una lista de adjetivos en masculino. PALABRA 4 de una lista de adjetivos femeninos y PALABRA5 de una lista de sustantivos femeninos.

Igualmente sería posible definir moldes que contuvieran verbos:

Una caricia muere calmadamente entre marinos que cantan

Se convertiría en:

Una- SUSTANTIVO FEMENINO-VERBO EN TERCERA PERSONA SINGULAR DEL PRESENTE DE INDICATIVO-ADVERBIO- entre- SUSTANTIVO MASCULINO PLURAL- que- VERBO EN TERCER APEROSNA DEL PLURAL DEL PRESENTE DE INDICATIVO.

Podríamos definir miles de moldes, de templates y listas de miles de palabras. Incluso, estos moldes se pueden copiar de autores humanos célebres para que su estructura sea aún mejor. Y el Corpus de palabras (los Corpa, para ser exactos, puesto que cada lista sería un mundo independiente) podría ser tan extenso como se deseara. Con esos mimbres, basta un código sencillo que vaya rellenando los moldes de manera aleatoria. Los versos unitarios creados serán más o menos buenos en función de la fortuna del azar. Cuanto más extensas sean las listas y más moldes haya, más variados y creativos serán los ripios.

Más información

Concatenación de frases

En el habla común podemos generar oraciones relativamente complejas concatenando frases sencillas. En aras a la sencillez este algoritmo construirá siempre oraciones compuestas por cuatro unidades básicas. Ello producirá una rutina que hará que el texto resulte aburrido pero que, a efectos de lo que se pretende mostrar, es más que suficiente. Un programa más complejo debería combinar diversos modelos de oraciones y alternarlas de acuerdo a un patrón no reconocible (por ejemplo, utilizando una variable aleatoria) con lo que se rompería la monotonía.

En nuestro sencillo caso, las oraciones podrían por ejemplo construirse siguiendo un esquema A-B-C-D donde A sería un sintagma preposicional, B contendría el sintagma nominal, C el sintagma verbal y D un sintagma adverbial o adjetival. No es nada novedoso. Este tipo de formas de crear oraciones ha existido desde hace mucho en papel. Hay un libro de Didier Noyé titulado ” Réunionite : guide de survie en el que usa esta técnica para crear discursos insignificantes pero aparentemente contundentes en el área de gestión de empresas. Cortazar y Mozart ya usaron el sistema tanto en literatura como en música. No siendo nada nuevo, el método nos servirá para mostrar la técnica.

Veámoslo con un ejemplo:

“En cualquier caso, la utilidad de la literatura digital podrá ser analizada con detalle en un futuro cercano”

La descomposición de unidades sería:

A= En cualquier caso,
B= la utilidad de la literatura digital
C= podrá ser analizada con detalle
D= en un futuro cercano.

La particularidad de este tipo de subcadenas unidas es que pueden variarse casi a voluntad y siempre encajarán razonablemente en la oración. Así, supongamos que tenemos otro subconjunto “B” que dijera “la calidad de tal poesía”. Podríamos sustituir la “B” anterior por la nueva “B” y nos quedaría la oración:

“En cualquier caso, la calidad de tal poesía podrá ser analizada con detalle en un futuro cercano”

Que es también una oración inteligible y bien construida aunque carezca de contenido y significado real. Imaginemos, ahora, que tenemos sólo diez cadenas de cada uno de los cuatro tipos. Las combinaciones posibles serían diez mil sentencias distintas. Si tuviésemos cien de cada tipo, las combinaciones ascenderían a cien millones, más que suficiente para crear largos y soporíferos discursos o tediosas descripciones.

Más información aquí

Informes científicos falsos

En el MIT se desarrolló un célebre programa (http://pdos.csail.mit.edu/scigen/#examples ) con el que unos estudiante lograron que revistas de prestigio les publicaran ponencias generadas por ordenador auténticamente inconsistentes (bogus text). Y, asimismo, existe investigación sobre software que detecte los escritos generados automáticamente aparentemente correctos, pero carentes de sentido para desenmascararlos (http://www.physorg.com/news65101797.html).%3cbr.

En estos casos se usan combinaciones de modelos y concatenación de frases predeterminadas que se formatean con dibujos y gráficos para aprentar ser un escrito científico auténtico.

Eliza

Eliza, de Joseph Weizenbaum fue programado en 1966 y supuso una revolución el la generación de diálogos. Tuvo multitud de copias pero pronto se vieron sus limitaciones y no pasó de ser un divertimento.

Eliza simulaba ser un psiquiatra que contestaba a las frases que el usuario realizaba. Por ejemplo, este es un diálogo típico:

> Hello, I am Eliza.
* Life is hard
> Don't you ever say Hello?
* well, I am worried
> How long have you been worried?
* for years
> OK... "well, you are worried". Tell me more.
* I need sucess and money
> What does that suggest to you?
* that I am a looser
> Did you come to me because you are a looser?
* yes
> I see.

Puede verse que se trata de una conversación aparentemente racional. Es un espejismo. En cuanto se escribe algo un poco raro, el programa entra en un bucle de frases comodín y repetitivas.

Puede probarse una de las múltiples versiones de Eliza en la red, aquí.

Eliza (que es más fácil de programar en inglés que en castellano debido a que no hay género en la mayoría de las palabras y que la declinación verbal es muy sencilla) se basa en una base de datos de palabras y expresiones típicas. Cuando un usuario escribe una pregunta o un comentario, el algoritmo busca en esa base de datos si existe totalmente o parte. Si no encuentra nada, devuelve una frase que incite a seguir (por ejemplo, Come on o I see o that’s interesting). Si encuentra algo que sí está en la base de datos, construye una frase que usa una parte predeterminada por un modelo y le añade alguna de las palabras de lo introducido por el usuario, de modo que la frase final parece relacionada con la entrada.

Imaginemos, por ejemplo, que tenemos esta base de datos:

- Tristeza, triste -> ¿Por qué está usted triste?

- Alegría, alegre -> ¿Qué le hace sentirse alegre?

- Me siento * -> ¿Es importante para usted sentirse *?

Ahora, si el usuario introduce el texto:

Me siento triste

El algoritmo detectaría que triste está en la base de datos y contestaría con ¿Por qué está usted triste?

Si el usuario introduce :

Me siento fatal

El algoritmo detectaría que esta frase es del tipo “me siento”+”algo” . Tomaría ese “algo” (en este caso “fatal”) y lo añadiría a su frase hecha del modo:

¿Es imporante para usted sentirse fatal?

Dando la impresión de que el ordenador ha entendido y contesta.

Generador de novelas de Brown

Crea tu propia novela de Dan Brown (http://probar.blogspot.com/ ) es un inteligente y divertidísimo programa que genera reseñas de ficticias novelas al estilo de Dan Brown, añadiendo incluso la portada del supuesto libro y una pequeña crónica de un destacado diario. Técnicamente se base en introducir palabras, elegidas aleatoriamente, en frases predefinidas. Un método sencillo que sin embargo da magníficos resultados.

Otros ejemplos

Pueden citarse Los destellos aristocráticos y las alas soberanas profanan la justicia de Baudot, un trabajo de poesía electrónica de los años sesenta; Mell de Firner; Erato de Milic; Passage de Bootz; La pyramide truquée de Debyser; Poetry Generator de West; Tale Spin de Meehan;Hamilton Diamond de Johnson; By love insured de Chait; Stochastische Texte de Lutz y Bense (que generaba poesía a partir de la gramática de Chomsky); Silence on brúle de Denjean; Jus d'orange de Debyser;Shanghai Paris de Baboulin; el programa RENGA del Centro Pompidou que generaba un texto nuevo cada minuto;los trabajos del grupo ALAMO (Atelier de Littérature Assistée para la Mathématique et les Ordinateurs); Poemas V2 de Carmona; el robot PaCo de Corpa y Serrano, una máquina humanoide que imprimía poemas; WasPo un generador de poesía en estilo del siglo de oro programado por Gervás; etc.

¿Puede un ordenador entender la narrativa?

Hasta ahora hemos hablado de que un ordenador pueda escribir una novela pero cabe preguntarse si, en el sentido inverso, podría entenderla.

Los sistemas cognitivos caen dentro de la esfera de la inteligencia artificial y exceden lo que aquí puede explicarse pero recomiendo leer este artículo .

Internet colaborativo

¿Y si sustituimos los monos por personas que escriben colaborativamente, al modo de un cadáver exquisito? La Red permitiría que millones de personas (que además no teclean al azar sino que aportan su creatividad humana) pudieran colaborar en crear una novela literaria de alat calidad. Se han hecho intentos más o menos extensos (hay algunos ejemplos en Biblumliteraria ) pero ninguno hasta la fecha ha conducido a una obra que pueda siquiera aproximarse a los grandes trabajos humanos. De modo que la aseveración de Robert Wilensky con que abríamos este post parece confirmarse.

Computación de la narrativa

Supuesto que disponemos de un método para generar texto de calidad es necesario, asimismo, estudiar qué reglas y qué factores afectan a la consecución de una buena historia. ¿Cómo deben ser los personajes? ¿Qué subtramas deben derivarse de la historia principal? ¿cómo se interconectan entre sí y en qué momentos de la narración? ¿qué conceptos de sentido común deben tenerse en cuenta - y memorizarse en la base de datos del ordenador- para que el contexto sea correcto? ¿cuál es la jerarquía de eventos? ¿Cuál es el propósito de la trama? ¿Qué debe ocultarse para que haya intriga? En definitiva, aquellos aspectos que afectan a la literatura convencional que se tornan más complicados aún a la hora de programarlos. Es un campo en que no se ha avanzado mucho.

Un texto interesante al respecto puede leerse aquí.

Hoy en día parece que resultará extremadamente complicado simular la capacidad de inventar cuentos e historias del cerebro o quizá sea cuestión de tiempo y de que alguien, algún día, dé con un algoritmo y un método que puedan simular la capacidad literaria humana con éxito. Sin duda, será la lingüística computacional la disciplina que será decisiva para conseguirlo.


FIN DE LA SERIE

Vía Biblumliteraria...








Share/Save/Bookmark

jueves, 17 de junio de 2010

Lingüística computacional (IX)


El capítulo anterior de esta serie puede verse
aquí.

    En los capítulos anteriores hemos visto muy sucintamente algunos aspectos teóricos de los formalismos gramaticales. Es ya momento de pasar a la práctica, es decir a estudiar programas concretos que sirven para analizar frases y determinar si están bien escritas o mal escritas, si son o no son válidas gramaticalmente.

    Es evidente que si disponemos de un sistema correcto de análisis sintáctico, el escribir literatura sería bastante sencillo, al menos mala literatura. Bastaría programar un generador de frases aleatorias combinando palabras de un diccionario para, después, pasar estas sentencias por el analizador, filtrando sólo aquellas que estuviesen formadas correctamente. Podría pensarse que este sería un trabajo ingente y con pocas posibilidades de éxito pero si contemplamos que un ordenador rápido puede generar y comprobar un millón de oraciones por segundo es bastante probable que en unas horas de funcionamiento diéramos con un texto breve de calidad aparente.

Parsers

     Un Parser es un programa informático que toma una frase y comprueba que está bien formada de acuerdo a una serie de reglas. Su origen está en los programas de ordenador y en los compiladores/intérpetes. En este ámbito tan restrictivo en el que sólo hay unos pocos cientos de palabras válidas y unas pocas combinaciones estructurales correctas, los parsers determinan si las instrucciones que el programador ha escrito son correctas antes de pasarlas al compilador o el intérprete que las traducirá al lenguaje máquina. Así, en BASIC, por ejemplo tenemos un lexicón formado por menos de cien palabras clave ( REM, GOTO, PRINT, WRITE, OPEN, CLOSE, IF, DO, NEXT,….). Sólo estás pueden usarse. Pero además hay una serie de reglas de buena formación de la instrucción que se da al ordenador. Por ejemplo, podremos escribir:

FOR x=1 to 6

    Pero no podríamos escribir:

FOR x==1 to 6 ni tampoco FOR X=1 tor 6

    Un parser analizaría la primera instrucción y la reconocería como correcta. Al analizar la segunda determinaría que su gramática es incorrecta porque hay dos “=” en vez de uno sólo. Y al estudiar la tercera, determinaría también que es falsa porque la palabra “tor” no está en el lexicón de BASIC.

    Otras acciones que realizan los parsers de un lenguaje de programación es comprobar que los paréntesis están emparejados dos a dos. Por ejemplo, la sentencia :

X= (a*2)+ ((b+2)/3)

    sería correcta, pero la

x=(a*2)+((b+2)/3

    no lo sería.

    Normalmente, estos programas ejecutan la tarea de análisis en tres fases. En la primera (lexical analysis) separan los componentes- las palabras- de la sentencia. Así, en la sentencia aritmética:

X= 5 + ((3/8)^3)

    El parser separaría los componentes reconocibles en el lexicón (que suelen denominarse tokens):

5, +, (,(,3,/,8,),^,3,).

    Si en esta fase aparece algún token que no esté en el lexicón, el programa abortaría el análisis dando un mensaje de error.

    La segunda fase, llamada sintáctica, verifica que la sentencia es válida de acuerdo a las reglas. Aquí, el parser determinaría que lo es ya que los paréntesis están emparejados (dos de apertura, dos de cierre), etc.

    Finalmente, la tercera fase- llamada semántica- es la que ejecuta las acciones necesarias para interpretar la sentencia. En este caso, esta serie de cálculos:

- Resultado=3/8
- Elevar resultado anterior al cubo
- Sumar 5 al resultado anterior
- Visualizar resultado

    Dependiendo de cómo se programe el algoritmo, los parsers pueden funcionar de arriba a abajo (top-down parsing) de abajo a arriba (bottom-up parsing), recursivamente hacia abajo, recursivamente hacia la izquierda, etc.

    En cualquier caso, por complejo que sea un lenguaje de programación, el lexicón y las reglas de su gramática son siempre infinitamente simples en comparación con las de un lenguaje natural. De ahí que, aunque el concepto de parser sea válido, la dificultad de crear una gramática computable en un idioma humano es enorme. Amén de que el lexicón es mucho más extenso, la cantidad de reglas puede ser enorme, precisar recursividad profunda y precisar deshacer ambigüedades y retóricas, una característica muy propia de los lenguajes humanos que no se da en ningún lenguaje de ordenador. Si una sentencia de ordenador debe escribirse como:

IF (X < 2) then a=(3-X) else a=(3+x)


IF (X <2) ELSE (a=3+x) THEN (a=3-x)


y mucho menos:


IF (X <2) entonces a=(3-X) else a=(3+x)

Sin embargo es esta una situación habitual en las lenguas naturales:


El balón de Juan se perdió
Se perdió el balón de Juan
Perdiose el balón de Juan
Se perdió el esférico de Juan
Se perdió la pelota de Juan


     Los parsers que buscan analizar lenguajes naturales parten de alguna de las gramáticas teóricas vistas en capítulos anteriores pero, por lo general, la simplifican para que puedan ser manejables por un algoritmo de manera eficiente. Evidentemente, esta simplificación hace que su rendimiento merme. Es por eso, por ejemplo, que los traductores automáticos logren traducciones que no suelen ser muy buenas. Además, hoy en día, muchos parsers se fundamentan parcialmente en un corpus extensos de texto real que han sido anotados manualmente de manera que, estadísticamente, comparan la frase a analizar con las existentes en la base de datos. Como los computadores son muy rápidos, este cálculo estadístico extenso puede hacerse de manera muy eficiente.

PATR –II

     Uno de los primeros programas- ya anticuado pero que se usa mucho para empezar a trabajar en lingüística computacional- fue PATR-II, un parser de lenguaje natural desarrollado por Stuart M. Shieber. Es un programa que usa una gramática propia libre de contexto con reglas y restricciones.

    Con su interface tipo MS-DOS de líneas de comandos resulta hoy muy anticuado, pero su sencillez permite entenderlo rápidamente y el que pueda descargarse de la red invita a practicar casi inmediatamente. Además, sirve para cualquier idioma ya que es el usuario el que define el léxico y la gramática a tratar.

     PATR-II puede descargarse aquí para aquellos que estén interesados en comenzar a juguetear en este campo.

     PATR-II necesita dos archivos para poder funcionar. Uno, que debe tener extensión “.lex” contiene el léxico. Otro, con extensión “.grm” contiene las reglas de la gramática. Cada usuario puede crear sus lexicones y sus gramáticas propias en función del ámbito que quiera analizar y de la extensión de los textos que quiera estudiar.

     Un ejemplo muy sencillo de parte de un archivo de léxico sería, por ejemplo:

;NOMBRES
\w niño
\c N
\f masc-sing


\w niños
\c N
\f masc-plur
\w niña
\c N
\f fem-sing


\w niñas
\c N
\f fem-plur

\w futbolista
\c N
\f mascfem
< conc num> = sing

\w futbolistas
\c N
\f mascfem
< conc num> = plur

\w la
\c DET
\f < num> = sing
< pers> = 3a
< gen> = fem


\w María
\c N
\f < num> = sing
< sem> = anim
< pers> = 3a
< gen> = fem

\w explica
\c V
\f < num> = sing
< sem> = anim
< pers> = 3a
< tip> = trans

\w explican
\c V
\f < num> = plur
< sem> = anim
< pers> = 3a
< tip> = trans

\w historia
\c N
\f < num> = sing
< sem> = inanim
< pers> = 3a

\w un
\c DET
\f < num> = sing
< pers> = 3a

\w amigo
\c Nla jh
\f < num> = sing
< sem> = anim
< pers> = 3a

\w de
\c PREP

\w infancia
\c N
\f < num> = sing
< sem> = inanim
< pers> = 3a

\w a
\c PREP

\w Ana
\c N
\f < num> = sing
< sem> = anim
< pers> = 3a

\w patatas
\c N
\f < num> = plur
< sem> = inanim
< pers> = 3a
< gen> = fem

\w comen
\c V
\f < num> = plur
< sem> = anim
< pers> = 3a

\w padre
\c N
\m < num> = sing
< sem> = anim
< pers> = 3a

\w habla
\c V
\f < num> = sing
< sem> = anim
< pers> = 3a
< tip> =trans

\w con
\c PREP


     Obsérvese que cada línea empieza con una simbología que indica al ordenador de qué estamos hablando. Así “\w” significa que empieza una palabra (Word). Evidentemente, puede complicarse mucho más añadiendo más características (serían rasgos en el sentido de lo estudiado en capítulos anteriores).

     Por su parte, el fichero de gramática contendría las reglas explicitadas de manera aproximada como vimos en capítulos anteriores. Por ejemplo:

; primero se define la terminología de abreviación de conjuntos de rasgos del léxico mediante la instrucción de PATR “let--- be”.
; y después las reglas.
;ABREVIATURAS
;
; CONDICIONES

Let masc-sing be
< conc num> = sing
< conc gen> = masc

Let masc-plur be
< conc num> = plur
< conc gen> = masc

Let fem-sing be
< conc num> = sing
< conc gen> = fem

Let fem-plur be
< conc num> = plur
< conc gen> = fem

; condiciones de disjunción

Let mascfem be {[conc_gen: fem]
[conc_gen: masc]
}
;
;comienzan las reglas
;
;
RULE O -> SN SV
RULE SN -> {QUAN/DET/QUAN1R} N ADJ
< DET conc> = < N conc>
< QUAN conc> = < N conc>
< QUAN1R conc> = < N conc>
< N conc> = < ADJ conc>

RULE QUAN1R -> QUAN1 DET
< QUAN1 conc> = < DET conc>
< QUAN1R conc> = < QUAN1 conc>

RULE SV-> V SP

O, por ejemplo, otro fichero de gramática podría ser:

Rule S -> NP VP (SubCl)

< NP head agr> = < VP head agr>
< NP head case> = NOM
< S subj> = < NP>
< S pred> = < VP>

Rule NP -> {(Det) (AdjP) N (PrepP)} / PR
< Det head number> = < N head number>
< NP head> = < N head>
< NP head> = < PR head>

Rule Det -> DT / PR
< PR head case> = GEN
< Det head> = < DT head>
< Det head> = < PR head>

Rule VP -> VerbalP (NP / AdjP) (AdvP)
< NP head case> = ACC
< NP head verbal> = -
< VP head> = < VerbalP head>

Rule VerbalP -> V
< V head finite> = +
< VerbalP head> = < V head>

Rule VerbalP -> AuxP V
< V head finite> = -
< VerbalP head> = < AuxP head>

Rule AuxP -> AUX (AuxP_1)
< AuxP head> = < AUX head>

Rule PrepP -> PP NP
< NP head case> = ACC
< PrepP head> = < PP head>

Rule AdjP -> (AV) AJ (AdjP_1)

Rule AdvP -> {AV / PrepP} (AdvP_1)

Rule SubCl -> CJ S

    
Una vez que tenemos ambos ficheros definidos podemos ejecutar PATR que nos muestra una pantalla del tipo (como se ve nada amigable para los estándares de hoy en día)



     Podemos, entonces, introducir unas pocas órdenes. Así, EXIT sirve para finalizar la ejecución; LOAD GRAMMAR cargará en memoria el fichero de gramática que queremos usar; LOAD LEXICON cargará el fichero de léxico que vayamos a usar; PARSE comprobará que una sentencia es correcta o no.

     Podríamos por ejemplo ordenar:

PARSE la niña explica historia

    Y el ordenador respondería con:


o sea, dictamina que es una frase correcta de acuerdo al léxico existente en el fichero lexicón y a las reglas de gramática del fichero de gramática. Si no se cumpliese alguna condición mostraría un mensaje de error.

     En la siguiente figura se ve la salida en pantalla como respuesta a analizar la oración, el niño bueno:


O, para un lexicón y una gramática en inglés, obtendríamos:


     La mejor forma de entender lingüística computacional es practicando, de modo que animo a todos a descargarse PATR-II, crear un fichero de léxico, otro de reglas gramaticales y comenzar a parsear

El algoritmo CYK y su parser

     Otro parser con el que se puede practicar en red es el CYK. En este enlace puede disfrutarse de una gramática reducida para inglés. Si, como yo he hecho, introduzco la frase I saw a cat on the roof (se pueden ver las reglas de la gramática en la ventana superior):


el programa nos devolverá el análisis en modo gráfico:


     El algoritmo CYK (Cocke-Younger-Kasami) determina si una frase es correcta de acuerdo a las reglas de una gramática libre de contexto. Es un algoritmo del tipo bottom-up. La gramática utiliza el formalismo normal de Chomsky que ya vimos en los capítulos teóricos anteriores. El algoritmo considera cada subconjunto posible de combinaciones de las palabras para determinar si cumplen con las reglas. Lo hace por orden de longitud. Primero, frases de una palabra, luego de dos, etc. Si, al final, toda la sentencia cumple con las reglas, es que es válida.


El analizador THERA en español

    En la dirección puede practicarse con un parser en español. Por ejemplo, introduciendo la frase El día es muy soleado el programa nos devuelve:


     Este parser analiza sentencias en español y en catalán.


AMOSINE

     Es una analizador desarrollado por el Grupo de Estructuras de Datos y Lingüística computacional con un interfaz moderno y fácil uso. Puede accederse a su página aquí


Link Grammar Parser

     Puede encontrarse aquí pudiéndose descargar o usar en línea.

     Escrito en lenguaje C The Link Grammar Parser es un parser sintáctico en ingles. Introduciendo una frase, el sistema la analiza sintácticamente .
Así, para la frase The man who went to London is rich el parser nos devuelve:


Otros programas on-line

En esta dirección existe otro parser en inglés. Ante la misma frase The man who went to London is rich devuelve la siguiente pantalla:


aquí se puede encontrar un desambiguador morfosintáctico:


    Aquí puede obtenerse TreeForm Syntax que es un diagramador en árbol de frases.


   PhpSyntaxTree es un programa para diagramar árboles sintácticos que se han escrito en notación lineal. Por ejemplo, la cadena sintáctica

SC [SD Quiénes_i][C' [C animan_j [+Q]][SF [SD t_i'][F'[F t_j' [Phi]][SV [SD t_i][V'[V t_j][SD la vida]]]]]]]

Y el programa nos dibujará el árbol correspondiente:


     Por fin, una herramienta para dibujar árboles sintácticos y X-barras es Linguistic Tree Constructor que no analiza nada pero que permite dibujar a mano y con gran calidad dibujos como los que han ilustrado algunos de estos posts. Puede descargarse aquí.

    Hoy en día pueden encontrarse numerosos recursos de lingüística computacional en red gratuitos y, cómo no, muchos también profesionales. En cualquier caso, nada como practicar. Especialmente con aquellos software que nos obligan a crear el lexicón y las reglas gramaticales lo que no sólo nos ayudará a entender los algoritmos sino que nos permitirá comprender mejor los conceptos teóricos.

Publicado por Félix Remírez, vía Biblumliteraria









Share/Save/Bookmark

viernes, 11 de junio de 2010

Lingüística computacional (VIII)


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


Gramática Sintagmática nuclear

     Este modelo de gramática, desarrollado por el profesor Pollard (arriba en la foto), recibe en inglés el nombre de HPSG o Head-driven Phrase Structure Grammar. Se trata de una gramática de unificación basada en estructuras de rasgos (ver capítulos anteriores si se requiere recordar estos conceptos) los cuales se eligen de entre un conjunto amplio y bien categorizado de rasgos y valores. La gramática HPSG parte de la estructura superficial de la oración y, por tanto, no necesita apelar a ninguna estructura profunda y no es transformacional. Hoy en día, este formalismo es el más extendido en las aplicaciones computacionales. De hecho, puede decirse que HPSG es más una técnica computacional de plasmar una gramática que un modelo teórico de lenguaje.

     Un importante concepto de esta gramática es que define el signo , una colección de información representada como una estructura rígida y determinada que se aplica a todos las posibles palabras o categorías. Las palabras, los sintagmas, las oraciones, comparten un único modelo de signo perfectamente estructurado en el que ciertos atributos están o no presentes según el tipo que sea. Este signo es una matriz de rasgos que incluye siempre, al menos, dos atributos llamados PHON, que describe la fonética del signo, y SYNSEM que incorpora toda la información sintáctica y semántica. Este atributo SYNSEM se desglosa posteriormente en otra serie de atributos también perfectamente definidos. En la gramática sintagmática nuclear, un atributo puede tener como valor una estructura de rasgos compleja ordenada o desordenada. Pero cualquiera que sea, pertenecerán a unos tipos determinados y estandarizados. Si el signo se aplica a una palabra incluye el subtipo word. Si se aplica a una frase, recibe el subtipo phrase o frasal.

     Es ya obvio que esta estandarización del rasgo tiene ventajas indudables para la programación. Los algoritmos que deban manejar la gramática se encontrarán con un objeto conocido y manejable. Que este objeto describa el lenguaje más o menos correctamente no es tan importante. Lo fundamental es que es tratable de manera eficiente por un ordenador. Una ventaja adicional es que HPSG puede utilizarse tanto para analizar la sintaxis de un lenguaje como para generarlo.

     A diferencia de las gramáticas transformacionales, HPSG defiende que las estructuras idiomáticas se forman mediante las operaciones de unificación y subsunción que vimos en capítulos anteriores. Asimismo, esta gramática entiende las reglas como restrictivas, es decir una regla señala las restricciones que han de existir al combinar palabras o sintagmas pero no define el orden concreto en que estos constituyentes deben aparecer.


Representación del conocimiento


    En HPSG se representa la estructura lingüística mediante matrices de rasgos (o AVM, Attribute Value Matrix). La siguiente figura muestra un ejemplo (no completo) de formato de esta matriz:



    Las palabras clave en mayúsculas son los atributos del rasgo. A su lado, se indican los tipos de valores que pueden tomar dichos atributos.

     Los atributos pueden desplegarse con más palabras clave:


    Cuando esta matriz describe un sintagma se usan ciertos atributos. Cuando describe una palabra, apareen otros o algunos de ellos pueden quedar inactivos como, por ejemplo, NONLOC y QSTORE en el caso anterior.

    Cuando existe una estructura compartida se utiliza la misma notación (un número dentro de un cuadrado) que ya vimos en capítulos anteriores.

   Veamos, por ejemplo, la matriz para algunas palabras en inglés y castellano:











     Un elemento importante que cuelga de SYNSEM es la característica HEAD que, por sí misma, es otra matriz completa de atributos . O información sobre el especificador SPR o el complemento COMP. Por ejemplo:



     En HSPG se distingue ente núcleos sustanciales y núcleos funcionales. Los primeros contribuyen sustancialmente a las semántica de los signos en los que están incluidos (equivale a las categorías mayores en otras gramáticas). Las categorías sustanciales incluyen siempre dos rasgos particulares: MOD (que expresa la modificación entre núcleo y adjunto) y PRD (predicativo).

   Los núcleos funcionales pueden ser determinantes (artículos, etc) o marcadores (comparativos, completivos, etc).

   Los signos para sintagmas incluyen el atributo DTRS (Daugthers features)que sirve para representar la estructura de constituyentes hijos del sintagma:



    Este signo se suele descomponer en diferentes tipos de “hijos” como HEADS, COMPS, SPECS y ADJUNTOS. Una matriz de este tipo puede ser:



Seguir leyendo aquí.

Entrada publicada por Félix Remírez en Biblumliteraria


Share/Save/Bookmark

viernes, 4 de junio de 2010

Lingüística computacional (VII)




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



Como ya vimos en capítulos anteriores, la clasificación de Chomsky de las gramáticas situaba a las de libres de contexto (de tipo 2) en un orden inferior a las transformacionales ya que, según él, no permitían la generación de todas las oraciones de los idiomas naturales y no permitían capturar generalizaciones.

Los trabajos de Pullum y Gazdar vinieron a contradecir este concepto. Hicieron ver que no existían pruebas de que frases de las lenguas naturales no pudieran ser descritas con gramáticas libres de contexto y, cuando menos, que la enorme mayoría de las expresiones podían generarse con las mismas. Siendo las gramáticas libres de contexto más sencillas de tratar informáticamente, el que eventualmente algún extraño caso quedara fuera de las mismas no disminuía su valor práctico.

Una de las primeras gramáticas libres de contexto desarrolladas fue la Generalized Phrase Structure Grammar o GPSG que en español suele denominarse Gramática de estructura sintagmática generalizada

GPSG rechaza los dos niveles, profundo y superficial, que propugnaban las gramáticas transformacionales que para esta teoría no dejan de ser cábalas no justificadas científicamente. Es por lo tanto, monoestratal. Cada oración tiene una única representación sintáctica. Para explicar la enorme casuística del idioma, Gazdar, Gunji y Pullum recurrieron a introducir la recursividad, es decir, en vez de definir el lenguaje mediante una serie de reglas fijas y transformaciones, se establecen una serie de principios que describen las generalizaciones posibles. En concreto, GPSG crea el formato ID/LP (Inmediate Dominance, Lineal Precedence) e introduce las metarreglas, un concepto que llegaba de los sistemas expertos de la inteligencia artificial. La gramática GPSG adopta la Teoría X-barra que ya hemos visto en capítulos anteriores.

A diferencia de las gramáticas transformacionales que defendían una innata capacidad sicológica para le lenguaje y una norma universal subyacente en todos los idiomas, la GPSG rechaza toda interpretación neuronal y hace énfasis en el lenguaje formal que describe la gramática que constituye, de hecho, el elemento universal más que una gramática innata.


ID/LP

En español se denomina como formato Dominio inmediato/Precedencia lineal.

Se define Dominio Inmediato como la relación existente entre un nodo del árbol sintáctico y sus nodos hijos que están inmediatamente debajo de él. Su nomenclatura es:


A -> B, C, D ( y se admite que alguno de los componentes de la derecha pueda no existir)

Que gráficamente equivaldría a:

Las reglas ID especifican los términos de una oración y las relaciones de dominancia entre ellas.

Se define Precedencia lineal como el orden posible entre categorías hermanas, es decir entre las que aparecen en un nivel del árbol. Se nombra con el símbolo “<”: A<B (A precede a B)

La precedencia lineal no está ligada a reglas concretas sino que es válida para toda la gramática.

Expliquemos cómo afectaría una regla LP a una ID . Sea la regla GPSG:

A->B,C,D (por ejemplo SN-> DET, N, Adj

Con esta reglas podemos crear seis árboles que corresponden a las posibles permutaciones de los componentes del lado derecho de la regla.



Primero, vemos que respecto a otro tipo de gramáticas hemos conseguido una simplificación notable ya que esa sola regla sustituye a seis. Pero, además, es evidente que la regla es tan potente que genera oraciones cuyo orden es incorrecto. ¿Cómo limitarla? Con las reglas LD. Si, por ejemplo, tenemos, una regla LD del tipo:

B<C

Que recordemos se aplicaría a todas las reglas generadas desde el nivel ID. Como, de acuerdo a esta última regla LD, “B” siempre debe preceder a “C” , los únicos árboles válidos serán estos tres:




Apliquemos estos conceptos. Sea la regla ID:

SN-> Art, N, Adj, SP, OREL

y las reglas LD:

N<SP
N<OREL


Observamos que estas tres reglas nos producen muchas oraciones válidas (que antes habría que haber escrito una a una), como:



SN->Art+N

SN->Art+N+Adj

SN->Art+N+OREL

Pero es que además, permite el sintagma nominal:

SN->Art+Adj+N+Adj ya que se permite la ubicación de los componentes en cualquier lugar siempre que lo permitan las reglas de precedencia lineal. Y en el ejemplo no hay ninguna regla LD que diga que no puede haber un adjetivo antes que el nombre

Y, claro, no permite, por ejemplo:

SN->SP+N+Adj


Se observa que esta forma de definir la gramática sí está permitiendo generalizaciones. Que el nombre deba preceder a la oración de relativo (en el ejemplo) es una generalización que puede aplicarse a cualquier otra regla sin necesidad de escribir todas las combinaciones posibles,

Las metarreglas

Las metarreglas son reglas que reflejan generalizaciones sobre las relaciones entre estructuras. Una metarregla proyecta un conjunto de reglas ID sobre otro conjunto.

Supongamos, por ejemplo, que tenemos un conjunto de de reglas que generan las oraciones activas. Podemos tener, asimismo, otro conjunto de reglas que generan esas mismas oraciones en pasiva. Ahora bien, si analizamos ambos conjuntos veremos que muchos des sus constituyentes se repiten y que, muchas veces, sólo cambia el orden o pequeños detalles. Entonces, en vez de tener dos conjuntos complejos podríamos disponer de sólo el conjunto que describe la voz pasiva y definir unas metarreglas externas que indiquen cómo se construye la reglas pasivas desde las reglas activas, sin necesidad de duplicarlas.
Las metarreglas no son transformaciones. Aquellas proyectan reglas sobre reglas; estas describen el paso de una sentencia a otra.

Un ejemplo de esto es el tratamiento de las pasivas en inglés:

John sells a book
A book is sold by John


SV-> X, SN

SV(PASIVA)-> X, (“by”, SV)


O lo que es lo mismo: si existe una regla que define el sintagma verbal transitivo activo como una serie de componentes X seguido de un sintagma nominal, entonces la metarregla dice que habrá un sintagma verbal pasivo que tome esa misma serie de componentes y las haga eventualmente seguir por “by” y el sintagma verbal, para formar la pasiva. Así, de He sells the book” podríamos llegar a The book is sold by him

Instanciación

La instanciación de rasgos, tal como se entiende en GPSG, establece la relación existente entre árboles locales y reglas ID. No hay que confundirla con la unificación que vimos en un capítulo anterior aunque se le parece. La instanciación asigna rasgos a las categorías de un árbol siempre que no se violen otras reglas de la gramática.

El rasgo HEAD

En español, se le suele llamar Núcleo. Se trata de la categoría que rige la oración. Del núcleo se traspasan rasgos hacia arriba en el árbol. A la hora de interpretar una regla ID es vital determinar cómo se relacionan los rasgos de las categorías madres con los de las categorías hijas. Por ejemplo, las características de un sintagma nominal vienen determinadas en gran medida por los rasgos del nombre (núcleo nominal); las de un sintagma verbal por los rasgos de su verbo, etc. Así.


Cabría pensar que, para cada regla, sería preciso definir estas matrices que determinan qué rasgos se comparten. Esto sería muy engorroso de tratar informáticamente y, por ende, precisaría una gran cantidad de memoria.

La gramática GPSG toma a este núcleo como un rasgo complejo especial (al que llamaremos HEAD) que contenga todos esos rasgos esenciales podremos generalizar diciendo que para todo sintagma los rasgos de su núcleo deben ser compartidos entre el nodo madre y los nodos hijos. Nos ahorraremos así tener que rescribir cada uno de ellos. El núcleo determinará el resto, esté explicitado o no.

GPSG define que los valores de los rasgos en HEAD del nodo núcleo tienen que coincidir con los valores de los rasgos respectivos en HEAD del nodo madre. Es lo que se llama Convención del rasgo HEAD. O dicho de un modo simplificado, en una regla que termine el sintagma nominal SN-> DET,N en donde la categoría N tiene unos rasgos determinados (es sustantivo, no es verbo, caso nominativo, número plural, género femenino, etc), la categoría madre SN tendrá exactamente las mismas especificaciones de rasgos que el núcleo N.

El rasgo complejo HEAD suele contener los rasgos de concordancia y de tiempo entre otros. Esta convención impone la identidad por defecto pero pueden existir otras reglas o metarreglas que hagan que la convención pueda no cumplirse. Es decir, es por defecto, secundaria respecto a otras directivas.

Llamemos al núcleo H (de HEAD) y supongamos las reglas:

O->SN, H[-SUBJ] (el rasgo SUBJ define si puede ser sujeto (+) o no puede serlo (-))

SN->DET, H
N->H


La regla O[+PLU]->SN[+PLU], H[-SUBJ, +PLU] sería correcta porque por un lado hereda los rasgos del head y por otro es coherente en el rasgo PLU, pero la regla O[-SUBJ]->SN, H[-SUBJ] sería incorrecta porque el rasgo del núcleo se instancia hacia arriba y sólo puede serlo hacia abajo.

Existen, en GPSG, restricciones a la forma en que los rasgos se instancian. Por ejemplo, se tiene el FCR (Feature co-occurence Restriction) y el FSD (Feature Specification Default). Unas restricciones de este tipo podrían ser:

FCR1: [VFORM] <- [+V,-N], lo cual es obvio ya que un rasgo verbal debe referirse a un verbo. O bien FCR4: [NFORM]<-[-V,+N] ya que un rasgo que afecte al nombre deberá estar relacionado con él y, por ejemplo, se restringirá la instanciación de rasgos como el tiempo verbal.


El léxico en GPSG

GPSG asume que una entrada léxica debe contener información sobre las forma fonológica, la categoría sintáctica, el significado y las formas amorfas existentes. Para empezar, GPSG asume que las categorías principales sintácticas pueden ser expresadas por la combinación de dos rasgos (features) llamados nominal y verbal del modo siguiente:


GPSG define una treintena de rasgos fundamentales (N, V, PER, CASE, COMP, ADV. AUX, SLASH, SUBCAT, VFORM, WH, POSS; NULL, NEG, GER, etc) que se reservan para determinar cada entrada léxica y que, para entendernos, vienen a ser como las palabras reservadas de un lenguaje de programación de ordenadores (recordemos, por ejemplo, en BASIC las palabras GOTO, PRINT, REM, END, WRITE, OPEN…). Queda fuera de este post explicar cada uno de ellos.

Por ejemplo, una forma de expresar las entradas léxicas de manera entendible por una computadora sería:

<vender, [[-N][+V][BAR 0][SUBCAT 1]],{}, ‘vender’>
<libro, [[+N][-V][BAR 0][SUBCAT 3]],{},’libro’>
<dar,[[-N][+V][BAR 0][VFORM BSE][SUBCAT 3]],’dar’>


Dependencias a larga distancia

GPSG puede dar también cuenta de las dependencias a larga distancia. Estas dependencias se controlan por los rasgos SLASH; WH y RE y con el principio FFP (Foot Features Principle) similar a la Convención Head pero siendo el
foot transmitido des los nodos adyacentes al núcleo.

Críticas a la GPSG

Actualmente, bastantes autores critican la gramática GPSG como no suficientemente potente para describir las lenguas naturales. Así, Berwick, Weinberg, Ristad, Barto, etc. O González Escribano cuando que escribe en términos generales, no parece que hoy por hoy la GPSG pueda ser seriamente considerada como una alternativa viable al paradigma chomskiano, pese al indudable atractivo preliminar […] el formato ID+LP no es siquiera una estrategia descriptiva eficiente para lenguas como el español


No obstante, la GPSG ha producido interesante software.


To be continued….









Share/Save/Bookmark

sábado, 22 de mayo de 2010

Lingüística computacional (V)



(El capítulo anterior de esta serie puede leerse
aquí)




La teoría X-barra en las oraciones

Hasta ahora hemos analizado frases sencillas que se expresaban de forma bastante inmediata en un árbol x-barra. Pero, ¿qué ocurre con oraciones más complejas como las de relativo, del tipo Él leyó que su empresa estaba en ruina.?

Esta frase puede expresarse introduciendo un sintagma complementario SC o, lo que es igual, un nivel denominado nivel CP (en su notación inglesa. En castellano, a veces, se denomina complementizador o complementante) del modo:





Donde “que” es el núcleo en esa subcategoría.

Una frase más compleja como yo anhelo que Marta haya venido podría expresarse también por un árbol x-barra, por ejemplo como:




La gramática GB

La gramática Government and Binding fue desarrollada por Chomsky a principios de los años 80 del siglo pasado. Se ha traducido al español por Gramática de la Rección y el ligamiento, abreviándose en ocasiones como gramática RL. Explicar suficientemente la teoría GB requeriría muchos posts como este y, aún así, quedaría mucho por desarrollar (y, nuevamente como señalé en algún capítulo anterior, una explicación profunda queda fuera de mis conocimientos). Daré, pues, sólo unas breves ideas fundamentales

GB parte de la misma estructura que la teoría TGC estándar, es decir asume la existencia de unas reglas universales que se manifiestan en una estructura profunda del lenguaje (d-structure o p-structure) y una estructura superficial (s-structure) a la que se llega mediante transformaciones. Tal como se ve en la figura (y tal como vimos en el capítulo 3 de esta serie) el léxico contiene las propiedades de cada unidad de lenguaje. Estas unidades se combinan en la estructura profunda y, mediante transformaciones, se mapean en la estructura superficial que determina la forma de la frase. Esta estructura superficial aflora al exterior mediante dos subsistemas: el fonológico y el lógico que determina la semántica.



Explicado así, la gramática GB poco diferiría de la TGC. Pero, veamos algunas reglas:

O-> SN+SV
SV-> V+SN+SP

Que generarían frases del tipo:

Juan da un libro a mi vecino

Sin embargo, en español, no podríamos decir Juan da un libro a mi vecino a mi amigo que correspondería a la regla SV->V+SN+SP+SP

Asimismo, podemos tener la frase Un vecino de Juan salió a la calle que es correcta pero no podríamos decir Juan un vecino de salió a la calle. En base a ello, la regla O->SN+SP+SV+SP es correcta pero la regla del tipo O->SN + SN + SP + SV+ SP no lo es.

¿Por qué la segunda regla no es admisible y la primera sí? En la teoría TGC deberíamos establecer todas las posibles transformaciones que dieran como fruto las frases gramaticalmente correctas y que, además, excluyeran las no correctas. Esta plétora de transformaciones se hace rápidamente inmanejable, en muchos casos es contradictoria entre idiomas y, en cualquier caso, es casi imposible de computar por un ordenador.

La teoría GB intenta dar una solución a esta explosión exponencial asumiendo que sólo existe una transformación que está limitada por restricciones implícitas en el léxico.

Así, la gramática GB propugna un tipo de transformación llamada movimiento alfa (Move-alpha) única y transfiere la responsabilidad de que con esta transformación no pueda hacerse cualquier cosa a las restricciones, en vez de multiplicar dichas transformaciones. Una importante particularidad es que esta transformación da cuenta del paso entre la estructura profunda y superficial y también, ella misma, entre esta y el módulo lógico tal como se ve en la figura anterior. La transformación move-alpha permite que cualquier cosa se mueva a cualquier lugar siempre que no contradiga el sistema de restricciones existente. En realidad, por el principio de proyección, ya visto, las características deben mantenerse a lo largo de toda la cadena de modo que las transformaciones pueden partir directamente de la estructura superficial y obviarse la diferencia entre la estructura profunda y la superficial.

La teoría GB se fundamente en dos subteorías que definen dos tipos de restricciones muy importantes: la rección y el ligamiento.


Continuar leyendo en
Biblumliteraria



Entrada publicada por Félix Remírez

Share/Save/Bookmark

viernes, 7 de mayo de 2010

Lingüística computacional (III)



(El capítulo anterior de esta serie puede leerse
aquí)


La búsqueda de gramáticas que describieran formalmente el lenguaje tomó impulso con los trabajos de Noam Chomsky (en la fotografía superior) en los años cincuenta y sesenta del siglo XX.

Hasta entonces, la gramática era descriptiva. Las técnicas del análisis sintáctico definían cada componente de la frase pero no se abordaba la cuestión fundamental: ¿Cómo el hablante ha conseguido crear una frase correcta, incluso cuando jamás antes ha escuchado la misma?. Un asunto que, como señalaba Chomsky, era algo auténticamente misterioso. Chomsky se percató, también, de que el individuo es capaz de generar infinitas frases diferentes a partir de un conjunto finito de palabras y construcciones fundamentales. De hecho esta capacidad es el fundamento de la literatura. Como hablantes o escritores no nos limitamos a repetir frases que ya hemos escuchado, sino que las creamos en función de las necesidades de cada momento. Y, a la inversa, como oyentes, sabemos que son correctas y entendemos las oraciones que los otros enuncian, o escriben, a pesar de no haberlas leído o escuchado antes.

Estas reflexiones condujeron a desarrollar gramáticas que ya no eran explicativas sino que debían dar cuenta de la generación de oraciones correctas, es decir condujeron a las gramáticas generativas. Asimismo, introdujo una visión conceptual muy distinta sobre el lenguaje. Mientras que, hasta Chomsky, predominaba la idea de que la mente del niño era una pizarra en blanco que iba llenándose con los modelos que escuchaba a su alrededor (visión conductista del lenguaje), Chomsky afirma que debe existir un conocimiento formal, previo a la experiencia, que permite al cerebro manejar la lengua correctamente aún cuando no haya oído la gran mayoría de las frases posibles con anterioridad. También, todo esto implicaba que la gramática podía dejar de estudiar extensos corpus de una lengua para centrarse en las reglas internas inherentes.

En los años sesenta del siglo pasado se asiste a una revolución en cómo se entiende el lenguaje y la gramática. El propio Chomsky desarrolla el primer modelo – llamado estándar- que rápidamente se ramifica en otros varios. Desde entonces, se han desarrollado muchos otros, entre los que se pueden destacar:

Gramáticas generativas o sintagmáticas

Estas se pueden subdividir en dos grandes grupos, como son las gramáticas de transformación y las de unificación y rasgos.

- Gramáticas de estados finitos.
- La teoría estándar (ST o TGG) y la estándar extendida basadas en las ideas iniciales de Chomsky.
- La teoría minimalista (MP).
- La teoría GB (Government and Binding), traducida al español de forma un tanto forzada, por teoría de rección y ligamiento.
- Semántica generativa (GS).
- La gramática relacional (RG).
- La gramática APG (Arc Pair gramar).
- La gramática LFG (Lexical- functional Grammar).
- La gramática GPSG (Generalised Phrase Structure Grammar) o gramática de estructura sintagmática generalizada.
- La gramática HPSG (Head driven Phrase Structure Grammar) p gramática sintagmática nuclear.
- Gramática FUG(Functional Unification Grammar)
- Gramática TAG (Tree-adjoining grammar).
- Gramáticas IG (Indexed Grammars).


Gramáticas estocásticas

- Gramática OT (Optimality Theory).
- Gramática SCFG.


Gramáticas de dependencias

- Sintaxis algebraica.
- Gramática de las palabras.
- Gramática operativa.


Gramáticas funcionalistas

- Gramática funcional.
- Gramática de Praga.
- Gramática cognitiva.
- Gramática funcional sistémica.
- Gramática constructivista.
- Gramática de rol.


Queda fuera del alcance de estos posts el profundizar en cada una de ellas (y, con seguridad, más allá de mis conocimientos) pero podremos indicar algunos conceptos básicos.


La jerarquía de Chomsky

Chomsky definió la jerarquía de gramáticas del siguiente modo:

Gramáticas del tipo 0

Son aquellas que no tienen ninguna restricción y que engloban a todas las demás. Permiten toda clase de flexibilidades expresivas, recursividad, frases complejas, solventan la ambigüedad, etc.

Gramáticas del tipo 1

Son gramáticas que permiten reglas de formación del tipo

aAb -> agb

donde A es un elemento no terminal (es decir que requiere ser desglosado en subtérminos como le puede ocurrir, por ejemplo, a un SN) y las letras minúsculas son o no son terminales. "g" debe ser no vacío.

Este tipo de gramáticas del tipo 1 se llaman dependientes del contexto porque, - a partir de la ecuación que define la regla-, A puede ser sustituido por g si y sólo si A y g están acompañadas por a por la izquierda y b por la derecha (no existe la propiedad conmutativa). Es decir, no siempre puede darse la sustitución sino sólo en ciertos contextos.

Gramáticas del tipo 2

Son gramáticas que permiten reglas de formación del tipo

A->g

Donde A es un elemento no terminal y g es una cadena combinada de términos terminales y no terminales (por ejemplo, “N SV SP”).

Estas gramáticas del tipo 2 se llaman independientes del contexto porque como se observa, – a partir de la ecuación que define la regla-, A puede ser sustituido por g cualquiera que sea lo que lo rodea (de hecho, no hay nada rodeando a la cadena).

Gramáticas del tipo 3

Son gramáticas que permiten reglas de formación del tipo

A->tB
A->t

Donde las letras mayúsculas (A, B) indican elementos no terminales (es decir que requieren ser subdivididas en otros elementos ) y las minúsculas indican elementos terminales (que ya no requieren subdivisión).

Estas gramáticas de tipo 3 se llaman regulares y son las que pueden ser evaluadas por un algoritmo sencillo del tipo autómata finito.


Gráficamente, las gramáticas de tipo 0 engloban a las del tipo 1, estas a las del 2 y así sucesivamente.

Ni que decir tiene que las más sencillas de implementar en un ordenador son las del tipo 3 y las más complicadas las del tipo 0.



Hoy en día se piensa que las gramáticas del tipo 2, independientes del contexto, son suficientes para analizar y generar una amplia cantidad de casos que aparecen en una lengua sin necesitar recurrir a gramáticas superiores mucho más complejas y, por ello, han recibido un alto grado de atención y desarrollo.

Gramáticas de estados finitos

También llamadas gramáticas de cadenas de Markov, redes de transición o gramáticas regulares. Son las más sencillas, como se ha visto en la jerarquía anterior. Se trata de gramáticas que pueden ser plasmadas en algoritmos sencillos secuenciales (máquina de estados finitos) en un ordenador y que se fundamentan en ir recorriendo una cadena de reglas, cumpliéndolas hasta dar con una frase generada correcta.

En estas gramáticas, como dijimos, las reglas son del tipo:

A->tB
A->t

Donde las letras mayúsculas (A, B) indican elementos no terminales (es decir que requieren otro elemento posterior) y las minúsculas indican elementos terminales (que ya no requieren nada después). Por ejemplo, una regla de este tipo sería:

O->"una" NON

El programa iniciaría su búsqueda de frases con “una” y buscaría después una regla NON que forzosamente ha de seguirla.

Veamos un conjunto de reglas de una gramática de este tipo, a título de ejemplo:

O->una NOM
NOM-> mujer VER
NOM-> vaca VER
VER -> muge END
VER-> habla END
END ->

Este conjunto de reglas puede también plasmarse mediante un grafo:



¿Cómo funcionaría un ordenador generando frases con esta gramática de estados finitos?

Supongamos que introducimos la primera semilla, “una”.

El algoritmo encontraría que en su base de datos hay reglas que permiten comenzar por la palabra “una”. Arrancaría el proceso, llegaría al primer nodo (NOM) y encontraría dos rutas a seguir, añadiendo “mujer” y “vaca” a la frase que está construyendo. Continuaría su recorrido y llegaría al nodo VER en donde volvería a encontrar dos ramales y podría generar:

Una mujer habla
Una vaca muge
Una mujer muge
Una vaca habla


Ya vemos que un ordenador dejado al albur de un algoritmo tan sencillo puede generar muchas frases lícitas pero también muchas ilícitas por lo que pecaría de sobregeneración. Además, si la semilla inicial hubiese sido “un”, el algoritmo se hubiera detenido nada más comenzar al no hallar regla alguna que empezara con “un”.

Es evidente que los grafos pueden ser mucho más complejos y no limitarse a dos ramales por nodo. Por ejemplo:




Una red de este tipo puede llegar a ser realmente amplia e intratable para un ser humano. Pero para un ordenador es precisamente una tarea idónea que se puede calcular en microsegundos.

Los algoritmos de este tipo no pueden procesar la recursividad que vimos en el capítulo anterior ya que, una vez situados en un nodo, deben seguir hacia adelante sin ser capaces de evaluar cuántas veces se ha de retroceder. Asimismo, tienen dificultades para tratar oraciones que no están secuencialmente ligadas, como son las de relativo.

Aunque desde un punto de vista teórico estas gramáticas tienen demasiados puntos débiles al no poder categorizar muchas posibles estructuras gramaticales, son ampliamente usadas dado que, en la práctica, el habla cotidiana se ciñe precisamente a estructuras sencillas. La aplicación de este tipo de programas en el análisis morfológico es ya común y puede presentar resultados razonables.

Evidentemente, si pensamos en literatura digital de calidad, necesitaríamos precisamente sentencias menos comunes, más elaboradas, ricas, y esta gramática se nos quedará corta.


Seguir leyendo en
Biblumliteraria


Entrada publicada por Félix Remírez



Share/Save/Bookmark
Related Posts Plugin for WordPress, Blogger...