示例#1
0
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;
      }
    }
  }
}
示例#2
0
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;
}