基于深度学习的短文本类似度学习与行业测评

文本类似度计算做为NLP的热点研究方向之一,在搜索推荐、智能客服、闲聊等领域获得的普遍的应用。在不一样的应用领域,也存在着必定的差别,例如在搜索领域大可能是计算query与document的类似度;而在智能客服、聊天领域更注重的是query与query之间的匹配,即短文本之间的类似度计算。
git

不一样的文本长度,类似度的计算方案也存在差别,长文本匹配更多注重文本的关键词或者主题的匹配,业界使用的较多的算法如:TF-IDF、LSA、LDA;而短文本匹配更多的是句子总体的语义一致性,业界较为主流的算法有:word2vec、esim、abcnn、bert等深度模型。web

相比于长文本的类似度计算,短文本的类似度计算存在更大的挑战。其一,短文本能够利用的上下文信息有限,语义刻画不够全面;其二,短文本一般状况下,口语化程度更高,存在缺省的可能性更大;第三,短文本更注重文本总体语义的匹配,对文本的语序、句式等更为敏感。算法

query1
query2
我要打给你 我要打你
你叫什么
你叫我什么
我叫小布
我不叫小布
你有男票吗
你是单身狗吗
你真搞笑
你是个逗比啊
我喜欢看动漫
你不知道我喜欢看动漫吗

不一样文本类似度算法的得分分布不一致,没法经过评分来对算法进行评估。所以对于不一样的算法方案,能够设定特定的得分门限,得分高于门限,可判断为语义相同;不然,判断为语义不一样。对于一个给定标签的数据集,能够经过准确率来衡量类似度计算的效果。经常使用的中文评估语料有:LCQMC、BQ Corpus、PAWS-X (中文)、afqmc等。微信

1. 主流方案

业界经常使用的短文本类似度计算方案大体能够分为两类:监督学习与无监督学习,一般状况下,监督学习效果相对较好。在没有足够的训练数据须要冷启动的状况下,可优先考虑使用无监督学习来进行上线。网络

1.1 无监督学习

最简单有效的无监督学习方案就是预训练的方式,使用word2vec或者bert等预训练模型,对任务领域内的无标签数据进行预训练。使用获得的预训练模型,获取每一个词以及句子的语义表示,用于类似度的计算。架构

Word2vec是nlp领域一个划时代的产物,将word的表征从离散的one-hot的方式转化成连续的embedding的形式,不只下降了计算维度,各个任务上的效果也取得了质的飞跃。Word2vec经过对大规模语料来进行语言模型(language model)的建模,使得语义相近的word,在embedding的表示上,也具备很强的相关性。app

经过cbow或者max-pooling的方式,使用句子中每一个词的word embedding计算获得sentence embedding,可使得语义类似的句子在sentence embedding的表示上也具有较高的相关性,相比于传统的TF-IDF等类似度计算具备更好的泛化性。可是cbow的方式来计算sentence embedding,句子中全部word使用相同的权重,没法准确获取句子中的keyword,致使语义计算的准确率有限,难以达到上线标准。框架

虽然Word2vec提供了必定的泛化性,但其最大的弱点是在不一样的语境下,同一个word的表征彻底相同,没法知足丰富的语言变化。gpt、bert等大规模预训练模型的出现,完全解决了这个问题,作到了word的表征与上下文相关,同时也不断刷新了各个领域任务的榜单。异步

但实验证实直接使用bert输出的token embedding来计算句子的sentence embedding,不管使用cbow的方式对全部token embedding求平均或者直接使用[CLS] token的embedding来表示,语义计算的效果都不佳,甚至不如GloVe。究其缘由,在bert的预训练过程当中,高频词之间共现几率更大,MLM任务训练使得它们之间语义表征更加接近,而低频词之间的分布更为稀疏。语义空间分布的不均匀,致使低频词周围中存在不少语义的“hole”,因为这些“hole”的存在,致使语义计算的类似度存在误差。编辑器

