亚马逊semantic product search

亚马逊semantic product search

网上一直有一种说法,就是在Google的工程师非常鄙视亚马逊的工程师,觉得他们技术不行,Google的技术比较牛叉,但是很多业务场景Google就是做不过亚马逊,最典型的就是云计算市场,Google的市场份额还不如阿里,更别说亚马逊的老本行电商。而亚马逊也一直奉行简单有效为客户服务的原则推进业务。 例如这篇论文中描述的亚马逊电商product search,技术比较简单,没有很高端复杂的模型,但大家在工业界的实践中是可以作为参考的,是一种简单有效的语义搜索方法。该论文发表于2019年KDD大会,下边的内容更多是一个论文的笔记,作为一个备忘,大家最好参考原论文一起阅读。

基于字面匹配的缺点

  1. 第一上下位同意反义处理不好,例如语义的泛化(hypermyms),同义词(synonyms),反义词(antonyms)
  2. 第二形态学变换处理不好,比如说woman and women
  3. 第三拼写错误处理不好。

本文提出的语义方法解决问题的思路:

  1. 第一是loss function处理正负样本
  2. 第二是针对average pooling和ngram捕捉语法的pattern
  3. 第三是使用哈希处理字典中不存在的单词的问题OOV,应对0次学习问题
  4. 第四是进行了并行优化。

本文面临的场景是用户的行为数据量非常多,但是有噪音,同时用户在搜索的时候,是针对某一个比较窄的领域进行搜索,在这个过程当中还需要兼顾发现性。

模型

本文使用的模型的主要特点

  1. 第一是使用embedding方式将query,product映射到相同的空间
  2. 第二是生成embedding之后,使用average pooling的方式将embedding压缩到相同的维度。之所以能够用average pooling主要的考虑有两点(没有使用RNN的原因)
    第一是query和product都比较短,没有太强的持续依赖的关系
    第二是query一般都包含在product之中。同时因为quarry比较短,所以将query和product映射到同一空间中,无需额外参数

图:模型示意图

Loss function

使用pointwise 3阶段hingle loss作为lose function

相当于综合考虑了样本的三种情况:

  1. 第一正样本为用户购买的product
  2. 第二就是用户看到了(impressed),但是没有购买的结果
  3. 第3种是随机采样出来的结果作为副样本

相当于将label分成三种,三种有不同的域值,使用hingle loss方式进行建模

tokenization methods

本文使用不同维度的力度的embedding对query, product进行表达.主要分为以下几种:

  1. word unigram:基于单词的unigram
  2. word n-gram:用来捕捉PHRASE信息,以及对应的附属信息,例如用户如果买的是iPhone手机壳跟iPhone手机其实是不一样的,使用n-gram可以捕捉该类信息
  3. character trigram:用来捕捉拼写错误信息或者像size型号之类似的信息

同时文中使用harsh trick来解决embedding没有表达到生僻词的情况。
最后在应用的时候,作者将所有的tokens组成一个bag of tokens,之所以能够那么做而没有考虑持续的原因,是因为query和product的title一般都相对较短,用这样的方式其实也能表达序列的关系,而不用用到rnn这样的模型。实验证明不用rn效果的影响也不大。

note:对于OOV的部分(word, n-gram, char-trigram)则使用hash trick的方式进行处理,将query, product中相同的部分映射到相同的bin中(参见图5)
该方法的好处,一方面能够保证高频的元素都能够找到,另一方面,query和product中OOV的元素都能够映射到相同的部分。

data

使用11months的search logs作为训练数据, 使用1month作为evaluation。
文中使用用户数据来进行模型的训练使用和query和products的counts作为权重。
在构造样本的时候,一个query之下有6个impression的product和7个random的products和一个有购买的products。

实验指标

matching:抽取20k个query,看从100万的语料库里边能召回多少购买的products。
ranking:主要看NDCG,mrr。

Result

设置:文中固定dimension为256,batch size=8192,adam作为优化算法。。。
结论:

  1. L2比L1正则更好,原因可能是L2对于cosine计算相似度的情况下,对于outlier更加泛化
  2. 效果 3 part > 2 part loss
  3. average pooling效果优于gru/lstm,猜测可能是因为该场景中序列长度较短,RNN的效果没有发挥出来
  4. tokenization算法中,unigrams+bigrams+char trigrams算法效果最好; 增加OOV在保证参数不变的情况下效果更好

后续:借鉴意义

在后续推荐业务中存在的借鉴意义如下:
poi2poi embedding表示:计算可以使用该方法对搜索业务中 query-点击poi数据进行embedding,获取poi embedding,计算i2i
tag2tag embedding表示:将tag作为token,使用搜索数据进行训练,得到tag和poi在同一空间中的embedding表示
poi属性2poi的embedding表示

reference

