- ·上一篇文章:免编程,教你5分钟快速制作APP软件
- ·下一篇文章:【专访】这个奢侈品版的闲鱼,让你花小钱也能入手香奈儿
AI小编问世!阿里智能写手核心技术首次公开!
d CNN在网络性能和效果上综合最优,于是双十一全量上线的模型中采用Gated CNN的语义表示网络结构。2.3 Multi-level相似度模块除了上述对于user和item侧信息的映射和抽取,为了计算用户和利益点的相关性,我们从两个不同的语义层次对用户偏好标签和商品卖点的相似度计算,分别是:1.对用户偏好标签embedding层输出和商品卖点embedding层输出的cosine similarity计算。假定用户侧所有词的embedding矩阵为 ,商品侧词的embedding矩阵为 ,那么两侧词之间一一对应的余弦相似度(embedding已归一化)为:我们还在这个基础上做了global pooling,分别为max pooling/min pooling/average pooling,得到3个数值。将上式得到的相似度打平后,与pooling层得到的结果concat成一维向量共同输入至下一层。2.对用户偏好标签的语义表示和商品卖点的语义表示计算bilinear similarity。定义一个矩阵M去连接用户侧向量 ,商品侧向量 ,公式如下:其中为相似度矩阵。这相当于将user侧的输入映射为 :由于此时M是可训练的,这样就可以更好的将user侧和item侧的空间靠近,提升相似度的准确性。线上实验结果表明,两个层次的相似度叠加使用的ctr要优于单独使用。三. 图文型清单生成一个图文型清单一般都有一个明确的主题,围绕这个主题进行相应的文本描述和商品推荐。针对这个特征,我们的解决方案包括以下几个部分:1.主题。这个主题可以由外界(运营)输入,也可以基于我们主题发现所沉淀的主题库进行选择。2.选品。确定了主题之后,我们根据这个主题从精品库中选取和主题相关性高且质量不错的商品,然后以一定的目标组合成一个个的清单(一般一个清单包含6-10个商品)。3.商品推荐理由生成。为每个清单的商品生成一段40-80个字的推荐理由。4.标题生成。根据清单内的商品信息,给清单取一个概括主题又吸引用户点击的标题。清单标题要求相对简短,一般不长于20个字。例如:“懒人沙发椅,沉溺初秋慵懒美时光”。3.1 Deep Generation Network图文型清单生成中的两个模块,商品推荐理由的生成和标题生成,我们把他们归类为自然语言生成(NLG)问题,都可以定义为依赖输入信息的文本生成问题。其中,商品推荐理由生成问题中,输入的是商品的信息,而清单标题中输入的是商品集合的信息。于是,我们采用了最近比较流行的Encoder-Decoder深度神经网络模型框架来解决,基于Attention based Seq2Seq[5-6]的base model,最终形成了我们的Deep Generation Network。下面介绍几个比较主要的部分。3.1.1 样本样本的质量和数量是模型效果的基础,我们基于淘宝上的人工编写的商品推荐理由数据和清单标题数据进行了清洗,筛选得到符合我们目标的样本集数据。3.1.2 coverage attention model[8]在推荐理由生成中经常会出现多个内容重复描述同一个输入信息的情况,或者是对于输入信息在推荐理由中没有涉及。这个问题类似于机器翻译问题中“过译”和“漏译”的问题。在传统的统计机器翻译方法中,有coverage set的概念,去记录输入source文本哪些已经被翻译过了,而之后的模型主要考虑将没有翻译过的文本进行翻译。在深度学习中,是通过coverage model的方式和attention model做结合,达到这样的效果。原来attention的计算方式如下:3.1.3 context gate[9]在推荐理由的输出当中,模型的主体是基于RNN的seq2seq架构,那么在decoder的输出端的输出,主要受2部分影响:1. 一部分是encoder的输入2. 另一部分是当前step的前一个step的输出。那么对于不同的输出,两部分的影响应该是不同的,比如说,当前一个输入词是虚词时,主要的信息应该由encoder影响,但是如果前一个词和当前词明显有相关性时,当前词的主要应该由前一个词影响。所以,我们考虑加入context gate,对这种情况进行建模。公式如下:3.1.4 Beam Search在前文中提到用RNN生成语句时,在每个时刻取输出结果中概率最大的词作为生成的词,是比较greedy的做法,没有考虑词的组合因素,因此,我们在seq2seq的实验中也尝试了beam search。beam search只在predict的时候使用,举个例子,当beam search size=2时,每个时刻都会保留当前概率最大的两个序列。beam search在实践过程中很有用,它提供了一种很好的对生成序列进行干预的基础,一方面你可以对beam search的候选集的选择以及最终序列的选择做定制化的处理,比如你的选择目标,另一方面,对一些模型还不能完全保证解决的bad case(例如重复词出现等),可以在beam search中进行处理。3.1.5 CNN对于我们生成清单标题的问题,由于输入是多个商品的文本内容,商品文本之间并没有真正的序列关系,反而更需要一个类似主题特征抽取的部分,从而能根据主题进行标题的生成。而CNN在句子分类已经有不错的应用[7]了,于是我们在清单标题生成问题中,采用了CNN作为Encoder,实验结果也表明CNN比LSTM在标题生成的主题准确率上要高。3.1.6 Reinforcement Learning我们在训练和预测的时候会碰到下面2个问题:1. 训练和预测的环境是不同的,训练在decoder的每次的输出,依赖的是前一个位置的ground truth的输入,而预测的时候是前一个位置predict的输出,原因是训练时候如果就依赖predict的结果的话,会造成损失累计,训练非常难收敛。2. 我们的评价目标是BLEU[11]值,这是整个句子生成之后和样本之间的对比,而我们在训练的时候是对于每一个位置的predict label计算loss,那么造成了评价和训练目标的差别,并且BLEU是一个整体目标,相当于是个延迟的reward。综上所述非常适合利用reinforcement learning的方式[10]来解决。对于这样一个强化学习问题,首先我们定义这个问题的3个要素:1. action:每一个timestep选择的候选词2. state:每一个timestep的hidden state3. reward:最终的BLEU值算法流程如下:1. warm start:依旧利用原来的方法去训练模型,达到相对收敛的状态。2. 逐渐在decode的末尾加入强化学习的方式,例如从倒数第一个位置加入强化学习,当收敛较好了,再从倒数第二个位置开始加入。Loss定义如下:3. 选择的action的时候,使用的是KNN的方式。本文是使用REINFORCE算法,是policy gredient的方式,并且文本的action空间非常大,所以比较难收敛。我们使用原来的predict方式打分,分数高的N个词作为候选词。然后这些
AI小编问世!阿里智能写手核心技术首次公开!