예제 #1
0
    def __init__(self, config):
        super(HRED, self).__init__()

        self.config = config
        self.encoder = layers.EncoderRNN(config.vocab_size,
                                         config.embedding_size,
                                         config.encoder_hidden_size,
                                         config.rnn, config.num_layers,
                                         config.bidirectional, config.dropout)

        context_input_size = (config.num_layers * config.encoder_hidden_size *
                              self.encoder.num_directions)
        self.context_encoder = layers.ContextRNN(context_input_size,
                                                 config.context_size,
                                                 config.rnn, config.num_layers,
                                                 config.dropout)

        self.decoder = layers.DecoderRNN(
            config.vocab_size, config.embedding_size,
            config.decoder_hidden_size, config.rnncell, config.num_layers,
            config.dropout, config.word_drop, config.max_unroll, config.sample,
            config.temperature, config.beam_size)

        self.context2decoder = layers.FeedForward(config.context_size,
                                                  config.num_layers *
                                                  config.decoder_hidden_size,
                                                  num_layers=1,
                                                  activation=config.activation)

        if config.tie_embedding:
            self.decoder.embedding = self.encoder.embedding
예제 #2
0
    def __init__(self, config):
        super(VHRED, self).__init__()

        self.config = config
        self.encoder = layers.EncoderRNN(config.vocab_size, config.embedding_size, config.encoder_hidden_size,
                                         config.rnn, config.num_layers, config.bidirectional, config.dropout,
                                         pretrained_wv_path=config.pretrained_wv_path)

        context_input_size = (config.num_layers * config.encoder_hidden_size * self.encoder.num_directions)
        self.context_encoder = layers.ContextRNN(context_input_size, config.context_size, config.rnn,
                                                 config.num_layers, config.dropout)

        self.decoder = layers.DecoderRNN(config.vocab_size, config.embedding_size, config.decoder_hidden_size,
                                         config.rnncell, config.num_layers, config.dropout, config.word_drop,
                                         config.max_unroll, config.sample, config.temperature, config.beam_size)

        self.context2decoder = layers.FeedForward(config.context_size + config.z_utter_size,
                                                  config.num_layers * config.decoder_hidden_size,
                                                  num_layers=1, activation=config.activation)

        self.softplus = nn.Softplus()
        self.prior_h = layers.FeedForward(config.context_size, config.context_size, num_layers=2,
                                          hidden_size=config.context_size, activation=config.activation)
        self.prior_mu = nn.Linear(config.context_size, config.z_utter_size)
        self.prior_var = nn.Linear(config.context_size, config.z_utter_size)

        self.posterior_h = layers.FeedForward(config.encoder_hidden_size * self.encoder.num_directions * config.num_layers + config.context_size,
                                              config.context_size, num_layers=2, hidden_size=config.context_size,
                                              activation=config.activation)
        self.posterior_mu = nn.Linear(config.context_size, config.z_utter_size)
        self.posterior_var = nn.Linear(config.context_size, config.z_utter_size)

        if config.tie_embedding:
            self.decoder.embedding = self.encoder.embedding
예제 #3
0
    def __init__(self,
                 word_vectors,
                 hidden_size,
                 output_size,
                 device,
                 drop_prob=0.,
                 num_layers=1):
        super(Seq2Seq, self).__init__()

        self.hidden_size = hidden_size
        self.device = device
        self.word_vectors = word_vectors
        self.model_type = 'seq2seq'

        #self.emb = nn.Embedding(num_embeddings=output_size, embedding_dim=hidden_size)
        #self.dropout = nn.Dropout(p=drop_prob)
        self.emb = layers.Embedding(word_vectors,
                                    hidden_size,
                                    drop_prob=drop_prob)

        self.encoder = layers.EncoderRNN(input_size=hidden_size,
                                         hidden_size=hidden_size,
                                         num_layers=num_layers,
                                         drop_prob=drop_prob)

        self.decoder = layers.DecoderRNN(input_size=hidden_size,
                                         hidden_size=hidden_size,
                                         num_layers=num_layers,
                                         drop_prob=drop_prob)

        self.generator = layers.Generator(hidden_size, output_size)
    def __init__(self, config):
        super(Seq2Seq, self).__init__()

        self.config = config
        self.encoder = layers.EncoderRNN(config.vocab_size,
                                         config.embedding_size,
                                         config.encoder_hidden_size,
                                         config.rnn, config.num_layers, False,
                                         config.dropout)

        self.decoder = layers.DecoderRNN(
            config.vocab_size, config.embedding_size,
            config.decoder_hidden_size, config.rnncell, config.num_layers,
            config.dropout, config.word_drop, config.max_unroll, config.sample,
            config.temperature, config.beam_size)

        if config.tie_embedding:
            self.decoder.embedding = self.encoder.embedding
