double docTotal = wordCounts.zSum();
int docLength = wordCounts.size();
// initialize variational approximation to p(z|doc)
Vector gamma = new DenseVector(state.numTopics);
gamma.assign(state.topicSmoothing + docTotal / state.numTopics);
Vector nextGamma = new DenseVector(state.numTopics);
DenseMatrix phi = new DenseMatrix(state.numTopics, docLength);
// digamma is expensive, precompute