开源|qa_match更新啦——新增知识库半自动挖掘模块
qa_match是58同城推出的一款基于深度学习的轻量级问答匹配工具,V1.0版本于2020年3月9日发布,2020年6月更新v1.1版本,可参见开源|qa_match:一款基于深度学习的层级问答匹配工具、开源|qa_match更新啦——支持轻量级预训练、提高问答通用性。
2020年12月份,qa_match进行再次升级,更新至v1.3。
项目信息
开源项目名称:qa_match
github地址:https://github.com/wuba/qa_match
开源协议:Apache License 2.0
我们在2020年12月份对qa_match进行再次升级,更新至v1.3。新增如下Features:
1.新增知识库半自动挖掘流程,支持问答匹配在冷启动和上线后的问题挖掘:冷启动时,基于SPTM预训练结果,引入DEC进行知识挖掘,构建知识库;上线后,基于自定义聚类中心,挖掘扩展问法,完善扩充知识库。
2.轻量级预训练语言模型(SPTM,Simple Pre-trained Model)增加基于Transformer的特征表征。
为什么要升级到V1.3
知识库半自动挖掘模块
知识库半自动挖掘流程,是在qa match自动问答流程(参考qa match 基于一层知识库结构的自动问答[1])的基础上构建的一套知识库半自动挖掘方案,可以帮助提升知识库规模与知识库质量,一方面增强线上匹配的能力,另一方面提高离线模型训练数据的质量,进而提升模型性能。
知识库半自动挖掘流程可用于冷启动和问答匹配上线后的问题挖掘两个场景,两个场景依赖的核心算法都是基于SPTM预训练模型[2]的深度聚类DEC挖掘算法(也可以使用其他预训练模型的结果),区别在于:在冷启动时的问题挖掘场景下,知识库没有标准问题,需要通过机器挖掘结合人工标注的方式提供初始标准问题;而在问答匹配上线后的问题挖掘场景下,知识库已经有标准问题,可以使用自定义聚类中心,来挖掘扩展问法(utterance)。
基于SPTM的DEC挖掘算法
DEC(Deep Embedding Cluster)算法是ICML2016上发表的关于无监督聚类的文章[3],传统聚类的方法例如K-means、 GMM、谱聚类已经在工业界有广泛的使用,但是这些算法里少有考虑到学习适合聚类的特征表征,DEC算法正是将特征的表征与聚类中心分配一同学习。DEC详细算法原理参考深度文本表征与深度文本聚类在小样本场景中的探索与实践文章中关于DEC算法描述的部分。
考虑到静态聚类方法表征能力不足的问题,我们在2019年9月在问答场景实现了DEC算法应用于知识库的挖掘,并结合场景特点对DEC算法做出了两点改进:
1、使用SPTM替换原始论文中的auto-encoder表征,进一步增强在问答场景下的表征能力。
2、传入自定义聚类中心替代K-means生成的聚类中心,给出初始监督信号,消除聚类中心的随机性。
第一个场景:冷启动时的问题挖掘
冷启动时的问题挖掘场景具体指在新业务接入自动问答时,存在一定量的历史无监督数据,但是没有形成知识,此时需要通过挖掘总结出标准问和扩展问。
冷启动问题挖掘流程图如下:
第二个场景:问答匹配上线后的问题挖掘
问答匹配上线后的问题挖掘场景具体指问答匹配模型已经上线后,知识库中有了一定数量的标准问题和扩展问题,但是由于线上数据是动态变化的,所以存在模型覆盖不到的标准问题和扩展问法,这时需要及时地将它们挖掘出来,增加线上样本覆盖度,从而提高模型准召。
问答匹配上线后问题挖掘流程图如下:
效果示例
聚类算法的评估一般分为外部评估和内部评估,外部评估是指数据集有ground truth label 时通过有监督标签进行评估;内部评估是不借助外部可信标签,单纯从无监督数据集内部评估,内部评估的原则是类内距小,类间距大,这里我们使用轮廓系数(silhouette)来评估,详细数据如下表格。
具体使用方法请参见 dec_mining/README 文档中的运行示例。
数据集 | 模型 | Silhourtte | Runtime | Inference Time |
1w | DEC | 0.7962 | 30min | 52s |
10w | DEC | 0.9302 | 3h5min | 5min55s |
100w | DEC | 0.849 | 11h30min | 15min28s |
SPTM增加基于共享参数的Transformer特征表征
为了增加语言模型的泛化能力,我们对SPTM进行了改进,增加了基于Transformer的特征表征,模型原理如下:
基于Transformer的SPTM
与基于Bi-LSTM的SPTM不同,该网络的输入由两部分构成:基于Word Aware的Token Embedding特征和基于Position Aware的Position Embedding特征。其中Word Aware是为了学习基于词共现的语义特征,Position Aware是为了学习句子中词之间的序列特征。经过输入层后,为了保证模型的表达能力,同时减少参数量,我们引入了共享参数的Transformer Encoder结构作为模型主体。该网络通过Multi-Head Attention扩展了模型专注于不同位置的能力,增加了Attention层的表征空间。通过Attention层和FFN层的残差连接,加深了网络深度,一定程度解决了深度网络的退化问题。
预训练模型耗时示例如下表所示:
未来规划
未来我们会继续优化扩展qa_match的能力,计划开源如下:
1 目前tensorflow已发版到2.4版本,后续我们会根据需求发布tensorflow
2.X版本或pytorch版本的qa_match。
如何贡献&问题反馈
我们诚挚地希望开发者继续向我们提出宝贵的意见。
您可以挑选以下方式向我们反馈建议和问题:
(1)在 https://github.com/wuba/qa_match.git提交 PR 或者 Issue
(2)邮件发送至 ailab-opensource@58.com
作者简介:
吕媛媛,58同城 AI Lab 资深算法工程师,主要负责58智能问答相关算法研发工作。
王勇,58同城 AI Lab 算法架构师,主要负责58智能问答相关算法研发工作。
贺睿,58同城 AI Lab 资深算法工程师,主要负责58智能问答相关算法研发工作。
参考文献:
[1] https://github.com/wuba/qa_match#基于一层结构知识库的自动问答
[2] https://github.com/wuba/qa_match/tree/v1.1#基于sptm模型的自动问答
[3] Xie, Junyuan, Ross Girshick, and Ali Farhadi. "Unsupervised deep embedding for clustering analysis." International conference on machine learning. 2016.
福利环节
为了鼓励优质内容传播,【58技术】公众号近期会持续推出不定期活动奖励。
评论区留下你关于此开源项目的看法或建议,即可参与此次活动
活动奖励:将由作者在评论里抽取三名读者,送出定制版代码台历
活动时间:截至2020年12月31日。