protected void semanticCrossFeatures(
     Counter<String> features, String prefix, NumericMention mention, Sentence str2) {
   double[] vec1 = embeddings.get(mention.sentence.get(), mention.token_begin, mention.token_end);
   double[] vec2 = embeddings.get(str2);
   for (int i = 0; i < vec1.length; i++)
     features.incrementCount(prefix + "wv-" + i, vec1[i] - vec2[i]);
 }
 protected double semanticSimilarityVW(
     Counter<String> features, String prefix, Sentence candidate1, Sentence candidate2) {
   double[] v1 = embeddings.get(candidate1);
   double[] v2 = embeddings.get(candidate2);
   double sim = Util.WordEmbedding.dotProduct(v1, v2);
   //    features.incrementCount(prefix + "semantic-similarity", 2*sim - 1); // to make it between
   // 0 and 1.
   return 2 * sim - 1;
 }
 protected double semanticSimilarityVW(
     Counter<String> features, String prefix, NumericMention mention, Sentence candidate) {
   double[] v1 = embeddings.get(mention.sentence.get(), mention.token_begin, mention.token_end);
   double[] v2 = embeddings.get(candidate);
   double sim = Util.WordEmbedding.dotProduct(v1, v2);
   //    double sim =
   //        candidate.lemmas().stream()
   //            .map(w -> embeddings.get(Collections.singletonList(w), 0, 1))
   //            .map(v2 -> Util.WordEmbedding.dotProduct(v1, v2))
   //            .max(Double::compare)
   //            .get();
   //    features.incrementCount(prefix + "semantic-similarity", 2*sim - 1); // to make it between
   // 0 and 1.
   return 2 * sim - 1;
 }
 protected void semanticCrossFeatures(
     Counter<String> features, String prefix, Sentence str1, Sentence str2) {
   double[] vec1 = embeddings.get(str1);
   double[] vec2 = embeddings.get(str2);
   for (int i = 0; i < vec1.length; i++)
     features.incrementCount(prefix + "wv-" + i, vec1[i] - vec2[i]);
 }
 protected void semanticFeatures(Counter<String> features, String prefix, NumericMention mention) {
   double[] vec = embeddings.get(mention.sentence.get(), mention.token_begin, mention.token_end);
   for (int i = 0; i < vec.length; i++) features.incrementCount(prefix + "wv-" + i, vec[i]);
 }
 protected void semanticFeatures(Counter<String> features, String prefix, Sentence str) {
   double[] vec = embeddings.get(str);
   for (int i = 0; i < vec.length; i++) features.incrementCount(prefix + "wv-" + i, vec[i]);
 }