导读:本文是“数据拾光者”专栏的第四十三篇文章,这个系列将介绍在广告行业中自然语言处理和推荐系统实践。本篇主要分享了参加公司小布助手知识问答的比赛优化实践记录,对语音助手知识问答项目感兴趣的小伙伴可能有帮助。

欢迎转载,转载请注明出处以及链接,更多关于自然语言处理、推荐系统优质内容请关注如下频道。

知乎专栏:数据拾光者

公众号:数据拾光者

摘要:本篇主要分享了参加公司小布助手知识问答的比赛优化实践记录。首先介绍了背景,通过官方提供的三个数据集介绍了赛题并抽象成NLP相关的任务;然后重点介绍了比赛过程中的优化实践记录以及效果提升情况,分别从无监督学习、有监督学习和两阶段模型来优化小布语音助手知识问答比赛。这里把自己参加比赛的各种尝试以及思考分享出来,对语音助手知识问答项目感兴趣的小伙伴可能有帮助。

下面主要按照如下思维导图进行学习分享:

01

背景介绍

最近公司组织HACK编程大赛,在算法赛道选了一道NLP相关的题目《小布语音助手知识问答》。因为之前没有做过类似的知识问答项目,相当于是一个学习的过程,所以把参加比赛的过程记录下来。

拿到题目之后需要先抽象成NLP相关的任务,简单来说就是根据用户的query去知识问答库里找语义最相近的标准问。关于赛题的进一步理解我们会结合官方提供的三个数据集进行详细说明。官方一共提供了三个数据集,第一个数据集是知识问答库,通常情况下知识问答库中会包括标准问和标准答,而本次比赛只需要找到标准问,所以就没有提供标准答。知识问答库数据集包括三个字段,分别是标准问、拓展问和测试用例,下面是数据展示:

图1 知识问答库数据展示

第一个字段是标准问,用户发送query请求后我们需要在这些标准问中寻找一个最能表达用户需求的问题,找到了这个问题(这里称为标准问)之后就会返回对应的标准答案从而完成语音助手服务;第二个字段是拓展问,拓展问是标准问更丰富的形式,带方括号的标准形式包括很多标准词;第三个字段则是测试用例,是标准问对应的用户搜索的query样例。

第二个数据集是标准词库,主要包含标准词和同义词,下面是数据展示:

图2 标准词库数据展示

第一个字段是标准词,上面知识问答库中拓展问中方括号词就是这里的标准词;第二个字段是同义词,是和标准词语义相同的词。

第三个数据集是验证集,包含用户query和对应的标准问两个字段,下面是数据展示:

图3 验证集数据展示

第一个字段用户搜索query就是小布语音助手的请求query;第二个字段是标准问,就是用户请求query对应的语义最相似的标准问。通过上面官方提供的三个数据集我们可以更加清楚的了解目标,就是构建一个模型可以根据用户搜索query去知识问答库中找到最相近的标准问,只要找到了标准问也就找到了对应的标准答,就可以很好的回答用户的问题,提供语音助手问答服务。

02

小布知识问答比赛优化实践

2.1 基于无监督学习的方案

刚开始拿到题目之后,认为这是一个语义相似度匹配任务,构建了一个基于BERT预训练模型+faiss的方案。整个方案分成两步,第一步是使用BERT系列预训练模型获取文本语义embedding向量,第二步则是基于faiss检索海量高维向量。这里第二步是为了提升检索相似文本的效率,最重要的是第一步获取高质量的语义向量embedding。

最初的v1版本是将标准问作为一个候选文本数据集,用验证集中的query和候选文本数据集去计算语义相似度,将相似度得分最高的作为模型预测的标准问,然后和验证集提供的标准问计算准确率。使用不同的预训练模型获取文本语义embedding得到的准确率如下图所示:

图4 v1版本不同预训练模型效果展示

BERT预训练模型方面先选择了一个roberta模型,准确率为15.25%;然后尝试了simbert模型,效果出乎意料的好,达到了32.4%;simcse是之前通过无监督的对比学习训练得到的模型,准确率仅为1.45%,效果比较差的原因可能是当时对比学习模型使用的训练数据主要是浏览器搜索场景中的数据,可能和当前小布助手知识问答任务并不匹配,因为时间有限就没有继续在对比学习上深究;剩下两个是公司提供的obert模型,准确率分别为19.95%和0.8%,差距非常大。通过v1版本的实验说明simbert在相似文本语义方面的效果是最好的

上面主要是从模型优化的角度,接下来尝试从样本的角度进行优化。因为v1版本的候选集只有标准问,所以v2版本考虑将拓展问和测试用例也加入到候选集中进行扩展,作为一种样本增强策略。先让用户搜索query去扩展之后的候选集中去计算语义相似度,然后将得到的结果映射回标准问中,最后和验证集的答案计算准确率。扩展之后的候选集如下所示:

