예제 #1
0
    def __init__(self, embeddings,
                 embeddings_dropout,
                 is_gru,
                 cell_hidden_size,
                 stacked_layers,
                 bidirectional,
                 att_mlp_layers,
                 att_mlp_dropout,
                 top_mlp_layers,
                 top_mlp_activation,
                 top_mlp_outer_activation,
                 targets,
                 top_mlp_dropout):
        super(MultiAttentionRNN, self).__init__()
        self.name = "MultiAttentionRNN"

        self.word_embedding_layer = PretrainedEmbeddingLayer(embeddings, dropout=embeddings_dropout, trainable=False)

        self.cell = CellLayer(is_gru, self.word_embedding_layer.get_output_size(),
                              cell_hidden_size, bidirectional, stacked_layers)
        large_size = cell_hidden_size * 2 if bidirectional else cell_hidden_size
        decision_layers = [MLP(num_of_layers=top_mlp_layers,
                               init_size=large_size,
                               out_size=1,
                               dropout=top_mlp_dropout,
                               inner_activation=ActivationFactory.get_activation(top_mlp_activation),
                               outer_activation=ActivationFactory.get_activation(top_mlp_outer_activation)) for _ in range(targets)]
        self.decision_layers = ModuleList(decision_layers)
        self.attentions = ModuleList(
            [AttendedState(att_mlp_layers, large_size, att_mlp_dropout, relu) for _ in range(targets)])
        self.seq = SequentialModel([self.word_embedding_layer, self.cell])
        self.trainable_weights = list(filter(lambda p: p.requires_grad, self.parameters()))
예제 #2
0
    def __init__(self, embeddings,
                 embeddings_dropout=0.0,
                 is_gru=True,
                 cell_hidden_size=128,
                 stacked_layers=1,
                 bidirectional=False,
                 top_mlp_layers=2,
                 top_mlp_activation="relu",
                 top_mlp_outer_activation=None, targets=11,
                 top_mlp_dropout=0.0):
        super(LastStateRNN, self).__init__()
        self.name = "LastStateRNN"

        self.word_embedding_layer = PretrainedEmbeddingLayer(embeddings, dropout=embeddings_dropout, trainable=False)

        self.cell = CellLayer(is_gru, self.word_embedding_layer.get_output_size(),
                              cell_hidden_size, bidirectional, stacked_layers)
        self.decision_layer = MLP(num_of_layers=top_mlp_layers,
                                  init_size=self.cell.get_output_size(),
                                  out_size=targets,
                                  dropout=top_mlp_dropout,
                                  inner_activation=ActivationFactory.get_activation(top_mlp_activation),
                                  outer_activation=ActivationFactory.get_activation(top_mlp_outer_activation))
        self.state = LastState(self.cell.get_output_size())
        self.seq = SequentialModel([self.word_embedding_layer, self.cell, self.state, self.decision_layer])
        self.trainable_weights = list(filter(lambda p: p.requires_grad, self.parameters()))
예제 #3
0
    def __init__(self, embeddings, embeddings_dropout, att_mlp_layers,
                 att_mlp_dropout, top_mlp_layers, top_mlp_activation,
                 top_mlp_outer_activation, targets, top_mlp_dropout):

        super(MLPWithAttentionModel, self).__init__()
        self.name = "MLPWithAttentionModel"
        self.word_embedding_layer = PretrainedEmbeddingLayer(
            embeddings, dropout=embeddings_dropout, trainable=False)
        fs_size = self.word_embedding_layer.get_output_size()
        decision_layers = [
            MLP(num_of_layers=top_mlp_layers,
                init_size=fs_size,
                out_size=1,
                dropout=top_mlp_dropout,
                inner_activation=ActivationFactory.get_activation(
                    top_mlp_activation),
                outer_activation=ActivationFactory.get_activation(
                    top_mlp_outer_activation)) for _ in range(targets)
        ]
        self.decision_layers = ModuleList(decision_layers)
        attentions = [
            AttendedState(att_mlp_layers, fs_size, att_mlp_dropout, relu)
            for _ in range(targets)
        ]
        self.attentions = ModuleList(attentions)
        self.trainable_weights = list(
            filter(lambda p: p.requires_grad, self.parameters()))
예제 #4
0
    def __init__(self, embeddings, embeddings_dropout, filters, min_kernel,
                 max_kernel, top_mlp_layers, top_mlp_activation,
                 top_mlp_outer_activation, targets, top_mlp_dropout):
        super(CNN, self).__init__()
        self.name = "CNN"

        self.word_embedding_layer = PretrainedEmbeddingLayer(
            embeddings, dropout=embeddings_dropout, trainable=False)

        conv_blocks = [
            ConvBlock(in_channels=self.word_embedding_layer.get_output_size(),
                      filters=filters,
                      window=i) for i in range(min_kernel, max_kernel + 1)
        ]

        self.conv_blocks = ModuleList(conv_blocks)

        concat_size = len(conv_blocks) * filters
        self.decision_layer = MLP(
            num_of_layers=top_mlp_layers,
            init_size=concat_size,
            out_size=targets,
            dropout=top_mlp_dropout,
            inner_activation=ActivationFactory.get_activation(
                top_mlp_activation),
            outer_activation=ActivationFactory.get_activation(
                top_mlp_outer_activation))
        self.trainable_weights = list(
            filter(lambda p: p.requires_grad, self.parameters()))
