コード例 #1
0
ファイル: Models.py プロジェクト: sam-lev/NeuralMT
    def __init__(self, opt, dicts):
        self.layers = opt.layers
        self.input_feed = opt.input_feed
        input_size = opt.word_vec_size
        if self.input_feed:
            input_size += opt.rnn_size

        super(Decoder, self).__init__()
        self.word_lut = nn.Embedding(dicts.size(),
                                     opt.word_vec_size,
                                     padding_idx=onmt.Constants.PAD)

        stackedCell = StackedLSTM if opt.rnn_type == "LSTM" else StackedGRU
        self.rnn = stackedCell(opt.layers, input_size, opt.rnn_size,
                               opt.dropout)
        self.attn = onmt.modules.GlobalAttention(opt.rnn_size)
        self.context_gate = None
        if opt.context_gate is not None:
            self.context_gate = ContextGateFactory(opt.context_gate,
                                                   opt.word_vec_size,
                                                   opt.rnn_size, opt.rnn_size,
                                                   opt.rnn_size)
        self.dropout = nn.Dropout(opt.dropout)

        self.hidden_size = opt.rnn_size
コード例 #2
0
ファイル: Models.py プロジェクト: shiweiba/PyOpenNMT
    def __init__(self, opt, dicts):
        """
        Args:
            opt: model options
            dicts: Target `Dict` object
        """
        self.layers = opt.dec_layers
        self.decoder_type = opt.decoder_type
        self._coverage = opt.coverage_attn
        self.hidden_size = opt.rnn_size
        self.input_feed = opt.input_feed
        input_size = opt.tgt_word_vec_size
        if self.input_feed:
            input_size += opt.rnn_size

        super(Decoder, self).__init__()
        self.embeddings = Embeddings(opt.tgt_word_vec_size,
                                     opt, dicts, None)

        pad_id = dicts.stoi[onmt.IO.PAD_WORD]
        if self.decoder_type == "transformer":
            self.transformer = nn.ModuleList(
                [onmt.modules.TransformerDecoder(self.hidden_size, opt, pad_id)
                 for _ in range(opt.dec_layers)])
        else:
            if self.input_feed:
                if opt.rnn_type == "LSTM":
                    stackedCell = onmt.modules.StackedLSTM
                else:
                    stackedCell = onmt.modules.StackedGRU
                self.rnn = stackedCell(opt.dec_layers, input_size,
                                       opt.rnn_size, opt.dropout)
            else:
                self.rnn = getattr(nn, opt.rnn_type)(
                     input_size, opt.rnn_size,
                     num_layers=opt.dec_layers,
                     dropout=opt.dropout
                )
            self.context_gate = None
            if opt.context_gate is not None:
                self.context_gate = ContextGateFactory(
                    opt.context_gate, input_size,
                    opt.rnn_size, opt.rnn_size,
                    opt.rnn_size
                )

        self.dropout = nn.Dropout(opt.dropout)

        # Std attention layer.
        self.attn = onmt.modules.GlobalAttention(
            opt.rnn_size,
            coverage=self._coverage,
            attn_type=opt.global_attention)

        # Separate Copy Attention.
        self._copy = False
        if opt.copy_attn:
            self.copy_attn = onmt.modules.GlobalAttention(
                opt.rnn_size, attn_type=opt.global_attention)
            self._copy = True
コード例 #3
0
    def __init__(self, opt, dicts):
        """
        Args:
            opt: model options
            dicts: Target `Dict` object
        """
        self.layers = opt.layers
        self.decoder_layer = opt.decoder_layer
        self._coverage = opt.coverage_attn
        self.exhaustion_loss = opt.exhaustion_loss
        self.fertility_loss = True if opt.supervised_fertility else False
        self.hidden_size = opt.rnn_size
        self.input_feed = opt.input_feed
        input_size = opt.word_vec_size
        if self.input_feed:
            input_size += opt.rnn_size

        super(Decoder, self).__init__()
        self.embeddings = Embeddings(opt, dicts, None)

        if self.decoder_layer == "transformer":
            self.transformer = nn.ModuleList([
                onmt.modules.TransformerDecoder(self.hidden_size, opt)
                for _ in range(opt.layers)
            ])
        else:
            if opt.rnn_type == "LSTM":
                stackedCell = onmt.modules.StackedLSTM
            else:
                stackedCell = onmt.modules.StackedGRU
            self.rnn = stackedCell(opt.layers, input_size, opt.rnn_size,
                                   opt.dropout)
            self.context_gate = None
            if opt.context_gate is not None:
                self.context_gate = ContextGateFactory(opt.context_gate,
                                                       opt.word_vec_size,
                                                       input_size,
                                                       opt.rnn_size,
                                                       opt.rnn_size)

        self.dropout = nn.Dropout(opt.dropout)
        # Std attention layer.
        self.attn = onmt.modules.GlobalAttention(
            opt.rnn_size,
            coverage=self._coverage,
            attn_type=opt.attention_type,
            attn_transform=opt.attn_transform,
            c_attn=opt.c_attn)
        self.fertility = opt.fertility
        self.predict_fertility = opt.predict_fertility
        self.guided_fertility = opt.guided_fertility
        self.supervised_fertility = opt.supervised_fertility
        # Separate Copy Attention.
        self._copy = False
        if opt.copy_attn:
            self.copy_attn = onmt.modules.GlobalAttention(
                opt.rnn_size, attn_type=opt.attention_type)
            self._copy = True
