Modelado de temas de Asignación de Dirichlet latente (LDA) en JavaScript para Node.js. LDA es un algoritmo de aprendizaje automático que extrae temas y sus palabras clave relacionadas de una colección de documentos.
En LDA, un documento puede contener varios temas diferentes, cada uno con sus propios términos relacionados. El algoritmo utiliza un modelo probabilístico para detectar el número de temas especificados y extraer sus palabras clave relacionadas. Por ejemplo, un documento puede contener temas que podrían clasificarse como relacionados con la playa y relacionados con el clima. El tema de la playa puede contener palabras relacionadas, como arena, océano y agua. Del mismo modo, el tema del clima puede contener palabras relacionadas, como sol, temperatura y nubes.
Ver http://en.wikipedia.org/wiki/latent_dirichlet_allocation
$ npm install lda var lda = require ( 'lda' ) ;
// Example document.
var text = 'Cats are small. Dogs are big. Cats like to chase mice. Dogs like to eat bones.' ;
// Extract sentences.
var documents = text . match ( / [^.!?]+[.!?]+ / g ) ;
// Run LDA to get terms for 2 topics (5 terms each).
var result = lda ( documents , 2 , 5 ) ;El ejemplo anterior produce el siguiente resultado con dos temas (el tema 1 está "relacionado con el gato", el tema 2 está "relacionado con el perro"):
Topic 1
cats (0.21%)
dogs (0.19%)
small (0.1%)
mice (0.1%)
chase (0.1%)
Topic 2
dogs (0.21%)
cats (0.19%)
big (0.11%)
eat (0.1%)
bones (0.1%)
LDA devuelve una variedad de temas, cada uno que contiene una variedad de términos. El resultado contiene el siguiente formato:
[ [ { term: 'dogs', probability: 0.2 },
{ term: 'cats', probability: 0.2 },
{ term: 'small', probability: 0.1 },
{ term: 'mice', probability: 0.1 },
{ term: 'chase', probability: 0.1 } ],
[ { term: 'dogs', probability: 0.2 },
{ term: 'cats', probability: 0.2 },
{ term: 'bones', probability: 0.11 },
{ term: 'eat', probability: 0.1 },
{ term: 'big', probability: 0.099 } ] ]
El resultado se puede atravesar de la siguiente manera:
var result = lda ( documents , 2 , 5 ) ;
// For each topic.
for ( var i in result ) {
var row = result [ i ] ;
console . log ( 'Topic ' + ( parseInt ( i ) + 1 ) ) ;
// For each term.
for ( var j in row ) {
var term = row [ j ] ;
console . log ( term . term + ' (' + term . probability + '%)' ) ;
}
console . log ( '' ) ;
} LDA usa palabras de parada para ignorar los términos comunes en el texto (por ejemplo: esto, eso, nosotros, nosotros). Por defecto, la lista de palabras de parada usa inglés. Para usar idiomas adicionales, puede especificar una matriz de ID de idioma, de la siguiente manera:
// Use English (this is the default).
result = lda ( documents , 2 , 5 , [ 'en' ] ) ;
// Use German.
result = lda ( documents , 2 , 5 , [ 'de' ] ) ;
// Use English + German.
result = lda ( documents , 2 , 5 , [ 'en' , 'de' ] ) ;Para agregar una nueva lista de palabras de parada específica del idioma, cree un archivo /lda/lib/stopwords_xx.js donde xx es la ID para el idioma. Por ejemplo, una lista de palabras de parada francesa podría llamarse "stopwords_fr.js". El contenido del archivo debe seguir el formato de una lista de palabras de parada existentes. El formato es, como sigue:
exports . stop_words = [
'cette' ,
'que' ,
'une' ,
'il'
] ; Se puede usar una semilla aleatoria específica para calcular los mismos términos y probabilidades durante las ejecuciones posteriores. Puede especificar la semilla aleatoria, como sigue:
// Use the random seed 123.
result = lda ( documents , 2 , 5 , null , null , null , 123 ) ; Kory Becker http://www.primaryobjects.com
Basado en la implementación original de JavaScript https://github.com/awaisathar/lda.js