package hmm; import java.io.PrintStream; import java.util.ArrayList; import java.util.Scanner; public class HMM { //trans[i][j]=prob of going FROM i to j double [][]trans; double [][]emit; double []pi; int [][]data; int [][]tagdata; double logtrans[][]; public HMMObjective o; public static void main(String[] args) { } public HMM(int n_state,int n_emit,int [][]data){ trans=new double [n_state][n_state]; emit=new double[n_state][n_emit]; pi=new double [n_state]; System.out.println(" random initial parameters"); fillRand(trans); fillRand(emit); fillRand(pi); this.data=data; } private void fillRand(double [][] a){ for(int i=0;i=0;n--){ for(int i=0;imaxprob){ maxprob=p[seq.length-1][i]; maxIdx=i; } } int ans[]=new int [seq.length]; ans[seq.length-1]=maxIdx; for(int i=seq.length-2;i>=0;i--){ ans[i]=backp[i+1][ans[i+1]]; } return ans; } public double l1norm(double a[]){ double norm=0; for(int i=0;i s=new ArrayList(); int state=sample(pi); int sym=sample(emit[state]); while(sym!=terminalSym){ s.add(sym); state=sample(trans[state]); sym=sample(emit[state]); } int ans[]=new int [s.size()]; for(int i=0;i=r){ return i; } } return p.length-1; } public void train(int tagdata[][]){ double trans_exp_cnt[][]=new double [trans.length][trans.length]; double emit_exp_cnt[][]=new double[trans.length][emit[0].length]; double start_exp_cnt[]=new double[trans.length]; for(int i=0;imaxwt[i][d[sentNum][n]]){ maxwt[i][d[sentNum][n]]=py; } } } //the last state int len=post.length; for(int i=0;imaxwt[i][d[sentNum][len-1]]){ maxwt[i][d[sentNum][len-1]]=py; } } } } }//end of class