一只小狐狸带你解锁 炼丹术&NLP 秘籍
作者:机智的叉烧(OPPO算法工程师,擅长Query理解方向)
背景
搜索和推荐经常会被放在一起对比,其中最突出的区别就是搜索中存在query,需要充分考虑召回内容和query之间的相关性,而如果内容是搜索广告,则对内容有更高的要求,相关性过低的内容被展示会让用户有很差的体验。
相关性在一定程度上可以被抽象成doc和query之间的语义相似度问题,其实当前语义相似度的研究已经非常成熟,在sigir2018中有人曾经对搜索和推荐中的深度学习匹配进行了非常全面的综述:Deep Learning for Matching in Search and Recommendation[1]。在语义匹配上,大家的关注点经常在于如何去定义“匹配”上,尤其是分析如何将两者的编码内容更好地匹配起来。
常见的其实就是两个思路:
前者是重表示学习,也就是我们常说的“endocer”,然后通过简单的方法计算他们的相似度(如余弦相似度)。最具有代表性的应该是DSSM[2]等双塔模型了。
后者则重相似度计算,encode之后,通过句子之间的交互关系计算相似度,达成目标。常用的交互计算就是两个句子token间相互attention的过程,当然也有一些两者一起进入encoder共同计算的方法,比如BERT中的Text_a+Text_b的训练方式,就是同时进行句内和句间的表示计算。
虽然语义相似度问题已经有很多解决办法了,然而事实上,在应用过程中,相关性和相似度还是有着很大的差距,因为搜索内容的细微变化会带来较大的语义意图变化。比如用户想买“手机充电器”,但结果出了“手机壳”。虽然两者有一定的相似度,但明显是不相关的。
回过头来谈搜索广告,搜索广告是搜索中商(zhuan)业(qian)化的一环,希望的是能给到用户尽可能接触的东西尽可能相关,本来广告点的人就少,还无关就更凉凉了。
不慌,今天就介绍一个最新方法,来自亚马逊ACL20的《Learning Robust Models for e-Commerce Product Search》[3],文章主要用在商品搜索的场景下,目的是判断query和item/doc之间的相关性。文中提出了一个与“对抗生成网络”类似结构的模型[4],其中的判别器能够衡量query和doc之间的相关性,判断两者是否相关,生成器则能够生成与query相似却不相关的doc,借助类似对抗生成网络模式的训练,能够在较多噪音数据下,仍尽可能保证模型的鲁棒性。
模型
问题定义
为了更好的对模型进行描述,对问题进行定义,对一个匹配对,其中文档内容和对应的query ,表示两者的匹配情况,表示两者不匹配而表示两者匹配,而在建模过程中,会产生一个,当时会有。
模型架构
想要学东西,看论文肯定不能错过模型部分了。
LSTM-attention为基础的分类模型(蓝色虚线框)
变分编码-解码生成器(a variational encoder-decoder query generator,VED)(红色虚线框)
状态融合器(橙色实心矩形)
分类器
上面提到,分类器是一个LSTM-attention模式的模型。它的模式是基于(Rocktaschel et al., 2015)[5]产生的,作者认为搜索场景的语句格式和常规的自然语言会存在差异。首先query和对应的物品title,在语法结构上会存在不同,query一般较短,而title的描述则更多的是关键词的堆砌。广告场景下的query和title,更可能是一个多对一的情况,比如“红色跑鞋 耐克”和“红色 耐克运动鞋”都对应着同一个商品;另外,query中存在的对属性的描述,如品牌颜色等(电商场景),这些属性会在长句中出现,因此需要具有一定记忆性的模型。综上,作者对query和物品的标题title分别进行了不同的词向量训练,最终合并然后计算。
值得注意的是里面attention的使用,作者虽然使用的是additive attention,但是还提出了一个改进,这个改进把attention本来不包含上下文信息的模式升级为考虑了上一期信息的模式,来看看他具体是怎么做的:
设为LSTM的输出维数,和是title和query分别经过各自LSTM的输出矩阵。
要理解attention,首先要弄明白的是attention的对象和依据,显然,构造的时候,我们针对的是query中LSTM输出后每一个节点进行计算的,因此公式表示的意思是,对于query中的每个词,分别对title的表示进行attention并得到分数,另外计算时引入了,目的是加入t-1步之前模型主要focus的信息。
当然了,attention只是一种对信息的调整,最终还要考虑原来的信息,汇总出去,于是有:
其中是query经过LSTM后的最终输出。得到的就是query这一次送入全连接层之前的形态。
细心的我们可以发现,除了我们计算得到的和,还多考虑了,作者给出的解释是提升分类的效果,具体的体现就在于前面所提到的query和item之间的“多对一”的关系,attention中考虑了query中每个位置和title整体的关系后计算得到,而这个通过参数的训练,其实能够表示一整批与title相关的query,具有统一的表达能力,此时则能够体现这个所谓“统一的表达”与特定query之间的差距。
最后,当然就是损失函数了:
其中是一个调整正样本权重的超参数,在本文中会更看重正样本(不匹配的),因此有。
文本生成器
搜索引擎下正样本(不匹配)很简单,但是要找到与对应title不匹配,但是和对应query比较相似的文本,也就是我们所说的“对抗样本”,真的不容易,我们希望的是找到对抗样本协助训练,从而提升模型的鲁棒性。
文章里作者使用的是VED——变分编码解码器,我们希望的是,输入,能够生成一个,这个与不匹配,但是与非常接近(其实某种程度上可以理解为我们要去挖掘相似度分类的“决策边界”)。作者本身对VED没有很多的改进,而是直接沿用(Bahuleyan et al., 2017)[7]的操作,具体的格式就变得很简单:
生成器和query的联动
由于内部其实涉及了两个任务:分类和生成,要使这两者总体端到端化,有必要涉及一个统一的损失函数,权衡两者使两者尽可能同时达到最优。
回过头来重新看看整个模型架构,尤其是橙色部分:
这里的和分别是query和生成的query分别通过query LSTM后产生的结果,是一个满足概率为的伯努利分布。
展开来看看这个公式其中的原理,首先,如果query本身就和title不相似,也就是,则整个公式下其实就只使用了原始query,相反,如果,则完全使用生成的query。而为了产生一定的噪音,引入了一个随机数。
损失函数设计与训练
双重任务——分类和生成,那就要谨慎考虑两者的联合学习了,为此作者设计出了这么一个公式:
仔细看看这个公式是不是和上面公式(3)有些类似?说白了,只有当query和titile非常相似的时候(负例),才会更多的考虑生成器生成的query与title之间的相关性。但是其实我们可以发现,上面这个损失函数,无论是看query还是生成的query,都只是在分析他们与doc的不相似性,换言之都是再考虑“正样本”,而没有负样本,实际上他们是怎么做的呢?来看看他们的训练流程。
实验与效果
有了基本的模型以及一定的理论基础,当然就要开始实操这块的内容了。作者是针对电商搜索来进行的设计,当然就要用电商的数据进行实验,实验数据量将达到了320万对,其中只有少量是不匹配的,这里面的“匹配”是指query查询后频繁购买的那些商品的title。
模型效果
以gbdt为基线(说实话这里其实并不太同意用gbdt来做基线,我的视角看语义相似度他并非主流,dssm才是比较出名的基线),可以看到还是有比较明显的提升,从这里看,作者的模型效果甚至要高于著名的bert,哪怕是只有分类器,在加上生成器进行协助训练后,效果得到了进一步的提升。
不仅离线评估效果喜人,QUARTS在线上也获得了很好的表现,经过在两个国家的A/B测试后,相比当前的基线分别提升了12.2%和5.75%。
生成器效果
生成器的效果,根据作者分析现实准确率能达到82%,算是一个不错的水平吧,来看一些case:
可以看到,如作者预期,query和生成的query具有较高的相似性的同时,也能够满足与对应title之间的关系。
结论与展望
读完这篇文章后,我们需要做的,当然就是吸收这篇文章提到和提出的一些建模的trick:
在进行语义相似度时,query和title的embedding可以通过设置两个来表达不同的语义句式。
attention中引入上一期的信息。
在进行语义相似度时,attention对query进行处理,可以加入title的所有信息辅助生成。
(核心)变分编码产生正样本对原模型进行微调。
这里面让我感到比较惊喜的是,bert被干趴下了,而且输得挺多的,不过这主要是因为BERT是在DSSM基础上进行的改进,其实可以尝试把本文模型下训练的title embedding和query embedding都换成bert,估计会有新的提升(但模型估计会蹭蹭蹭的变大)。那么我下面给一些可以尽可能提升的思路吧(快记着,下一篇顶会就是你的了)
另外,我还想提的一个点是,在bert被干趴下的同时,这个模型除了LSTM之外本身没有复杂度很高的操作,耗时预计就在10ms左右。
中文是否有这个效果?
搜索的query大都是短句,现在看来效果还是不错的,但是从上面生成器的效果来看,还是出现一些语义类似但是文本匹配低的情况,是否可以加入文本匹配的信息协助保证文本层面的匹配度(如BM25)。
相似度的衡量目前比较粗暴,直接用的全连接,是否有必要升级为余弦、矩阵相似度?
尝试训练一个title embedding和query embedding都换成bert的模型,然后用本文的模型来做蒸馏,估计还会有提升。
本文收录于原创专辑:《卖萌屋@自然语言处理》
重磅惊喜:卖萌屋小可爱们苦心经营的 自然语言处理讨论群 成立三群啦!扫描下方二维码,后台回复「入群」即可加入。众多顶会审稿人、大厂研究员、知乎大V以及美丽小姐姐等你来撩噢~(手慢无
夕小瑶的卖萌屋
关注&星标小夕,带你解锁AI秘籍
订阅号主页下方「撩一下」有惊喜哦
参考文献
[1] SIGIR2018的报告,有关这个领域的语义匹配模型都有谈到: http://staff.ustc.edu.cn/~hexn/papers/sigir18-tutorial-deep-matching.pdf[2]Learning deep structured semantic models for web search using clickthrough data: https://www.microsoft.com/en-us/research/wp-content/uploads/2016/02/cikm2013_DSSM_fullversion.pdf
[3] Learning Robust Models for e-Commerce Product Search: https://arxiv.org/abs/2005.03624
[4] Adventure: Adversarial training for textual entailment with knowledge-guided examples: https://arxiv.org/abs/1805.04680
[5] Reasoning about entailment with neural attention: https://arxiv.org/pdf/1509.06664.pdf
[6] Neural machine translation by jointly learning to align and translate.: https://arxiv.org/abs/1409.0473
[7] Variational attention for sequence-to-sequence models.: https://cs.uwaterloo.ca/~ppoupart/publications/conversational-agents/variational-attention-sequence.pdf