コード例 #4
0
    def __init__(self, opt, dicts):
        """
        Args:
            opt: model options
            dicts: Target `Dict` object
        """
        self.layers = opt.layers
        self.input_feed = opt.input_feed
        input_size = opt.word_vec_size
        if self.input_feed:
            input_size += opt.rnn_size
        self.decoder_layer = opt.__dict__.get("decoder_layer", "")
        self.positional_encoding = opt.__dict__.get("position_encoding", "")
        self._coverage = opt.__dict__.get("coverage_attn", False)
        self.hidden_size = opt.rnn_size

        super(Decoder, self).__init__()
        self.word_lut = nn.Embedding(dicts.size(),
                                     opt.word_vec_size,
                                     padding_idx=onmt.Constants.PAD)

        if self.decoder_layer == "transformer":
            self.transformer = nn.ModuleList([
                onmt.modules.TransformerDecoder(self.hidden_size, opt)
                for _ in range(opt.layers)
            ])

        stackedCell = StackedLSTM if opt.rnn_type == "LSTM" else StackedGRU
        self.rnn = stackedCell(opt.layers, input_size, opt.rnn_size,
                               opt.dropout)
        self.context_gate = None
        if opt.context_gate is not None:
            self.context_gate = ContextGateFactory(opt.context_gate,
                                                   opt.word_vec_size,
                                                   opt.rnn_size, opt.rnn_size,
                                                   opt.rnn_size)

        self.dropout = nn.Dropout(opt.dropout)
        self.emb_dropout = nn.Dropout(opt.dropout)

        # Std attention layer.
        self.attn = onmt.modules.GlobalAttention(opt.rnn_size, self._coverage)

        # Separate Copy Attention.
        self._copy = False
        if opt.__dict__.get("copy_attn", False):
            self.copy_attn = onmt.modules.GlobalAttention(opt.rnn_size)
            self._copy = True

        # Use positional encodings
        if self.positional_encoding:
            self.pe = make_positional_encodings(opt.word_vec_size, 5000).cuda()
コード例 #5
0
ファイル: Models.py プロジェクト: gzush/OpenNMT-py
    def __init__(self, opt):
        """
        Args:
            opt: model options
            dicts: Target `Dict` object
        """
        self.layers = opt.layers
        self.decoder_layer = opt.decoder_layer
        self._coverage = opt.coverage_attn
        self.hidden_size = opt.rnn_size
        self.input_feed = opt.input_feed
        input_size = opt.word_vec_size
        if self.input_feed:
            input_size += opt.rnn_size

        super(DecoderVideo, self).__init__()
        #self.embeddings = Embeddings(opt, dicts, None)

	if opt.rnn_type == "LSTM":
	    stackedCell = onmt.modules.StackedLSTM
	else:
	    stackedCell = onmt.modules.StackedGRU
	self.rnn = stackedCell(opt.layers, input_size,
			       opt.rnn_size, opt.dropout)
	self.context_gate = None
	if opt.context_gate is not None:
	    self.context_gate = ContextGateFactory(
		opt.context_gate, input_size,
		opt.rnn_size, opt.rnn_size,
		opt.rnn_size
	    )

        self.dropout = nn.Dropout(opt.dropout)

        # Std attention layer.
        self.attn = onmt.modules.GlobalAttention(opt.rnn_size,
                                                 coverage=self._coverage,
                                                 attn_type=opt.attention_type)

        # Separate Copy Attention.
        self._copy = False
        if opt.copy_attn:
            self.copy_attn = onmt.modules.GlobalAttention(
                opt.rnn_size, attn_type=opt.attention_type)
            self._copy = True
コード例 #6
0
    def __init__(self, rnn_type, num_layers, hidden_size,
                 attn_type, coverage_attn, context_gate,
                 copy_attn, dropout, embeddings):
        """
        See make_decoder() comment for arguments description.
        """
        super(RNNDecoderBase, self).__init__()

        # Basic attributes.
        self.decoder_type = 'rnn'
        self.num_layers = num_layers
        self.hidden_size = hidden_size
        self.embeddings = embeddings
        self.dropout = nn.Dropout(dropout)

        # Build the RNN.
        self.rnn = self._build_rnn(rnn_type, self._input_size, hidden_size,
                                   num_layers, dropout)

        # Set up the context gate.
        self.context_gate = None
        if context_gate is not None:
            self.context_gate = ContextGateFactory(
                context_gate, self._input_size,
                hidden_size, hidden_size, hidden_size
            )

        # Set up the standard attention.
        self._coverage = coverage_attn
        self.attn = onmt.modules.GlobalAttention(
            hidden_size, coverage=coverage_attn,
            attn_type=attn_type
        )

        # Set up a separated copy attention layer, if needed.
        self._copy = False
        if copy_attn:
            self.copy_attn = onmt.modules.GlobalAttention(
                hidden_size, attn_type=attn_type
            )
            self._copy = True