图5 v2版本扩展候选集

通过这种方式使得候选集更加丰富,然后使用v1实验中效果最好的simbert模型获取文本语义embedding,验证集上的准确率提升到了57.1%,说明样本增强是有效的。

这里有个小插曲,simbert还有优化版本simbert_v2,所以想尝试下simbert_v2能否带来效果提升。关于simbert和simbert_v2的简单说明可以通能过如下公式:

SimBERT=BERT+UniLM+对比学习

SimBERT_v2=RoFormer+UniLM+对比学习+BART+蒸馏

关于simbert的详细说明小伙伴可以看下我之前分享的一篇文章《广告行业中那些趣事系列30:实际业务超好用的SimBERT

因为v2版本通过扩展候选数据集可以有效提升验证集效果,所以想进一步扩展样本。这里v3版本使用simbert的生成能力,根据v2候选数据集生成相似文本用于进一步扩展候选数据集,在测试集上的准确率为54.76%,相比于v2测试集的57.1%来说效果有下降,说明生成更多的相似文本反而会降低测试集效果。

接下来重点分析了badcase,发现测试集中存在一些query的标准问为空的情况,这些query属于无效query。这部分无效query的预测效果很差,所以想通过卡相似度阈值来提升这部分无效query的预测准确率,具体做法是设置最大相似度得分阈值,当超过相似度得分阈值,则将该query的预测结果设置为无效query。通过卡最低相似度得分阈值测试集准确率提升到60.53%。相比于通过相似度阈值来识别无效query,我还尝试构建一个分类器去识别无效query,发现效果并不好。

为了更好的使用同义词数据集,将拓展问中的中括号的标准词用同义词替换从而增加了候选数据集,使用simbert模型同时设置最大相似度阈值的测试集效果为59.3%,可见通过同义词扩展候选数据集效果并没有提升。

2.2 基于有监督学习的方案

上面使用的模型主要是无监督学习的方式,接下来想通过有监督学习的方式构建模型。因为知识问答库中的标准问有760个,所以想构建一个多分类器去识别这760个类别的标准问。v4方案是直接构建一个全量的多分类器,在测试集上的准确率为54.75%。

这里发现很多标准问的训练语料数量差距非常大,可能存在样本不均衡的问题,v5版本的解决措施是将训练语料数量低于50的的类别合并为1类,最后对模型预测的测试集中这一类进行特殊处理,这里v5得到的测试集效果提升到64.11%,已经超过了无监督学习的最好方案。

2.3 基于无监督+有监督两阶段模型的方案

上面通过构建多分类器可以使得模型的效果大幅提升,测试集准确率提升到了64.11%,但是还有个问题,因为我们把训练语料低于50的统一映射为other类,那么模型预测这些类的时候并不会给出真正的标准问。这里构建了一种无监督学习和有监督学习相结合的两阶段方案来分别处理。对于训练语料大于50的类别通过多分类器模型去直接预测,而对于训练语料小于50的则通过相似文本匹配来预测标准问。通过这种方案测试集最终效果提升到了67.14%,超过初赛冠军的得分66.1%,到这里优化告一段落。

2.4 小布语音助手知识问答优化汇总

整体看下来,小布语音助手知识问答大赛大概经过以下五个阶段,前三个阶段主要是基于无监督学习的方式完成,分别是预训练模型优化、样本优化和卡相似度阈值优化,后两个阶段主要是基于有监督学习的方式来完成,分别是构建多分类器和构建两阶段模型,测试集准确率提升图如下所示:

图6 小布助手知识问答准确率提升

03

总结及反思

本篇主要分享了参加公司小布助手知识问答的比赛优化实践记录。首先介绍了背景,通过官方提供的三个数据集介绍了赛题并抽象成NLP相关的任务;然后重点介绍了比赛过程中的优化实践记录以及效果提升情况,分别从无监督学习、有监督学习和两阶段模型来优化小布语音助手知识问答比赛。这里把自己参加比赛的各种尝试以及思考分享出来,对语音助手知识问答项目感兴趣的小伙伴可能有帮助。

最新最全的文章请关注我的微信公众号或者知乎专栏:数据拾光者。

码字不易,欢迎小伙伴们点赞和分享。

