Моделирование темы скрытого дирихлета (LDA) в javaScript для node.js. LDA - это алгоритм машинного обучения, который извлекает темы и связанные с ними ключевые слова из коллекции документов.
В LDA документ может содержать несколько различных тем, каждая из которых со своими соответствующими терминами. Алгоритм использует вероятностную модель для обнаружения количества указанных тем и извлечения их связанных ключевых слов. Например, документ может содержать темы, которые могут быть классифицированы как связанные с пляжем и связанные с погодой. Тема пляжа может содержать связанные слова, такие как песок, океан и вода. Точно так же тема погоды может содержать связанные слова, такие как солнце, температура и облака.
См. 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 ) ;Приведенный выше пример дает следующий результат с двумя темами (тема 1-«связанная с кошками», тема 2-«связанная с собаками»):
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 возвращает множество тем, каждый из которых содержит множество терминов. Результат содержит следующий формат:
[ [ { 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 } ] ]
Результат можно переселить следующим образом:
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 использует стоп-слова, чтобы игнорировать общие термины в тексте (например: это, это, мы). По умолчанию в списке остановков используется английский. Чтобы использовать дополнительные языки, вы можете указать множество языковых идентификаторов, следующим образом:
// 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' ] ) ;Чтобы добавить новый список остановков, специфичный для языка, создайте файл/lda/lib/stopwords_xx.js, где xx является идентификатором для языка. Например, французский список остановок можно назвать «Stopwords_fr.js». Содержимое файла должно следовать формату существующего списка остановков. Формат, следующим образом:
exports . stop_words = [
'cette' ,
'que' ,
'une' ,
'il'
] ; Конкретное случайное семя может использоваться для вычисления тех же терминов и вероятностей во время последующих прогонов. Вы можете указать случайное семя следующим образом:
// Use the random seed 123.
result = lda ( documents , 2 , 5 , null , null , null , 123 ) ; Кори Беккер http://www.primaryobjects.com
На основе оригинальной реализации JavaScript https://github.com/awaisathar/lda.js