def create_ev_model(opt, fields):
    src_vocab_size = len(fields['src'].vocab)
    tgt_vocab_size = len(fields['tgt'].vocab)
    padding_idx = fields['src'].vocab.stoi[fields['src'].vocab.PAD]
    enc_embedding, dec_embedding = \
        create_emb_for_encoder_and_decoder(src_vocab_size,
                                           tgt_vocab_size,
                                           opt.embedding_size,
                                           opt.embedding_size,
                                           padding_idx)
    encoder_ref = EncoderRNN("GRU", opt.embedding_size, opt.hidden_size, 1,
                             opt.dropout_ev, opt.bidirectional)
    attention_src = GlobalAttention(opt.embedding_size, attn_type="mlp")
    attention_ref = GlobalAttention(opt.embedding_size, attn_type="mlp")
    ev_generator = editVectorGenerator(enc_embedding, dec_embedding,
                                       encoder_ref,
                                       attention_src, attention_ref,
                                       nn.Dropout(opt.dropout_ev))
    bridge = nn.Sequential(nn.Linear(2 * opt.embedding_size, opt.aux_size),
                           nn.ReLU())
    encoder_src = create_encoder(opt)
    decoder = AuxDecoderRNN(opt.rnn_type, opt.atten_model,
                            opt.embedding_size + opt.aux_size, opt.hidden_size,
                            opt.num_layers, opt.dropout)

    generator = create_generator(opt.hidden_size, tgt_vocab_size)

    model = evNMTModel(enc_embedding, dec_embedding, encoder_src, decoder,
                       generator, ev_generator, bridge, fields)

    model.apply(weights_init)
    return model
Example #2
0
    def __init__(self,
                 rnn_type,
                 attn_type,
                 input_size,
                 hidden_size,
                 num_layers=1,
                 dropout=0.1,
                 src_attention=False,
                 mem_gate=False,
                 gate_vector=False,
                 return_original=False):
        super(KVAttnDecoderRNN, self).__init__()
        # Basic attributes.
        self.rnn_type = rnn_type
        self.attn_type = attn_type
        self.num_layers = num_layers
        self.hidden_size = hidden_size
        self.dropout = nn.Dropout(dropout)

        self.rnn = getattr(nn, rnn_type)(input_size=input_size,
                                         hidden_size=hidden_size,
                                         num_layers=num_layers,
                                         dropout=dropout)

        self.src_attention = src_attention
        if src_attention:
            self.src_attn = GlobalAttention(hidden_size, attn_type)
        self.mem_attn = GlobalAttention(hidden_size,
                                        "general",
                                        context_gate=mem_gate,
                                        gate_vector=gate_vector)
        self.return_original = return_original
def create_template_generator(opt, fields):
    src_vocab_size = len(fields['src'].vocab)
    tgt_vocab_size = len(fields['tgt'].vocab)
    padding_idx = fields['src'].vocab.stoi[fields['src'].vocab.PAD]
    enc_embedding, dec_embedding = \
            create_emb_for_encoder_and_decoder(src_vocab_size,
                                                tgt_vocab_size,
                                                opt.embedding_size,
                                                opt.embedding_size,
                                                padding_idx)
    encoder_ref = EncoderRNN("GRU", opt.embedding_size, opt.hidden_size, 1,
                             opt.dropout_ev, opt.bidirectional)
    attention_src = GlobalAttention(opt.embedding_size, attn_type="mlp")
    attention_ref = GlobalAttention(opt.embedding_size, attn_type="mlp")

    ev_generator = editVectorGenerator(enc_embedding, dec_embedding,
                                       encoder_ref,
                                       attention_src, attention_ref,
                                       nn.Dropout(opt.dropout_ev))
    masker = nn.Sequential(
        nn.Linear(3 * opt.embedding_size, opt.embedding_size), nn.ReLU(),
        nn.Linear(opt.embedding_size, 1), nn.Sigmoid())
    model = templateGenerator(ev_generator, masker, nn.Dropout(opt.dropout_ev))
    model.apply(weights_init)
    return model
