文本类似度计算作为NLP的热点钻研方向之一,在搜寻举荐、智能客服、闲聊等畛域失去的宽泛的利用。在不同的应用领域,也存在着肯定的差别,例如在搜寻畛域大多是计算query与document的类似度;而在智能客服、聊天畛域更重视的是query与query之间的匹配,即短文本之间的类似度计算。

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

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

query1query2
我要打给你我要打你
你叫什么你叫我什么
我叫小布我不叫小布
你有男票吗你是独身狗吗
你真搞笑你是个逗比啊
我喜爱看动漫你不晓得我喜爱看动漫吗

不同文本类似度算法的得分散布不统一,无奈通过评分来对算法进行评估。因而对于不同的算法计划,能够设定特定的得分门限,得分高于门限,可判断为语义雷同;否则,判断为语义不同。对于一个给定标签的数据集,能够通过准确率来掂量类似度计算的成果。罕用的中文评估语料有:LCQMC、BQ Corpus、PAWS-X (中文)、afqmc等。

1. 支流计划

业界罕用的短文本类似度计算计划大抵能够分为两类:监督学习与无监督学习,通常状况下,监督学习效果绝对较好。在没有足够的训练数据须要冷启动的状况下,可优先思考应用无监督学习来进行上线。

1.1 无监督学习

最简略无效的无监督学习计划就是预训练的形式,应用word2vec或者bert等预训练模型,对工作畛域内的无标签数据进行预训练。应用失去的预训练模型,获取每个词以及句子的语义示意,用于类似度的计算。

Word2vec是nlp畛域一个划时代的产物,将word的表征从离散的one-hot的形式转化成间断的embedding的模式,不仅升高了计算维度,各个工作上的成果也获得了质的飞跃。Word2vec通过对大规模语料来进行语言模型(language model)的建模,使得语义相近的word,在embedding的示意上,也具备很强的相关性。

通过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的根底上致力优化冲破,将文本的类似度匹配工作带新的台阶。在解决单轮类似度匹配的状况下,咱们也会持续摸索联合上下文的多轮匹配以及多轮生成等工作,来进一步晋升咱们闲聊业务的体验。