NLP系列之句子向量、语义匹配(一):业务场景思考
作者简介
作者:ZHOU-JC (广州云迪科技有限公司 NLP算法工程师)
原文:https://zhuanlan.zhihu.com/p/387271169
转载者:杨夕
面筋地址:https://github.com/km1994/NLP-Interview-Notes
个人笔记:https://github.com/km1994/nlp_paper_study
前言
大家好,这篇博客想跟大家讨论一下语义匹配的应用场景。实际上无论是NLP的哪个技术,我认为接触场景,思考这个技术跟具体场景是怎么结合的?这技术有哪些场景能应用?是非常重要的。一个资深的算法工程师应该能结合场景和技术,给出最佳的解决方案。
回归正题,语义匹配作为一项基础的NLP任务应用广泛,曾经我天真以为语义匹配相比文本分类更简单,但实际接触到业务时,却发现不是一回事
首先,这里所说的语义匹配其实是【广义】语义匹配。
大家最常遇到的句子相似度任务,输入两个句子,如“韭菜多吃什么好处”和“多吃韭菜有什么好处”,输出两个句子是否相似,做成分类或回归都可以;
但这里,我更想讨论的是广义语义匹配,例如长文本的相似度(如两个法律裁判书之间的相似程度),长文本和短文本的匹配度(如新闻标题和新闻内容的匹配程度)。
下面说一下过去一年,我在实际业务中遇到过的用语义匹配来处理实际业务的场景。
场景
场景1:语义匹配最广泛的应用,检索式聊天机器人
聊天机器人是语义匹配中最广泛应用的场景。目前的聊天机器人主要分成五种:
基于问答对。输入用户的问题,在由(问题:答案)组成的知识库中检索相似问题,最后将用户相似问题的答案作为结果返回;
基于机器阅读理解:输入用户问题,从知识库中检索相关文档,然后通过机器阅读理解的形式返回答案,这种也涉及检索,不过最关键一步是通过指针网络的形式从文档中抽取出Span作为回答,容易不稳定;
基于知识图谱:输入用户问题,通过语义解析转化成对应的Cypher语法,从建立好的知识图谱中检索问题,困难主要在于知识图谱的建立需要耗费大量人力;
基于任务型对话:针对有限的实际业务场景,例如携程的聊天机器人,输入用户问题,通过意图识别、提取词槽,转换为对应的“订机票”、“查酒店”等服务;
闲聊:类似微软小冰这种,实际应用场景较少。
其中,基于问答对是最为简单的方案,能让我们快速建立一个可用的聊天机器人,其中里面最关键的技术就是语义匹配。我们要首先根据业务场景定义一批【标准问】以及它们对应的答案,当有新的问题来时,计算新问题与标准问的相似度则可。
下面是一些我对一些常见问题的思考:
Q1:知识库的标准问怎么整理?
A:虽然说基于问答对是较为简单的聊天机器人解决方案,但实际应用中,我们要首先考虑这个场景究竟有多泛,是解决一个医药问答、还是一个金融问答、还是一个百科式的问答。一定要先梳理你的场景,假如场景过大,还需要分级管理,如赶着上线,则应该先做高频问答,俗话说二八定律,20%的问题涵盖了80%的常见问题。
Q2:怎么处理冷启动?
A:有时候是一个新的需求,之前没有任何的数据积累,这时候可以通过搜索引擎,如百度知道等搜索一些网民提出的一些相关问题作为知识库,起码这些问题是真实的,假如面对的场景十分窄,搜索不出来,只能让客户提供一些常见问题再进行发散。
Q3:怎么制作训练集?
A:同样容易遇到冷启动,假如现在已经梳理完知识库,怎么生成我们的训练集?
可以通过,如同一个含义的标准问作为一对正样本,不同含义的标准问为一对负样本,但这样容易训练集不够丰富。这里推荐一种做法,把标注问拿去百度知道搜索,通常第1页搜出来的都是语义相同的问题可以作为正样本,10多页的都是些相似度高但语义不同的问题则可以作为负样本,当然还需要人工过审,这做法的好处是极大地丰富了训练集。
Q4:语义匹配要做多细?
A:首先思考,什么叫语义相同的句子?如“怎么成为网络红人”、“怎么样可以成为网络红人”,毫无疑问是属于同一语义的句子对,
但假如是"怎么成为网络红人"、“女的怎么容易成为网络红人”。大家觉得这两个句子属于语义相同吗?
实质上是不严格相同的,但假如在你的业务场景中,这两个问题都对应的是同一个答案,是否能把这两个句子作为相似度为1的正样本让模型去训练?答案在于,你想做得有多粗多细,假如很细粒度,那这两个句子就不是语义相同的句子,或者说它们的相似度不是1,是0.6或0.8,但假如做得很细的话,你需要定义很多标准问。假如做得很广,如把同一个回答的问题都定义为相似度为1的句子,这时候,你必须把这些你认为相似的样本拿去给模型训练,让模型学得,因为这其实不是严格意义上的语义相同,做广的好处是不用定义太多问题,但十分容易不稳定。
Q5:怎么做检索?
A:常见做法是先检索出一批相似问题再精排。其中检索可以用bm25、SBERT等模型,精排可以用Cross-Encoders等结构。这两步都可以定义为语义匹配,只不过一个粗粒度一个细粒度。
Q6:用户的问题在知识库中没有相似问题?
A:可以设定,
假如有标准问与用户问题相似度0.8以上的,则直接返回相似度最高的标准问对应的答案;
假如相似度最高在0.4~0.8之间,我们可以返回用户“你是否想问...”;
假如相似度在0.4以下,我们可以返回与用户问题相似度最高的三个问题,输出“你是否想问这些问题。。。”;
这其实就是涉及到一个用户体验的问题,不是说一定要返回一个答案,也不是说找不到相似的就让客户重新问。即使没有很相似的问题,大部分场景下我们也可以返回“接近相似”作为引导让客户重新提问。如何给用户一个最舒服的体验,这需要有产品思维。
场景2:广义的语义匹配,相似工单检索
场景是这样的:有一些工单信息,主要是群众咨询、投诉等,当出现疑难工单的时候,希望能从已办理的工单库中,检索出最相似的工单用户,返回给处理工单的工单人员做参考。
这里的输入就不是一个句子对,而是两个工单信息,更准确的说,这就是一个广义语义匹配的问题,用语义匹配的方法来做检索。
相关竞赛/公开数据集
除了分享以上两个我遇到过的实际业务场景,我们也可以通过一些竞赛的比赛背景,去了解语义匹配的应用。
天池:“公益AI之星”挑战赛-新冠疫情相似句对判定大赛
天池:“公益AI之星”挑战赛-新冠疫情相似句对判定大赛
https://tianchi.aliyun.com/competition/entrance/231776/introduction?spm=5176.12281957.1004.29.38b02448l6Ejps
这个比赛就是上面说的场景1,而且是一个十分细分的聊天场景,主打疫情相关的呼吸领域问题。越是细分的领域,相对来说更好做,准确率更高。
天池:小布助手对话短文本语义匹配
天池:小布助手对话短文本语义匹配
https://tianchi.aliyun.com/competition/entrance/531851/introduction?spm=5176.12281957.1004.12.38b02448l6Ejps
用语义匹配的来做意图识别,而非直接检索问题。这给我们开扩了思路,上面说到的聊天机器人中的任务型机器人,第一步是意图识别,传统做法是当成一个分类任务来做,但用分类方法做的缺点是难以拓展(如一开始限定好10个意图类比,以后像扩展的话,要重新训练模型),但用语义匹配做则不用,增加意图只需要在对应的库里增加相关问题。
搜狐:2021搜狐校园文本匹配算法大赛
搜狐:2021搜狐校园文本匹配算法大赛
https://www.biendata.xyz/competition/sohu_2021/
每对文本在两个颗粒度上判断文本对中的两段文字是否匹配。其中,一个颗粒度较为宽泛,两段文字属于一个话题即可视为匹配;另一个颗粒度较为严格,两段文字必须是同一事件才视为匹配。如下面的问题,它们都是说英超足球,属于同一个话题,但是两个不是同一个事件。2021 Sohu Campus Document Matching AIgorithm Competition每对文本在两个颗粒度上判断文本对中的两段文字是否匹配。其中,一个颗粒度较为宽泛,两段文字属于一个话题即可视为匹配;另一个颗粒度较为严格,两段文字必须是同一事件才视为匹配。如下面的问题,它们都是说英超足球,属于同一个话题,但是两个不是同一个事件。
2019法研杯:相似案例匹配
2019法研杯:相似案例匹配
http://cail.cipsc.org.cn:2019/
针对多篇法律文书进行相似度的计算和判断。具体来说,对于每份文书我们提供文书的标题和事实描述,选手需要从两篇候选集文书中找到与询问文书更为相似的一篇文书。类似上面我提到的场景2,用语义匹配的方式做检索,检索出的案件或工单用于给工作人员参考。
CCF:“技术需求”与“技术成果”项目之间关联度计算模型
CCF:“技术需求”与“技术成果”项目之间关联度计算模型
https://www.datafountain.cn/competitions/359
应用场景是有一个平台,定期收集技术需求和技术成果,定期更新技术需求库和技术成果库,数据来源有两种:(1)会员单位发布;(2)非会员单位官方网站采集。每月新增数据量约3000个项目。
根据项目信息的文本含义,为供需双方提供关联度较高的对应信息(需求——成果智能匹配服务),是平台的一项功能需求。技术需求与技术成果之间的关联度分为四个层级:强相关、较强相关、弱相关、无相关。
百度千言数据集:
千言数据集:文本相似度
https://aistudio.baidu.com/aistudio/competition/detail/45/?isFromLUGE=TRUE
LCQMC(A Large-scale Chinese Question Matching Corpus), 百度知道领域的中文问题匹配数据集;
BQ Corpus(Bank Question Corpus), 银行金融领域的问题匹配数据;
PAWS-X (中文):语义匹配中难度很高的数据集。数据集里包含了释义对和非释义对,即识别一对句子是否具有相同的释义(含义),特点是具有高度重叠词汇,对于进一步提升模型对于强负例的判断很有帮助。