For ADVI I tried using :
def log_lda(theta,phi):
def ll_lda(value):
dixs, vixs = value.nonzero()
vfreqs = value[dixs, vixs]
ll =vfreqs* pm.math.logsumexp(t.log(theta[dixs]) + t.log(phi.T[vixs]), axis = 1).ravel()
return t.sum(ll)
return ll_lda
with model:
theta = pm.Dirichlet("thetas", a=alpha, shape=(D, K))
phi = pm.Dirichlet("phis", a=beta, shape=(K, V))
doc = pm.DensityDist('doc', log_lda(theta,phi), observed=doc_t)