Как Spark LDA обрабатывает нецелые числа токенов (например, TF-IDF)

Я провел серию экспериментов по моделированию тем в Spark, варьируя количество тем. Итак, учитывая RDD docsWithFeatures, я делаю что-то вроде этого:

for (n_topics <- Range(65,301,5) ){
    val s = n_topics.toString
    val lda = new LDA().setK(n_topics).setMaxIterations(20) // .setAlpha(), .setBeta()
    val ldaModel = lda.run(docsWithFeatures)
    // now do some eval, save results to file, etc...

Это отлично работает, но я также хочу сравнить результаты, если сначала нормализую свои данные с помощью TF-IDF. Теперь, насколько мне известно, LDA строго ожидает формат набора слов, в котором частоты терминов являются целыми значениями. Но в принципе (и я видел множество примеров этого) математика работает нормально, если мы сначала преобразуем частоты целочисленных членов в значения TF-IDF с плавающей запятой. Мой подход к этому на данный момент следующий (опять же, учитывая мой docsWithFeatures rdd):

val index_reset = docsWithFeatures.map(_._2).cache()
val idf = new IDF().fit(index_reset)
val tfidf = idf.transform(index_reset).zipWithIndex.map(x => (x._2,x._1))

Затем я могу запустить тот же код, что и в первом блоке, заменив tfidf на docsWithFeatures. Это работает без каких-либо сбоев, но мой главный вопрос здесь заключается в том, можно ли это делать. То есть я хочу убедиться, что Spark не делает ничего странного под капотом, например, преобразует значения с плавающей запятой, поступающие из TFIDF, в целые числа или что-то в этом роде.


person moustachio    schedule 07.12.2015    source источник
comment
Я не верю, что код Spark в любой момент преобразует веса в целые числа. Тем не менее, мне трудно понять, как использование весов, полученных из TF-IDF, имеет смысл, учитывая вероятностную модель, лежащую в основе LDA.   -  person Jason Lenderman    schedule 13.12.2015
comment
Ну, я думаю, это зависит от того, как это реализовано. Я немного поковырялся, и, похоже, есть прецедент нормализации частоты терминов с помощью TF-IDF перед применением LDA (отсюда и мой вопрос).   -  person moustachio    schedule 13.12.2015
comment
У вас есть ссылки или примеры? Конечно, существуют интерпретации нецелочисленных весов, до которых LDA можно разумно обобщить (и многие реализации будут обрабатывать это по умолчанию), но я не вижу этого для весов, полученных через TF-IDF.   -  person Jason Lenderman    schedule 14.12.2015
comment
Я не нашел много официальных ссылок, но, похоже, есть люди, которые пытаются использовать такие инструменты, как Gensim (например, здесь и здесь)   -  person moustachio    schedule 14.12.2015
comment
Но если вы говорите, что мы можем разумно обобщить LDA для нецелочисленных весов, что особенного или проблематичного в TFIDF? По сути, я думаю использовать его в качестве схемы повторного взвешивания, чтобы наказывать особенно распространенные слова лучше, чем стоп-слова (потому что меня интересуют случаи, когда общие слова особенно распространены в данном документе, что-то вроде стоп-слова). тебя не достанет).   -  person moustachio    schedule 14.12.2015
comment
LDA не будет иметь разумной вероятностной интерпретации любого возможного способа получения нецелочисленного количества токенов, даже если алгоритм все еще завершается и дает результат.   -  person Jason Lenderman    schedule 14.12.2015
comment
Кстати, вы используете EMLDAOptimizer или OnlineLDAOptimizer? Я предлагаю использовать последний вариант, так как он оптимизирует параметры априора для весов смешивания тем по каждому документу (в то время как EMLDAOptimizer этого не делает). Но даже в этом случае априор Дирихле может быть слишком строгим, что приводит к менее выдающимся темам.   -  person Jason Lenderman    schedule 14.12.2015
comment
Я на самом деле не уверен .... что по умолчанию? Я не указываю оптимизатор вручную, кроме того, что вы видите выше.   -  person moustachio    schedule 14.12.2015
comment
По-моему, по умолчанию EMLDAOptimizer. Вы можете обнаружить, что темы, которые вы получаете от использования OnlineLDAOptimizer, выглядят более разумно. См. этот документ: papers.nips.cc/paper/3854- переосмысление-lda-почему-прежние-важности .   -  person Jason Lenderman    schedule 15.12.2015
comment
Давайте продолжим обсуждение в чате.   -  person moustachio    schedule 15.12.2015