Почему при выводе темы MALLET получаются разные результаты для отдельных и пакетных документов?

Я пытаюсь выполнить моделирование темы 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 

person John Lehmann    schedule 03.10.2011    source источник


Ответы (1)


Проблема заключалась в несовместимости файлов обучающих данных small.data и one.data. Несмотря на то, что я старался использовать одни и те же параметры, два файла данных по умолчанию будут использовать разные алфавиты (сопоставление между словами и целыми числами). Чтобы исправить это, используйте параметр --use-pipe-from [MALLET TRAINING FILE], а затем указывать другие параметры кажется излишним. Спасибо Дэвиду Мимно.

bin/mallet import-dir \
  --input [trainingDataDirWithOneFile] \
  --output one.data \
  --use-pipe-from small.data 
person John Lehmann    schedule 04.10.2011