Python allennlp.nn.util.get_lengths_from_binary_sequence_mask() Examples
The following are 23
code examples of allennlp.nn.util.get_lengths_from_binary_sequence_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: biaffine_dependency_parser.py From magnitude with MIT License | 6 votes |
def decode(self, output_dict ) : head_tags = output_dict.pop(u"head_tags").cpu().detach().numpy() heads = output_dict.pop(u"heads").cpu().detach().numpy() mask = output_dict.pop(u"mask") lengths = get_lengths_from_binary_sequence_mask(mask) head_tag_labels = [] head_indices = [] for instance_heads, instance_tags, length in izip(heads, head_tags, lengths): instance_heads = list(instance_heads[1:length]) instance_tags = instance_tags[1:length] labels = [self.vocab.get_token_from_index(label, u"head_tags") for label in instance_tags] head_tag_labels.append(labels) head_indices.append(instance_heads) output_dict[u"predicted_dependencies"] = head_tag_labels output_dict[u"predicted_heads"] = head_indices return output_dict
Example #2
Source File: biaffine_glyph.py From glyce with Apache License 2.0 | 6 votes |
def decode(self, output_dict: Dict[str, torch.Tensor]) -> Dict[str, torch.Tensor]: head_tags = output_dict.pop("head_tags").cpu().detach().numpy() heads = output_dict.pop("heads").cpu().detach().numpy() mask = output_dict.pop("mask") lengths = get_lengths_from_binary_sequence_mask(mask) head_tag_labels = [] head_indices = [] for instance_heads, instance_tags, length in zip(heads, head_tags, lengths): instance_heads = list(instance_heads[1:length]) instance_tags = instance_tags[1:length] labels = [self.vocab.get_token_from_index(label, "head_tags") for label in instance_tags] head_tag_labels.append(labels) head_indices.append(instance_heads) output_dict["predicted_dependencies"] = head_tag_labels output_dict["predicted_heads"] = head_indices return output_dict
Example #3
Source File: biaffine_res.py From glyce with Apache License 2.0 | 6 votes |
def decode(self, output_dict: Dict[str, torch.Tensor]) -> Dict[str, torch.Tensor]: head_tags = output_dict.pop("head_tags").cpu().detach().numpy() heads = output_dict.pop("heads").cpu().detach().numpy() mask = output_dict.pop("mask") lengths = get_lengths_from_binary_sequence_mask(mask) head_tag_labels = [] head_indices = [] for instance_heads, instance_tags, length in zip(heads, head_tags, lengths): instance_heads = list(instance_heads[1:length]) instance_tags = instance_tags[1:length] labels = [self.vocab.get_token_from_index(label, "head_tags") for label in instance_tags] head_tag_labels.append(labels) head_indices.append(instance_heads) output_dict["predicted_dependencies"] = head_tag_labels output_dict["predicted_heads"] = head_indices return output_dict
Example #4
Source File: pytorch_seq2vec_wrapper_test.py From magnitude with MIT License | 6 votes |
def test_forward_pulls_out_correct_tensor_with_sequence_lengths(self): lstm = LSTM(bidirectional=True, num_layers=3, input_size=3, hidden_size=7, batch_first=True) encoder = PytorchSeq2VecWrapper(lstm) input_tensor = torch.rand([5, 7, 3]) input_tensor[1, 6:, :] = 0 input_tensor[2, 4:, :] = 0 input_tensor[3, 2:, :] = 0 input_tensor[4, 1:, :] = 0 mask = torch.ones(5, 7) mask[1, 6:] = 0 mask[2, 4:] = 0 mask[3, 2:] = 0 mask[4, 1:] = 0 sequence_lengths = get_lengths_from_binary_sequence_mask(mask) packed_sequence = pack_padded_sequence(input_tensor, sequence_lengths.tolist(), batch_first=True) _, state = lstm(packed_sequence) # Transpose output state, extract the last forward and backward states and # reshape to be of dimension (batch_size, 2 * hidden_size). reshaped_state = state[0].transpose(0, 1)[:, -2:, :].contiguous() explicitly_concatenated_state = torch.cat([reshaped_state[:, 0, :].squeeze(1), reshaped_state[:, 1, :].squeeze(1)], -1) encoder_output = encoder(input_tensor, mask) assert_almost_equal(encoder_output.data.numpy(), explicitly_concatenated_state.data.numpy())
Example #5
Source File: pytorch_seq2seq_wrapper_test.py From magnitude with MIT License | 6 votes |
def test_forward_pulls_out_correct_tensor_for_unsorted_batches(self): lstm = LSTM(bidirectional=True, num_layers=3, input_size=3, hidden_size=7, batch_first=True) encoder = PytorchSeq2SeqWrapper(lstm) input_tensor = torch.rand([5, 7, 3]) input_tensor[0, 3:, :] = 0 input_tensor[1, 4:, :] = 0 input_tensor[2, 2:, :] = 0 input_tensor[3, 6:, :] = 0 mask = torch.ones(5, 7) mask[0, 3:] = 0 mask[1, 4:] = 0 mask[2, 2:] = 0 mask[3, 6:] = 0 sequence_lengths = get_lengths_from_binary_sequence_mask(mask) sorted_inputs, sorted_sequence_lengths, restoration_indices, _ = sort_batch_by_length(input_tensor, sequence_lengths) packed_sequence = pack_padded_sequence(sorted_inputs, sorted_sequence_lengths.data.tolist(), batch_first=True) lstm_output, _ = lstm(packed_sequence) encoder_output = encoder(input_tensor, mask) lstm_tensor, _ = pad_packed_sequence(lstm_output, batch_first=True) assert_almost_equal(encoder_output.data.numpy(), lstm_tensor.index_select(0, restoration_indices).data.numpy())
Example #6
Source File: pytorch_seq2seq_wrapper_test.py From magnitude with MIT License | 6 votes |
def test_forward_pulls_out_correct_tensor_with_sequence_lengths(self): lstm = LSTM(bidirectional=True, num_layers=3, input_size=3, hidden_size=7, batch_first=True) encoder = PytorchSeq2SeqWrapper(lstm) input_tensor = torch.rand([5, 7, 3]) input_tensor[1, 6:, :] = 0 input_tensor[2, 4:, :] = 0 input_tensor[3, 2:, :] = 0 input_tensor[4, 1:, :] = 0 mask = torch.ones(5, 7) mask[1, 6:] = 0 mask[2, 4:] = 0 mask[3, 2:] = 0 mask[4, 1:] = 0 sequence_lengths = get_lengths_from_binary_sequence_mask(mask) packed_sequence = pack_padded_sequence(input_tensor, sequence_lengths.data.tolist(), batch_first=True) lstm_output, _ = lstm(packed_sequence) encoder_output = encoder(input_tensor, mask) lstm_tensor, _ = pad_packed_sequence(lstm_output, batch_first=True) assert_almost_equal(encoder_output.data.numpy(), lstm_tensor.data.numpy())
Example #7
Source File: boe_encoder.py From allennlp with Apache License 2.0 | 6 votes |
def forward(self, tokens: torch.Tensor, mask: torch.BoolTensor = None): if mask is not None: tokens = tokens * mask.unsqueeze(-1) # Our input has shape `(batch_size, num_tokens, embedding_dim)`, so we sum out the `num_tokens` # dimension. summed = tokens.sum(1) if self._averaged: if mask is not None: lengths = get_lengths_from_binary_sequence_mask(mask) length_mask = lengths > 0 # Set any length 0 to 1, to avoid dividing by zero. lengths = torch.max(lengths, lengths.new_ones(1)) else: lengths = tokens.new_full((1,), fill_value=tokens.size(1)) length_mask = None summed = summed / lengths.unsqueeze(-1).float() if length_mask is not None: summed = summed * (length_mask > 0).unsqueeze(-1) return summed
Example #8
Source File: semantic_role_labeler.py From magnitude with MIT License | 6 votes |
def decode(self, output_dict ) : u""" Does constrained viterbi decoding on class probabilities output in :func:`forward`. The constraint simply specifies that the output tags must be a valid BIO sequence. We add a ``"tags"`` key to the dictionary with the result. """ all_predictions = output_dict[u'class_probabilities'] sequence_lengths = get_lengths_from_binary_sequence_mask(output_dict[u"mask"]).data.tolist() if all_predictions.dim() == 3: predictions_list = [all_predictions[i].detach().cpu() for i in range(all_predictions.size(0))] else: predictions_list = [all_predictions] all_tags = [] transition_matrix = self.get_viterbi_pairwise_potentials() for predictions, length in izip(predictions_list, sequence_lengths): max_likelihood_sequence, _ = viterbi_decode(predictions[:length], transition_matrix) tags = [self.vocab.get_token_from_index(x, namespace=u"labels") for x in max_likelihood_sequence] all_tags.append(tags) output_dict[u'tags'] = all_tags return output_dict
Example #9
Source File: boe_encoder.py From magnitude with MIT License | 6 votes |
def forward(self, tokens , mask = None): #pylint: disable=arguments-differ if mask is not None: tokens = tokens * mask.unsqueeze(-1).float() # Our input has shape `(batch_size, num_tokens, embedding_dim)`, so we sum out the `num_tokens` # dimension. summed = tokens.sum(1) if self._averaged: if mask is not None: lengths = get_lengths_from_binary_sequence_mask(mask) length_mask = (lengths > 0) # Set any length 0 to 1, to avoid dividing by zero. lengths = torch.max(lengths, lengths.new_ones(1)) else: lengths = tokens.new_full((1,), fill_value=tokens.size(1)) length_mask = None summed = summed / lengths.unsqueeze(-1).float() if length_mask is not None: summed = summed * (length_mask > 0).float().unsqueeze(-1) return summed
Example #10
Source File: dependency_decoder.py From udify with MIT License | 6 votes |
def decode(self, output_dict: Dict[str, torch.Tensor]) -> Dict[str, torch.Tensor]: head_tags = output_dict.pop("head_tags").cpu().detach().numpy() heads = output_dict.pop("heads").cpu().detach().numpy() mask = output_dict.pop("mask") lengths = get_lengths_from_binary_sequence_mask(mask) head_tag_labels = [] head_indices = [] for instance_heads, instance_tags, length in zip(heads, head_tags, lengths): instance_heads = list(instance_heads[1:length]) instance_tags = instance_tags[1:length] labels = [self.vocab.get_token_from_index(label, "head_tags") for label in instance_tags] head_tag_labels.append(labels) head_indices.append(instance_heads) output_dict["predicted_dependencies"] = head_tag_labels output_dict["predicted_heads"] = head_indices return output_dict
Example #11
Source File: pytorch_seq2seq_wrapper_test.py From allennlp with Apache License 2.0 | 6 votes |
def test_forward_pulls_out_correct_tensor_with_sequence_lengths(self): lstm = LSTM(bidirectional=True, num_layers=3, input_size=3, hidden_size=7, batch_first=True) encoder = PytorchSeq2SeqWrapper(lstm) input_tensor = torch.rand([5, 7, 3]) input_tensor[1, 6:, :] = 0 input_tensor[2, 4:, :] = 0 input_tensor[3, 2:, :] = 0 input_tensor[4, 1:, :] = 0 mask = torch.ones(5, 7).bool() mask[1, 6:] = False mask[2, 4:] = False mask[3, 2:] = False mask[4, 1:] = False sequence_lengths = get_lengths_from_binary_sequence_mask(mask) packed_sequence = pack_padded_sequence( input_tensor, sequence_lengths.data.tolist(), batch_first=True ) lstm_output, _ = lstm(packed_sequence) encoder_output = encoder(input_tensor, mask) lstm_tensor, _ = pad_packed_sequence(lstm_output, batch_first=True) assert_almost_equal(encoder_output.data.numpy(), lstm_tensor.data.numpy())
Example #12
Source File: torch_util.py From combine-FEVER-NSMN with MIT License | 5 votes |
def get_length_and_mask(seq): len_mask = (seq != 0).long() len_t = get_lengths_from_binary_sequence_mask(len_mask) return len_mask, len_t
Example #13
Source File: util_test.py From allennlp with Apache License 2.0 | 5 votes |
def test_get_sequence_lengths_converts_to_long_tensor_and_avoids_variable_overflow(self): # Tests the following weird behaviour in Pytorch 0.1.12 # doesn't happen for our sequence masks: # # mask = torch.ones([260]).bool() # mask.sum() # equals 260. # var_mask = t.a.V(mask) # var_mask.sum() # equals 4, due to 8 bit precision - the sum overflows. binary_mask = torch.ones(2, 260).bool() lengths = util.get_lengths_from_binary_sequence_mask(binary_mask) numpy.testing.assert_array_equal(lengths.data.numpy(), numpy.array([260, 260]))
Example #14
Source File: util_test.py From allennlp with Apache License 2.0 | 5 votes |
def test_get_sequence_lengths_from_binary_mask(self): binary_mask = torch.tensor( [ [True, True, True, False, False, False], [True, True, False, False, False, False], [True, True, True, True, True, True], [True, False, False, False, False, False], ] ) lengths = util.get_lengths_from_binary_sequence_mask(binary_mask) numpy.testing.assert_array_equal(lengths.numpy(), numpy.array([3, 2, 6, 1]))
Example #15
Source File: pytorch_seq2vec_wrapper_test.py From allennlp with Apache License 2.0 | 5 votes |
def test_forward_pulls_out_correct_tensor_with_sequence_lengths(self): lstm = LSTM(bidirectional=True, num_layers=3, input_size=3, hidden_size=7, batch_first=True) encoder = PytorchSeq2VecWrapper(lstm) input_tensor = torch.rand([5, 7, 3]) input_tensor[1, 6:, :] = 0 input_tensor[2, 4:, :] = 0 input_tensor[3, 2:, :] = 0 input_tensor[4, 1:, :] = 0 mask = torch.ones(5, 7).bool() mask[1, 6:] = False mask[2, 4:] = False mask[3, 2:] = False mask[4, 1:] = False sequence_lengths = get_lengths_from_binary_sequence_mask(mask) packed_sequence = pack_padded_sequence( input_tensor, sequence_lengths.tolist(), batch_first=True ) _, state = lstm(packed_sequence) # Transpose output state, extract the last forward and backward states and # reshape to be of dimension (batch_size, 2 * hidden_size). reshaped_state = state[0].transpose(0, 1)[:, -2:, :].contiguous() explicitly_concatenated_state = torch.cat( [reshaped_state[:, 0, :].squeeze(1), reshaped_state[:, 1, :].squeeze(1)], -1 ) encoder_output = encoder(input_tensor, mask) assert_almost_equal(encoder_output.data.numpy(), explicitly_concatenated_state.data.numpy())
Example #16
Source File: encoder_base_test.py From allennlp with Apache License 2.0 | 5 votes |
def setup_method(self): super().setup_method() self.lstm = LSTM( bidirectional=True, num_layers=3, input_size=3, hidden_size=7, batch_first=True ) self.rnn = RNN( bidirectional=True, num_layers=3, input_size=3, hidden_size=7, batch_first=True ) self.encoder_base = _EncoderBase(stateful=True) tensor = torch.rand([5, 7, 3]) tensor[1, 6:, :] = 0 tensor[3, 2:, :] = 0 self.tensor = tensor mask = torch.ones(5, 7).bool() mask[1, 6:] = False mask[2, :] = False # <= completely masked mask[3, 2:] = False mask[4, :] = False # <= completely masked self.mask = mask self.batch_size = 5 self.num_valid = 3 sequence_lengths = get_lengths_from_binary_sequence_mask(mask) _, _, restoration_indices, sorting_indices = sort_batch_by_length(tensor, sequence_lengths) self.sorting_indices = sorting_indices self.restoration_indices = restoration_indices
Example #17
Source File: pytorch_seq2vec_wrapper_test.py From magnitude with MIT License | 5 votes |
def test_forward_pulls_out_correct_tensor_with_unsorted_batches(self): lstm = LSTM(bidirectional=True, num_layers=3, input_size=3, hidden_size=7, batch_first=True) encoder = PytorchSeq2VecWrapper(lstm) input_tensor = torch.rand([5, 7, 3]) input_tensor[0, 3:, :] = 0 input_tensor[1, 4:, :] = 0 input_tensor[2, 2:, :] = 0 input_tensor[3, 6:, :] = 0 mask = torch.ones(5, 7) mask[0, 3:] = 0 mask[1, 4:] = 0 mask[2, 2:] = 0 mask[3, 6:] = 0 sequence_lengths = get_lengths_from_binary_sequence_mask(mask) sorted_inputs, sorted_sequence_lengths, restoration_indices, _ = sort_batch_by_length(input_tensor, sequence_lengths) packed_sequence = pack_padded_sequence(sorted_inputs, sorted_sequence_lengths.tolist(), batch_first=True) _, state = lstm(packed_sequence) # Transpose output state, extract the last forward and backward states and # reshape to be of dimension (batch_size, 2 * hidden_size). sorted_transposed_state = state[0].transpose(0, 1).index_select(0, restoration_indices) reshaped_state = sorted_transposed_state[:, -2:, :].contiguous() explicitly_concatenated_state = torch.cat([reshaped_state[:, 0, :].squeeze(1), reshaped_state[:, 1, :].squeeze(1)], -1) encoder_output = encoder(input_tensor, mask) assert_almost_equal(encoder_output.data.numpy(), explicitly_concatenated_state.data.numpy())
Example #18
Source File: semantic_role_labeler_test.py From magnitude with MIT License | 5 votes |
def test_decode_runs_correctly(self): training_tensors = self.dataset.as_tensor_dict() output_dict = self.model(**training_tensors) decode_output_dict = self.model.decode(output_dict) lengths = get_lengths_from_binary_sequence_mask(decode_output_dict[u"mask"]).data.tolist() # Hard to check anything concrete which we haven't checked in the above # test, so we'll just check that the tags are equal to the lengths # of the individual instances, rather than the max length. for prediction, length in izip(decode_output_dict[u"tags"], lengths): assert len(prediction) == length
Example #19
Source File: util_test.py From magnitude with MIT License | 5 votes |
def test_get_sequence_lengths_from_binary_mask(self): binary_mask = torch.ByteTensor([[1, 1, 1, 0, 0, 0], [1, 1, 0, 0, 0, 0], [1, 1, 1, 1, 1, 1], [1, 0, 0, 0, 0, 0]]) lengths = util.get_lengths_from_binary_sequence_mask(binary_mask) numpy.testing.assert_array_equal(lengths.numpy(), numpy.array([3, 2, 6, 1]))
Example #20
Source File: util_test.py From magnitude with MIT License | 5 votes |
def test_get_sequence_lengths_converts_to_long_tensor_and_avoids_variable_overflow(self): # Tests the following weird behaviour in Pytorch 0.1.12 # doesn't happen for our sequence masks: # # mask = torch.ones([260]).byte() # mask.sum() # equals 260. # var_mask = t.a.V(mask) # var_mask.sum() # equals 4, due to 8 bit precision - the sum overflows. binary_mask = torch.ones(2, 260).byte() lengths = util.get_lengths_from_binary_sequence_mask(binary_mask) numpy.testing.assert_array_equal(lengths.data.numpy(), numpy.array([260, 260]))
Example #21
Source File: torch_util.py From semanticRetrievalMRS with MIT License | 5 votes |
def get_length_and_mask(seq): len_mask = (seq != 0).long() len_t = get_lengths_from_binary_sequence_mask(len_mask) return len_mask, len_t
Example #22
Source File: hotpot_bert_v0.py From semanticRetrievalMRS with MIT License | 5 votes |
def forward(self, input_ids, token_type_ids=None, attention_mask=None, gt_span=None, mode=ForwardMode.TRAIN): sequence_output, _ = self.bert_encoder(input_ids, token_type_ids, attention_mask, output_all_encoded_layers=False) joint_length = allen_util.get_lengths_from_binary_sequence_mask(attention_mask) joint_seq_logits = self.qa_outputs(sequence_output) # The following line is from AllenNLP bidaf. start_logits = allen_util.replace_masked_values(joint_seq_logits[:, :, 0], attention_mask, -1e18) # B, T, 2 end_logits = allen_util.replace_masked_values(joint_seq_logits[:, :, 1], attention_mask, -1e18) if mode == BertSpan.ForwardMode.TRAIN: assert gt_span is not None gt_start = gt_span[:, 0] # gt_span: [B, 2] -> [B] gt_end = gt_span[:, 1] start_loss = nll_loss(allen_util.masked_log_softmax(start_logits, attention_mask), gt_start) end_loss = nll_loss(allen_util.masked_log_softmax(end_logits, attention_mask), gt_end) # We delete squeeze bc it will cause problem when the batch size is 1, and remember the gt_start and gt_end should have shape [B]. # start_loss = nll_loss(allen_util.masked_log_softmax(start_logits, context_mask), gt_start.squeeze(-1)) # end_loss = nll_loss(allen_util.masked_log_softmax(end_logits, context_mask), gt_end.squeeze(-1)) loss = start_loss + end_loss return loss else: return start_logits, end_logits, joint_length
Example #23
Source File: pytorch_seq2seq_wrapper_test.py From allennlp with Apache License 2.0 | 5 votes |
def test_forward_pulls_out_correct_tensor_for_unsorted_batches(self): lstm = LSTM(bidirectional=True, num_layers=3, input_size=3, hidden_size=7, batch_first=True) encoder = PytorchSeq2SeqWrapper(lstm) input_tensor = torch.rand([5, 7, 3]) input_tensor[0, 3:, :] = 0 input_tensor[1, 4:, :] = 0 input_tensor[2, 2:, :] = 0 input_tensor[3, 6:, :] = 0 mask = torch.ones(5, 7).bool() mask[0, 3:] = False mask[1, 4:] = False mask[2, 2:] = False mask[3, 6:] = False sequence_lengths = get_lengths_from_binary_sequence_mask(mask) sorted_inputs, sorted_sequence_lengths, restoration_indices, _ = sort_batch_by_length( input_tensor, sequence_lengths ) packed_sequence = pack_padded_sequence( sorted_inputs, sorted_sequence_lengths.data.tolist(), batch_first=True ) lstm_output, _ = lstm(packed_sequence) encoder_output = encoder(input_tensor, mask) lstm_tensor, _ = pad_packed_sequence(lstm_output, batch_first=True) assert_almost_equal( encoder_output.data.numpy(), lstm_tensor.index_select(0, restoration_indices).data.numpy(), )