广告行业中那些趣事系列43:小布语音助手知识问答比赛优化实践相关推荐

  1. 广告行业中那些趣事系列32:美团搜索NER技术实践学习笔记

    导读:本文是"数据拾光者"专栏的第三十二篇文章,这个系列将介绍在广告行业中自然语言处理和推荐系统实践.本篇主要是学习美团技术团队分享的<美团搜索中NER技术的探索与实践> ...

  2. 广告行业中那些趣事系列60:详解超好用的无监督关键词提取算法Keybert

    导读:本文是"数据拾光者"专栏的第六十篇文章,这个系列将介绍在广告行业中自然语言处理和推荐系统实践.本篇从理论到实践介绍了超好用的无监督关键词提取算法Keybert,对于希望使用无 ...

  3. 手写数字识别中多元分类原理_广告行业中那些趣事系列:从理论到实战BERT知识蒸馏...

    导读:本文将介绍在广告行业中自然语言处理和推荐系统实践.本文主要分享从理论到实战知识蒸馏,对知识蒸馏感兴趣的小伙伴可以一起沟通交流. 摘要:本篇主要分享从理论到实战知识蒸馏.首先讲了下为什么要学习知识 ...

  4. 广告行业中那些趣事系列2:BERT实战NLP文本分类任务(附github源码)

    微信公众号:数据拾光者.愿结交更多的小伙伴,一同走人生路. 摘要:上一篇广告中那些趣事系列1:广告统一兴趣建模流程,我们了解了如何为广告主圈人群以及如何刻画用户的兴趣度.要想给用户打标签,我们需要构建 ...

  5. 广告行业中那些趣事系列51:超牛的kaggle比赛Favorita Grocery Sales Forecasting冠军方案...

    导读:本文是"数据拾光者"专栏的第五十一篇文章,这个系列将介绍在广告行业中自然语言处理和推荐系统实践.本篇分享了kaggle比赛<Corporación Favorita G ...

  6. 广告行业中那些趣事系列59:详解当前大火的提示学习prompt learning

    导读:本文是"数据拾光者"专栏的第五十九篇文章,这个系列将介绍在广告行业中自然语言处理和推荐系统实践.本篇主要从理论到实践介绍了当前超火的提示学习Prompt Learning,对 ...

  7. 广告行业中那些趣事系列39:实战广告场景中的图片相似度识别任务

    导读:本文是"数据拾光者"专栏的第三十九篇文章,这个系列将介绍在广告行业中自然语言处理和推荐系统实践.本篇从理论到实践介绍了广告场景中的图片相似度识别任务,对于希望解决图片相似度识 ...

  8. bert 多义词_广告行业中那些趣事系列15:超实用的基于BERT美团搜索实践

    摘要:本篇主要学习和分析BERT在美团搜索排序中的项目实践.首先介绍了业务背景,主要对比了美团搜索业务场景和我们的应用场景:然后讲了下计算query和doc相关性的方法,主要包括计算字面相关性和计算语 ...

  9. 广告行业中那些趣事系列26:基于PoseNet算法的人体姿势相似度识别

    摘要:本篇从理论到实践分享了基于PoseNet算法的人体姿势相似度识别项目.首先介绍了项目背景,因为部门搞活动需要大家去模仿夸张搞笑的表情和姿势来提升活动的可玩性,所以需要利用CV算法对图片进行相似度 ...

  10. 激光切割机在金属广告行业中起到什么作用?

    创意升级.材料多样的广告行业,小批量定制市场的日益增长,使得批量生产显得没有特点,与其独特性.多样性相对应的行业特点来说,金属激光切割机的灵活性发挥了非常大的作用. 迅镭激光-中低功率光纤激光切割机- ...

最新文章

  1. 【深入Java虚拟机JVM 05】HotSpot对象探秘
  2. windows server 2016 docker 之创建使用虚拟交换机
  3. Java面向对象练习题之字母输出
  4. JavaScript中正则表达式学习笔记
  5. 兼容FF,IE的纯CSS下拉菜单
  6. 转载:ThreadPoolExecutor 源码阅读
  7. JS 动态清除Div中内容
  8. RT-Thread下的串口驱动程序分析
  9. python exec_Python exec()
  10. 【BFS】哈理工OJ-2074-逃生
  11. Java 的简单内嵌浏览器--最新版jxbrowser 6.21破解
  12. 通过js获取本机的IP地址
  13. php 输出中文文件名乱码,PHP fopen中文文件名乱码问题解决方案
  14. MySQL常用数据字典表设计
  15. UML核心元素之参与者
  16. 用css制作旋转的立方体
  17. 微博app打开微信小程序的方法
  18. python自动登录qq邮箱_python和selenium实现163邮箱自动登陆
  19. nyist 第二次招新赛 I 董学姐与朱学姐的爱恨情仇
  20. python空间点赞_用Python登录好友QQ空间点赞

热门文章

  1. 时间序列预测--基于CNN的股价预测
  2. SICP 第一章的练习
  3. 安卓电视/平板玩街机游戏
  4. 纯css画一个月亮的天气图标
  5. svn 重新定位版本库
  6. Activity切换闪屏问题
  7. scrapy follow 笔记
  8. 腾讯低代码平台正式开源:可拖拽生成手机、PC等项目-接私活福利啊
  9. 招聘中使用的奇葩心理分析
  10. 淡出动画fadeOut