Меченый LDA(скрытое распределение дирихле) в PyMC3
Я пытаюсь создать модель с меткой LDA, как описано в этой статье (раздел 3.2).
То, что я до сих пор это:
# settings
entityTypesSize = 100
minibatchSize = 10
entityStringsSize = 100
model = pm.Model()
with pm.Model() as model:
alpha = pm.Gamma(alpha=0.1, beta=1, name='alpha')
eta = pm.Gamma(alpha=0.1, beta=1, name='eta')
beta = pm.Dirichlet('beta', a=eta * np.ones((entityTypesSize, entityStringsSize)),
shape=(entityTypesSize, entityStringsSize), transform=t_stick_breaking(1e-9))
theta = pm.Dirichlet('theta', a=alpha * np.ones((minibatchSize, entityTypesSize)),
shape=(minibatchSize, entityTypesSize), transform=t_stick_breaking(1e-9))
z = pm.Multinomial('z', n=, p=)
w = pm.Multinomial('w', n=, p=)
Задача, с которой я сталкиваюсь, связана с z
а также w
случайные переменные. Как указано в документе, количество розыгрышей (n-параметр) не должно быть фиксированным, а зависит от количества слов в строке сущности. Кроме того, мне нужно разместить разные вероятности (p-param), поскольку они выбираются из бета- и тета-распределений. Можно ли их как-то приковать? Если да, может кто-нибудь помочь с этим, пожалуйста?
Эта же модель имеет альтернативную реализацию в HBC, которую можно найти здесь.
Спасибо!!!