public SparseVector <double> SentenceToVector(string sentence) { var words = this.SentenceToWords(sentence.Trim().ToLowerInvariant()); if (words.Length == 0) { return(null); } else { var wordvec_embeds = new double[this.WordVectorReader.EmbeddingDim]; // Sum all word vectors foreach (var word in words) { var wordEmbeds = this.WordVectorReader.GetWordVector(word); for (var i = 0; i < this.WordVectorReader.EmbeddingDim; i++) { wordvec_embeds[i] += wordEmbeds[i]; } } if (words.Length > 1) { for (var i = 0; i < this.WordVectorReader.EmbeddingDim; i++) { wordvec_embeds[i] = wordvec_embeds[i] / words.Length; } } if (!this.UseHashingTrick) { var result = new SparseVector <double>(this.WordVectorReader.EmbeddingDim); SparseVector <double> .Copy(wordvec_embeds, result); return(result); } else { var wordvec_dim = this.WordVectorReader.EmbeddingDim; var embeddingDim = this.SentenceEmbeddingDim; var embeds = new SparseVector <double>(embeddingDim); SparseVector <double> .Copy(wordvec_embeds, embeds, this.WordVectorReader.EmbeddingDim); if (words.Length > 2) { var bigrams = this.GetBiGramList(words); foreach (var bigram in bigrams) { var hash = this.CalculateHash(bigram); var hash_loc = hash % ((UInt64)this.HashingBins - 1) + 1; embeds[(int)((UInt64)wordvec_dim + hash_loc)] = 1; } } return(embeds); } } }
/// <summary> /// Generate next paths. /// </summary> /// <returns> /// An array containing <see cref="PathGenerator.Count"/> <see cref="Path"/>s, /// wrapped in a (possibly weighted) <see cref="Sample"/>. /// </returns> public override Sample Next() { Matrix diffusion = new Matrix(Count, TimeSteps); double weight = 1.0; for (int i = 0; i < TimeSteps; i++) { Sample sample = ArrayGenerator.NextSample(); // get a weighted SparseVector weight *= sample.Weight; SparseVector v = (SparseVector)sample.Value; v.Multiply(Math.Sqrt(TimeDelays.Data[i])); v.Copy(diffusion.Column(i)); } Path[] paths = new Path[Count]; for (int j = 0; j < Count; j++) { paths[j] = new Path(Times, Drift[j], diffusion.Row(j)); } return(new Sample(paths, weight)); }