예제 #1
0
        /// <summary>
        /// Append tokens in beam search results to the source tokens
        /// </summary>
        /// <param name="srcTokens">(batch_size, seq_len)</param>
        /// <param name="beamBatchResults">(beam_search_size, batch_size)</param>
        /// <returns>output shape: (beam_search_size, batch_size)</returns>
        public static List <List <BeamSearchStatus> > AppendOutputTokens(List <List <int> > srcTokens, List <List <BeamSearchStatus> > beamBatchResults)
        {
            int beamSize  = beamBatchResults.Count;
            int batchSize = beamBatchResults[0].Count;

            List <List <BeamSearchStatus> > output = new List <List <BeamSearchStatus> >();

            for (int i = 0; i < beamSize; i++)
            {
                List <BeamSearchStatus> batch = new List <BeamSearchStatus>();
                output.Add(batch);

                for (int j = 0; j < batchSize; j++)
                {
                    BeamSearchStatus item = new BeamSearchStatus();
                    item.OutputIds.AddRange(srcTokens[j]);
                    item.OutputIds.AddRange(beamBatchResults[i][j].OutputIds);
                    item.Score = beamBatchResults[i][j].Score;

                    batch.Add(item);
                }
            }

            return(output);
        }
예제 #2
0
        /// <summary>
        /// Initialize beam search status for all beam search and batch results
        /// </summary>
        /// <param name="beamSearchSize"></param>
        /// <param name="batchSize"></param>
        /// <param name="tgtTokensList"></param>
        /// <returns>shape: (beam_search_size, batch_size)</returns>
        public static List <List <BeamSearchStatus> > InitBeamSearchStatusListList(int batchSize, List <List <int> > tgtTokensList)
        {
            List <List <BeamSearchStatus> > beam2batchStatus = new List <List <BeamSearchStatus> >();

            List <BeamSearchStatus> bssList = new List <BeamSearchStatus>();

            for (int i = 0; i < batchSize; i++)
            {
                BeamSearchStatus bss = new BeamSearchStatus();
                bss.OutputIds.AddRange(tgtTokensList[i]);
                bssList.Add(bss);
            }

            beam2batchStatus.Add(bssList);

            return(beam2batchStatus);
        }