Я пытаюсь выполнить моделирование темы LDA с помощью Mallet 2.0.7. Я могу обучить модель LDA и получить хорошие результаты, судя по результатам тренировки. Кроме того, я могу использовать механизм вывода, встроенный в этот процесс, и получать аналогичные результаты при повторной обработке моего обучающего файла. Однако, если я возьму отдельный файл из большого обучающего набора и обработаю его с помощью модуля логического вывода, я получу совсем другие результаты, что не очень хорошо.
Насколько я понимаю, средство вывода должно использовать фиксированную модель и использовать только локальные функции для этого документа, поэтому я не понимаю, почему я получаю разные результаты при обработке 1 файла или 1 КБ из моего тренировочного набора. Я не выполняю отсечку частоты, которая может показаться глобальной операцией, которая может иметь такой эффект. Вы можете увидеть другие параметры, которые я использую в приведенных ниже командах, но в основном они установлены по умолчанию. Изменение количества итераций на 0 или 100 не помогло.
Импорт данных:
bin/mallet import-dir \
--input trainingDataDir \
--output train.data \
--remove-stopwords TRUE \
--keep-sequence TRUE \
--gram-sizes 1,2 \
--keep-sequence-bigrams TRUE
Тренироваться:
time ../bin/mallet train-topics
--input ../train.data \
--inferencer-filename lda-inferencer-model.mallet \
--num-top-words 50 \
--num-topics 100 \
--num-threads 3 \
--num-iterations 100 \
--doc-topics-threshold 0.1 \
--output-topic-keys topic-keys.txt \
--output-doc-topics doc-topics.txt
Темы, назначенные во время обучения одному файлу, в частности, № 14 о вине, что правильно:
998 file:/.../29708933509685249 14 0.31684981684981683
> grep "^14\t" topic-keys.txt
14 0.5 wine spray cooking car climate top wines place live honey sticking ice prevent collection market hole climate_change winery tasting california moldova vegas horses converted paper key weather farmers_market farmers displayed wd freezing winter trouble mexico morning spring earth round mici torrey_pines barbara kinda nonstick grass slide tree exciting lots
Запустите вывод для всей партии поездов:
../bin/mallet infer-topics \
--input ../train.data \
--inferencer lda-inferencer-model.mallet \
--output-doc-topics inf-train.1 \
--num-iterations 100
Оценка логического вывода на поезде -- очень похоже:
998 /.../29708933509685249 14 0.37505087505087503
Запустите вывод на другом файле обучающих данных, состоящем только из этого 1 текстового файла:
../bin/mallet infer-topics \
--input ../one.data \
--inferencer lda-inferencer-model.mallet \
--output-doc-topics inf-one.2 \
--num-iterations 100
Вывод по одному документу дает темы 80 и 36, которые сильно различаются (14 дается около 0 баллов):
0 /.../29708933509685249 80 0.3184778184778185 36 0.19067969067969068
> grep "^80\t" topic-keys.txt
80 0.5 tips dog care pet safety items read policy safe offer pay avoid stay important privacy services ebay selling terms person meeting warning poster message agree sellers animals public agree_terms follow pets payment fraud made privacy_policy send description puppy emailed clicking safety_tips read_safety safe_read stay_safe services_stay payment_services transaction_payment offer_transaction classifieds_offer