原论文参见:
复制这段内容后打开百度网盘手机App,操作更方便哦 链接:https://pan.baidu.com/s/1VITC73pw9fURLJ-K_7Kb3g 提取码:4h43
更多内容参见: www.semocean.com
P.S. 急招推荐,搜索,语音算法人才,阿里P6~P8,欢迎推荐和自荐,简历请发至 haibo.lihaibo@alibaba-inc.com

 

增加User Memory Embedding的深度点击率预估模型

这次参加了KDD 2019的大规模稀疏特征模型workshop,其中有比较多的论文是关于如何改进推荐,变现场景CTR预估模型的效果提升的。感觉今年很多的论文改进方向都集中在了如何更好地引入用户历史行为特征及兴趣。 无论是引入RNN, transformer,或者其他的weighted pooling,都基本是是类似的思路。

以下就简单介绍下这次KDD收录的文章《Click-Through Rate Prediction with the User Memory Network》的思路,细节就不展开了,具体可以参见附件。

在按照CPC收费的广告业务中,Revenue=bid*ctr,故ctr预估的准确性一直是广告业务中的核心技术问题。现在深度学习已经成为ctr预估的标配,但传统DNN的深度ctr模型未考虑用户的点击历史行为,效果有待提升。而另一方面,RNN类的序列模型能够刻画用户的历史行为序列提升预估准确性,单RNN类的模型存在两个缺点:1是模型会比较复杂,2是数据的准备也会既复杂又冗余。

本文为了解决该问题,引入了用户唯独的like and dislike history的vector描述,两个vector作为用户feature和广告的其他feature进行concat作为input进行模型训练和预测。该方式既引入了用户的history信息,又避免了使用RNN类的模型带来的复杂性。需要注意的是,like/dislike的向量为user-wise的,故每个user都会有两个用来表示这两个历史信息的向量。

p.s. 其实这样的思路在很多场景中军可以使用,例如在地图领域,理论上引入了RNN的ETA效果也会更好, 因为用于表示道路的link客观上就是呈现出序列的特性,但ETA作为基础设施访问量非常大,实效性要求又会比较高,故线上几乎不可能使用RNN作为实现方案,所以可以使用固定长度的vector对序列的link进行表示,以便使用定长的向量,一定程度上就可以表示出序列的特性,相当于是序列信息的一种折中方案。

文中提到的CTR模型如下:

图:memory network for ctr prediction

该方法在传统的DNN基础上,在将特征进行embedding的时候,引入额外的两个用户级别用于表示like&dislike的vector作为history memory信息,一定程度上引入了历史序列信息。

References:

  1. Ouyang W, Zhang X, Ren S, et al. Click-Through Rate Prediction with the User Memory Network[J]. arXiv: Information Retrieval, 2019
  2. 论文下载:复制这段内容后打开百度网盘手机App,操作更方便哦 链接:https://pan.baidu.com/s/1gFsuIIFzuKQROFLotfZldg 提取码:181v

 

 

ID+图像特征联合训练CTR模型

CTR预估一致都是广告系统,推荐系统中的核心组件,对于简单的应用场景,LR,或者GBDT等传统浅模型就已经能在有限的代价下很好地解决该问题。但对于一些影响面比较大的场景,例如BAT中核心推荐,变现场景中的CTR,每一个点的提升都非常重要,此时就需要使用技术手段对CTR预估模型进行极致优化。此时模型的选择,以及根据具体业务的模型设计创新就会比较关键。而另一条思路,则是引入多模态的特征。

LR,GBDT在极致优化的情况下可能就可以解决80%的问题;如果还需要提升,则是近年来比较流行的深度深度模型,例如Wide&Deep,DeepFM,各种FM思想的深度话;甚至还需要根据具体业务场景中提炼出来的业务特性对网络进行定制, 例如阿里妈妈设计的DIN对用户历史兴趣item的weighted pooling思想。

另外一条对效果进行提升的道路就是引入多模态的信息,结合传统的id特征对模型进行训练提升效果。e.g. 引入推荐item的图片信息

下面就简单介绍一下最近读的阿里妈妈关于如何使用用户历史兴趣item图片提升模型效果的文章《Image Matters: Visually modeling user behaviors using
Advanced Model Server》。该论文是阿里妈妈广告CTR预估团队的论文。核心思想,是使用能够代表用户行为的图像(例如用户点击,购买过的商品的图像)来学习用户的兴趣。
传统的使用ID特征更多是偏记忆性质的,就是用户有没有点过这个广告,是不是对该广告感兴趣,这样的方式有两个缺点:1是在预估的时候如果出现新的未见过的ID,则模型无法处理;2是如果数据不充分,则训练效果也不会好。所以文章假设能够使用能代表用户行为的图像,来表征用户的兴趣:将图像的高维特征抽取出来后,具有较好的泛化性。

