笨笨功能更新啦!基于BERT的FAQ语义检索

2021 年 4 月 29 日 哈工大SCIR
FAQ(Frequently Asked Questions)问答检索是构建闲聊型机器人的核心技术,指的是通过构建一个大规模的问题答案库来作为知识库,当用户输入问题时,通过信息检索技术找出最合适的答案。FAQ 常见方案包括:(1)问题-答案匹配,即用户输入问题与所有候选答案计算相似度;(2)问题-问题匹配,即用户输入问题与知识库中所有问题进行相似度计算,并返回最相似问题的答案。后者在应用中较为常见,“笨笨”系统中也主要采用问题-问题匹配模式。
得益于在海量无标注文本上的预训练,BERT 等预训练模型具有极强的文本语义表征能力。本次“笨笨”功能更新采用基于 BERT 的向量索引召回方案,增强了 FAQ 模块的语义检索能力



基于BERT的FAQ语义检索



理论上我们可以直接使用 Google 开源的中文 BERT 模型进行输入/候选问题的编码,并通过计算问题之间的余弦相似度来获取最相似问题的答案。先前的研究表明在特定领域和任务上对 BERT 进一步训练,能够提升模型效果,因此我们在 FAQ 问题语料上进行 BERT 模型的微调,得到具备更好编码效果的 Sentence-BERT 模型,下面我们将简要介绍该过程。

我们采用的方案框架如下图所示,主要包括 Sentence-BERT 模型离线训练、语义向量离线索引、线上推理三个部分。

框架结构示意

借鉴经典的孪生网络结构(SiameseNetwork),我们使用 BERT 模型分别对问题对编码,然后使用池化操作得到问题向量表示,并计算问题对之间的余弦相似度,最后通过对比损失函数(Contrastive Loss)训练得到 Sentence-BERT 模型。

在训练 Sentence-BERT 模型中,我们需要构造正负样本的问题对。对于已有的大规模 FAQ 问答语料,每个问题包含多种不同的表达形式(即相似问题对),我们通过随机采样构造正样本。构造负样本的最简单方法则是根据一定的概率从所有问题中随机选择不同的问题构造全局负样本,但得到的负样本比较简单、容易区分,不利于 Sentence-BERT 学习到有用的语义信息。为了构造模型难以区分的、具有高质量的负样本,我们采用基于聚类的局部负采样方法:首先使用 BERT 模型对所有问题进行向量表示,然后通过 Kmeans 进行问题向量聚类,在每个聚类中采样具有一定相似度但属于不同问题的负样本问题对。最终我们以一定的比例混合全局和局部负样本。

通过封闭知识库召回实验得到如下表结果,可以发现我们采用的基于聚类负采样(NS)进行微调(FT)的 Sentence-BERT 模型,召回效果优于直接使用开源的 BERT 模型检索以及线上基于 Lucene 的检索系统。考虑到线上推理速度,我们采用6层模型(6L)进行线上推理,其测试召回效果略差于12层模型。

实验效果

