Python allennlp.nn.util.get_text_field_mask() Examples
The following are 30
code examples of allennlp.nn.util.get_text_field_mask().
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example.
You may also want to check out all available functions/classes of the module
allennlp.nn.util
, or try the search function
.
Example #1
Source File: util.py From ARC-Solvers with Apache License 2.0 | 6 votes |
def embed_encode_and_aggregate_text_field(question: Dict[str, torch.LongTensor], text_field_embedder, embeddings_dropout, encoder, aggregation_type): """ Given a batched token ids (2D) runs embeddings lookup with dropout, context encoding and aggregation :param question: :param text_field_embedder: The embedder to be used for embedding lookup :param embeddings_dropout: Dropout :param encoder: Context encoder :param aggregation_type: The type of aggregation - max, sum, avg, last :return: """ embedded_question = text_field_embedder(question) question_mask = get_text_field_mask(question).float() embedded_question = embeddings_dropout(embedded_question) encoded_question = encoder(embedded_question, question_mask) # aggregate sequences to a single item encoded_question_aggregated = seq2vec_seq_aggregate(encoded_question, question_mask, aggregation_type, None, 1) # bs X d return encoded_question_aggregated
Example #2
Source File: knowledge.py From OpenBookQA with Apache License 2.0 | 6 votes |
def embedd_encode_and_aggregate_text_field(question: Dict[str, torch.LongTensor], text_field_embedder, embeddings_dropout, encoder, aggregation_type, get_last_states=False): embedded_question = text_field_embedder(question) question_mask = get_text_field_mask(question).float() embedded_question = embeddings_dropout(embedded_question) encoded_question = encoder(embedded_question, question_mask) # aggregate sequences to a single item encoded_question_aggregated = seq2vec_seq_aggregate(encoded_question, question_mask, aggregation_type, encoder.is_bidirectional(), 1) # bs X d last_hidden_states = None if get_last_states: last_hidden_states = get_final_encoder_states(encoded_question, question_mask, encoder.is_bidirectional()) return encoded_question_aggregated, last_hidden_states
Example #3
Source File: lstm_crf.py From allennlp_tutorial with MIT License | 6 votes |
def forward(self, tokens: Dict[str, torch.Tensor], label: torch.Tensor) -> Dict[str, torch.Tensor]: mask = get_text_field_mask(tokens) embedded = self._embedder(tokens) encoded = self._encoder(embedded, mask) classified = self._classifier(encoded) viterbi_tags = self._crf.viterbi_tags(classified, mask) viterbi_tags = [path for path, score in viterbi_tags] broadcasted = self._broadcast_tags(viterbi_tags, classified) log_likelihood = self._crf(classified, label, mask) self._f1(broadcasted, label, mask) output: Dict[str, torch.Tensor] = {} output["loss"] = -log_likelihood return output
Example #4
Source File: knowledge.py From OpenBookQA with Apache License 2.0 | 6 votes |
def embed_encode_and_aggregate_text_field_with_feats(question: Dict[str, torch.LongTensor], text_field_embedder, embeddings_dropout, encoder, aggregation_type, token_features=None, get_last_states=False): embedded_question = text_field_embedder(question) question_mask = get_text_field_mask(question).float() embedded_question = embeddings_dropout(embedded_question) if token_features is not None: embedded_question = torch.cat([embedded_question, token_features], dim=-1) encoded_question = encoder(embedded_question, question_mask) # aggregate sequences to a single item encoded_question_aggregated = seq2vec_seq_aggregate(encoded_question, question_mask, aggregation_type, encoder.is_bidirectional(), 1) # bs X d last_hidden_states = None if get_last_states: last_hidden_states = get_final_encoder_states(encoded_question, question_mask, encoder.is_bidirectional()) return encoded_question_aggregated, last_hidden_states
Example #5
Source File: knowledge.py From OpenBookQA with Apache License 2.0 | 6 votes |
def embed_encode_and_aggregate_text_field_with_feats_only(question: Dict[str, torch.LongTensor], text_field_embedder, embeddings_dropout, encoder, aggregation_type, token_features=None, get_last_states=False): embedded_question = text_field_embedder(question) question_mask = get_text_field_mask(question).float() embedded_question = embeddings_dropout(embedded_question) if token_features is not None: embedded_question = torch.cat([token_features], dim=-1) encoded_question = encoder(embedded_question, question_mask) # aggregate sequences to a single item encoded_question_aggregated = seq2vec_seq_aggregate(encoded_question, question_mask, aggregation_type, encoder.is_bidirectional(), 1) # bs X d last_hidden_states = None if get_last_states: last_hidden_states = get_final_encoder_states(encoded_question, question_mask, encoder.is_bidirectional()) return encoded_question_aggregated, last_hidden_states
Example #6
Source File: lstm.py From allennlp_tutorial with MIT License | 6 votes |
def forward(self, tokens: Dict[str, torch.Tensor], label: Optional[torch.Tensor] = None) -> Dict[str, torch.Tensor]: mask = get_text_field_mask(tokens) embedded = self._embedder(tokens) encoded = self._encoder(embedded, mask) classified = self._classifier(encoded) output: Dict[str, torch.Tensor] = {} output['logits'] = classified if label is not None: self._f1(classified, label, mask) output['loss'] = sequence_cross_entropy_with_logits(classified, label, mask) return output
Example #7
Source File: util_test.py From allennlp with Apache License 2.0 | 6 votes |
def test_get_text_field_mask_returns_a_correct_mask(self): text_field_tensors = { "indexer_name": { "tokens": torch.LongTensor([[3, 4, 5, 0, 0], [1, 2, 0, 0, 0]]), "token_characters": torch.LongTensor( [ [[1, 2], [3, 0], [2, 0], [0, 0], [0, 0]], [[5, 0], [4, 6], [0, 0], [0, 0], [0, 0]], ] ), } } assert_almost_equal( util.get_text_field_mask(text_field_tensors).long().numpy(), [[1, 1, 1, 0, 0], [1, 1, 0, 0, 0]], )
Example #8
Source File: util_test.py From allennlp with Apache License 2.0 | 6 votes |
def test_get_text_field_mask_returns_a_correct_mask_custom_padding_id(self): text_field_tensors = { "indexer_name": { "tokens": torch.LongTensor([[3, 4, 5, 9, 9], [1, 2, 9, 9, 9]]), "token_characters": torch.LongTensor( [ [[1, 2], [3, 9], [2, 9], [9, 9], [9, 9]], [[5, 9], [4, 6], [9, 9], [9, 9], [9, 9]], ] ), } } assert_almost_equal( util.get_text_field_mask(text_field_tensors, padding_id=9).long().numpy(), [[1, 1, 1, 0, 0], [1, 1, 0, 0, 0]], )
Example #9
Source File: util_test.py From allennlp with Apache License 2.0 | 6 votes |
def test_get_text_field_mask_returns_a_correct_mask_list_field(self): text_field_tensors = { "indexer_name": { "list_tokens": torch.LongTensor( [ [[1, 2], [3, 0], [2, 0], [0, 0], [0, 0]], [[5, 0], [4, 6], [0, 0], [0, 0], [0, 0]], ] ) } } actual_mask = ( util.get_text_field_mask(text_field_tensors, num_wrapping_dims=1).long().numpy() ) expected_mask = (text_field_tensors["indexer_name"]["list_tokens"].numpy() > 0).astype( "int32" ) assert_almost_equal(actual_mask, expected_mask)
Example #10
Source File: custom_composed_seq2seq.py From summarus with Apache License 2.0 | 5 votes |
def _encode(self, source_tokens: Dict[str, torch.Tensor]) -> Dict[str, torch.Tensor]: # shape: (batch_size, max_input_sequence_length, encoder_input_dim) embedded_input = self._source_text_embedder(source_tokens) # shape: (batch_size, max_input_sequence_length) source_mask = util.get_text_field_mask(source_tokens) # shape: (batch_size, max_input_sequence_length, encoder_output_dim) encoder_outputs = self._encoder(embedded_input, source_mask.bool()) return { "source_mask": source_mask, "encoder_outputs": encoder_outputs, }
Example #11
Source File: util_test.py From magnitude with MIT License | 5 votes |
def test_get_text_field_mask_returns_a_correct_mask_list_field(self): text_field_tensors = { u"list_tokens": torch.LongTensor([[[1, 2], [3, 0], [2, 0], [0, 0], [0, 0]], [[5, 0], [4, 6], [0, 0], [0, 0], [0, 0]]]) } actual_mask = util.get_text_field_mask(text_field_tensors, num_wrapping_dims=1).numpy() expected_mask = (text_field_tensors[u'list_tokens'].numpy() > 0).astype(u'int32') assert_almost_equal(actual_mask, expected_mask)
Example #12
Source File: copynet.py From nlp-models with MIT License | 5 votes |
def _encode( self, source_tokens: Dict[str, torch.Tensor] ) -> Dict[str, torch.Tensor]: """ Encode source input sentences. """ # shape: (batch_size, max_input_sequence_length, encoder_input_dim) embedded_input = self._source_embedder(source_tokens) # shape: (batch_size, max_input_sequence_length) source_mask = util.get_text_field_mask(source_tokens) # shape: (batch_size, max_input_sequence_length, encoder_output_dim) encoder_outputs = self._encoder(embedded_input, source_mask) return {"source_mask": source_mask, "encoder_outputs": encoder_outputs}
Example #13
Source File: vcr.py From r2c with MIT License | 5 votes |
def collate_fn(data, to_gpu=False): """Creates mini-batch tensors """ images, instances = zip(*data) images = torch.stack(images, 0) batch = Batch(instances) td = batch.as_tensor_dict() if 'question' in td: td['question_mask'] = get_text_field_mask(td['question'], num_wrapping_dims=1) td['question_tags'][td['question_mask'] == 0] = -2 # Padding td['answer_mask'] = get_text_field_mask(td['answers'], num_wrapping_dims=1) td['answer_tags'][td['answer_mask'] == 0] = -2 td['box_mask'] = torch.all(td['boxes'] >= 0, -1).long() td['images'] = images # Deprecated # if to_gpu: # for k in td: # if k != 'metadata': # td[k] = {k2: v.cuda(non_blocking=True) for k2, v in td[k].items()} if isinstance(td[k], dict) else td[k].cuda( # non_blocking=True) # # No nested dicts # for k in sorted(td.keys()): # if isinstance(td[k], dict): # for k2 in sorted(td[k].keys()): # td['{}_{}'.format(k, k2)] = td[k].pop(k2) # td.pop(k) return td
Example #14
Source File: nlvr_semantic_parser.py From allennlp-semparse with Apache License 2.0 | 5 votes |
def _get_initial_rnn_state(self, sentence: Dict[str, torch.LongTensor]): embedded_input = self._sentence_embedder(sentence) # (batch_size, sentence_length) sentence_mask = util.get_text_field_mask(sentence) batch_size = embedded_input.size(0) # (batch_size, sentence_length, encoder_output_dim) encoder_outputs = self._dropout(self._encoder(embedded_input, sentence_mask)) final_encoder_output = util.get_final_encoder_states( encoder_outputs, sentence_mask, self._encoder.is_bidirectional() ) memory_cell = encoder_outputs.new_zeros(batch_size, self._encoder.get_output_dim()) attended_sentence, _ = self._decoder_step.attend_on_question( final_encoder_output, encoder_outputs, sentence_mask ) encoder_outputs_list = [encoder_outputs[i] for i in range(batch_size)] sentence_mask_list = [sentence_mask[i] for i in range(batch_size)] initial_rnn_state = [] for i in range(batch_size): initial_rnn_state.append( RnnStatelet( final_encoder_output[i], memory_cell[i], self._first_action_embedding, attended_sentence[i], encoder_outputs_list, sentence_mask_list, ) ) return initial_rnn_state
Example #15
Source File: topic_rnn.py From topic-rnn with Apache License 2.0 | 5 votes |
def _classify_sentiment(self, # type: ignore frequency_tokens: Dict[str, torch.LongTensor], mapped_term_frequencies: torch.Tensor, sentiment: Dict[str, torch.LongTensor]) -> torch.Tensor: # pylint: disable=arguments-differ """ Using the entire review (frequency_tokens), classify it as positive or negative. """ # Encode the input text. # Shape: (batch, sequence length, hidden size) embedded_input = self.text_field_embedder(frequency_tokens) input_mask = util.get_text_field_mask(frequency_tokens) # Use text_to_vec to avoid dealing with padding. encoded_input = self.text_to_vec(embedded_input, input_mask) # Construct feature vector. # Shape: (batch, RNN hidden size + number of topics) batch = mapped_term_frequencies.size(0) sentiment_features = torch.cat([encoded_input, mapped_term_frequencies.view(batch, -1)], dim=-1) # Classify. logits = self.sentiment_classifier(sentiment_features) loss = self.sentiment_criterion(logits, sentiment) self.metrics['sentiment'](logits, sentiment) return loss
Example #16
Source File: util_test.py From allennlp with Apache License 2.0 | 5 votes |
def test_get_text_field_mask_returns_mask_key(self): text_field_tensors = { "indexer_name": { "tokens": torch.LongTensor([[3, 4, 5, 0, 0], [1, 2, 0, 0, 0]]), "mask": torch.tensor([[False, False, True]]), } } assert_almost_equal( util.get_text_field_mask(text_field_tensors).long().numpy(), [[0, 0, 1]] )
Example #17
Source File: lstm_character.py From allennlp_tutorial with MIT License | 5 votes |
def forward(self, tokens: Dict[str, torch.Tensor], label: torch.Tensor) -> Dict[str, torch.Tensor]: # split the namespace into characters and tokens, since they # aren't the same shape characters = { 'characters': tokens['characters'] } tokens = { 'tokens': tokens['tokens'] } # get the tokens mask mask = get_text_field_mask(tokens) # get the cahracters mask, for which we use the nifty `num_wrapping_dims` argument character_mask = get_text_field_mask(characters, num_wrapping_dims=1) # decompose the shape into named parameters for future use batch_size, sequence_length, word_length = character_mask.shape # embed the characters embedded_characters = self._character_embedder(characters) # convert the embeddings from 4d embeddings to a 3d tensor # the first dimension of this tensor is (batch_size * num_tokens) # (i.e. each word is its own instance in a batch) embedded_characters = embedded_characters.view(batch_size*sequence_length, word_length, -1) character_mask = character_mask.view(batch_size*sequence_length, word_length) # run the character LSTM encoded_characters = self._character_encoder(embedded_characters, character_mask) # reshape the output into a 3d tensor we can concatenate with the word embeddings encoded_characters = encoded_characters.view(batch_size, sequence_length, -1) # run the standard LSTM NER pipeline embedded = self._word_embedder(tokens) embedded = torch.cat([embedded, encoded_characters], dim=2) encoded = self._encoder(embedded, mask) classified = self._classifier(encoded) if label is not None: self._f1(classified, label, mask) output["loss"] = sequence_cross_entropy_with_logits(classified, label, mask) return output
Example #18
Source File: summarunner.py From summarus with Apache License 2.0 | 5 votes |
def _encode(self, source_tokens: Dict[str, torch.Tensor]) -> torch.Tensor: # shape: (batch_size, max_input_sequence_length, encoder_input_dim) embedded_input = self._source_embedder(source_tokens) # shape: (batch_size, max_input_sequence_length) source_mask = util.get_text_field_mask(source_tokens) # shape: (batch_size, max_input_sequence_length, encoder_output_dim) encoder_outputs = self._sentence_encoder(embedded_input, source_mask) return encoder_outputs
Example #19
Source File: util_test.py From magnitude with MIT License | 5 votes |
def test_get_text_field_mask_returns_a_correct_mask_character_only_input(self): text_field_tensors = { u"token_characters": torch.LongTensor([[[1, 2, 3], [3, 0, 1], [2, 1, 0], [0, 0, 0]], [[5, 5, 5], [4, 6, 0], [0, 0, 0], [0, 0, 0]]]) } assert_almost_equal(util.get_text_field_mask(text_field_tensors).numpy(), [[1, 1, 1, 0], [1, 1, 0, 0]])
Example #20
Source File: util_test.py From magnitude with MIT License | 5 votes |
def test_get_text_field_mask_returns_a_correct_mask(self): text_field_tensors = { u"tokens": torch.LongTensor([[3, 4, 5, 0, 0], [1, 2, 0, 0, 0]]), u"token_characters": torch.LongTensor([[[1, 2], [3, 0], [2, 0], [0, 0], [0, 0]], [[5, 0], [4, 6], [0, 0], [0, 0], [0, 0]]]) } assert_almost_equal(util.get_text_field_mask(text_field_tensors).numpy(), [[1, 1, 1, 0, 0], [1, 1, 0, 0, 0]])
Example #21
Source File: nlvr_semantic_parser.py From magnitude with MIT License | 5 votes |
def _get_initial_rnn_state(self, sentence ): embedded_input = self._sentence_embedder(sentence) # (batch_size, sentence_length) sentence_mask = util.get_text_field_mask(sentence).float() batch_size = embedded_input.size(0) # (batch_size, sentence_length, encoder_output_dim) encoder_outputs = self._dropout(self._encoder(embedded_input, sentence_mask)) final_encoder_output = util.get_final_encoder_states(encoder_outputs, sentence_mask, self._encoder.is_bidirectional()) memory_cell = encoder_outputs.new_zeros(batch_size, self._encoder.get_output_dim()) attended_sentence = self._decoder_step.attend_on_sentence(final_encoder_output, encoder_outputs, sentence_mask) encoder_outputs_list = [encoder_outputs[i] for i in range(batch_size)] sentence_mask_list = [sentence_mask[i] for i in range(batch_size)] initial_rnn_state = [] for i in range(batch_size): initial_rnn_state.append(RnnState(final_encoder_output[i], memory_cell[i], self._first_action_embedding, attended_sentence[i], encoder_outputs_list, sentence_mask_list)) return initial_rnn_state
Example #22
Source File: pgn.py From summarus with Apache License 2.0 | 5 votes |
def _encode(self, source_tokens: Dict[str, torch.Tensor]) -> Dict[str, torch.Tensor]: # shape: (batch_size, max_input_sequence_length, encoder_input_dim) embedded_input = self._source_embedder.forward(source_tokens) # shape: (batch_size, max_input_sequence_length) source_mask = util.get_text_field_mask(source_tokens) # shape: (batch_size, max_input_sequence_length, encoder_output_dim) encoder_outputs = self._encoder.forward(embedded_input, source_mask) return { "source_mask": source_mask, "encoder_outputs": encoder_outputs, }
Example #23
Source File: util_test.py From allennlp with Apache License 2.0 | 5 votes |
def test_get_text_field_mask_returns_a_correct_mask_character_only_input(self): text_field_tensors = { "indexer_name": { "token_characters": torch.LongTensor( [ [[1, 2, 3], [3, 0, 1], [2, 1, 0], [0, 0, 0]], [[5, 5, 5], [4, 6, 0], [0, 0, 0], [0, 0, 0]], ] ) } } assert_almost_equal( util.get_text_field_mask(text_field_tensors).long().numpy(), [[1, 1, 1, 0], [1, 1, 0, 0]], )
Example #24
Source File: bag_of_word_counts_token_embedder.py From allennlp with Apache License 2.0 | 5 votes |
def forward(self, inputs: torch.Tensor) -> torch.Tensor: """ # Parameters inputs : `torch.Tensor` Shape `(batch_size, timesteps, sequence_length)` of word ids representing the current batch. # Returns `torch.Tensor` The bag-of-words representations for the input sequence, shape `(batch_size, vocab_size)` """ bag_of_words_vectors = [] mask = get_text_field_mask({"tokens": {"tokens": inputs}}) if self._ignore_oov: # also mask out positions corresponding to oov mask &= inputs != self._oov_idx for document, doc_mask in zip(inputs, mask): document = torch.masked_select(document, doc_mask) vec = torch.bincount(document, minlength=self.vocab_size).float() vec = vec.view(1, -1) bag_of_words_vectors.append(vec) bag_of_words_output = torch.cat(bag_of_words_vectors, 0) if self._projection: projection = self._projection bag_of_words_output = projection(bag_of_words_output) return bag_of_words_output
Example #25
Source File: model.py From glyce with Apache License 2.0 | 5 votes |
def forward(self, # type: ignore sentence: Dict[str, torch.LongTensor], label: torch.LongTensor = None) -> Dict[str, torch.Tensor]: embedded_sentence, multi_task_loss = self.text_field_embedder(sentence) sentence_mask = util.get_text_field_mask(sentence) encoded_sentence = self.sentence_encoder(embedded_sentence, sentence_mask) logits = self.classifier_feedforward(encoded_sentence) output_dict = {'logits': logits} if label is not None: loss = self.loss(logits, label) for metric_name in self.metrics: if metric_name == "cnn_loss": self.metrics[metric_name](sum(multi_task_loss.values()).item()) else: self.metrics[metric_name](logits, label) output_dict["loss"] = loss + self.current_ratio * sum(multi_task_loss.values()) if self.training: self.training_step += 1 # self.current_ratio = max(0, self.image_classification_ratio * (1 - self.training_step/self.total_steps)) if self.training_step % self.step_every_epoch == 0: self.current_ratio = self.current_ratio * self.decay_ratio print("\n\n\n") print("Ration now: ", self.current_ratio) print("\n\n\n") # if self.training_step > 1563: # self.current_ratio = 0 return output_dict
Example #26
Source File: vcr.py From HGL-pytorch with MIT License | 5 votes |
def collate_fn(data, to_gpu=False): """Creates mini-batch tensors """ images, instances = zip(*data) images = torch.stack(images, 0) batch = Batch(instances) td = batch.as_tensor_dict() if 'question' in td: td['question_mask'] = get_text_field_mask(td['question'], num_wrapping_dims=1) td['question_tags'][td['question_mask'] == 0] = -2 # Padding td['answer_mask'] = get_text_field_mask(td['answers'], num_wrapping_dims=1) td['answer_tags'][td['answer_mask'] == 0] = -2 td['box_mask'] = torch.all(td['boxes'] >= 0, -1).long() td['images'] = images # Deprecated # if to_gpu: # for k in td: # if k != 'metadata': # td[k] = {k2: v.cuda(non_blocking=True) for k2, v in td[k].items()} if isinstance(td[k], dict) else td[k].cuda( # non_blocking=True) # # No nested dicts # for k in sorted(td.keys()): # if isinstance(td[k], dict): # for k2 in sorted(td[k].keys()): # td['{}_{}'.format(k, k2)] = td[k].pop(k2) # td.pop(k) return td
Example #27
Source File: util.py From ARC-Solvers with Apache License 2.0 | 4 votes |
def embed_encode_and_aggregate_list_text_field(texts_list: Dict[str, torch.LongTensor], text_field_embedder, embeddings_dropout, encoder: Seq2SeqEncoder, aggregation_type, init_hidden_states=None): """ Given a batched list of token ids (3D) runs embeddings lookup with dropout, context encoding and aggregation on :param texts_list: List of texts :param text_field_embedder: The embedder to be used for embedding lookup :param embeddings_dropout: Dropout :param encoder: Context encoder :param aggregation_type: The type of aggregation - max, sum, avg, last :param get_last_states: If it should return the last states. :param init_hidden_states: Hidden states initialization :return: """ embedded_texts = text_field_embedder(texts_list) embedded_texts = embeddings_dropout(embedded_texts) batch_size, choices_cnt, choice_tokens_cnt, d = tuple(embedded_texts.shape) embedded_texts_flattened = embedded_texts.view([batch_size * choices_cnt, choice_tokens_cnt, -1]) # masks texts_mask_dim_3 = get_text_field_mask(texts_list).float() texts_mask_flatened = texts_mask_dim_3.view([-1, choice_tokens_cnt]) # context encoding multiple_texts_init_states = None if init_hidden_states is not None: if init_hidden_states.shape[0] == batch_size and init_hidden_states.shape[1] != choices_cnt: if init_hidden_states.shape[1] != encoder.get_output_dim(): raise ValueError("The shape of init_hidden_states is {0} but is expected to be {1} or {2}".format(str(init_hidden_states.shape), str([batch_size, encoder.get_output_dim()]), str([batch_size, choices_cnt, encoder.get_output_dim()]))) # in this case we passed only 2D tensor which is the default output from question encoder multiple_texts_init_states = init_hidden_states.unsqueeze(1).expand([batch_size, choices_cnt, encoder.get_output_dim()]).contiguous() # reshape this to match the flattedned tokens multiple_texts_init_states = multiple_texts_init_states.view([batch_size * choices_cnt, encoder.get_output_dim()]) else: multiple_texts_init_states = init_hidden_states.view([batch_size * choices_cnt, encoder.get_output_dim()]) encoded_texts_flattened = encoder(embedded_texts_flattened, texts_mask_flatened, hidden_state=multiple_texts_init_states) aggregated_choice_flattened = seq2vec_seq_aggregate(encoded_texts_flattened, texts_mask_flatened, aggregation_type, encoder, 1) # bs*ch X d aggregated_choice_flattened_reshaped = aggregated_choice_flattened.view([batch_size, choices_cnt, -1]) return aggregated_choice_flattened_reshaped
Example #28
Source File: classifier.py From vampire with Apache License 2.0 | 4 votes |
def forward(self, # type: ignore tokens: Dict[str, torch.LongTensor], label: torch.IntTensor = None) -> Dict[str, torch.Tensor]: # pylint: disable=arguments-differ """ Parameters ---------- tokens : Dict[str, torch.LongTensor] From a ``TextField`` label : torch.IntTensor, optional (default = None) From a ``LabelField`` Returns ------- An output dictionary consisting of: logits : torch.FloatTensor A tensor of shape ``(batch_size, num_labels)`` representing unnormalized log probabilities of the label. probs : torch.FloatTensor A tensor of shape ``(batch_size, num_labels)`` representing probabilities of the label. loss : torch.FloatTensor, optional A scalar loss to be optimised. """ embedded_text = self._input_embedder(tokens) mask = get_text_field_mask(tokens).float() if self._encoder: embedded_text = self._encoder(embedded_text=embedded_text, mask=mask) if self._dropout: embedded_text = self._dropout(embedded_text) logits = self._classification_layer(embedded_text) probs = torch.nn.functional.softmax(logits, dim=-1) output_dict = {"logits": logits, "probs": probs} if label is not None: loss = self._loss(logits, label.long().view(-1)) output_dict["loss"] = loss self._accuracy(logits, label) return output_dict
Example #29
Source File: simple_tagger.py From HIT-SCIR-CoNLL2019 with Apache License 2.0 | 4 votes |
def forward(self, # type: ignore tokens: Dict[str, torch.LongTensor], tags: torch.LongTensor = None, metadata: List[Dict[str, Any]] = None) -> Dict[str, torch.Tensor]: # pylint: disable=arguments-differ """ Parameters ---------- tokens : Dict[str, torch.LongTensor], required The output of ``TextField.as_array()``, which should typically be passed directly to a ``TextFieldEmbedder``. This output is a dictionary mapping keys to ``TokenIndexer`` tensors. At its most basic, using a ``SingleIdTokenIndexer`` this is: ``{"tokens": Tensor(batch_size, num_tokens)}``. This dictionary will have the same keys as were used for the ``TokenIndexers`` when you created the ``TextField`` representing your sequence. The dictionary is designed to be passed directly to a ``TextFieldEmbedder``, which knows how to combine different word representations into a single vector per token in your input. tags : torch.LongTensor, optional (default = None) A torch tensor representing the sequence of integer gold class labels of shape ``(batch_size, num_tokens)``. metadata : ``List[Dict[str, Any]]``, optional, (default = None) metadata containing the original words in the sentence to be tagged under a 'words' key. Returns ------- An output dictionary consisting of: logits : torch.FloatTensor A tensor of shape ``(batch_size, num_tokens, tag_vocab_size)`` representing unnormalised log probabilities of the tag classes. class_probabilities : torch.FloatTensor A tensor of shape ``(batch_size, num_tokens, tag_vocab_size)`` representing a distribution of the tag classes per word. loss : torch.FloatTensor, optional A scalar loss to be optimised. """ embedded_text_input = self.text_field_embedder(tokens) batch_size, sequence_length, _ = embedded_text_input.size() mask = get_text_field_mask(tokens) encoded_text = self.encoder(embedded_text_input, mask) logits = self.tag_projection_layer(encoded_text) reshaped_log_probs = logits.view(-1, self.num_classes) class_probabilities = F.softmax(reshaped_log_probs, dim=-1).view([batch_size, sequence_length, self.num_classes]) output_dict = {"logits": logits, "class_probabilities": class_probabilities} if tags is not None: loss = sequence_cross_entropy_with_logits(logits, tags, mask) for metric in self.metrics.values(): metric(logits, tags, mask.float()) if self._f1_metric is not None: self._f1_metric(logits, tags, mask.float()) output_dict["loss"] = loss if metadata is not None: output_dict["words"] = [x["words"] for x in metadata] return output_dict
Example #30
Source File: lstm_swag.py From swagaf with MIT License | 4 votes |
def forward(self, # type: ignore hypothesis0: Dict[str, torch.LongTensor], hypothesis1: Dict[str, torch.LongTensor], hypothesis2: Dict[str, torch.LongTensor], hypothesis3: Dict[str, torch.LongTensor], label: torch.IntTensor = None, ) -> Dict[str, torch.Tensor]: # pylint: disable=arguments-differ """ Parameters ---------- Returns ------- An output dictionary consisting of: logits : torch.FloatTensor A tensor of shape ``(batch_size, num_tokens, tag_vocab_size)`` representing unnormalised log probabilities of the tag classes. class_probabilities : torch.FloatTensor A tensor of shape ``(batch_size, num_tokens, tag_vocab_size)`` representing a distribution of the tag classes per word. loss : torch.FloatTensor, optional A scalar loss to be optimised. """ logits = [] for tokens in [hypothesis0, hypothesis1, hypothesis2, hypothesis3]: if isinstance(self.text_field_embedder, ElmoTokenEmbedder): self.text_field_embedder._elmo._elmo_lstm._elmo_lstm.reset_states() embedded_text_input = self.embedding_dropout(self.text_field_embedder(tokens)) mask = get_text_field_mask(tokens) batch_size, sequence_length, _ = embedded_text_input.size() encoded_text = self.encoder(embedded_text_input, mask) logits.append(self.output_prediction(encoded_text.max(1)[0])) logits = torch.cat(logits, -1) class_probabilities = F.softmax(logits, dim=-1).view([batch_size, 4]) output_dict = {"label_logits": logits, "label_probs": class_probabilities} if label is not None: loss = self._loss(logits, label.long().view(-1)) self._accuracy(logits, label.squeeze(-1)) output_dict["loss"] = loss return output_dict