void MlSldaState::InitializeAssignments(bool random_init) { InitializeResponse(); InitializeLength(); LdawnState::InitializeAssignments(random_init); if (FLAGS_num_seed_docs > 0) { const gsl_vector* y = static_cast<lib_corpora::ReviewCorpus*> (corpus_.get())->train_ratings(); boost::shared_ptr<gsl_permutation> sorted(gsl_permutation_alloc(y->size), gsl_permutation_free); boost::shared_ptr<gsl_permutation> rank(gsl_permutation_alloc(y->size), gsl_permutation_free); std::vector< std::vector<int> > num_seeds_used; num_seeds_used.resize(corpus_->num_languages()); for (int ii = 0; ii < corpus_->num_languages(); ++ii) { num_seeds_used[ii].resize(num_topics_); } gsl_sort_vector_index(sorted.get(), y); gsl_permutation_inverse(rank.get(), sorted.get()); // We add one for padding so we don't try to set a document to be equal to // the number of topics. double num_train = corpus_->num_train() + 1.0; int train_seen = 0; int num_docs = corpus_->num_docs(); for (int dd = 0; dd < num_docs; ++dd) { MlSeqDoc* doc = corpus_->seq_doc(dd); int lang = doc->language(); if (!corpus_->doc(dd)->is_test()) { // We don't assign to topic zero, so it can be stopwordy int val = (int) floor((num_topics_ - 1) * rank->data[train_seen] / num_train) + 1; // Stop once we've used our limit of seed docs (too many leads to an // overfit initial state) if (num_seeds_used[lang][val] < FLAGS_num_seed_docs) { cout << "Initializing doc " << lang << " " << dd << " to " << val << " score=" << truth_[dd] << endl; for (int jj = 0; jj < (int)topic_assignments_[dd].size(); ++jj) { int term = (*doc)[jj]; const topicmod_projects_ldawn::WordPaths word = wordnet_->word(lang, term); int num_paths = word.size(); if (num_paths > 0) { ChangePath(dd, jj, val, rand() % num_paths); } else { if (use_aux_topics()) ChangeTopic(dd, jj, val); } } ++num_seeds_used[lang][val]; } ++train_seen; } } } }
int BotClient::ChatBotFunctions(string buffer) { MessageHandler data(buffer); int pos=0; if (logger) { stringstream buf; for(int i=0;i<(int)data.message.size();i++) buf << data.message[i] << " "; if (data.message.size() > 0) LogChat(data.sender, buf.str()); } if( (pos=data.atPosition("-change_nick")) != -1 && (int)data.message.size() > pos+1 ) { Nick(data.message[pos+1]); conn->Send("PRIVMSG #" + conn->GetChannel() + " :name changed\r\n"); } if( (pos=data.atPosition("-join")) != -1 && (int)data.message.size() > pos+1 ) { Join( data.message[pos+1] ); } if( (pos=data.atPosition("-change_topic")) != -1 && (int)data.message.size() > pos+1) { ChangeTopic(data.message[pos+1]); conn->Send("PRIVMSG #" + conn->GetChannel() + " :topic changed\r\n"); } if( (pos=data.atPosition("-leave")) != -1 && (int)data.message.size() > pos+1 ) { conn->Send("PRIVMSG #" + conn->GetChannel() + " :ciao!\r\n"); Leave( data.message[pos+1] ); } if((pos=data.atPosition("-show_chatlog")) != -1 ) { ShowLog(); } if ((pos=data.atPosition("-last_seen_user")) != -1 && data.message.size() > pos+1) { ShowLastSeen(data.message[pos+1]); } if ((pos=data.atPosition("-quit")) != -1 ) { conn->Send("PRIVMSG #" + conn->GetChannel() + " :cya!\r\n"); conn->Send("QUIT cya\r\n"); return -1; } if ((pos=data.atPosition("-log")) != -1 && (int)data.message.size() > pos+1 ) { if (data.message[pos+1] == "on" ) { logger = true; conn->Send("PRIVMSG #" + conn->GetChannel() + " :logging on\r\n"); } else if( data.message[pos+1] == "off" ) { logger = false; conn->Send("PRIVMSG #" + conn->GetChannel() + " :logging off\r\n"); } } return 0; }