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; }