Ad verba per numeros

Desarrollo de corpora comparables, Hojas de ruta
Monday, May 28, 2007, 02:32 PM
A los que sigis con cierta asiduidad este blog os debe sonar ya este artculo, se trata de una tcnica para la creacin de bilxicos (lxicos bilinges) a partir de un corpus comparable y un lxico semilla inicial.

Hasta el momento se han estudiado las bases de la tcnica, fundamentalmente la determinacin de co-ocurrencias y el modo de calcular la asociacin entre los dos trminos de una de tales co-ocurrencias.

Dichas co-ocurrencias se almacenaban en una tabla de tal modo que cada fila corresponda a un trmino del corpus y cada columna con un trmino del lxico inicial. As, cada celda contendra el peso de la asociacin entre el trmino del corpus y el del lxico.

Si tomamos una de tales filas tendremos un vector, en la terminologa de Rapp un "vector de asociacin"; si podemos determinar qu vector de asociacin del idioma A se parece ms a un vector de asociacin del idioma B podramos afirmar que el trmino correspondiente a la fila en el idioma A se corresponde con el del idioma B.

Vemoslo con un ejemplo; supongamos que el lxico semilla para el idioma A es {computer, language, programming, compiler}, el lxico semilla para el idioma B es {ordenador, lenguaje, programacin, compilador}.

Supongamos ahora que un vector de asociacin para el idioma A es el siguiente: assembly: {63.900.000, 71.800.000, 36.100.000, 1.280.000}

Supongamos que hemos aplicado la frmula para transformar estos "contadores de co-ocurrencias" y obtenemos lo siguiente (atencin! son valores ficticios): assembly: {0.88, 0.96, 0.91, 0.81}

Rapp indica, adems, que los vectores deben normalizarse de tal modo que la suma de todos sus pesos sea 1, en este caso: assembly: {0.25, 0.27, 0.25, 0.23}

Ahora imaginemos que uno de los vectores del idioma B es el siguiente: ensamblador: {90.300, 240.000, 348.000, 75.800}

Al transformarlo (atencin! nuevamente valores ficticios) obtenendramos algo como: ensamblador: {0.66, 0.72, 0.72, 0.79}. Tras normalizarlo se tendra: ensamblador: {0.23, 0.25, 0.25, 0.27}

La cuestin entonces sera, cunto se parecen los vectores ensamblador y assembly? Para ello hay que seleccionar una medida de similitud/distancia y Rapp afirma que la que mejores resultados ofrece es la denominada city-block por lo que ser esa la que habr que implementar. En el caso del ejemplo la distancia empleando esta medida es 0.08 que es una distancia bastante pequea.

Pero claro, esto ha sido un ejemplo "amaado", qu distancia habra frente a otro trmino?, por ejemplo intrprete; veamos... intrprete: {363.000, 974.000, 826.000, 105.000} que tras transformarse y normalizarse quedara en: intrprete: {0.24, 0.25, 0.25, 0.26}. La distancia en este caso sera 0.06, dicho de otro modo, podramos obtener una lista tal que as:

assembly	intrprete	0.06
assembly ensamblador 0.08
...
Pero la asociacin est mal... Lo s, pero hay que tener en cuenta que he usado valores ficticios y, adems, nadie dijo que fuese a salir perfecto; Rapp obtuvo un 65% de traducciones "perfectas" y un 72% de traducciones aceptables as que es de esperar obtener resultados anlogos.

Rapp no entra en detalles sobre una implementacin eficiente pero en nuestro caso una implementacin trival (comparar todos los vectores del idioma A con todos los del idioma B) no parece razonable. Una idea que se me ocurre es la siguiente, puesto que deseamos obtener las listas de palabras que ms se parecen (o lo que es lo mismo aquellas cuya distancia es menor) se puede limitar el nmero de vectores a comparar de una forma sencilla: (1) buscar en el vector de asociacin del trmino del idioma A el peso mayor, llamemos w al peso y t al trmino del lxico que tiene dicho peso; (2) determinar un intervalo [w-umbral, w+umbral]; (3) determinar qu vectores del idioma B tienen para el trmino correspondiente a t un peso perteneciente a [w-umbral, w+umbral]; (4) calcular la distancia entre el vector del idioma A y los vectores del idioma B descubiertos en el paso 3.

En el ejemplo de assembly, el peso mayor es 0.27 que se corresponde con language, si el umbral fuese de 0.1 habra que buscar aquellos vectores que tienen un peso comprendido entre 0.17 y 0.37 para el trmino lenguaje.

En resumen, una vez obtenidos los pesos de asociacin entre trminos para ambos idiomas es necesario normalizarlos (teniendo en cuenta que los pesos pertenecen a un vector de asociacin) e implementar un algoritmo que para cada trmino del idioma origen ofrezca una lista de trminos del idioma B ordenados por distancia ascendente.



Next