为了解决bert语义空间不均匀的问题,CMU与字节跳动合做的bert-flow提出将bert的语义空间映射到一个标准的高斯隐空间,因为标准高斯分布知足各向同性,区域内不存在“hole”,不会破坏语义空间的连续性。

Bert-flow的训练过程就是学习一个可逆的映射f,把服从高斯分布的变量z映射到BERT编码的u,那就能够把u映射到均匀的高斯分布,这时咱们最大化从高斯分布中产生BERT表示的几率,就学习到了这个映射:

实验代表,经过bert-flow的方式来进行语义表征与类似度计算的效果,要远远优于word2vec以及直接使用bert的方式。

1.2 监督学习

Bert-flow的出现使得无监督学习在文本类似度计算方面取得了较大进步,可是在特定任务上相比于监督学习,效果还存在必定的差距。监督学习经常使用的类似度计算模型大体能够分为两类:语义表征模型,语义交互式模型。语义表征模型经常使用于海量query召回,交互式模型更多使用于语义排序阶段。

DSSM是搜索领域最经常使用的语义表征模型之一,而在短文本匹配领域,使用最多的网络结构是孪生网络,经常使用的孪生网络包括:siamese cbow,siamese cnn,siamese lstm等。孪生网络训练时,全部query使用相同模型来进行语义表征,经过余弦类似度等方式来计算query间的类似度,不断最大化正样本之间的相关性,抑制负样本之间的相关性。预测时,每一个query经过语义模型单独获取语义向量,用来计算query之间的类似度得分。因为query 语义表征仅与自己有关,所以在进行query检索时,能够提早对语料库中query构建语义索引,大大提高系统的检索效率。

相比于语义表征模型,交互式语义模型具备更好的匹配效果,模型结构每每也更加复杂,经常使用的交互式语义模型有ABCNN、ESIM等。交互式模型在计算query之间的语义类似度时,不只对单个query的语义特征进行建模,还须要query之间的交互特征。交互式模型一般使用二分类的任务来进行训练,当模型输入的两个query语义一致,label为“1”,反之,label为“0”。在预测时,可经过logits来做为置信度判断。

大规模预训练模型的出现,也横扫了文本类似度任务的各项榜单。Bert将lcqmc数据集的SOTA带到了86%的水平。随后,Roberta、albert、ernie等新的预训练模型层出不穷,也不断刷新着匹配准确率的SOTA水平。

2. 业务应用

在语义问答的业务中,一般会使用召回+排序的算法架构,在咱们的闲聊业务中,咱们也使用了相似的架构。使用siamese cnn语义表征模型来进行语义召回,用蒸馏后的transformer语义交互模型来作排序。

在语义表征模型的loss构建上,咱们参考了人脸识别领域的损失函数设计。这个两个任务在本质上是类似的,人脸识别是将人脸图片用向量表示,而文本检索式将文本用向量来进行表示,都指望正样本之间有足够高的相关性,负样本之间足够好区分。

在使用Siamese cnn进行语义建模时,咱们使用了1个标准query,1个正样本,5个负样本(尝试过其余负样本数量,在咱们的数据上效果不如5个负样本),训练过程实际上是在这6个样本中,识别出对应正样本的位置,所以可将其转化为分类任务来进行训练,每一个正负样本分别对应一个类别。使用每一个样本与标准query之间的类似度,来做为对应类别的logits,对logits进行归一化并构建loss函数。传统的softmax归一化构建的分类边界使得类别之间可分,为了更好的语义表征效果,须要使得类内更加汇聚,类间更加分散。ASoftmax、AMSoftmax、ArcFace等归一化方式,提出将全部query映射到一个球面,query之间的类似度经过他们之间的夹角来计算,夹角越小类似度越高,经过在角度域添加margin的方式,使得类内更汇聚,类间更可分,达到更好的语义表征效果。