예제 #5
0
    def __init__(self,
                 word_vectors,
                 hidden_size,
                 output_size,
                 device,
                 drop_prob=0.,
                 num_layers=1):
        super(Seq2SeqAttn, self).__init__()

        self.hidden_size = hidden_size
        self.word_vectors = word_vectors
        self.device = device
        self.enc_hiddens = None
        self.enc_masks = None
        self.model_type = 'seq2seq_attn'

        #self.emb = nn.Embedding(num_embeddings=output_size, embedding_dim=hidden_size)
        self.emb = layers.Embedding(word_vectors, hidden_size)

        self.encoder = layers.EncoderRNN(input_size=hidden_size,
                                         hidden_size=hidden_size,
                                         num_layers=num_layers,
                                         drop_prob=drop_prob)

        self.decoder = layers.DecoderRNN(input_size=2 * hidden_size,
                                         hidden_size=hidden_size,
                                         num_layers=num_layers,
                                         drop_prob=drop_prob)

        self.att_projection = nn.Linear(in_features=2 * hidden_size,
                                        out_features=hidden_size,
                                        bias=False)
        self.combined_output_projection = nn.Linear(in_features=3 *
                                                    hidden_size,
                                                    out_features=hidden_size,
                                                    bias=False)
        self.generator = layers.Generator(hidden_size, output_size)
        self.dropout = nn.Dropout(p=drop_prob)
예제 #6
0
    def __init__(self, config):
        super(VHCR, self).__init__()

        self.config = config
        self.encoder = layers.EncoderRNN(config.vocab_size,
                                         config.embedding_size,
                                         config.encoder_hidden_size,
                                         config.rnn, config.num_layers,
                                         config.bidirectional, config.dropout)

        context_input_size = (config.num_layers * config.encoder_hidden_size *
                              self.encoder.num_directions + config.z_conv_size)
        self.context_encoder = layers.ContextRNN(context_input_size,
                                                 config.context_size,
                                                 config.rnn, config.num_layers,
                                                 config.dropout)

        self.unk_sent = nn.Parameter(
            torch.randn(context_input_size - config.z_conv_size))

        self.z_conv2context = layers.FeedForward(config.z_conv_size,
                                                 config.num_layers *
                                                 config.context_size,
                                                 num_layers=1,
                                                 activation=config.activation)

        context_input_size = (config.num_layers * config.encoder_hidden_size *
                              self.encoder.num_directions)
        self.context_inference = layers.ContextRNN(context_input_size,
                                                   config.context_size,
                                                   config.rnn,
                                                   config.num_layers,
                                                   config.dropout,
                                                   bidirectional=True)

        self.decoder = layers.DecoderRNN(
            config.vocab_size, config.embedding_size,
            config.decoder_hidden_size, config.rnncell, config.num_layers,
            config.dropout, config.word_drop, config.max_unroll, config.sample,
            config.temperature, config.beam_size)

        self.context2decoder = layers.FeedForward(
            config.context_size + config.z_sent_size + config.z_conv_size,
            config.num_layers * config.decoder_hidden_size,
            num_layers=1,
            activation=config.activation)

        self.softplus = nn.Softplus()

        self.conv_posterior_h = layers.FeedForward(
            config.num_layers * self.context_inference.num_directions *
            config.context_size,
            config.context_size,
            num_layers=2,
            hidden_size=config.context_size,
            activation=config.activation)
        self.conv_posterior_mu = nn.Linear(config.context_size,
                                           config.z_conv_size)
        self.conv_posterior_var = nn.Linear(config.context_size,
                                            config.z_conv_size)

        self.sent_prior_h = layers.FeedForward(config.context_size +
                                               config.z_conv_size,
                                               config.context_size,
                                               num_layers=1,
                                               hidden_size=config.z_sent_size,
                                               activation=config.activation)
        self.sent_prior_mu = nn.Linear(config.context_size, config.z_sent_size)
        self.sent_prior_var = nn.Linear(config.context_size,
                                        config.z_sent_size)

        self.sent_posterior_h = layers.FeedForward(
            config.z_conv_size + config.encoder_hidden_size *
            self.encoder.num_directions * config.num_layers +
            config.context_size,
            config.context_size,
            num_layers=2,
            hidden_size=config.context_size,
            activation=config.activation)
        self.sent_posterior_mu = nn.Linear(config.context_size,
                                           config.z_sent_size)
        self.sent_posterior_var = nn.Linear(config.context_size,
                                            config.z_sent_size)

        if config.tie_embedding:
            self.decoder.embedding = self.encoder.embedding