具体的做法是使用pre-training的模型获取表征用户行为的image的低维度向量表示,文中使用VGG16 FC6输出的4096维度的vector表征图像,之后对这些vector进行aggregation。之后得到的image特征表示和id features进行concat后进行CTR模型训练。
论文的创新点如下:

  1. 使用Behavioral images的抽象特征对用户行为兴趣进行刻画,而传统的方式要么只用id feature, 就算用image feature,也仅仅用ad的feature
  2. 新的基于attention的aggregation方法,该处的pooling方法不是简单的sum或者max,而是基于query的attentive的aggregation,类似于DIN中的方法
  3. 新的训练框架

当然,该论文中使用的是类似于DIN中,使用了用户历史item序列的图片来泛化用户兴趣,使用的是一序列图的聚合,而非一张图所以感觉该算法还是太重了,一般的场景感觉有点杀鸡用牛刀。另外一种折中的方案是就使用一张图,就是待推荐商品的图作为特征引入模型进行联合训练,这样的方法在很多场景中也已经在使用并得到了较好的效果验证。

参考文献:

Zhou G, Song C, Zhu X, et al. Deep Interest Network for Click-Through Rate Prediction[J]. 2017.

Ge T , Zhao L , Zhou G , et al. Image Matters: Visually modeling user behaviors using Advanced Model Server[J]. 2017.

 

 

图像质量打分算法-NIMA

业务背景
随着手机性能提升,网络速度改善流量资费下降,原有网络上消费的内容很大程度上都被图片,视频所取代。此时很多应用中就会碰到一个技术问题,如何评价图像,甚至视频的质量。而这里边一个比较重要的场景,就是如何选择内容的头图。例如大众点评UGC评价推荐的首图,爱奇艺、优酷视频的头图。好的头图能够提升内容的表达能力,提升用户体验,从业务指标上也能从内容的点击率体现出来,所以,需要一种可靠的图像质量打分算法,该算法不仅需要能够识别技术上质量差的图片(例如清晰度差,饱和度,噪音点多等),还要根据具体的业务场景,判断该图片适用于该业务场景的程度,例如美团点评的头图如果是菜品时,显示已经就餐完毕的残羹冷炙就不合适,而爱奇艺,优酷等视频网站,则不适合出色情的头图。

算法
业界有很多算法解决此类问题,例如BDN(Brain-Inspired Deep Networks for Image Aesthetics Assessment)中使用多路人工构建特征进行打分能够在该类问题中取得较好成绩。
比较有名的end2end方法,是2017年Google Research发表的NIMA算法(Neural Image Assessment算法)。正好这几天有时间业看了下论文,感觉Google的论文都是比较接地气的:不复杂,能解决实际问题,甚至拿来修改下就可以在实际场景中使用。
该论文解决Image Assessment的算法的思想主要如下:

  1. 使用预训练的ImageNet网络作为Baseline,该处的Baseline可以是MobileNet,VGG16,Inception等
  2. 在Baseline的基础上,将最后一层替换掉,使用随机初始化的FC进行任务Fine Tuning
  3. 使用的数据集论文中提到3个,AVA,TID2013,LIVE。数据集中对图片的标注,均是同一个Image多个人进行打分,用打分分布进行描述,包含mean,deviation。使用上述数据集进行模型Fine Tuning
  4. 论文中考虑到各个打分等级虽然是离散的,但却是有顺序的(Ordered),所以模型最终的loss并不是使用cross entropy进行衡量,而是使用EMD,这样有助于将各个离散的分档的大小关系考虑到任务重,缓解了cross entropy将各个类别看成相互独立的缺点

图:NIMA算法架构图,使用ImageNet任务网络(MobileNet,VGG16,Inception)移出最后一层,然后新增随机初始化FC。训练loss使用EMD

图:EMD loss

总结
在很多任务重,NIMA都能够表现良好,甚至使用AVA公开数据进行训练后的模型就能够取得较好成绩,但是很多时候,我们还是需要根据具体业务进行定制,特别是加入符合业务场景需求的训练样本,例如电商UGC中不能出现色情内容,单是否出现年轻,二次元的美女可以加分? 另外文中使用EMD来缓解cross entropy不能建模ordered category信息缺点的思路,也可以在很多场景中借鉴,例如地图中,路况状态一般分为:畅通,缓行,拥堵,极度拥堵,如果直接使用cross entropy就将各种状态之间的顺序关系丢弃了,此时使用EMD作为loss,而仍然将问题看成是分类问题会更加合适。

Reference
Zhangyang Wang, Florin Dolcos, Diane Beck, Shiyu Chang, Thomas S. Huang:
Brain-Inspired Deep Networks for Image Aesthetics Assessment. CoRR abs/1601.04155
NIMA: Neural Image Assessment. 原论文下载地址:https://arxiv.org/abs/1709.05424

github Keras实现:https://github.com/titu1994/neural-image-assessment