咱们对比了softmax、Asoftmax、AMSoftmax、Arcface等不一样归一化方式,其中,Softmax没有添加任何margin,ASoftmax经过倍角的方式在角度域添加margin,AMSoftmax则是在余弦域添加margin,而Arcface则是直接在角度域添加固定margin。

咱们使用30W的语料库来构建索引,使用12900条线上query(语料库中不包含彻底相同的query)来进行召回测试,使用相同的向量索引工具,对比发现AMSoftmax、Arcface召回效果上有很大提高,在咱们的业务中获得了应用。

在排序模型方面,咱们尝试了ABCNN、ESIM、transformer等交互式语义模型,但效果相比于bert等预训练模型,还存在必定的差距。咱们团队自研的预训练模型Xbert,在与Roberta large同规模的状况下,融入了自研知识图谱数据,添加了WWM(whole word MLM)、DAE、Entity MLM等任务,使用LAMB优化器进行优化。咱们使用XBert在业务数据上进行了测试,相比于同规模的Roberta large准确率有接近0.9%的提高。为了知足上线需求,咱们参考tiny bert的方式,用Xbert蒸馏了一个4层的transformer model用于线上推断。

咱们在内部的问答数据集上对不一样排序方案作了的效果对比,使用12900条线上用户真实query,进行全链路的效果对比测试。用语义召回top1的准确率来评估语义表征模型的效果,而且经过消歧模块进一步提高应答准确率;测试排序模型效果时,咱们使用了多路召回,共召回30个候选,使用排序模型对候选排序,选择排序后的top1做为最终答案。若通过消歧模块,全部候选均被消歧掉,或排序后的top1候选排序得分不知足应答门限时,则该query系统无应答。所以,咱们使用应答率与应答准确率来做为系统最终的评测指标,来评估不一样方案的效果。

为了测试自研的Xbert在公开的语义类似度数据集上的效果,在lcqmc数据集上,单模型准确率88.96%,较Roberta large单模型87.9%的准确率,提高了1%;经过使用正样本之间的传递性以及负样本采样的方式,来进行数据加强以及FGM对抗训练的方式,准确率提高至89.23%;经过ensemble的方式,将准确率进一步提高至90.47%。经过相同的方式,在bq_corpus上达到了87.17%,在paws-x任务上达到了88%,在afqmc数据集上也达到了77.234%,在百度举办的千言文本类似度比赛中完成登顶。

3. 总结与展望

短文本类似度在咱们的闲聊领域获得了应用,使用语义表征学习来进行召回+交互模型排序的算法架构,在保证系统性能的前提下,取得了不错的业务效果。在语义表征模型上,咱们使用人脸识别领域的loss来提高召回效果;在语义排序方面,咱们也利用了大规模预训练模型以及模型蒸馏,来进一步提高业务效果。在大规模预训练语言模型方面,咱们积极探索与改进,相比于现有开源预训练模型,咱们的Xbert在业务上以及公开数据集上的评测效果,都有了进一步的提高。

在从此的工做中,咱们会利用好预训练模型这个核武器,在咱们Xbert的基础上努力优化突破,将文本的类似度匹配任务带新的台阶。在解决单轮类似度匹配的状况下,咱们也会继续探索结合上下文的多轮匹配以及多轮生成等任务,来进一步提高咱们闲聊业务的体验。


☆ END ☆


招聘信息

OPPO互联网技术团队招聘一大波岗位,涵盖C++、Go、OpenJDK、Java、DevOps、Android、ElasticSearch等多个方向,请点击这里查看详细信息及JD


你可能还喜欢

OPPO自研ESA DataFlow架构与实践

数据同步一致性保障:OPPO自研JinS数据同步框架实践

微服务全链路异步化实践

Dubbo协议解析与ESA RPC实践

云原生Service Mesh探索与实践

更多技术干货

扫码关注

OPPO互联网技术

 

我就知道你“在看”

本文分享自微信公众号 - OPPO互联网技术(OPPO_tech)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。

相关文章
相关标签/搜索