public void printParams (MaxEnt me) { double[] parameters = me.getParameters(); int numFeatures = parameters.length/2; Matrix2 matrix2 = new Matrix2(parameters,2,numFeatures); for (int i=0; i<2; i++) { System.out.print(i + ": "); for (int j=0; j<numFeatures; j++) { System.out.print(j + "=" + matrix2.value(new int[] {i,j}) + " "); } System.out.println(); } }
public final ConstantMatrix cloneMatrix () { return cloneMatrix2 (); } public final Matrix2 cloneMatrix2 () {
public boolean sizeMatches (ConstantMatrix m) { if (m instanceof Matrix2) return (((Matrix2)m).nr == nr && ((Matrix2)m).nc == nc); int[] otherDims = new int[10]; int numDimensions = getDimensions (otherDims); return (numDimensions == 2 && otherDims[0] == nr && otherDims[1] == nc); }
public void getUnNormalizedScores (Matrix2 lambdas, FeatureVector fv, double[] scores) { for (int li = 0; li < 2; li++) { scores[li] = lambdas.value (li, numSGDFeatures) + lambdas.rowDotProduct (li, fv, numSGDFeatures,null); } }
Matrix2 constraints = new Matrix2(2, numFeatures); Matrix2 expectations = new Matrix2(2, numFeatures); Matrix2 lambdas = new Matrix2(2, numFeatures); Matrix2 expectationsSum = new Matrix2(2, numFeatures); int ind; if (cl) ind = 1; else ind = 0; constraints.rowPlusEquals (ind, vec, 1.0); constraints.plusEquals (ind, defaultFeatureIndex, 1.0); // dummy constraints.print(); ClusterEvaluate evaluator = null; CorefClusterAdv cl = null; int ind; if (cl.inSameCluster(curPart, c1, c2)) ind = 1; else ind = 0; expectations.rowPlusEquals (ind, v, 1.0); expectations.plusEquals (ind, defaultFeatureIndex, 1.0); expectations.print(); expectations.timesEquals (-1.0); DenseVector v0 = getDenseVectorOf(0, constraints); DenseVector v1 = getDenseVectorOf(1, constraints); expectations.rowPlusEquals (0, v0, 1.0); expectations.rowPlusEquals (1, v1, 1.0); DenseVector e0 = getDenseVectorOf(0, expectations); DenseVector e1 = getDenseVectorOf(1, expectations);
protected DenseVector getDenseVectorOf (int ri, Matrix2 matrix) { int dims[] = new int [2]; matrix.getDimensions(dims); DenseVector vec = new DenseVector (dims[1]); for (int i=0; i < dims[1]; i++) { vec.setValue (i, matrix.value(ri,i)); } return vec; }
Matrix2 parameters = new Matrix2(rawParams,2,Array.getLength(rawParams)/2); edgeVal = (double)parameters.rowDotProduct(0,(FeatureVector)pair.getData()) - (double)parameters.rowDotProduct(1,(FeatureVector)pair.getData());
public Matrix2 transpose () { Matrix2 ret = new Matrix2 (nc, nr); for (int i = 0; i < nr; i++) for (int j = 0; j < nc; j++) ret.values[j*nr+i] = values[i*nc+j]; return ret; }
public double dotProduct (int sequencePosition, Matrix2 weights, int weightRowIndex) { return weights.rowDotProduct (weightRowIndex, sequence[sequencePosition]); }
/** If "ifSelected" is false, it reverses the selection. If "fselection" is null, this implies that all features are selected; all values will be changed unless "ifSelected" is false. */ public final void setAll (double v, FeatureSelection fselection, boolean ifSelected) { if (fselection == null) { if (ifSelected == true) { logger.info ("Matrix2.setAll using FeatureSelection==null"); setAll (v); } } else { logger.info ("Matrix2.setAll using FeatureSelection"); for (int i = 0; i < values.length; i++) if (fselection.contains(i) ^ !ifSelected) values[i] = v; } }
public final int arrayCopyFrom (int i, Matrix m) { if (m instanceof DenseVector) { System.arraycopy (((DenseVector)m).values, 0, values, i, ((DenseVector)m).values.length); return i + ((DenseVector)m).values.length; } else if (m instanceof Matrix2) { ((Matrix2)m).arrayCopyInto (values, i); return i + m.singleSize(); } else { for (int j = 0; j < m.singleSize(); j++) values[i++] = m.singleValue (j); return i; } }
public final int arrayCopyTo (int i, Matrix m) { if (m instanceof DenseVector) { System.arraycopy (values, i, ((DenseVector)m).values, 0, ((DenseVector)m).values.length); return i + ((DenseVector)m).values.length; } else if (m instanceof Matrix2) { ((Matrix2)m).arrayCopyFrom (values, i); return i + m.singleSize(); } else { for (int j = 0; j < m.singleSize(); j++) m.setSingleValue (j, values[i++]); return i; } }
Matrix2 expectations = new Matrix2(2, numFeatures); Matrix2 lambdas = new Matrix2(2, numFeatures); Matrix2 avgDifferences = new Matrix2(2, numFeatures); lambdas = new Matrix2(2, numFeatures); else lambdas = initialLambdas; constraints[documentIndex] = new Matrix2(2, numFeatures); List trainingMentionPairs = (List) iter.next(); Iterator pIterator = trainingMentionPairs.iterator(); else corefIndex = noIndex; constraints[documentIndex].rowPlusEquals (corefIndex, vec, 1.0); constraints[documentIndex].plusEquals (corefIndex, defaultFeatureIndex, 1.0); Mention ref = p.getReferent(); int corefIndex = clustering.inSameCluster(ant,ref) ? yesIndex : noIndex; expectations.rowPlusEquals (corefIndex, vec, 1.0); expectations.plusEquals (corefIndex, defaultFeatureIndex, 1.0); numPairs++; expectations.timesEquals (-1.0); DenseVector v0 = super.getDenseVectorOf(0, constraints[docIndex]); DenseVector v1 = super.getDenseVectorOf(1, constraints[docIndex]); expectations.rowPlusEquals (0, v0, 1.0); expectations.rowPlusEquals (1, v1, 1.0);
public void getUnNormalizedScores (Matrix2 lambdas, FeatureVector fv, double[] scores) { int defaultFeatureIndex = pipe.getDataAlphabet().size(); assert (fv.getAlphabet () == pipe.getDataAlphabet ()); for (int li = 0; li < 2; li++) { scores[li] = lambdas.value (li, defaultFeatureIndex) + lambdas.rowDotProduct (li, fv, defaultFeatureIndex,null); } }
protected DenseVector getDenseVectorOf (int ri, Matrix2 matrix) { int dims[] = new int [2]; matrix.getDimensions(dims); DenseVector vec = new DenseVector (dims[1]); for (int i=0; i < dims[1]; i++) { vec.setValue (i, matrix.value(ri,i)); } return vec; }
public final Matrix2 cloneMatrix2 () { Matrix2 ret = new Matrix2 (nr, nc); System.arraycopy (values, 0, ret.values, 0, values.length); return ret; }
Matrix2 expectations = new Matrix2(2, numFeatures); Matrix2 lambdas = null; lambdas = new Matrix2(2, numFeatures); else lambdas = initialLambdas; Matrix2 expectationsSum = new Matrix2(2, numFeatures); constraints[documentIndex] = new Matrix2(2, numFeatures); List trainingMentionPairs = (List) iter.next(); Iterator pIterator = trainingMentionPairs.iterator(); else corefIndex = noIndex; constraints[documentIndex].rowPlusEquals (corefIndex, vec, 1.0); constraints[documentIndex].plusEquals (corefIndex, defaultFeatureIndex, 1.0); Mention ref = p.getReferent(); int corefIndex = clustering.inSameCluster(ant,ref) ? yesIndex : noIndex; expectations.rowPlusEquals (corefIndex, vec, 1.0); expectations.plusEquals (corefIndex, defaultFeatureIndex, 1.0); numPairs++; expectations.timesEquals (-1.0); DenseVector v0 = getDenseVectorOf(0, constraints[docIndex]); DenseVector v1 = getDenseVectorOf(1, constraints[docIndex]); expectations.rowPlusEquals (0, v0, 1.0); expectations.rowPlusEquals (1, v1, 1.0);
== instancePipe.getDataAlphabet ()); scores[yesIndex] = lambdas.value (yesIndex, defaultFeatureIndex) + lambdas.rowDotProduct (yesIndex, fv, defaultFeatureIndex,null); scores[noIndex] = lambdas.value (noIndex, defaultFeatureIndex) + lambdas.rowDotProduct (noIndex, fv, defaultFeatureIndex,null);
public ClusterLearner (int numEpochs, Set trainingDocuments, Pipe p, MaxEnt classifier, int yesIndex, int noIndex) { this(numEpochs, trainingDocuments, p, yesIndex, noIndex); double [] rawParams = classifier.getParameters(); this.initialLambdas = new Matrix2(rawParams,2,Array.getLength(rawParams)/2); this.finalLambdas = initialLambdas; } public ClusterLearner ( int numEpochs, Set trainingDocuments, Pipe p, int