: 精排篇)
在上一篇基于FAQ的智能问答(二):召回篇中已经介绍了给定一个用户的query如何从知识库中快速准确的召回一小批相关的问题本篇将继续介绍如何对这一小批问题进行精排最终构建出answer返回给用户。任务描述给定一个用户的问题q和一批召回的问题d对每个d进行相关性的打分计算并根据相关性进行评价。同时根据top1打分的不同客户端执行不同的操作(1) 如果top1的评分很高则直接将答案返回给用户 (2) 如果top1的评分较高则进行问题的推荐 (3) 如果top1的评分较低则提示无法回答。评价指标模型结构数据构建对于智能问答场景的精排模型构建的数据集结构如下:数据集中的一个例子所以通过这种方法可以构建一个大规模的通用领域的弱标签的排序数据集从而训练出一个通用的排序模型。模型上线在模型的预测阶段给定q与d可直接计算出q与d的相似度。所以给定一组d就可根据相似度返回有序的结果。整个精排模块在进行模型蒸馏以后部署在k8s的cpu集群上web API Tensenflow-Serving单个pod在batch size20max_seq_len 64的场景下响应时间为100ms. 满足线上的需求。玄学阈值在精排部分我们需要界定出top1的结果是否为正样本即能不能直接作为答案返给用户同时top1 - top5中哪些可以作为推荐问进行推荐最简单的方案是卡一个阈值例如相似度大于0.85就认为是正样本可以直接把知识库中的答案返回给用户相似度小于0.85但是大于0.1就认为可以作为推荐问最后如果top1的相似度小于0.1就认为无法解答。具体的阈值可以在测试集上进行搜索保障在测试集上的准确率能够达到95%同时召回率能够达到80%。95%与80%来源于业务的指标要求可调整。但是这种方案需要小心翼翼在实际的场景往往很难很好的去卡这个阈值。不过从产品实际上来考虑真的要对边界抱有执念吗对于原本应该直接回答的query没有直接回答而是把非常相关的top1结果进行了推荐其实也没问题不会牺牲特别大的用户体验同时对于原本就没有答案的样本而也将top1的结果进行推荐因为有一点的相关性也不会牺牲用户体验反而也在引导用户。所以“尽可能的多推荐”从产品上是合适的。基于FAQ的智能问答(三): 精排篇 - 知乎