XDRush

DSSM/CLSM原理及其在计算广告中的应用

背景说明

在搜索广告或者信息流中融入搜索广告时,通常我们需要对关键词进行行业标注,目的是为了方便在某些特殊渠道或者特定场景下对某些行业进行屏蔽。比如,在信息流广告中,通常是看不到医疗类广告的身影,这是因为在大部分信息流广告中,为了用户体验,而选择性的将医疗类广告做了屏蔽;然而,医疗类广告在搜索广告收入中的占比依然很大;另一种场景是,在某个特定的时间,应某些方面的强制需求,不允许出现某行业相关的广告,比如在19大期间,应上面要求,信息流中不允许出现棋类赌博类广告,大家都知道棋牌类广告的CPC通常都很高,消耗占比通常也很高;

因此,要做到实时响应各方需求,最好的做法是对广告主购买的关键词进行行业标注;标注示例如下:
| 关键词 | 行业 |
| ———- | ———: |
| 专升本有哪些学校 | 教育/其他 |
| 注册会计师报名条件 | 教育/从业资格 |
| 美国留学咨询 | 教育/出国留学 |

上表中,行业那一列一般根据业务需要可分为一级行业和二级行业,上例中,教育为一级行业,其他、从业资格和出国留学,是二级行业,具体分为几级行业,视具体业务场景而定。

那么,如何对大规模关键词进行行业标注呢?人工标注显然不现实(通常数据规模几万到几十万不等),文本分类模型的引入是必然的。现阶段,我们的文本分类模型是基于分层贝叶斯思想,用的是15年左右根据当前的业务场景训练出来的,模型有两年多没有更新了,随着新的关键词的而引入,分类准确率必定会越来越低。事实证明,15年左右模型的分类准确率在95%左右,目前只有80%左右。

后面我将会讲解一系列文本分类方法,结合具体的应用场景来解决这个问题。

DSSM

DSSM来自于这篇文章(Learning Deep Structured Semantic Models for Web Search using Clickthrough Data),13年由Microsoft的Xiaodong He提出(后面这个团队还提出了Sentence2Vector模型),据目前所知,DSSM目前在Baidu和Alibaba的NLP业务中,都有其应用地方。这里就剖析下DSSM的原理及思想。

DSSM提出背景

DSSM最开始提出的应用场景是搜索排序中,当用户输入一个关键词query是,如何按序展示搜索结果?DSSM提出的正是为了解决这个问题。将某个query被点击的document当做正样本,展示了却未被点击的document当做负样本,通过这些训练数据,来预测某个query被点击的可能性。

DSSM模型结构

DSSM模型的整体结构如下图:
DSSM结构
上图中,Q表示查询词query,D(i)表示搜索结构对应的document,一个query对应多个document,D(i)(i = 1, 2, …, n)中有一个被点击的正样本,其他的都是负样本。

基本思想是将query和每个document都经过相同的网络结构,然后计算query和每个document的relevance,这里的relevance采用余弦距离计算方法,得到query和每个document的relevance之后,再经过带系数的softmax,从而得到query和每个document的相关score,最终document依据score进行排序;

网络结构

query和每个document都经过相同的网络结构,DNN每一层的处理如下式:
每一层的处理
其中f(x)采用的是tanh激活函数。

相关性计算

query和每个document经过网络得到128维的输出结构之后,计算query和每个document的余弦距离:
相关性计算
y(Q)和y(D)分别表示query和每个document经过DNN之后的输出。

结果预测

得到余弦距离还不是最终的结果,最终得要转化为每个document的得分,很容易想到softmax,本文也正是这么做的,不过在计算softmax值时引入了平滑因子:
计算最终得分
上式中r即为引入的平滑因子,r是经验值,视具体应用场景而定,不是超参数。

损失函数

训练时,DSSM通过最大化正样本的被点击的概率来实现学习过程,参数更新采用SGD算法。

超参数初始化方式

本文中超参数的初始化方式比较经典,值得借用:
W超参数初始化
W超参数初始化
DNN的超参数初始化为上面值范围内的均匀分布,不太记得是哪篇paper中有详细论述这种初始化方式能较快的收敛。

其他实现细节

