当然,这里对比的还是这几个场景对“匹配”这个问题的理解差异,大家继续看下去。
首先,这几个任务其实本质都是一个双输入单输出的问题,无论训练阶段用了什么策略,类似triple loss那种,其实在预测阶段,都是为了对比两者的关系,即构造一个的函数进行预测罢了。对语义相似度而言,就是text1和text2,对搜索而言,就是query和doc,对于问答而言,就是问题和答案,其实所谓的各种方案,都是看给出的两者是否匹配。
因此从这个很简单的建模,就可以了解到,绝大部分简单的情况,其实都可以尝试下直接端到端模型来进行解决,交互式可以考虑ESIM甚至是BERT,表征式的话则是CNN孪生或者是sentence-bert之类的,甚至现在以SIMCSE为代表的对比学习。
然而,众所周知,如果就一个模型就能解决所有问题,在座的各位都要失业,那么是什么原因导致的我们需要各种招数才能处理这些复杂问题呢,继续看。
首先,相似和其他两者最大的区别,就是他其实只是一个任务,简单到只要有一套数据,就直接计算,如中文的LCQMC、AFQMC,英文的STS系列等,其实都是奔着一个任务,就是相似去的。
其次,任务内,其实两个输入的性质是非常相似的,甚至是相同的,有些时候用表征模型,两个塔甚至可以共享了,很粗暴。
原因1可以说是任务层面的定义简单,原因2可以说是数据的简单,两个原因共同作用,使得整体其实难度就不会特别高,在这些对应的开放数据集下,现在已经能够取得很优秀的结果,因为推理过程中只需要模型比对两个句子之间相似和不相似的部分,就能直接给一个分数,就和小时候我们玩的找不同一样,甚至比这更简单,只要找到了不同,就可以直接做判断了。
传统的搜索系统,其实就是用倒排索引的方式找到各种doc中和query重合的部分,即可召回,然后通过精排来解决。
而query和doc的匹配,其实相比相似任务要更加复杂,我列举一些:
说白了,就是考虑到了query和doc在语义空间、句子性质等众多原因的不对等下,难度就上来了。
来举个栗子,这里我搜的是“python教程”,(“--advertisement”只是为了过滤广告,大家可以忽略)。就和标题进行比对,其实query和doc下的信息量,就不一样,例如第一条的还有入门、详细之类的说法,其实从语义相似度上看压根就不匹配。
所以在解决方案上,尤其是早起,就很看重召回阶段的BM25,时至今日比较追前沿的科研领域,BM25仍需要被拿来做对比当靶子,可见这个方案的统治力。当然了,落到深度学习模型层面,其实大部分模型也都能cover住,能识别到两者的相似度,甚至根据一些点击信息,能够学出很好的结果了,现在很多比较规范的搜索数据集已经能达到比较高的高度,例如最近有聊到的ERNIE-search(前沿重器[29] | ERNIE-Search:向交互式学习的表征式语义匹配代表作)。
问答的难度,其实比搜索还要高不少的。来举个例子,有点极端,但有些真实:
儿童节是哪天。6月1日。劳动节是哪天。5月1日。钱钟书的妻子是谁。杨绛。
从这个例子,不知道大家有没有发现什么:
出现这个性质的原因,很大程度和对背景知识的要求有关。这里的知识,是指那些不知道,就一定解决不了的东西,我在这篇文章里面有谈到(心法利器[45] | 模型需要的信息提供够了吗),这是一些不提供给系统,这个系统就回复不了的信息。这些东西,光靠模型和样本数据的构造是不可能完成的,因为在模型视角,6月1日和5月1日就语义非常接近,但是张冠李戴不可取,当然用模型强制学可以学到,但是对于可能缺乏知识或者答案的一些问题,仍然会拒绝不掉。
因此,早期的问答系统,是通过挖掘同义的Q,然后进行检索的方式来做的,说白了转化为“相似度任务”或者是搜索问题来做,然后近年来,就是通过构造知识图谱、对预训练模型做知识增强的方式来做,一个是结构化来处理,另一个是非结构化的处理,本质都是要想办法往系统里面注入知识。
现在回头看,就会发现这3个东西在从易到难逐步升级,而且,也非常符合NLP本身的发展历程,从最基本的语义理解,到更强的表征和泛化能力,再到知识的注入。
联系客服