mwptoolkit.model.Seq2Tree.tsn

class mwptoolkit.model.Seq2Tree.tsn.TSN(config, dataset)[source]

Bases: Module

Reference:

Zhang et al. “Teacher-Student Networks with Multiple Decoders for Solving Math Word Problem” in IJCAI 2020.

Initializes internal Module state, shared by both nn.Module and ScriptModule.

build_graph(seq_length, num_list, num_pos, group_nums)[source]
convert_idx2symbol(output, num_list, num_stack)[source]

batch_size=1

forward(seq, seq_length, nums_stack, num_size, num_pos, target=None, output_all_layers=False)[source]
Parameters
  • seq

  • seq_length

  • nums_stack

  • num_size

  • num_pos

  • target

  • output_all_layers

Returns

generate_tree_input(target, decoder_output, nums_stack_batch, num_start, unk)[source]
get_all_number_encoder_outputs(encoder_outputs, num_pos, batch_size, num_size, hidden_size)[source]
get_soft_target(batch_id)[source]
init_encoder_mask(batch_size)[source]
init_soft_target(batch_data)[source]

Build soft target

Parameters

batch_data (dict) – one batch data.

model_test(batch_data)[source]
predict(batch_data: dict, output_all_layers=False)[source]

predict samples without target.

Parameters
  • batch_data (dict) – one batch data.

  • output_all_layers (bool) – return all layer outputs of model.

Returns

token_logits, symbol_outputs, all_layer_outputs

student_calculate_loss(batch_data: dict) float[source]

Finish forward-propagating, calculating loss and back-propagation of student net.

Parameters

batch_data – one batch data.

Returns

loss value.

batch_data should include keywords ‘question’, ‘ques len’, ‘equation’, ‘equ len’, ‘num stack’, ‘num size’, ‘num pos’, ‘id’

student_net_1_decoder_forward(encoder_outputs, problem_output, all_nums_encoder_outputs, nums_stack, seq_mask, num_mask, target=None, output_all_layers=False)[source]
student_net_2_decoder_forward(encoder_outputs, problem_output, all_nums_encoder_outputs, nums_stack, seq_mask, num_mask, target=None, output_all_layers=False)[source]
student_net_decoder_forward(encoder_outputs, problem_output, all_nums_encoder_outputs, nums_stack, seq_mask, num_mask, target=None, output_all_layers=False)[source]
student_net_encoder_forward(seq_emb, seq_length, output_all_layers=False)[source]
student_net_forward(seq, seq_length, nums_stack, num_size, num_pos, target=None, output_all_layers=False) Tuple[Tuple[Tensor, Tensor], Tuple[Tensor, Tensor], Dict[str, Any]][source]
Parameters
  • seq (torch.Tensor) – input sequence, shape: [batch_size, seq_length].

  • seq_length (torch.Tensor) – the length of sequence, shape: [batch_size].

  • nums_stack (list) – different positions of the same number, length:[batch_size]

  • num_size (list) – number of numbers of input sequence, length:[batch_size].

  • num_pos (list) – number positions of input sequence, length:[batch_size].

  • target (torch.Tensor | None) – target, shape: [batch_size, target_length], default None.

  • output_all_layers (bool) – return output of all layers if output_all_layers is True, default False.

:return : token_logits:(token_logits_1,token_logits_2), symbol_outputs:(symbol_outputs_1,symbol_outputs_2), model_all_outputs. :rtype: tuple(tuple(torch.Tensor), tuple(torch.Tensor), dict)

student_test(batch_data: dict) Tuple[list, float, list, float, list][source]

Student net test.

Parameters

batch_data – one batch data.

Returns

predicted equation1, score1, predicted equation2, score2, target equation.

batch_data should include keywords ‘question’, ‘ques len’, ‘equation’, ‘num stack’, ‘num pos’, ‘num list’

teacher_calculate_loss(batch_data: dict) float[source]

Finish forward-propagating, calculating loss and back-propagation of teacher net.

Parameters

batch_data – one batch data.

Returns

loss value

batch_data should include keywords ‘question’, ‘ques len’, ‘equation’, ‘equ len’, ‘num stack’, ‘num size’, ‘num pos’

teacher_net_decoder_forward(encoder_outputs, problem_output, all_nums_encoder_outputs, nums_stack, seq_mask, num_mask, target=None, output_all_layers=False)[source]
teacher_net_encoder_forward(seq_emb, seq_length, output_all_layers=False)[source]
teacher_net_forward(seq, seq_length, nums_stack, num_size, num_pos, target=None, output_all_layers=False) Tuple[Tensor, Tensor, Dict[str, Any]][source]
Parameters
  • seq (torch.Tensor) – input sequence, shape: [batch_size, seq_length].

  • seq_length (torch.Tensor) – the length of sequence, shape: [batch_size].

  • nums_stack (list) – different positions of the same number, length:[batch_size]

  • num_size (list) – number of numbers of input sequence, length:[batch_size].

  • num_pos (list) – number positions of input sequence, length:[batch_size].

  • target (torch.Tensor | None) – target, shape: [batch_size, target_length], default None.

  • output_all_layers (bool) – return output of all layers if output_all_layers is True, default False.

:return : token_logits:[batch_size, output_length, output_size], symbol_outputs:[batch_size,output_length], model_all_outputs. :rtype: tuple(torch.Tensor, torch.Tensor, dict)

teacher_test(batch_data: dict) tuple[source]

Teacher net test.

Parameters

batch_data – one batch data.

Returns

predicted equation, target equation.

batch_data should include keywords ‘question’, ‘ques len’, ‘equation’, ‘num stack’, ‘num pos’, ‘num list’

training: bool
mwptoolkit.model.Seq2Tree.tsn.cosine_loss(logits, logits_1, length)[source]
mwptoolkit.model.Seq2Tree.tsn.cosine_sim(logits, logits_1)[source]
mwptoolkit.model.Seq2Tree.tsn.soft_cross_entropy_loss(predict_score, label_score)[source]
mwptoolkit.model.Seq2Tree.tsn.soft_target_loss(logits, soft_target, length)[source]