예제 #5
0
class MultiAttentionRNNConcatCNN(Module):
    def __init__(self, embeddings, embeddings_dropout, is_gru, filters,
                 min_kernel, max_kernel, cell_hidden_size, stacked_layers,
                 bidirectional, att_mlp_layers, att_mlp_dropout,
                 top_mlp_layers, top_mlp_activation, top_mlp_outer_activation,
                 targets, top_mlp_dropout):
        super(MultiAttentionRNNConcatCNN, self).__init__()
        self.name = "MultiAttentionRNNConcatCNN"
        self.targets = targets

        self.word_embedding_layer = PretrainedEmbeddingLayer(
            embeddings, dropout=embeddings_dropout, trainable=False)
        conv_blocks = [
            ConvBlock(in_channels=self.word_embedding_layer.get_output_size(),
                      filters=filters,
                      window=i) for i in range(min_kernel, max_kernel + 1)
        ]
        self.conv_blocks = ModuleList(conv_blocks)
        self.cell = CellLayer(is_gru,
                              self.word_embedding_layer.get_output_size(),
                              cell_hidden_size, bidirectional, stacked_layers)
        concat_size = self.cell.get_output_size() + filters * len(conv_blocks)
        decision_layers = [
            MLP(num_of_layers=top_mlp_layers,
                init_size=concat_size,
                out_size=1,
                dropout=top_mlp_dropout,
                inner_activation=ActivationFactory.get_activation(
                    top_mlp_activation),
                outer_activation=ActivationFactory.get_activation(
                    top_mlp_outer_activation)) for _ in range(targets)
        ]
        self.decision_layers = ModuleList(decision_layers)
        attentions = [
            AttendedState(att_mlp_layers, self.cell.get_output_size(),
                          att_mlp_dropout, relu) for _ in range(targets)
        ]
        self.attentions = ModuleList(attentions)
        self.trainable_weights = list(
            filter(lambda p: p.requires_grad, self.parameters()))

    def forward(self, x):
        embeddings = self.word_embedding_layer(x)
        n_grams = [block(embeddings) for block in self.conv_blocks]
        n_grams_concat = torch.cat(n_grams, dim=1)
        sequence_encoder = self.cell(embeddings)
        states = [attention(sequence_encoder) for attention in self.attentions]
        states = [
            torch.cat((state, n_grams_concat), dim=1) for state in states
        ]
        decisions = [
            decision(state)
            for decision, state in zip(self.decision_layers, states)
        ]
        out = torch.cat(decisions, dim=1)
        return out
예제 #6
0
    def __init__(self, embeddings, embeddings_dropout, is_gru, filters,
                 min_kernel, max_kernel, cell_hidden_size, stacked_layers,
                 bidirectional, att_mlp_layers, att_mlp_dropout,
                 top_mlp_layers, top_mlp_activation, top_mlp_outer_activation,
                 targets, top_mlp_dropout):
        super(MultiAttentionRNNConcatCNN, self).__init__()
        self.name = "MultiAttentionRNNConcatCNN"
        self.targets = targets

        self.word_embedding_layer = PretrainedEmbeddingLayer(
            embeddings, dropout=embeddings_dropout, trainable=False)
        conv_blocks = [
            ConvBlock(in_channels=self.word_embedding_layer.get_output_size(),
                      filters=filters,
                      window=i) for i in range(min_kernel, max_kernel + 1)
        ]
        self.conv_blocks = ModuleList(conv_blocks)
        self.cell = CellLayer(is_gru,
                              self.word_embedding_layer.get_output_size(),
                              cell_hidden_size, bidirectional, stacked_layers)
        concat_size = self.cell.get_output_size() + filters * len(conv_blocks)
        decision_layers = [
            MLP(num_of_layers=top_mlp_layers,
                init_size=concat_size,
                out_size=1,
                dropout=top_mlp_dropout,
                inner_activation=ActivationFactory.get_activation(
                    top_mlp_activation),
                outer_activation=ActivationFactory.get_activation(
                    top_mlp_outer_activation)) for _ in range(targets)
        ]
        self.decision_layers = ModuleList(decision_layers)
        attentions = [
            AttendedState(att_mlp_layers, self.cell.get_output_size(),
                          att_mlp_dropout, relu) for _ in range(targets)
        ]
        self.attentions = ModuleList(attentions)
        self.trainable_weights = list(
            filter(lambda p: p.requires_grad, self.parameters()))