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);
                }
            }
        }
Ejemplo n.º 2
0
        /// <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));
        }