由于知识库规模较大,为了加快线上召回速度,我们需要离线计算好所有问题的的向量表示,并结合向量检索工具 Annoy(https://github.com/spotify/annoy)进行向量索引和召回(在可接受范围内牺牲一定的精度)。如上表所示,在4核8G服务器上,100个用户并发情况下,基于 Sentence-BERT 和  Annoy 进行向量召回的速度略差于使用Lucene 的关键词倒排索引召回。最终我们将向量召回结果加入到已有模块的候选回复集合中进行回复重排序和返回。

我们将持续进行“笨笨”功能更新,欢迎大家体验、反馈和交流。




关于“笨笨”



“笨笨”是哈工大SCIR研发的一款面向普通用户的聊天机器人,具备开放域对话、知识问答、任务型对话以及对话式推荐等功能。 2016年6月6日正式对外发布,搭载于微信公众号平台之上,同时具备实体形态。 截至2021年4月28日,“笨笨”公众号关注人数达到6375。 曾获“合创杯”第二届全国青年人工智能创新创业大会三等奖,中国人工智能学会最佳青年技术成果奖。

欢迎扫描二维码关注“笨笨”微信公众号。

本期责任编辑:冯骁骋
本期编辑:牟虹霖


哈工大SCIR公众号
主编:张伟男
副主编:丁效,刘铭,冯骁骋,赵森栋
执行编辑:杜佳琪
编辑:钟蔚弘,彭湃,朱文轩,冯晨,牟虹霖,张馨,王若珂,高建男

长按下图即可关注哈尔滨工业大学社会计算与信息检索研究中心微信公众号 哈工大SCIR
登录查看更多
2

相关内容

CIKM2021 | 异质图上的图神经网络对比预训练
专知会员服务
15+阅读 · 2021年11月8日
专知会员服务
16+阅读 · 2021年8月24日
专知会员服务
6+阅读 · 2021年8月7日
专知会员服务
38+阅读 · 2021年6月6日
专知会员服务
35+阅读 · 2020年11月29日
【NeurIPS 2020】融入BERT到并行序列模型
专知会员服务
25+阅读 · 2020年10月15日
DSSM双塔模型及其Pytorch实现
机器学习与推荐算法
7+阅读 · 2022年3月21日
中文NER任务实验小结:BERT-MRC的再优化
PaperWeekly
0+阅读 · 2021年12月29日
文本表达进击:从BERT-flow到BERT-whitening、SimCSE
PaperWeekly
5+阅读 · 2021年11月10日
论文浅尝 | 使用孪生BERT网络生成句子的嵌入表示
开放知识图谱
25+阅读 · 2019年10月31日
技术动态 | 跨句多元关系抽取
开放知识图谱
50+阅读 · 2019年10月24日
【论文笔记】基于BERT的知识图谱补全
专知
116+阅读 · 2019年9月15日
站在BERT肩膀上的NLP新秀们(PART II)
AINLP
35+阅读 · 2019年6月8日
3分钟看懂史上最强NLP模型BERT
新智元
23+阅读 · 2019年2月27日
详解谷歌最强NLP模型BERT(理论+实战)
AI100
11+阅读 · 2019年1月18日
国家自然科学基金
1+阅读 · 2015年12月31日
国家自然科学基金
0+阅读 · 2013年12月31日
国家自然科学基金
1+阅读 · 2013年12月31日
国家自然科学基金
0+阅读 · 2012年12月31日
国家自然科学基金
1+阅读 · 2012年12月31日
国家自然科学基金
0+阅读 · 2012年12月31日
国家自然科学基金
0+阅读 · 2012年12月31日
国家自然科学基金
0+阅读 · 2011年12月31日
国家自然科学基金
1+阅读 · 2009年12月31日
国家自然科学基金
1+阅读 · 2008年12月31日
Arxiv
0+阅读 · 2022年4月15日
VIP会员
相关VIP内容
CIKM2021 | 异质图上的图神经网络对比预训练
专知会员服务
15+阅读 · 2021年11月8日
专知会员服务
16+阅读 · 2021年8月24日
专知会员服务
6+阅读 · 2021年8月7日
专知会员服务
38+阅读 · 2021年6月6日
专知会员服务
35+阅读 · 2020年11月29日
【NeurIPS 2020】融入BERT到并行序列模型
专知会员服务
25+阅读 · 2020年10月15日
相关资讯
DSSM双塔模型及其Pytorch实现
机器学习与推荐算法
7+阅读 · 2022年3月21日
中文NER任务实验小结:BERT-MRC的再优化
PaperWeekly
0+阅读 · 2021年12月29日
文本表达进击:从BERT-flow到BERT-whitening、SimCSE
PaperWeekly
5+阅读 · 2021年11月10日
论文浅尝 | 使用孪生BERT网络生成句子的嵌入表示
开放知识图谱
25+阅读 · 2019年10月31日
技术动态 | 跨句多元关系抽取
开放知识图谱
50+阅读 · 2019年10月24日
【论文笔记】基于BERT的知识图谱补全
专知
116+阅读 · 2019年9月15日
站在BERT肩膀上的NLP新秀们(PART II)
AINLP
35+阅读 · 2019年6月8日
3分钟看懂史上最强NLP模型BERT
新智元
23+阅读 · 2019年2月27日
详解谷歌最强NLP模型BERT(理论+实战)
AI100
11+阅读 · 2019年1月18日
相关基金
国家自然科学基金
1+阅读 · 2015年12月31日
国家自然科学基金
0+阅读 · 2013年12月31日
国家自然科学基金
1+阅读 · 2013年12月31日
国家自然科学基金
0+阅读 · 2012年12月31日
国家自然科学基金
1+阅读 · 2012年12月31日
国家自然科学基金
0+阅读 · 2012年12月31日
国家自然科学基金
0+阅读 · 2012年12月31日
国家自然科学基金
0+阅读 · 2011年12月31日
国家自然科学基金
1+阅读 · 2009年12月31日
国家自然科学基金
1+阅读 · 2008年12月31日
Top
微信扫码咨询专知VIP会员