Mi último semestre de la carrera estuvo lleno de nuevas experiencias personales y académicas, de las cuales aprendí bastante. Fue en éste periodo que conocí algunos fundamentos de la lingüistica computacional, el tema de procesamiento de lenguaje natural siempre me ha llamado la atención y por eso fue que decidí inscribir dos materias relacionadas. Uno de los temas más importantes dentro del procesamiento de lenguaje es la creación de resúmenes automáticos, mi proyecto final fue crear un software que pudiera llevar a cabo dicha tarea, usando una técnica llamada ENTERTEX, la cual es una técnica que usa métodos estadísticos para determinar qué tan relevante es una frase dentro de un texto, una vez que se tienen las “relevancias” de cada frase, se puede crear un resumen mediante un filtrado tomando en cuenta el número de frases, la relevancia deseada y algún otro filtro como puede ser, una “temática”. En general, las entradas que se necesitan para realizar un resumen cualquiera son:
- Un conjunto de textos de donde se hará el resumen
- Un número máximo de frases que conformarán el resumen
- Un grado de relevancia respecto a una temática elegida
- Un conjunto de frases que se desean filtrar
Un buen resumidor automático debería tener las siguientes características:
- Crear un resumen entendible para el ser humano
- Con una capacidad de realizar operaciones de manera rápida
- Crear un resumen en orden cronológico, y con orden secuencial
Tomando en cuenta la metodología del modelo ENERTEX, las operaciones para realizar un resumen automático son únicamente matriciales, con un poco más de detalle, se debe generar una matriz en la que se tengan todas las palabras que conforman el corpus de documentos como columnas, y como filas, un índice que represente a cada una de las frases del corpus. La matriz se llena con unos y ceros, por ejemplo, si la frase 5[fila] contiene la palabra 6[columna], se coloca un uno en [5][6], si no la contiene, se coloca un cero. Una vez que la matriz fue llenada con unos y ceros, se procede a realizar la siguiente operación matricial (y es aquí donde se debe tomar en cuenta un mecanismo de paralelismo para acelerar el procesamiento ya que la matriz para un corpus de tamaño considerable puede llegar a tardar un buen rato):
A=(A*A’)^ 2
Una vez que la operación haya sido realizada, para cada frase, se suma cada valor de las palabras que corresponden a dicha fila, con lo cual se obtiene una frecuencia de cada frase. A mayor frecuencia, es mayor la relevancia que tiene la frase, con lo cual se puede comenzar a generar el resumen.
Otra de las cosas que me llevo de éste semestre es haber aprendido a programar en lenguaje PERL, lo cual realmente me fascinó, es un lenguaje muy flexible, y que es muy apropiado para realizar procesamiento de lenguaje natural. Mi resumidor lo hice en PERL y una pequeña parte en BashScript, el método que usé lo describo a continuación.
La implementación no toma en cuenta el paralelismo por lo que el procedimiento puede llegar a tardar un poco dependiendo del tamaño del corpus. La implementación que yo realicé la pueden descargar de aquí:
En el comprimido hay una carpeta llamada doc, donde pueden encontrar un documento con los detalles de implementación, ejecución, archivos de entrada, etcétera.
En general, el método funciona bastante bien, un update que podría ser realizado seria la paralelización del procesamiento. Si tienen dudas o comentarios, no duden en postearlos.