Press "Enter" to skip to content

NLP 语义匹配:业务场景、数据集及比赛

本站内容均来自兴趣收集,如不慎侵害的您的相关权益,请留言告知,我们将尽快删除.谢谢.

 

作者 | 周俊贤

 

整理 | NewBeeNLP

 

 

 

大家好,这篇文章想跟大家讨论一下语义匹配的应用场景。实际上无论是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之星”挑战赛-新冠疫情相似句对判定大赛

 

这个比赛就是上面说的场景1,而且是一个十分细分的聊天场景,主打疫情相关的呼吸领域问题。越是细分的领域,相对来说更好做,准确率更高。

 

天池: 「小布助手对话短文本语义匹配」

 

用语义匹配的来做意图识别,而非直接检索问题。这给我们开扩了思路,上面说到的聊天机器人中的任务型机器人,第一步是意图识别,传统做法是当成一个分类任务来做,但用分类方法做的缺点是难以拓展(如一开始限定好10个意图类比,以后像扩展的话,要重新训练模型),但用语义匹配做则不用,增加意图只需要在对应的库里增加相关问题。

 

搜狐:2021搜狐校园文本匹配算法大赛

 

每对文本在两个颗粒度上判断文本对中的两段文字是否匹配。其中,一个颗粒度较为宽泛,两段文字属于一个话题即可视为匹配;另一个颗粒度较为严格,两段文字必须是同一事件才视为匹配。如下面的问题,它们都是说英超足球,属于同一个话题,但是两个不是同一个事件。

 

 

2019法研杯:

 

针对多篇法律文书进行相似度的计算和判断。具体来说,对于每份文书我们提供文书的标题和事实描述,选手需要从两篇候选集文书中找到与询问文书更为相似的一篇文书。类似上面我提到的场景2,用语义匹配的方式做检索,检索出的案件或工单用于给工作人员参考。

 

CCF:“技术需求”与“技术成果”项目之间关联度计算模型

 

应用场景是有一个平台,定期收集技术需求和技术成果,定期更新技术需求库和技术成果库,数据来源有两种:(1)会员单位发布;(2)非会员单位官方网站采集。每月新增数据量约3000个项目。

 

根据项目信息的文本含义,为供需双方提供关联度较高的对应信息(需求——成果智能匹配服务),是平台的一项功能需求。技术需求与技术成果之间的关联度分为四个层级:强相关、较强相关、弱相关、无相关。

 

百度千言数据集:

 

LCQMC(A Large-scale Chinese Question Matching Corpus), 百度知道领域的中文问题匹配数据集;

 

BQ Corpus(Bank Question Corpus), 银行金融领域的问题匹配数据;

 

PAWS-X (中文):语义匹配中难度很高的数据集。数据集里包含了释义对和非释义对,即识别一对句子是否具有相同的释义(含义),特点是具有高度重叠词汇,对于进一步提升模型对于强负例的判断很有帮助。

 

Be First to Comment

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注