未验证 提交 3ceffb4a 编写于 作者: S Steffy-zxf 提交者: GitHub

Update matching task (#814)

上级 3c090720
...@@ -52,9 +52,9 @@ if __name__ == '__main__': ...@@ -52,9 +52,9 @@ if __name__ == '__main__':
# Construct transfer learning network # Construct transfer learning network
# Use sequence-level output. # Use sequence-level output.
query = outputs["pooled_output"] query = outputs["sequence_output"]
left = outputs['pooled_output_2'] left = outputs['sequence_output_2']
right = outputs['pooled_output_3'] right = outputs['sequence_output_3']
# Select fine-tune strategy # Select fine-tune strategy
strategy = hub.AdamWeightDecayStrategy( strategy = hub.AdamWeightDecayStrategy(
......
...@@ -48,9 +48,9 @@ if __name__ == '__main__': ...@@ -48,9 +48,9 @@ if __name__ == '__main__':
# Construct transfer learning network. # Construct transfer learning network.
# Use sequence-level output. # Use sequence-level output.
query = outputs["pooled_output"] query = outputs["sequence_output"]
left = outputs['pooled_output_2'] left = outputs['sequence_output_2']
right = outputs['pooled_output_3'] right = outputs['sequence_output_3']
# Select fine-tune strategy. # Select fine-tune strategy.
strategy = hub.AdamWeightDecayStrategy() strategy = hub.AdamWeightDecayStrategy()
...@@ -91,6 +91,6 @@ if __name__ == '__main__': ...@@ -91,6 +91,6 @@ if __name__ == '__main__':
max_seq_len=args.max_seq_len, max_seq_len=args.max_seq_len,
label_list=dataset.get_labels(), label_list=dataset.get_labels(),
return_result=True, return_result=True,
accelerate_mode=False) accelerate_mode=True)
for index, text in enumerate(text_pairs): for index, text in enumerate(text_pairs):
print("data: %s, prediction_label: %s" % (text, results[index])) print("data: %s, prediction_label: %s" % (text, results[index]))
...@@ -3,7 +3,7 @@ CKPT_DIR="./ckpt_embedding_pairwise_matching" ...@@ -3,7 +3,7 @@ CKPT_DIR="./ckpt_embedding_pairwise_matching"
python -u embedding_pairwise_matching.py \ python -u embedding_pairwise_matching.py \
--batch_size=128 \ --batch_size=128 \
--checkpoint_dir=${CKPT_DIR} \ --checkpoint_dir=${CKPT_DIR} \
--learning_rate=5e-2 \ --learning_rate=5e-3 \
--max_seq_len=128 \ --max_seq_len=128 \
--num_epoch=300 \ --num_epoch=100 \
--network=bow --network=bow
...@@ -4,4 +4,4 @@ python -u embedding_pairwise_matching_predict.py \ ...@@ -4,4 +4,4 @@ python -u embedding_pairwise_matching_predict.py \
--batch_size=1 \ --batch_size=1 \
--checkpoint_dir=${CKPT_DIR} \ --checkpoint_dir=${CKPT_DIR} \
--max_seq_len=128 \ --max_seq_len=128 \
--network=lstm --network=bow
...@@ -88,12 +88,12 @@ if __name__ == '__main__': ...@@ -88,12 +88,12 @@ if __name__ == '__main__':
# Prediction data sample. # Prediction data sample.
text_pairs = [ text_pairs = [
[ [
"请问不是您的账户吗?", # query "淘宝上怎么用信用卡分期付款", # query
"您好,请问您使用的邮箱类型是?" # title "淘宝上怎么分期付款,没有信用卡", # title
], ],
[ [
"推荐个手机游戏", # query "山楂干怎么吃好吃?", # query
"手机游戏推荐" # title "山楂怎么做好吃", # title
] ]
] ]
......
...@@ -52,8 +52,8 @@ if __name__ == '__main__': ...@@ -52,8 +52,8 @@ if __name__ == '__main__':
# Construct transfer learning network # Construct transfer learning network
# Use token-level output. # Use token-level output.
query = outputs["pooled_output"] query = outputs["sequence_output"]
left = outputs['pooled_output_2'] left = outputs['sequence_output_2']
# Select fine-tune strategy # Select fine-tune strategy
strategy = hub.AdamWeightDecayStrategy( strategy = hub.AdamWeightDecayStrategy(
......
...@@ -48,8 +48,8 @@ if __name__ == '__main__': ...@@ -48,8 +48,8 @@ if __name__ == '__main__':
# Construct transfer learning network # Construct transfer learning network
# Use token-level output. # Use token-level output.
query = outputs["pooled_output"] query = outputs["sequence_output"]
left = outputs['pooled_output_2'] left = outputs['sequence_output_2']
# Select fine-tune strategy # Select fine-tune strategy
strategy = hub.AdamWeightDecayStrategy() strategy = hub.AdamWeightDecayStrategy()
...@@ -73,12 +73,12 @@ if __name__ == '__main__': ...@@ -73,12 +73,12 @@ if __name__ == '__main__':
# Prediction data sample. # Prediction data sample.
text_pairs = [ text_pairs = [
[ [
"小品《战狼故事》中,吴京突破重重障碍解救爱人,深情告白太感人;爱人", # query "淘宝上怎么用信用卡分期付款", # query
"外文名:愛人;摘要:爱人,意思是:情人。;义项描述:日本语词汇;语言:日文;中文名:爱人;标签:文化;", # title "淘宝上怎么分期付款,没有信用卡", # title
], ],
[ [
"儿子祝融被杀害,西天王大发雷霆,立即下令捉拿天庭三公主;儿子", # query "山楂干怎么吃好吃?", # query
"摘要:《儿子》是曹国昌1983年创作的木雕,收藏于中国美术馆。;材质::木雕;作者::曹国昌;中文名:儿子;创作年代::1983年;义项描述:曹国昌木雕;标签:文化;", # title "山楂怎么做好吃", # title
] ]
] ]
...@@ -88,6 +88,6 @@ if __name__ == '__main__': ...@@ -88,6 +88,6 @@ if __name__ == '__main__':
max_seq_len=args.max_seq_len, max_seq_len=args.max_seq_len,
label_list=dataset.get_labels(), label_list=dataset.get_labels(),
return_result=True, return_result=True,
accelerate_mode=False) accelerate_mode=True)
for index, text in enumerate(text_pairs): for index, text in enumerate(text_pairs):
print("data: %s, prediction_label: %s" % (text, results[index])) print("data: %s, prediction_label: %s" % (text, results[index]))
...@@ -5,5 +5,5 @@ python -u embedding_pointwise_matching.py \ ...@@ -5,5 +5,5 @@ python -u embedding_pointwise_matching.py \
--checkpoint_dir=${CKPT_DIR} \ --checkpoint_dir=${CKPT_DIR} \
--learning_rate=5e-3 \ --learning_rate=5e-3 \
--max_seq_len=128 \ --max_seq_len=128 \
--num_epoch=300 \ --num_epoch=100 \
--network=bow --network=bow
...@@ -106,32 +106,81 @@ class PairwiseTextMatchingTask(BaseTask): ...@@ -106,32 +106,81 @@ class PairwiseTextMatchingTask(BaseTask):
% self.network) % self.network)
query_feats, left_feats = net_func(query_unpad, left_unpad) query_feats, left_feats = net_func(query_unpad, left_unpad)
query_feats = fluid.layers.fc(
input=query_feats,
size=300,
param_attr=fluid.ParamAttr(
name="query_fc_w",
initializer=fluid.initializer.TruncatedNormal(scale=0.02),
),
bias_attr=fluid.ParamAttr(
name="query_fc_b",
initializer=fluid.initializer.Constant(0.),
),
act="tanh")
left_feats = fluid.layers.fc(
input=left_feats,
size=300,
param_attr=fluid.ParamAttr(
name="title_fc_w",
initializer=fluid.initializer.TruncatedNormal(scale=0.02),
),
bias_attr=fluid.ParamAttr(
name="title_fc_b",
initializer=fluid.initializer.Constant(0.),
),
act="tanh")
left_concat = fluid.layers.concat( left_concat = fluid.layers.concat(
input=[query_feats, left_feats], axis=1) input=[query_feats, left_feats], axis=1)
query_feats, right_feats = net_func(query_unpad, right_unpad) _, right_feats = net_func(query_unpad, right_unpad)
right_feats = fluid.layers.fc(
input=right_feats,
size=300,
param_attr=fluid.ParamAttr(
name="title_fc_w",
initializer=fluid.initializer.TruncatedNormal(scale=0.02),
),
bias_attr=fluid.ParamAttr(
name="title_fc_b",
initializer=fluid.initializer.Constant(0.),
),
act="tanh")
right_concat = fluid.layers.concat( right_concat = fluid.layers.concat(
input=[query_feats, right_feats], input=[query_feats, right_feats], axis=1)
axis=1,
)
else: else:
query_feats = fluid.layers.dropout( query_feats = fluid.layers.dropout(
x=self.query_feature, x=self.query_feature,
dropout_prob=0.1, dropout_prob=0.1,
dropout_implementation="upscale_in_train") dropout_implementation="upscale_in_train")
query_mean = fluid.layers.reduce_mean(query_feats, dim=1)
left_feats = fluid.layers.dropout( left_feats = fluid.layers.dropout(
x=self.left_feature, x=self.left_feature,
dropout_prob=0.1, dropout_prob=0.1,
dropout_implementation="upscale_in_train") dropout_implementation="upscale_in_train")
left_mean = fluid.layers.reduce_mean(left_feats, dim=1)
left_sub = fluid.layers.elementwise_sub(query_mean, left_mean)
left_sub = fluid.layers.abs(left_sub)
left_concat = fluid.layers.concat( left_concat = fluid.layers.concat(
input=[query_feats, left_feats], axis=-1) input=[query_mean, left_mean, left_sub], axis=-1)
right_feats = fluid.layers.dropout( right_feats = fluid.layers.dropout(
x=self.right_feature, x=self.right_feature,
dropout_prob=0.1, dropout_prob=0.1,
dropout_implementation="upscale_in_train") dropout_implementation="upscale_in_train")
right_mean = fluid.layers.reduce_mean(right_feats, dim=1)
right_sub = fluid.layers.elementwise_sub(query_mean, right_mean)
right_sub = fluid.layers.abs(right_sub)
right_concat = fluid.layers.concat( right_concat = fluid.layers.concat(
input=[query_feats, right_feats], input=[query_mean, right_mean, right_sub],
axis=-1, axis=-1,
) )
...@@ -435,22 +484,91 @@ class PointwiseTextMatchingTask(BaseTask): ...@@ -435,22 +484,91 @@ class PointwiseTextMatchingTask(BaseTask):
self.network) self.network)
query_feats, title_feats = net_func(query_unpad, title_unpad) query_feats, title_feats = net_func(query_unpad, title_unpad)
query_fc = fluid.layers.fc(
input=query_feats,
size=300,
param_attr=fluid.ParamAttr(
name="query_fc_w",
initializer=fluid.initializer.TruncatedNormal(scale=0.02),
),
bias_attr=fluid.ParamAttr(
name="query_fc_b",
initializer=fluid.initializer.Constant(0.),
),
act="tanh")
title_fc = fluid.layers.fc(
input=title_feats,
size=300,
param_attr=fluid.ParamAttr(
name="title_fc_w",
initializer=fluid.initializer.TruncatedNormal(scale=0.02),
),
bias_attr=fluid.ParamAttr(
name="title_fc_b",
initializer=fluid.initializer.Constant(0.),
),
act="tanh")
title_concat = fluid.layers.concat( title_concat = fluid.layers.concat(
input=[query_feats, title_feats], axis=1) input=[query_fc, title_fc], axis=1)
fc1 = fluid.layers.fc(
input=title_concat,
size=256,
param_attr=fluid.ParamAttr(
name="matching_fc1_w",
initializer=fluid.initializer.TruncatedNormal(scale=0.02),
),
bias_attr=fluid.ParamAttr(
name="matching_fc1_b",
initializer=fluid.initializer.Constant(0.),
),
act="tanh")
fc2 = fluid.layers.fc(
input=fc1,
size=128,
param_attr=fluid.ParamAttr(
name="matching_fc2_w",
initializer=fluid.initializer.TruncatedNormal(scale=0.02),
),
bias_attr=fluid.ParamAttr(
name="matching_fc2_b",
initializer=fluid.initializer.Constant(0.),
),
act="tanh")
projection = fluid.layers.fc(
input=fc2,
size=96,
param_attr=fluid.ParamAttr(
name="matching_fc3_w",
initializer=fluid.initializer.TruncatedNormal(scale=0.02),
),
bias_attr=fluid.ParamAttr(
name="matching_fc3_b",
initializer=fluid.initializer.Constant(0.),
),
act="tanh")
else: else:
query_feats = fluid.layers.dropout( query_feats = fluid.layers.dropout(
x=self.query_feature, x=self.query_feature,
dropout_prob=0.1, dropout_prob=0.1,
dropout_implementation="upscale_in_train") dropout_implementation="upscale_in_train")
query_mean = fluid.layers.reduce_mean(query_feats, dim=1)
title_feats = fluid.layers.dropout( title_feats = fluid.layers.dropout(
x=self.title_feature, x=self.title_feature,
dropout_prob=0.1, dropout_prob=0.1,
dropout_implementation="upscale_in_train") dropout_implementation="upscale_in_train")
title_concat = fluid.layers.concat( title_mean = fluid.layers.reduce_mean(title_feats, dim=1)
input=[query_feats, title_feats], axis=-1)
sub = fluid.layers.elementwise_sub(query_mean, title_mean)
sub = fluid.layers.abs(sub)
projection = fluid.layers.concat(
input=[query_mean, title_mean, sub], axis=-1)
score = fluid.layers.fc( score = fluid.layers.fc(
input=title_concat, input=projection,
size=2, size=2,
param_attr=fluid.ParamAttr( param_attr=fluid.ParamAttr(
name="matching_out_w", name="matching_out_w",
......
...@@ -13,5 +13,5 @@ ...@@ -13,5 +13,5 @@
# See the License for the specific language governing permissions and # See the License for the specific language governing permissions and
# limitations under the License. # limitations under the License.
""" PaddleHub version string """ """ PaddleHub version string """
hub_version = "1.8.0" hub_version = "1.8.1"
module_proto_version = "1.0.0" module_proto_version = "1.0.0"
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册