/// <summary> /// Encode source sentences and output encoded weights /// </summary> /// <param name="g"></param> /// <param name="seqs"></param> /// <param name="encoder"></param> /// <param name="reversEncoder"></param> /// <param name="embeddings"></param> /// <returns></returns> static private IWeightTensor RunEncoder(IComputeGraph g, List <List <int> > seqs, IEncoder encoder, IModel modelMetaData, IWeightTensor embeddings, IWeightTensor selfMask, IWeightTensor posEmbeddings, IWeightTensor segmentEmbeddings) { int batchSize = seqs.Count; var inputEmbs = TensorUtils.CreateTokensEmbeddings(seqs, g, embeddings, segmentEmbeddings, modelMetaData.SrcVocab, (float)Math.Sqrt(embeddings.Columns), enableTagEmbedding: modelMetaData.EnableTagEmbeddings); if (modelMetaData.EncoderType == EncoderTypeEnums.Transformer) { inputEmbs = PositionEmbedding.AddPositionEmbedding(g, posEmbeddings, batchSize, inputEmbs, 0.0f); } return(encoder.Encode(inputEmbs, batchSize, g, selfMask)); }