Example #1
0
    def __init__(self, fields_tuples, options):
        super().__init__(fields_tuples)
        self.words_vocab_size = len(self.fields_dict['words'].vocab)
        self.explainer_attn_top_k = options.explainer_attn_top_k
        self.message_type = options.message_type
        self.emb_size = options.word_embeddings_size
        self.explainer_cheat_ratio = options.explainer_cheat_ratio
        self.explainer_idf = options.explainer_idf
        self.explainer_ignore_top_words = options.explainer_ignore_top_words
        self.valid_top_word_ids = None

        # create an embedding layer to reencode the words
        embeddings_weight = None
        if self.fields_dict['words'].vocab.vectors is not None:
            embeddings_weight = self.fields_dict['words'].vocab.vectors
            options.word_embeddings_size = embeddings_weight.size(1)

        self.word_emb_explainer = nn.Embedding(
            num_embeddings=len(self.fields_dict['words'].vocab),
            embedding_dim=options.word_embeddings_size,
            padding_idx=constants.PAD_ID,
            _weight=embeddings_weight,
        )
        if options.freeze_embeddings:
            self.word_emb_explainer.weight.requires_grad = False

        hidden_size = options.hidden_size[0]
        self.lstm_explainer = nn.LSTM(options.word_embeddings_size,
                                      hidden_size,
                                      batch_first=True,
                                      bidirectional=True)

        n = 2 if options.bidirectional else 1
        concat_features_size = n * options.hidden_size[0]
        concat_features_size += self.nb_classes
        self.scorer = OperationScorer(concat_features_size,
                                      n * options.hidden_size[0],
                                      concat_features_size // 4,
                                      op='add',
                                      scaled=True)

        self.attn = Attention(self.scorer,
                              dropout=options.attn_dropout,
                              max_activation=options.attn_max_activation)

        # save for later
        self.lstm_hidden = None
        self.lstm_out = None

        init_xavier(self.lstm_explainer, dist='uniform')
        init_xavier(self.attn, dist='uniform')

        self.rec_layer_ae = nn.Linear(self.words_vocab_size, 100)
        self.rec_layer_ae_2 = nn.Linear(100, self.words_vocab_size)
        self.rec_layer_pred = nn.Linear(n * hidden_size, n * hidden_size)

        self.nb_documents = 0
        self.idf = None
        if self.explainer_idf in ['embs', 'scores']:
            self.calc_idf(options)
Example #2
0
 def init_weights(self):
     init_xavier(self.linear_mid, dist='uniform')
     init_xavier(self.linear_message, dist='uniform')
     init_xavier(self.rnn_hyp, dist='uniform')
Example #3
0
 def init_weights(self):
     init_xavier(self.linear_input, dist='uniform')
     init_xavier(self.rnn_hyp, dist='uniform')
     init_xavier(self.linear_hyp, dist='uniform')
     init_xavier(self.linear_merge, dist='uniform')