一只小狐狸带你解锁 炼丹术&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














表示两者的匹配情况,






表示两者不匹配而






表示两者匹配,而在建模过程中,会产生一个











,当











时会有
















模型架构

想要学东西,看论文肯定不能错过模型部分了。

模型主要分为3大部分:

  • 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分别进行了不同的词向量训练,最终合并然后计算。

底层的输入本就有两块,一块是titie,另一块是query,两者分别通过自己训练的word2vector进行编码,然后如图所示地进入各自的LSTM,其中还能看到的是query的LSTM其实还用了title LSTM的末端信息信息,随后,进入了一个additive attention,其实是一种比较常规的attention方法(Bahdanau et al., 2014)[6],此后,就进入三层全连接,最终完成了匹配度的计算。

值得注意的是里面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的不相似性,换言之都是再考虑“正样本”,而没有负样本,实际上他们是怎么做的呢?来看看他们的训练流程。

在训练过程中,首先要做的是对分类器进行第一轮训练,然后用分类器划分出相似和不相似的query,然后用这块数据训练出第一版本的VED,在此基础上,再用公式(4)作为损失去做调整,最终得到需要的模型,尤其是这个分类模型。

实验与效果

有了基本的模型以及一定的理论基础,当然就要开始实操这块的内容了。作者是针对电商搜索来进行的设计,当然就要用电商的数据进行实验,实验数据量将达到了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

ACL2020 | 线上搜索结果大幅提升!亚马逊提出对抗式query-doc相关性模型相关推荐

  1. 史上最全的亚马逊防关联技巧|跨境知道

    做跨境电商的人都知道,跨境多店铺早已经不是秘密 不把所有鸡蛋都放到一个篮子里是大家都懂得分散运营 多账号运营有很多好处: 多账号可以抢占排名,在一个搜索页面上出现你的多个商品 多账号运营可以分散风险 ...

  2. 大数据早报:时装设计也用上了人工智能,亚马逊研究出新算法;上海地铁趣味消费数据发布(9.12)

    数据早知道,上乐投网看早报! 『MongoDB』MongoDB再遭大规模勒索!这可能最全面的数据库防勒索方案 又一起数据库被劫持勒索事件.MongoDB 数据库又双叒叕被攻击了,三个黑客团伙劫持了 2 ...

  3. 使用elasticsearch文件搜索系统助力亚马逊解决方案架构师认证考试

    当真没想到随手写的一个文章 使用elasticsearch搭建文件搜索系统(带界面),居然会有这么多的点赞.哈哈,应该是贫穷限制了我的想象力,感谢30多位同学的赞.总之趁热打铁,围绕这个话题,趁我还有 ...

  4. kindeditor批量上传设置_亚马逊物流(FBA)全解析——如何在卖家平台完成FBA设置?...

    亚马逊物流(FBA)全解析--如何通过卖家平台完成FBA发货设置? 说了这么多,到底如何在卖家平台使用FBA发货呢?别着急! 在登录亚马逊卖家平台进行FBA的相关操作之前,还需要先确认以下几点事项哦 ...

  5. 主图上视频全面开放,亚马逊试验新功能将让跟卖更加猖獗

    亚马逊最新通知,Listing主图上传视频全面开放!早在8月初的时候,美国站卖家就收到过主题为"视频上传政策更新"的邮件,亚马逊通知:"第三季度时,非品牌卖家可以把视频上 ...

  6. 史上最全的亚马逊、ebay、shopee多账号运营防关联技巧__多账号管理、独立浏览器AdsPower

    跨境电商多账号.多店铺策略早已不是秘密 "不把鸡蛋放在一个篮子里" 风险分散的道理大家都懂 多账号运营有许多显而易见的好处 拿亚马逊账户来说 多账户对产品线创建和跟卖购物车的拥有率 ...

  7. 云上更安全?亚马逊云科技宣布将持续加大在中国区域安全合规领域投入

    编辑 | 宋慧 出品 | CSDN云计算 新冠疫情对我们工作产生了深远的影响,远程在线的工作与交流愈加普及,国内更多公司在推出居家办公的"混合办公"模式.不过,这也给了网络攻击更多 ...

  8. 杂_小技巧_将网页上的内容通过亚马逊邮箱传到kindle中

    所需条件 1.kindle要联网 2.要有亚马逊邮箱 3.要有微信,电脑上或者手机上 操作步骤: 1.找到你想要传送到kindle上的文章网页 2.在微信中关注"亚马逊kindle服务号&q ...

  9. 亚马逊提出无监督虚拟增强句子表征学习框架,效果超越SimCSE

    ©作者 | 林亿 单位 | 科大讯飞AI研究院 研究方向 | 对话系统 前言  半年前 SimCSE 两次 dropout 的操作刷爆朋友圈,对比学习相关论文也席卷各大顶会顶刊:上次也总结了 ACL ...

最新文章

  1. python编写程序的一般步骤-Python编写win程序的操作流程
  2. java中定时任务和线程池_java基于线程池和反射机制实现定时任务完整实例
  3. OpenCV显示copyMakeBorder功能的实例(附完整代码)
  4. Spring 3.0参考之SpEL
  5. 定义入栈java_小师妹学JVM之:java的字节码byte code简介
  6. 工作235:splice
  7. 【C语言进阶深度学习记录】三十八 C/C++语言中的函数声明与函数定义
  8. 好用的php空间,推荐国内三个优质的免费PHP空间
  9. oracle检查完系统要求不动,w10安装oracle, 正在检查操作系统要求... 实际结果: 6.2...
  10. ConcurrentHashMap 和 Collections.synchronizedMap(map) 比较
  11. 面试回忆之四:所投职位和背景极端不匹配的简历
  12. [二进制拆分]Luogu1833 樱花
  13. PHP导出excel文件的多种方式
  14. 思科交换机常用命令汇总
  15. 阿里 vs. 腾讯,谁的收购更有眼光?
  16. 旷视研究院参会PRCV2019 推进模式识别与CV技术交流
  17. WINTC编译汇编的方法
  18. SAP报表导出格式设置
  19. iOS开发 关于YY_Model中,modelContainerPropertyGenericClass解析数组出现崩溃问题
  20. OSChina 周三乱弹 —— 念念不忘,必有回响

热门文章

  1. json字符串和字典类型的相互转换(转载)
  2. MyEclipse中SVN的常见的使用方法
  3. c++现在有一棵合法的二叉树,树的节点都是用数字表示,现在给定这棵树上所有的父子关系,求这棵树的高度
  4. 为什么大家都只谈薪资,却不谈梦想?
  5. android系统开发(六)-HAL层开发基础
  6. TQ210——启动方式
  7. 单链表的应用 就地逆置
  8. matlab fftshift_数字信号处理没有Matlab?用Python一样很爽
  9. altera fpga sdi输出方案_FPGA在电力电子中的应用有哪些?
  10. LeetCode 2114. 句子中的最多单词数