1/*
    2Latent Dirichlet Allocation
    3
    4See https://en.wikipedia.org/wiki/Latent_Dirichlet_allocation
    5*/

?- prob_topic_1(G). ?- mc_sample(topic(1,1,1),100,G). % expected result 0.5 ?- mc_mh_sample(topic(1,1,1),(word(1,1,1),word(1,2,1)),100,G,[lag(2)]). ?- mc_sample_arg(word(1,1,W),100,W,G),argbar(G,C). ?- mc_sample_arg((word(1,1,W),topic(1,1,T)),100,(W,T),G),argbar(G,C). ?- mc_sample_arg(topic(1,1,T),100,T,G),argbar(G,C). ?- mc_mh_sample_arg(topic(1,1,T),(word(1,1,1),word(1,2,1)),100,T,G, [lag(2)]),argbar(G,C).

?- mc_gibbs_sample(topic(1,1,1),100,P). % expected result 0.5 ?- mc_gibbs_sample(topic(1,1,1),(word(1,1,1),word(1,2,1)),100,G,[]).

?- mc_gibbs_sample_arg(word(1,1,W),100,W,G),argbar(G,C). ?- mc_gibbs_sample_arg((word(1,1,W),topic(1,1,T)),100,(W,T),G,[]),argbar(G,C). ?- mc_gibbs_sample_arg(topic(1,1,T),100,T,G),argbar(G,C). ?- mc_gibbs_sample_arg(topic(1,1,T),(word(1,1,1),word(1,2,1)),100,T,G, []),argbar(G,C).

?- mc_gibbs_sample(topic(1,1,1),(word(1,1,1),word(1,2,1)),100,G,[]). */

   31:- use_module(library(mcintyre)).   32
   33:- if(current_predicate(use_rendering/1)).   34:- use_rendering(c3).   35:- endif.   36
   37:- mc.   38
   39:- begin_lpad.   40
   41theta(_,Theta):dirichlet(Theta,Alpha):-
   42  alpha(Alpha).
   43
   44topic(DocumentID,_,Topic):discrete(Topic,Dist):-
   45  theta(DocumentID,Theta),
   46  topic_list(Topics),
   47  maplist(pair,Topics,Theta,Dist).
   48
   49word(DocumentID,WordID,Word):discrete(Word,Dist):-
   50  topic(DocumentID,WordID,Topic),
   51  beta_par(Topic,Beta),
   52  word_list(Words),
   53  maplist(pair,Words,Beta,Dist).
   54
   55beta_par(_,Beta):dirichlet(Beta,Parameters):-
   56  n_words(N),
   57  eta(Eta),
   58  findall(Eta,between(1,N,_),Parameters).
   59
   60alpha(Alpha):-
   61  eta(Eta),
   62  n_topics(N),
   63  findall(Eta,between(1,N,_),Alpha).
   64
   65eta(2).
   66
   67pair(V,P,V:P).
   68
   69topic_list(L):-
   70  n_topics(N),
   71  numlist(1,N,L).
   72
   73word_list(L):-
   74  n_words(N),
   75  numlist(1,N,L).
   76
   77
   78n_topics(2).
   79
   80n_words(10).
   81
   82:-end_lpad.   83
   84prob_topic_1(G):-
   85  mc_sample_arg(theta(1,[T0|_]),400,T0,L0),
   86  mc_mh_sample_arg(theta(1,[T1|_]),(word(1,1,1),word(1,2,1)),400,T1,L1,[lag(2)]),
   87  densities(L0,L1,G,[nbins(30)])