📄 viterbitrp.java
字号:
/* Copyright (C) 2003 Univ. of Massachusetts Amherst, Computer Science Dept. This file is part of "MALLET" (MAchine Learning for LanguagE Toolkit). http://www.cs.umass.edu/~mccallum/mallet This software is provided under the terms of the Common Public License, version 1.0, as published by http://www.opensource.org. For further information, see the file `LICENSE' included with this distribution. */package edu.umass.cs.mallet.grmm;import java.util.logging.Logger;import edu.umass.cs.mallet.base.util.MalletLogger;/** * * * Created: Tue Jan 13 18:57:01 2004 * * @author <a href="mailto:casutton@cs.umass.edu">Charles Sutton</a> * @version $Id: ViterbiTRP.java,v 1.1 2004/07/15 17:53:31 casutton Exp $ */public class ViterbiTRP extends TRP { private static Logger logger = MalletLogger.getLogger (ViterbiTRP.class.getName()); public ViterbiTRP () { this (null, null); } public ViterbiTRP (TRP.TreeFactory f) { this (f, null); } public ViterbiTRP (TRP.TreeFactory f, TRP.TerminationCondition cond) { super (f, cond); normalizeBeliefs = false; inLogSpace = true; } public double lookupJoint (Assignment assn) { throw new UnsupportedOperationException ("ViterbiTRP cannot compute factorized joints."); } public double lookupLogJoint (Assignment assn) { throw new UnsupportedOperationException ("ViterbiTRP cannot compute factorized joints."); } // copy-paste from ViterbiPropagation protected void sendMessage (UndirectedModel mdl, Variable from, Variable to) {// logger.fine ("ViterbiTRP sending message "+from+" --> "+to); int fromIdx = mdl.getIndex (from); int toIdx = mdl.getIndex (to); DiscretePotential product = mdl.potentialOfEdge (from, to).duplicate(); if (inLogSpace) product.logify(); msgProduct (product, fromIdx, toIdx); DiscretePotential msg = product.extractMax (to); msg.normalize(); assert msg.varSet().size() == 1 : "Error in message from "+from+" to "+to+": varSet too big: "+msg; assert msg.varSet().contains (to) : "Error in message from "+from+" to "+to+"\n potential "+msg + "does not contain "+to; messages[toIdx][fromIdx] = msg; // System.out.println ("Message "+from+" --> "+to+" was: "+msg); } protected DiscretePotential msgProduct (DiscretePotential product, int idx, int excludeMsgFrom) { if (product == null) { product = new MultinomialPotential(mdlCurrent.get(idx)); } if (inLogSpace) product.logify (); for (int j = 0; j < messages[idx].length; j++) { if ((messages[idx][j] != null) && (j != excludeMsgFrom)) { product.multiplyBy (messages [idx][j]); } }// logger.finest ("msgProduct returned "+sum); return product; } protected DiscretePotential lookupMarginal (UndirectedModel mdl, Variable var) { DiscretePotential ptl = super.lookupMarginal (mdl, var); return ptl; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -