Modélisation de sujets d'allocation de Dirichlet latente (LDA) en javascript pour node.js. LDA est un algorithme d'apprentissage automatique qui extrait des sujets et leurs mots clés connexes à partir d'une collection de documents.
Dans LDA, un document peut contenir plusieurs sujets différents, chacun avec ses propres termes connexes. L'algorithme utilise un modèle probabiliste pour détecter le nombre de sujets spécifiés et extraire leurs mots clés connexes. Par exemple, un document peut contenir des sujets qui pourraient être classés comme liés à la plage et liés aux intempéries. Le sujet de la plage peut contenir des mots connexes, tels que le sable, l'océan et l'eau. De même, le sujet météorologique peut contenir des mots connexes, tels que le soleil, la température et les nuages.
Voir 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 ) ;L'exemple ci-dessus produit le résultat suivant avec deux sujets (le sujet 1 est "lié au chat", le sujet 2 est "lié à des chiens"):
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 renvoie un tableau de sujets, chacun contenant un tableau de termes. Le résultat contient le format suivant:
[ [ { 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 } ] ]
Le résultat peut être traversé comme suit:
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 utilise des mots arrêtés pour ignorer les termes communs dans le texte (par exemple: ceci, cela, nous, nous). Par défaut, la liste des mots stop utilise l'anglais. Pour utiliser des langues supplémentaires, vous pouvez spécifier un tableau d'ID de langue, comme suit:
// 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' ] ) ;Pour ajouter une nouvelle liste de mots arrêtés spécifiques à la langue, créez un fichier /lda/lib/stopwords_xx.js où xx est l'ID pour la langue. Par exemple, une liste de mots stop français pourrait être nommé "stopwords_fr.js". Le contenu du fichier doit suivre le format d'une liste de mots arrêtés existants. Le format est, comme suit:
exports . stop_words = [
'cette' ,
'que' ,
'une' ,
'il'
] ; Une graine aléatoire spécifique peut être utilisée pour calculer les mêmes termes et probabilités au cours des essais suivants. Vous pouvez spécifier la graine aléatoire, comme suit:
// Use the random seed 123.
result = lda ( documents , 2 , 5 , null , null , null , 123 ) ; Kory Becker http://www.primaryobjects.com
Basé sur l'implémentation JavaScript originale https://github.com/awaisathar/lda.js