在构造训练数据时,为实现数据对齐,每个query只有1个被点击的document作为正样本,4个未被点击的document作为负样本。

Word Hashing

Word Hashing是本文提出的一个关键方法:该方法通过将每一个word处理成letter-n gram维度的表示来实现降维的目的。其核心思想如下:

考虑单个word,以good为例,如果采用one-hot表示,那么每个word的维度将会非常大,假设训练样本有500k个独立的单词,那么每个word的one-hot也会是500k维,计算复杂度比较高。本文提出基于letter-n gram维度的词表示,首先为每个word加上开始和结束标志(good表示为#good#),以letter-3为例,将#good#进一步表示为#go,goo,ood,od#,最终将word用letter-n的vector来表示;具体的实现方式在下一篇文章中可以获知:
letter-n gram表示
以上图为例,#bo,boy,oy#是one-hot表示,但是整个boy的vector是这三个的和,因此boy是multi-hot表示。每个query和document由多个word组成,其对应的vector也是若干个word的和表示。

作者表示,英文单词的个数可以是无限多个,但是letter-n的总个数却是比较固定的,并且个数比较少;据作者统计,500k个词汇,最终可以用30k个letter-n来表示,并且冲突率只有0.0044%(22/500k)。

存在的问题

通过上面的分析,我们不难发现,DSSM通过求和的方式显然丢失了word与word之间的上下文信息。紧接着,下文就产生了!

CLSM

讲完了DSSM,就不得不提CLSM(A Latent Semantic Model with Convolutional-Pooling Structure for Information Retrieval),源自于同一个团队,要解决的问题也是相同的,CLSM不同于DSSM的地方主要在于以下两个方面:

  • 引入了CNN;
  • 考虑了context上下文信息;
    那么CLSM是如何做的呢?

CLSM模型结构

CLSM模型采用的结构如下:

word-n gram

从上图可知,clsm首先对输入通过一个滑动窗口的形式取n个连续的word(本例中n=3),正是这种word-n gram,考虑了每个word前后的信息,因此就保留了上下文信息。

letter-n gram

针对每个word,采用了同DSSM中类似的处理方法:采用letter-n gram来获取每个word的vector,再将一个窗口内的n个word拼接成n*30k的向量表示,拼接也保留了上下文信息;

卷积层

从letter-trigram到convolutional layer,用CNN实现,将维度从90k降到300,抽取更高维和更抽象的表示;

Max-Pooling

经过卷积层后,通常情况下,由于输入的query或者document长度不一致,因此卷积层的长度肯定也各不相同,Max-Pooling抽取300维对应下标的最大值,最终组成一个300维的向量,然后再经过一个神经网络得到最终的128维向量表达。以上的激活函数都是tanh。

结果预测

CLSM的结果预测同DSSM一样,
计算最终得分

损失函数

损失函数也跟DSSM一样:

以上便是对DSSM和CLSM的理解,DSSM/CLSM提出的初衷是解决搜索中的文档排序问题,但是也可以延伸到计算广告中。

DSSM/CLSM在计算广告中的应用

据同事了解,DSSM/CLSM已经广告应用在百度和阿里的广告业务场景中,在我们的应用场景中,主要有以下几个方面可以借鉴:

搜索广告关键词相关性

在搜索广告中,通常一个关键词被多个广告主购买,因此每个关键词就会对应多组创意,怎样根据关键词召回最合理的广告?DSSM/CLSM提供了一种思路:根据每个关键的历史click和pv,结合context和ad,对每个创意进行打分,可以实现类似于CTR预估的功能。

文本分类问题

正如本文最开始所提出的问题,在对关键词进行行业分类时,每个关键词对应于一个正确的分类,可以随机挑选多个不正确的分类当做训练数据,当然这只是一种思路,行不行得要试验才知道。

广告创意优化

在信息流广告或者搜索广告中,每个关键词一般有多个标题,那么如何在这么多标题候选集中选择相关的标题呢?用传统的word2vector当然能够实现一个baseline,我们组之前一直都是这么做的,但是在PM审核关键词标题相关性时,一般过审率不高。在用关键词配标题的业务场景中,基于已有的关键词-标题对可以很好将CLSM利用起来。这也不失为一种物料优化的思路。