Зачем получать разные результаты с выводом темы MALLET для одного и нескольких документов? - PullRequest
8 голосов
/ 03 октября 2011

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

Выполнить логический вывод для другого файла обучающих данных, содержащего только один текстовый файл:

../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 

1 Ответ

10 голосов
/ 04 октября 2011

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

bin/mallet import-dir \
  --input [trainingDataDirWithOneFile] \
  --output one.data \
  --use-pipe-from small.data 
...