Vowpal Wabbit
Functions
lda_core.h File Reference
#include "v_array.h"
#include <tuple>

Go to the source code of this file.

Functions

LEARNER::base_learnerlda_setup (VW::config::options_i &, vw &)
 
void get_top_weights (vw *all, int top_words_count, int topic, std::vector< feature > &output)
 

Function Documentation

◆ get_top_weights()

void get_top_weights ( vw all,
int  top_words_count,
int  topic,
std::vector< feature > &  output 
)

Definition at line 1094 of file lda_core.cc.

References parameters::dense_weights, get_top_weights(), parameters::sparse, parameters::sparse_weights, and vw::weights.

1095 {
1096  if (all->weights.sparse)
1097  get_top_weights(all, top_words_count, topic, output, all->weights.sparse_weights);
1098  else
1099  get_top_weights(all, top_words_count, topic, output, all->weights.dense_weights);
1100 }
parameters weights
Definition: global_data.h:537
dense_parameters dense_weights
void get_top_weights(vw *all, int top_words_count, int topic, std::vector< feature > &output, T &weights)
Definition: lda_core.cc:1063
sparse_parameters sparse_weights

◆ lda_setup()

LEARNER::base_learner* lda_setup ( VW::config::options_i ,
vw  
)

Definition at line 1299 of file lda_core.cc.

References add(), VW::config::options_i::add_and_parse(), vw::add_constant, vw::delete_prediction, delete_scalars(), end_examples(), end_pass(), vw::eta, f, VW::finish_example(), LEARNER::init_learner(), vw::initial_t, vw::lda, learn(), learn_with_metrics(), parser::lp, LEARNER::make_base(), VW::config::make_option(), next_pow2(), no_label::no_label_parser, vw::num_bits, vw::p, predict(), predict_with_metrics(), vw::random_weights, parser::ring_size, save_load(), prediction_type::scalars, LEARNER::learner< T, E >::set_end_examples(), LEARNER::learner< T, E >::set_end_pass(), LEARNER::learner< T, E >::set_finish_example(), LEARNER::learner< T, E >::set_save_load(), parser::strict_parse, parameters::stride_shift(), UINT64_ONE, USE_SIMD, VW::config::options_i::was_supplied(), and vw::weights.

Referenced by parse_reductions().

1300 {
1301  auto ld = scoped_calloc_or_throw<lda>();
1302  option_group_definition new_options("Latent Dirichlet Allocation");
1303  int math_mode;
1304  new_options.add(make_option("lda", ld->topics).keep().help("Run lda with <int> topics"))
1305  .add(make_option("lda_alpha", ld->lda_alpha)
1306  .keep()
1307  .default_value(0.1f)
1308  .help("Prior on sparsity of per-document topic weights"))
1309  .add(make_option("lda_rho", ld->lda_rho)
1310  .keep()
1311  .default_value(0.1f)
1312  .help("Prior on sparsity of topic distributions"))
1313  .add(make_option("lda_D", ld->lda_D).default_value(10000.0f).help("Number of documents"))
1314  .add(make_option("lda_epsilon", ld->lda_epsilon).default_value(0.001f).help("Loop convergence threshold"))
1315  .add(make_option("minibatch", ld->minibatch).default_value(1).help("Minibatch size, for LDA"))
1316  .add(make_option("math-mode", math_mode).default_value(USE_SIMD).help("Math mode: simd, accuracy, fast-approx"))
1317  .add(make_option("metrics", ld->compute_coherence_metrics).help("Compute metrics"));
1318  options.add_and_parse(new_options);
1319 
1320  // Convert from int to corresponding enum value.
1321  ld->mmode = static_cast<lda_math_mode>(math_mode);
1322 
1323  if (!options.was_supplied("lda"))
1324  return nullptr;
1325 
1326  all.lda = (uint32_t)ld->topics;
1327  all.delete_prediction = delete_scalars;
1328  ld->sorted_features = std::vector<index_feature>();
1329  ld->total_lambda_init = false;
1330  ld->all = &all;
1331  ld->example_t = all.initial_t;
1332  if (ld->compute_coherence_metrics)
1333  {
1334  ld->feature_counts.resize((uint32_t)(UINT64_ONE << all.num_bits));
1335  ld->feature_to_example_map.resize((uint32_t)(UINT64_ONE << all.num_bits));
1336  }
1337 
1338  float temp = ceilf(logf((float)(all.lda * 2 + 1)) / logf(2.f));
1339 
1340  all.weights.stride_shift((size_t)temp);
1341  all.random_weights = true;
1342  all.add_constant = false;
1343 
1344  if (all.eta > 1.)
1345  {
1346  std::cerr << "your learning rate is too high, setting it to 1" << std::endl;
1347  all.eta = std::min(all.eta, 1.f);
1348  }
1349 
1350  size_t minibatch2 = next_pow2(ld->minibatch);
1351  if (minibatch2 > all.p->ring_size)
1352  {
1353  bool previous_strict_parse = all.p->strict_parse;
1354  delete all.p;
1355  all.p = new parser{minibatch2, previous_strict_parse};
1356  }
1357 
1358  ld->v.resize(all.lda * ld->minibatch);
1359 
1360  ld->decay_levels.push_back(0.f);
1361 
1362  all.p->lp = no_label::no_label_parser;
1363 
1364  LEARNER::learner<lda, example> &l = init_learner(ld, ld->compute_coherence_metrics ? learn_with_metrics : learn,
1365  ld->compute_coherence_metrics ? predict_with_metrics : predict, UINT64_ONE << all.weights.stride_shift(),
1367 
1372 
1373  return make_base(l);
1374 }
void learn_with_metrics(lda &l, LEARNER::single_learner &base, example &ec)
Definition: lda_core.cc:1017
lda_math_mode
Definition: lda_core.cc:45
base_learner * make_base(learner< T, E > &base)
Definition: learner.h:462
void predict_with_metrics(lda &l, LEARNER::single_learner &base, example &ec)
Definition: lda_core.cc:1041
void set_save_load(void(*sl)(T &, io_buf &, bool, bool))
Definition: learner.h:257
size_t next_pow2(size_t x)
Definition: lda_core.cc:751
void set_finish_example(void(*f)(vw &all, T &, E &))
Definition: learner.h:307
void finish_example(vw &, lda &, example &)
Definition: lda_core.cc:1280
learner< T, E > & init_learner(free_ptr< T > &dat, L *base, void(*learn)(T &, L &, E &), void(*predict)(T &, L &, E &), size_t ws, prediction_type::prediction_type_t pred_type)
Definition: learner.h:369
void delete_scalars(void *v)
Definition: example.h:37
void learn(lda &l, LEARNER::single_learner &, example &ec)
Definition: lda_core.cc:999
void save_load(lda &l, io_buf &model_file, bool read, bool text)
Definition: lda_core.cc:793
int add(svm_params &params, svm_example *fec)
Definition: kernel_svm.cc:546
typed_option< T > make_option(std::string name, T &location)
Definition: options.h:80
constexpr uint64_t UINT64_ONE
void set_end_pass(void(*f)(T &))
Definition: learner.h:286
void predict(lda &l, LEARNER::single_learner &base, example &ec)
Definition: lda_core.cc:1040
Definition: parser.h:38
void end_examples(lda &l, T &weights)
Definition: lda_core.cc:1259
void end_pass(lda &l)
Definition: lda_core.cc:1246
float f
Definition: cache.cc:40
void set_end_examples(void(*f)(T &))
Definition: learner.h:295
label_parser lp
Definition: parser.h:102
label_parser no_label_parser
Definition: no_label.cc:41