2012-03-06 6 views
6

He estado trabajando en el análisis semántico latente últimamente. Lo he implementado en Java haciendo uso del paquete Jama.¿Cómo decidimos el número de dimensiones para el análisis semántico latente?

Aquí está el código:

Matrix vtranspose ; 
    a = new Matrix(termdoc); 
    termdoc = a.getArray(); 
    a = a.transpose() ; 
    SingularValueDecomposition sv =new SingularValueDecomposition(a) ; 
    u = sv.getU(); 
    v = sv.getV(); 
    s = sv.getS(); 
    vtranspose = v.transpose() ; // we obtain this as a result of svd 

    uarray = u.getArray(); 
    sarray = s.getArray(); 
    varray = vtranspose.getArray(); 
    if(semantics.maketerms.nodoc>50) 
    { 

     sarray_mod = new double[50][50]; 
     uarray_mod = new double[uarray.length][50]; 
     varray_mod = new double[50][varray.length]; 
     move(sarray,50,50,sarray_mod); 
     move(uarray,uarray.length,50,uarray_mod); 
     move(varray,50,varray.length,varray_mod); 
     e = new Matrix(uarray_mod); 
     f = new Matrix(sarray_mod); 
     g = new Matrix(varray_mod); 
     Matrix temp =e.times(f); 
     result = temp.times(g); 

    } 
    else 
    { 
     Matrix temp = u.times(s); 
     result = temp.times(vtranspose); 
    } 
    result = result.transpose(); 
    results = result.getArray() ; 

    return results ; 

Pero ¿cómo determinar el número de dimensiones? ¿Existe un método para determinar el número de dimensiones a las cuales se debe reducir el sistema para obtener los mejores resultados? ¿Qué otros parámetros consideramos para el rendimiento efectivo de LSA?

Respuesta

12

En cuanto a la elección del número de dimensiones:

1) http://en.wikipedia.org/wiki/Latent_semantic_indexing:

Otro reto para LSI ha sido la presunta dificultad de determinar el número óptimo de dimensiones a utilizar para realizar el SVD. Como regla general, menos dimensiones permiten comparaciones más amplias de los conceptos contenidos en una colección de texto, mientras que un mayor número de dimensiones permite comparaciones de conceptos más específicas (o más relevantes) . La cantidad real de dimensiones que puede ser utilizada está limitada por la cantidad de documentos en la colección. La investigación ha demostrado que alrededor de 300 dimensiones proporcionarán generalmente los mejores resultados con colecciones de documentos de tamaño moderado (cientos de miles de documentos) y quizás 400 dimensiones para documentos más grandes colecciones (millones de documentos). Sin embargo, estudios recientes indican que 50-1000 dimensiones son adecuadas dependiendo del tamaño y naturaleza de la colección de documentos.

Comprobando la cantidad de varianza en los datos después de calcular el SVD puede usarse para determinar la cantidad óptima de dimensiones para retener. La varianza contenida en los datos se puede ver trazando los valores singulares (S) en un diagrama de scree. Algunos profesionales de LSI seleccionan la dimensionalidad asociada con la rodilla de la curva como el punto de corte para el número de dimensiones que se deben retener. Otros argumentan que se debe retener alguna cantidad de la varianza , y la cantidad de varianza en los datos debe dictar la dimensionalidad adecuada para retener. El setenta por ciento a menudo se menciona como la cantidad de varianza en los datos que se debe usar para seleccionar la dimensionalidad óptima para que vuelve a calcular la SVD.



2) http://www.puffinwarellc.com/index.php/news-and-articles/articles/33-latent-semantic-analysis-tutorial.html?showall=1:

El truco en el uso de SVD está en encontrar la manera de muchas dimensiones o "conceptos" para usar cuando se aproxima a la matriz. Demasiadas dimensiones y los patrones importantes se omiten, demasiados y ruido causado por selecciones de palabras al azar volverán a entrar. El algoritmo SVD es un poco complicado, pero afortunadamente Python tiene una función de biblioteca que lo hace fácil de usar. Al agregar el método de una línea a continuación a nuestra clase de LSA, podemos factorizar nuestra matriz en otras 3 matrices .La matriz U nos da las coordenadas de cada palabra en nuestro espacio "concepto", la matriz Vt nos da las coordenadas de cada documento en nuestro espacio "conceptual", y la matriz S de valores singulares nos da una pista sobre cuántas dimensiones o "conceptos" necesitamos incluyen.

def calc(self): self.U, self.S, self.Vt = svd(self.A)

Para elegir el número correcto de las dimensiones de utilizar, podemos hacer un histograma del cuadrado de los valores singulares. Esto representa la importancia de cada valor singular de para aproximar nuestra matriz. Aquí está el histograma en nuestro ejemplo.

enter image description here

Para grandes colecciones de documentos, el número de dimensiones utilizado es en el intervalo de 100 a 500. En nuestro pequeño ejemplo, dado que queremos graficar , usaremos 3 dimensiones, arrojaremos la primera dimensión y graficaremos la segunda y tercera dimensiones.

La razón por la que tiramos la primera dimensión es interesante. Para los documentos , la primera dimensión se correlaciona con la longitud del documento . Para las palabras, se correlaciona con el número de veces que se ha utilizado la palabra en todos los documentos. Si hubiéramos centrado nuestra matriz, por restando el valor de columna promedio de cada columna, entonces usaríamos la primera dimensión. Como analogía, considere los puntajes de golf. No queremos saber el puntaje real, queremos saber el puntaje después de restándolo del par. Eso nos dice si el jugador hizo un birdie , carretón, etc.



3) Landauer, TK, Foltz, PW, Laham, D., (1998), 'Introducción a la semántica latente Análisis ', Discurso Procesos, 25, 259-284:

enter image description here

Cuestiones relacionadas