/atec_nlp

蚂蚁金融自然语言处理竞赛。

Primary LanguageShell

ATEC NLP sentence pair similarity competition

https://dc.cloud.alipay.com/index#/topic/intro?id=3

1 、赛题任务描述

问题相似度计算,即给定客服里用户描述的两句话,用算法来判断是否表示了相同的语义。

示例:

“花呗如何还款” --“花呗怎么还款”:同义问句 “花呗如何还款” -- “我怎么还我的花被呢”:同义问句 “花呗分期后逾期了如何还款”-- “花呗分期后逾期了哪里还款”:非同义问句 对于例子a,比较简单的方法就可以判定同义;对于例子b,包含了错别字、同义词、词序变换等问题,两个句子乍一看并不类似,想正确判断比较有挑战;对于例子c,两句话很类似,仅仅有一处细微的差别 “如何”和“哪里”,就导致语义不一致。

2、数据

本次大赛所有数据均来自蚂蚁金服金融大脑的实际应用场景,赛制分初赛和复赛两个阶段:

初赛阶段

我们提供10万对的标注数据(分批次更新),作为训练数据,包括同义对和不同义对,可下载。数据集中每一行就是一条样例。格式如下:

行号\t句1\t句2\t标注,举例:1 花呗如何还款 花呗怎么还款 1

行号指当前问题对在训练集中的第几行; 句1和句2分别表示问题句对的两个句子; 标注指当前问题对的同义或不同义标注,同义为1,不同义为0。 评测数据集总共1万条。为保证大赛的公平公正、避免恶意的刷榜行为,该数据集不公开。大家通过提交评测代码和模型的方法完成预测、获取相应的排名。格式如下:

行号\t句1\t句2

初赛阶段,评测数据集会在评测系统一个特定的路径下面,由官方的平台系统调用选手提交的评测工具执行。

复赛阶段

我们将训练数据集的量级会增加到海量。该阶段的数据不提供下载,会以数据表的形式在蚂蚁金服的数巢平台上供选手使用。和初赛阶段类似,数据集包含四个字段,分别是行号、句1、句2和标注。

评测数据集还是1万条,同样以数据表的形式在数巢平台上。该数据集包含三个字段,分别是行号、句1、句2。

3、评测及评估指标

初赛阶段,比赛选手在本地完成模型的训练调优,将评测代码和模型打包后,提交官方测评系统完成预测和排名更新。测评系统为标准Linux环境,内存8G,CPU4核,无网络访问权限。安装有python 2.7、java 8、tensorflow 1.5、jieba 0.39、pytorch 0.4.0、keras 2.1.6、gensim 3.4.0、pandas 0.22.0、sklearn 0.19.1、xgboost 0.71、lightgbm 2.1.1。 提交压缩包解压后,主目录下需包含脚本文件run.sh,该脚本以评测文件作为输入,评测结果作为输出(输出结果只有0和1),输出文件每行格式为“行号\t预测结果”,命令超时时间为30分钟,执行命令如下:

bash run.sh INPUT_PATH OUTPUT_PATH

预测结果为空或总行数不对,评测结果直接判为0。

复赛阶段,选手的模型训练、调优和预测都是在蚂蚁金服的机器学习平台上完成。因此评测只需要提供相应的UDF即可,以问题对的两句话作为输入,相似度预测结果(0或1)作为输出,同样输出为空则终止评估,评测结果为0。

本赛题评分以F1-score为准,得分相同时,参照accuracy排序。选手预测结果和真实标签进行比对,几个数值的定义先明确一下:

True Positive(TP)意思表示做出同义的判定,而且判定是正确的,TP的数值表示正确的同义判定的个数;

同理,False Positive(FP)数值表示错误的同义判定的个数;

依此,True Negative(TN)数值表示正确的不同义判定个数;

False Negative(FN)数值表示错误的不同义判定个数。

基于此,我们就可以计算出准确率(precision rate)、召回率(recall rate)和accuracy、F1-score:

precision rate = TP / (TP + FP)

recall rate = TP / (TP + FN)

accuracy = (TP + TN) / (TP + FP + TN + FN)

F1-score = 2 * precision rate * recall rate / (precision rate + recall rate)