背景
比赛官网:新冠疫情相似句对判定大赛 (https://www.datafountain.cn/competitions/350)
类型: NLP-文本分类
赛题任务:
比赛整理近万条真实语境下疫情相关的患者提问句对,要求选手通过自然语言处理技术识别相似的患者问题。0为不相似,1为相似
解决方案
解读
Top1解决方案由zzy99提供,里面的答辩ppt,从数据市例到技巧尝试,还有技术总结,讲解流程适合小白理解整个赛题思路,不在此重复大佬的内容。
重点Trick
对抗训练
解决方案使用了国内NLP著名博主苏剑林的对抗训练代码,详见“对抗训练浅谈:意义、方法和思考(附Keras实现)”,我认为在计算机视觉的比赛也能使用。
sigmoid加权融合
这是一个挺有意思的加权融合方法,直接看看代码,我加入了对应注释
#定义sigmoid的函数
def f(x):
res=1/(1+np.e**(-x))
return res
#针对sigmoid出现倒数,利用log和x/(1-x),最后求得[0,1]的预测值
def f_ver(x):
res=np.log(x/(1-x))
return res
#使用各模型预测结果
model = build_model(mode='bert',filename='bert',lastfour=False)
res1 = do_predict('../user_data/model_data/bert_weights')
model = build_model(mode='bert',filename='ernie',lastfour=False)
res2 = do_predict('../user_data/model_data/ernie_weights')
model = build_model(mode='bert',filename='roberta',lastfour=False)
res3 = do_predict('../user_data/model_data/roberta_weights')
#Sigmoid加权融合
res = f((2.025*f_ver(res1) + 2.025*f_ver(res2) + 1.95*f_ver(res3))/6)
具体原理引用zzy99的解释:
“”用反函数取出sigmoid/softmax归一化之前的状态做平均,信息量更大,提升明显“”
题外话
推荐英剧浴血黑帮(Peaky Blinders),不妨通过解说视频了解英国1战后到2战前的历史,对剧情解读颇有帮助。