def create_joint_template_response_model(opt, fields):
    src_vocab_size = len(fields['src'].vocab)
    tgt_vocab_size = len(fields['tgt'].vocab)
    padding_idx = fields['src'].vocab.stoi[fields['src'].vocab.PAD]
    enc_embedding, dec_embedding = create_emb_for_encoder_and_decoder(
        src_vocab_size, tgt_vocab_size, opt.embedding_size, opt.embedding_size,
        padding_idx)
    encoder_src = create_encoder(opt)
    if opt.use_ev:
        decoder = AuxMemDecoderRNN(opt.rnn_type, opt.atten_model,
                                   opt.embedding_size + opt.aux_size,
                                   opt.hidden_size, opt.num_layers,
                                   opt.dropout, opt.src_attention,
                                   opt.mem_gate, opt.gate_vector)

        bridge = nn.Sequential(nn.Linear(2 * opt.embedding_size, opt.aux_size),
                               nn.ReLU())
    else:
        decoder = KVAttnDecoderRNN(opt.rnn_type, opt.atten_model,
                                   opt.embedding_size, opt.hidden_size,
                                   opt.num_layers, opt.dropout,
                                   opt.src_attention, opt.mem_gate,
                                   opt.gate_vector)
        bridge = None
    encoder_ref = EncoderRNN("GRU", opt.embedding_size, opt.hidden_size, 1,
                             opt.dropout_ev, opt.bidirectional)
    attention_src = GlobalAttention(opt.embedding_size, attn_type="mlp")
    attention_ref = GlobalAttention(opt.embedding_size, attn_type="mlp")
    ev_generator = editVectorGenerator(enc_embedding, dec_embedding,
                                       encoder_ref,
                                       attention_src, attention_ref,
                                       nn.Dropout(opt.dropout_ev))
    generator = create_generator(opt.hidden_size, tgt_vocab_size)
    masker = nn.Sequential(
        nn.Linear(3 * opt.embedding_size, opt.embedding_size), nn.ReLU(),
        nn.Linear(opt.embedding_size, 1), nn.Sigmoid())
    model = jointTemplateResponseGenerator(ev_generator, masker,
                                           nn.Dropout(opt.dropout_ev),
                                           enc_embedding, dec_embedding,
                                           encoder_src, decoder, generator,
                                           bridge, fields)
    model.apply(weights_init)
    return model
Example #5
0
    def __init__(self,
                 rnn_type,
                 attn_type,
                 embedding_size,
                 hidden_size,
                 num_layers=1,
                 dropout=0.1):
        super(InputFeedDecoder, self).__init__()
        # Basic attributes.
        self.rnn_type = rnn_type
        self.attn_type = attn_type
        self.num_layers = num_layers
        self.embedding_size = embedding_size
        self.hidden_size = hidden_size
        self.dropout = nn.Dropout(dropout)

        self.rnn = self._build_rnn(rnn_type, self._input_size, hidden_size,
                                   num_layers, dropout)

        self.attn = GlobalAttention(hidden_size, attn_type)
Example #6
0
    def __init__(self,
                 rnn_type,
                 attn_type,
                 input_size,
                 hidden_size,
                 num_layers=1,
                 dropout=0.1):
        super(AuxDecoderRNN, self).__init__()
        # Basic attributes.
        self.rnn_type = rnn_type
        self.attn_type = attn_type
        self.num_layers = num_layers
        self.hidden_size = hidden_size
        self.dropout = nn.Dropout(dropout)

        self.rnn = getattr(nn, rnn_type)(input_size=input_size,
                                         hidden_size=hidden_size,
                                         num_layers=num_layers,
                                         dropout=dropout)

        if self.attn_type != 'none':
            self.attn = GlobalAttention(hidden_size, attn_type)
Example #7
0
    def __init__(self,
                 rnn_type,
                 attn_type,
                 scheduler_type,
                 input_size,
                 hidden_size,
                 num_layers=1,
                 dropout=0.1):
        super(ScheduledDecoder, self).__init__()
        # Basic attributes.
        self.rnn_type = rnn_type
        self.attn_type = attn_type
        self.num_layers = num_layers
        self.hidden_size = hidden_size
        self.dropout = nn.Dropout(dropout)

        self.rnn = self._build_rnn(rnn_type, input_size, hidden_size,
                                   num_layers, dropout)

        if self.attn_type != 'none':
            self.attn = GlobalAttention(hidden_size, attn_type)

        self.ratio_scheduler = self.build_ratio_scheduler(scheduler_type)
        self.teacher_forcing_ratio = 1.0