public override Pair <double, double> GetScore(IList <IList <int> > clusters, IDictionary <int, IList <int> > mentionToGold) { double num = 0; int dem = 0; foreach (IList <int> c in clusters) { if (c.Count == 1) { continue; } ICounter <IList <int> > goldCounts = new ClassicCounter <IList <int> >(); double correct = 0; foreach (int m in c) { IList <int> goldCluster = mentionToGold[m]; if (goldCluster != null) { goldCounts.IncrementCount(goldCluster); } } foreach (KeyValuePair <IList <int>, double> e in goldCounts.EntrySet()) { if (e.Key.Count != 1) { correct += e.Value * e.Value; } } num += correct / c.Count; dem += c.Count; } return(new Pair <double, double>(num, (double)dem)); }
public virtual ICounter <string> GetFeatures(Example example, IDictionary <int, CompressedFeatureVector> mentionFeatures, Compressor <string> compressor) { ICounter <string> features = new ClassicCounter <string>(); ICounter <string> pairFeatures = new ClassicCounter <string>(); ICounter <string> features1 = new ClassicCounter <string>(); ICounter <string> features2 = compressor.Uncompress(mentionFeatures[example.mentionId2]); if (!example.IsNewLink()) { System.Diagnostics.Debug.Assert((!anaphoricityClassifier)); pairFeatures = compressor.Uncompress(example.pairwiseFeatures); features1 = compressor.Uncompress(mentionFeatures[example.mentionId1]); } else { features2.IncrementCount("bias"); } if (!disallowedPrefixes.IsEmpty()) { features1 = FilterOut(features1, disallowedPrefixes); features2 = FilterOut(features2, disallowedPrefixes); pairFeatures = FilterOut(pairFeatures, disallowedPrefixes); } IList <string> ids1 = example.IsNewLink() ? new List <string>() : Identifiers(features1, example.mentionType1); IList <string> ids2 = Identifiers(features2, example.mentionType2); features.AddAll(pairFeatures); foreach (string id1 in ids1) { foreach (string id2 in ids2) { if (pairConjunctions.Contains(MetaFeatureExtractor.PairConjunction.First)) { features.AddAll(GetConjunction(pairFeatures, "_m1=" + id1)); } if (pairConjunctions.Contains(MetaFeatureExtractor.PairConjunction.Last)) { features.AddAll(GetConjunction(pairFeatures, "_m2=" + id2)); } if (pairConjunctions.Contains(MetaFeatureExtractor.PairConjunction.Both)) { features.AddAll(GetConjunction(pairFeatures, "_ms=" + id1 + "_" + id2)); } if (singleConjunctions.Contains(MetaFeatureExtractor.SingleConjunction.Index)) { features.AddAll(GetConjunction(features1, "_1")); features.AddAll(GetConjunction(features2, "_2")); } if (singleConjunctions.Contains(MetaFeatureExtractor.SingleConjunction.IndexCurrent)) { features.AddAll(GetConjunction(features1, "_1" + "_m=" + id1)); features.AddAll(GetConjunction(features2, "_2" + "_m=" + id2)); } if (singleConjunctions.Contains(MetaFeatureExtractor.SingleConjunction.IndexLast)) { features.AddAll(GetConjunction(features1, "_1" + "_m2=" + id2)); features.AddAll(GetConjunction(features2, "_2" + "_m2=" + id2)); } if (singleConjunctions.Contains(MetaFeatureExtractor.SingleConjunction.IndexOther)) { features.AddAll(GetConjunction(features1, "_1" + "_m=" + id2)); features.AddAll(GetConjunction(features2, "_2" + "_m=" + id1)); } if (singleConjunctions.Contains(MetaFeatureExtractor.SingleConjunction.IndexBoth)) { features.AddAll(GetConjunction(features1, "_1" + "_ms=" + id1 + "_" + id2)); features.AddAll(GetConjunction(features2, "_2" + "_ms=" + id1 + "_" + id2)); } } } if (example.IsNewLink()) { features.AddAll(features2); features.AddAll(GetConjunction(features2, "_m=" + ids2[0])); ICounter <string> newFeatures = new ClassicCounter <string>(); foreach (KeyValuePair <string, double> e in features.EntrySet()) { newFeatures.IncrementCount(e.Key + "_NEW", e.Value); } features = newFeatures; } return(features); }