예제 #7
0
    def __init__(self, config):
        super(VHUCM, self).__init__()

        self.config = config

        # user embedding
        if config.pretrained_uv_path is None:
            self.user_embedding = nn.Embedding(config.user_size, config.embedding_size)
            self.user_embedding.weight.requires_grad = True
        else:
            with open(config.pretrained_uv_path, 'rb') as f:
                weight_tensor = to_var(torch.FloatTensor(pickle.load(f)))

            self.user_embedding = nn.Embedding.from_pretrained(weight_tensor, freeze=False)

        self.encoder = layers.EncoderRNN(config.vocab_size,
                                         config.embedding_size,
                                         config.encoder_hidden_size,
                                         config.rnn,
                                         config.num_layers,
                                         config.bidirectional,
                                         config.dropout,
                                         pretrained_wv_path=config.pretrained_wv_path)

        context_input_size = (config.num_layers
                              * config.encoder_hidden_size
                              * self.encoder.num_directions + config.z_conv_size + config.embedding_size)
        self.context_encoder = layers.ContextRNN(context_input_size,
                                                 config.context_size,
                                                 config.rnn,
                                                 config.num_layers,
                                                 config.dropout)

        self.unk_sent = nn.Parameter(torch.randn(context_input_size - (config.z_conv_size + config.embedding_size)))

        self.z_conv2context = layers.FeedForward(config.z_conv_size,
                                                 config.num_layers * config.context_size,
                                                 num_layers=1,
                                                 activation=config.activation)

        context_input_size = (config.num_layers
                              * config.encoder_hidden_size
                              * self.encoder.num_directions)
        self.context_inference = layers.ContextRNN(context_input_size,
                                                   config.context_size,
                                                   config.rnn,
                                                   config.num_layers,
                                                   config.dropout,
                                                   bidirectional=True)

        self.decoder = layers.DecoderRNN(config.vocab_size,
                                        config.embedding_size,
                                        config.decoder_hidden_size,
                                        config.rnncell,
                                        config.num_layers,
                                        config.dropout,
                                        config.word_drop,
                                        config.max_unroll,
                                        config.sample,
                                        config.temperature,
                                        config.beam_size)

        self.context2decoder = layers.FeedForward(config.context_size + config.z_sent_size + config.z_conv_size,
                                                  config.num_layers * config.decoder_hidden_size,
                                                  num_layers=1,
                                                  activation=config.activation)

        self.softplus = nn.Softplus()

        self.conv_prior_h = layers.FeedForward(2*config.embedding_size,
                                               config.embedding_size, num_layers=1, hidden_size=config.z_conv_size,
                                               activation=config.activation)
        self.conv_prior_mu = nn.Linear(config.embedding_size, config.z_conv_size)
        self.conv_prior_var = nn.Linear(config.embedding_size, config.z_conv_size)

        self.conv_posterior_h = layers.FeedForward(config.num_layers * self.context_inference.num_directions * config.context_size + 2*config.embedding_size,
                                                    config.context_size,
                                                    num_layers=2,
                                                    hidden_size=config.context_size,
                                                    activation=config.activation)
        self.conv_posterior_mu = nn.Linear(config.context_size,
                                            config.z_conv_size)
        self.conv_posterior_var = nn.Linear(config.context_size,
                                             config.z_conv_size)

        self.sent_prior_h = layers.FeedForward(config.context_size + config.z_conv_size,
                                               config.context_size,
                                               num_layers=1,
                                               hidden_size=config.z_sent_size,
                                               activation=config.activation)
        self.sent_prior_mu = nn.Linear(config.context_size,
                                       config.z_sent_size)
        self.sent_prior_var = nn.Linear(config.context_size,
                                        config.z_sent_size)

        self.sent_posterior_h = layers.FeedForward(config.z_conv_size + config.encoder_hidden_size * self.encoder.num_directions * config.num_layers + config.context_size,
                                                   config.context_size,
                                                   num_layers=2,
                                                   hidden_size=config.context_size,
                                                   activation=config.activation)
        self.sent_posterior_mu = nn.Linear(config.context_size,
                                           config.z_sent_size)
        self.sent_posterior_var = nn.Linear(config.context_size,
                                            config.z_sent_size)

        if config.tie_embedding:
            self.decoder.embedding = self.encoder.embedding

        if config.bow:
            self.bow_h = layers.FeedForward(config.z_sent_size,
                                            config.decoder_hidden_size,
                                            num_layers=1,
                                            hidden_size=config.decoder_hidden_size,
                                            activation=config.activation)
            self.bow_predict = nn.Linear(config.decoder_hidden_size, config.vocab_size)