Esempio n. 1
0
 double Eval::ComputeOneDocLLH(Document* doc, Row<int32_t>& doc_topic_counter)
 {
     if (doc->Size() == 0) return 0.0;
     double one_doc_llh = LogGamma(Config::num_topics * Config::alpha)
         - Config::num_topics * LogGamma(Config::alpha);
     int32_t nonzero_num = 0;
     doc_topic_counter.Clear();
     doc->GetDocTopicVector(doc_topic_counter);
     Row<int32_t>::iterator iter = doc_topic_counter.Iterator();
     while (iter.HasNext())
     {
         one_doc_llh += LogGamma(iter.Value() + Config::alpha);
         ++nonzero_num;
         iter.Next();
     }
     one_doc_llh += (Config::num_topics - nonzero_num)
         * LogGamma(Config::alpha);
     one_doc_llh -= LogGamma(doc->Size() + 
         Config::alpha * Config::num_topics);
     return one_doc_llh;
 }