parent
452f3cc0e1
commit
44ae44da49
@ -0,0 +1,208 @@
|
|||||||
|
type: "nn"
|
||||||
|
layers {
|
||||||
|
name: "sentence_states"
|
||||||
|
type: "data"
|
||||||
|
size: 32
|
||||||
|
active_type: ""
|
||||||
|
}
|
||||||
|
layers {
|
||||||
|
name: "sentence_scores"
|
||||||
|
type: "data"
|
||||||
|
size: 1
|
||||||
|
active_type: ""
|
||||||
|
}
|
||||||
|
layers {
|
||||||
|
name: "__kmax_sequence_score_layer_0__"
|
||||||
|
type: "kmax_seq_score"
|
||||||
|
active_type: ""
|
||||||
|
inputs {
|
||||||
|
input_layer_name: "sentence_scores"
|
||||||
|
}
|
||||||
|
beam_size: 5
|
||||||
|
}
|
||||||
|
layers {
|
||||||
|
name: "__sub_nested_seq_layer_0__"
|
||||||
|
type: "sub_nested_seq"
|
||||||
|
size: 32
|
||||||
|
active_type: ""
|
||||||
|
inputs {
|
||||||
|
input_layer_name: "sentence_states"
|
||||||
|
}
|
||||||
|
inputs {
|
||||||
|
input_layer_name: "__kmax_sequence_score_layer_0__"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
layers {
|
||||||
|
name: "__fc_layer_0__"
|
||||||
|
type: "fc"
|
||||||
|
size: 1
|
||||||
|
active_type: ""
|
||||||
|
inputs {
|
||||||
|
input_layer_name: "__sub_nested_seq_layer_0__"
|
||||||
|
input_parameter_name: "___fc_layer_0__.w0"
|
||||||
|
}
|
||||||
|
bias_parameter_name: "___fc_layer_0__.wbias"
|
||||||
|
}
|
||||||
|
layers {
|
||||||
|
name: "__kmax_sequence_score_layer_1__"
|
||||||
|
type: "kmax_seq_score"
|
||||||
|
active_type: ""
|
||||||
|
inputs {
|
||||||
|
input_layer_name: "sentence_scores"
|
||||||
|
}
|
||||||
|
beam_size: 5
|
||||||
|
}
|
||||||
|
layers {
|
||||||
|
name: "__seq_slice_layer_0__"
|
||||||
|
type: "seq_slice"
|
||||||
|
size: 32
|
||||||
|
active_type: ""
|
||||||
|
inputs {
|
||||||
|
input_layer_name: "__sub_nested_seq_layer_0__"
|
||||||
|
}
|
||||||
|
inputs {
|
||||||
|
input_layer_name: "__kmax_sequence_score_layer_1__"
|
||||||
|
}
|
||||||
|
select_first: true
|
||||||
|
}
|
||||||
|
layers {
|
||||||
|
name: "__fc_layer_1__"
|
||||||
|
type: "fc"
|
||||||
|
size: 1
|
||||||
|
active_type: ""
|
||||||
|
inputs {
|
||||||
|
input_layer_name: "__seq_slice_layer_0__"
|
||||||
|
input_parameter_name: "___fc_layer_1__.w0"
|
||||||
|
}
|
||||||
|
bias_parameter_name: "___fc_layer_1__.wbias"
|
||||||
|
}
|
||||||
|
layers {
|
||||||
|
name: "__kmax_sequence_score_layer_2__"
|
||||||
|
type: "kmax_seq_score"
|
||||||
|
active_type: ""
|
||||||
|
inputs {
|
||||||
|
input_layer_name: "__fc_layer_1__"
|
||||||
|
}
|
||||||
|
beam_size: 5
|
||||||
|
}
|
||||||
|
layers {
|
||||||
|
name: "sentences_ids"
|
||||||
|
type: "data"
|
||||||
|
size: 1
|
||||||
|
active_type: ""
|
||||||
|
}
|
||||||
|
layers {
|
||||||
|
name: "start_ids"
|
||||||
|
type: "data"
|
||||||
|
size: 1
|
||||||
|
active_type: ""
|
||||||
|
}
|
||||||
|
layers {
|
||||||
|
name: "end_ids"
|
||||||
|
type: "data"
|
||||||
|
size: 1
|
||||||
|
active_type: ""
|
||||||
|
}
|
||||||
|
layers {
|
||||||
|
name: "__cross_entropy_over_beam_0__"
|
||||||
|
type: "cross_entropy_over_beam"
|
||||||
|
active_type: ""
|
||||||
|
inputs {
|
||||||
|
input_layer_name: "sentence_scores"
|
||||||
|
}
|
||||||
|
inputs {
|
||||||
|
input_layer_name: "__kmax_sequence_score_layer_0__"
|
||||||
|
}
|
||||||
|
inputs {
|
||||||
|
input_layer_name: "__fc_layer_0__"
|
||||||
|
}
|
||||||
|
inputs {
|
||||||
|
input_layer_name: "__kmax_sequence_score_layer_1__"
|
||||||
|
}
|
||||||
|
inputs {
|
||||||
|
input_layer_name: "__fc_layer_1__"
|
||||||
|
}
|
||||||
|
inputs {
|
||||||
|
input_layer_name: "__kmax_sequence_score_layer_2__"
|
||||||
|
}
|
||||||
|
inputs {
|
||||||
|
input_layer_name: "sentences_ids"
|
||||||
|
}
|
||||||
|
inputs {
|
||||||
|
input_layer_name: "start_ids"
|
||||||
|
}
|
||||||
|
inputs {
|
||||||
|
input_layer_name: "end_ids"
|
||||||
|
}
|
||||||
|
coeff: 1.0
|
||||||
|
}
|
||||||
|
parameters {
|
||||||
|
name: "___fc_layer_0__.w0"
|
||||||
|
size: 32
|
||||||
|
initial_mean: 0.0
|
||||||
|
initial_std: 0.176776695297
|
||||||
|
dims: 32
|
||||||
|
dims: 1
|
||||||
|
initial_strategy: 0
|
||||||
|
initial_smart: true
|
||||||
|
}
|
||||||
|
parameters {
|
||||||
|
name: "___fc_layer_0__.wbias"
|
||||||
|
size: 1
|
||||||
|
initial_mean: 0.0
|
||||||
|
initial_std: 0.0
|
||||||
|
dims: 1
|
||||||
|
dims: 1
|
||||||
|
initial_strategy: 0
|
||||||
|
initial_smart: false
|
||||||
|
}
|
||||||
|
parameters {
|
||||||
|
name: "___fc_layer_1__.w0"
|
||||||
|
size: 32
|
||||||
|
initial_mean: 0.0
|
||||||
|
initial_std: 0.176776695297
|
||||||
|
dims: 32
|
||||||
|
dims: 1
|
||||||
|
initial_strategy: 0
|
||||||
|
initial_smart: true
|
||||||
|
}
|
||||||
|
parameters {
|
||||||
|
name: "___fc_layer_1__.wbias"
|
||||||
|
size: 1
|
||||||
|
initial_mean: 0.0
|
||||||
|
initial_std: 0.0
|
||||||
|
dims: 1
|
||||||
|
dims: 1
|
||||||
|
initial_strategy: 0
|
||||||
|
initial_smart: false
|
||||||
|
}
|
||||||
|
input_layer_names: "sentence_scores"
|
||||||
|
input_layer_names: "sentence_states"
|
||||||
|
input_layer_names: "sentences_ids"
|
||||||
|
input_layer_names: "start_ids"
|
||||||
|
input_layer_names: "end_ids"
|
||||||
|
output_layer_names: "__cross_entropy_over_beam_0__"
|
||||||
|
sub_models {
|
||||||
|
name: "root"
|
||||||
|
layer_names: "sentence_states"
|
||||||
|
layer_names: "sentence_scores"
|
||||||
|
layer_names: "__kmax_sequence_score_layer_0__"
|
||||||
|
layer_names: "__sub_nested_seq_layer_0__"
|
||||||
|
layer_names: "__fc_layer_0__"
|
||||||
|
layer_names: "__kmax_sequence_score_layer_1__"
|
||||||
|
layer_names: "__seq_slice_layer_0__"
|
||||||
|
layer_names: "__fc_layer_1__"
|
||||||
|
layer_names: "__kmax_sequence_score_layer_2__"
|
||||||
|
layer_names: "sentences_ids"
|
||||||
|
layer_names: "start_ids"
|
||||||
|
layer_names: "end_ids"
|
||||||
|
layer_names: "__cross_entropy_over_beam_0__"
|
||||||
|
input_layer_names: "sentence_scores"
|
||||||
|
input_layer_names: "sentence_states"
|
||||||
|
input_layer_names: "sentences_ids"
|
||||||
|
input_layer_names: "start_ids"
|
||||||
|
input_layer_names: "end_ids"
|
||||||
|
output_layer_names: "__cross_entropy_over_beam_0__"
|
||||||
|
is_recurrent_layer_group: false
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,39 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
#coding=utf-8
|
||||||
|
|
||||||
|
from paddle.trainer_config_helpers import *
|
||||||
|
beam_size = 5
|
||||||
|
|
||||||
|
# the first beam expansion.
|
||||||
|
sentence_states = data_layer(name="sentence_states", size=32)
|
||||||
|
sentence_scores = data_layer(name="sentence_scores", size=1)
|
||||||
|
topk_sentence_ids = kmax_sequence_score_layer(
|
||||||
|
input=sentence_scores, beam_size=beam_size)
|
||||||
|
|
||||||
|
# the second beam expansion.
|
||||||
|
topk_sen = sub_nested_seq_layer(
|
||||||
|
input=sentence_states, selected_indices=topk_sentence_ids)
|
||||||
|
start_pos_scores = fc_layer(input=topk_sen, size=1, act=LinearActivation())
|
||||||
|
topk_start_pos_ids = kmax_sequence_score_layer(
|
||||||
|
input=sentence_scores, beam_size=beam_size)
|
||||||
|
|
||||||
|
# the final beam expansion.
|
||||||
|
topk_start_spans = seq_slice_layer(
|
||||||
|
input=topk_sen, starts=topk_start_pos_ids, ends=None)
|
||||||
|
end_pos_scores = fc_layer(
|
||||||
|
input=topk_start_spans, size=1, act=LinearActivation())
|
||||||
|
topk_end_pos_ids = kmax_sequence_score_layer(
|
||||||
|
input=end_pos_scores, beam_size=beam_size)
|
||||||
|
|
||||||
|
# define the cost
|
||||||
|
sentence_idx = data_layer(name="sentences_ids", size=1)
|
||||||
|
start_idx = data_layer(name="start_ids", size=1)
|
||||||
|
end_idx = data_layer(name="end_ids", size=1)
|
||||||
|
cost = cross_entropy_over_beam(
|
||||||
|
input=[
|
||||||
|
sentence_scores, topk_sentence_ids, start_pos_scores,
|
||||||
|
topk_start_pos_ids, end_pos_scores, topk_end_pos_ids
|
||||||
|
],
|
||||||
|
label=[sentence_idx, start_idx, end_idx])
|
||||||
|
|
||||||
|
outputs(cost)
|
Loading…
Reference in new issue