I'm studying CRFs recently, and I've read some codes of implementations of general CRFs such as CRF(Java), Mallet, CRFSuite. I found DGM is best for me, which is quite clearly in coding.
During studying the codes written by you, I come across some questions and want to bother you:
- When adding/setting arcs in building a graph, why the edge potential is square rooted? (#186 and #196 in ./modules/DGM/Graph.cpp)
- In message passing algorithms, why the new msg is double multiplied by edge potential? (#80 in ./modules/DGM/MessagePassing.cpp)
I tried to search for clues that may help answering the questions, but found nothing. I hope you may give me some hints, and thank you.