互联网搜索广告介绍(二)

作者Jack47
转载请保留作者和原文出处

本文是上一篇互联网搜索广告介绍(一)的姊妹篇。上一篇主要介绍了互联网搜索广告中的业务,本篇介绍搜索广告面临的三个问题的技术解决方案

搜索广告中存在的三个子问题##

从搜索引擎的角度来看,搜索广告中存在三个子问题:

  1. 广告检索
  2. 对检索到的广告排序
  3. 根据点击收费

以上三个顺序是搜索广告事件发生的顺序,这里面1和2属于信息检索问题,而2和3又属于微观经济学问题。

广告检索

搜索的过程,简单来讲,就是match(匹配)+rank(排序)的过程。Match解决的核心问题是如何根据用户搜索词,召回最符合用户意图的那些广告。Rank解决的核心问题是如何对Match圈出的广告进行排序,需要兼顾用户体验和搜索平台的收益

Match的过程由两部分组成:

  1. QueryRewrite 用户搜索词改写

  2. Ad Retrieval 广告检索

查询串改写(Query Rewrite)

查询改写可以解决哪些问题?

先来看查询改写中的两个重要指标:

  1. 召回:搜索引擎返回的文档中相关的文档占总相关文档的比重。
  2. 精度:返回的结果中,相关文档占返回结果的比重

在广告搜索引擎中,不能直接拿着用户的原始查询词在倒排索引中进行广告检索的,因为广告主买词和用户的原始查询词极有可能不是同一个词,很难精确匹配到,这样就导致搜出来的广告深度不够,即召回率很低。举个例子,广告主买了"三亚旅游"这个词,而用户搜索词是"去三亚旅游",如果直接拿用户的搜索词去检索,是检索不到这个广告主的广告的。

对于某些用户特定输入的查询词(Query),跟它相关的广告可能并没有购买这个Query[由于引擎系统能力有限,广告主对某个宝贝的竞价词不能超过一定数量],或者可能这个Query很少有广告主竞价[长尾词],导致竞价词的广告深度不够。

针对上述的情况,可以通过两方面来改进:

  1. 给文档增加词,来让它可以被更多的查询匹配到
  2. 给查询增加更多的词,让查询匹配到更多的文档

查询改写(Query Rewrite)是后一种方法,它也经常用来提高检索结果的相关性。

查询改写就是对给定的一个原始的查询串,输出一堆跟它相关联的查询串(改写)。在查询改写上面的研究工作,大部分都是集中在利用多种方法例如挖掘查询日志和用户会话来产出跟原始查询串相关联的改写。

改写的质量取决于两个方面。首先,改写后的查询越接近原始查询的语义越好。改写后的精确度可以通过计算检索到的结果集和原始查询之间的距离来衡量,目前普遍通过点击日志中的用户偏好学习来衡量。其次,改写后的查询应该保证有足够多的结果返回给用户。改写后的覆盖率是通过计算请求特定数量的结果,需要多少次请求才能达到预期来衡量的。

归一化

为什么不拿着用户的搜索词,直接去查询(keyword, ad)的索引呢?因为用户的搜索词千变万化,由于计算机性能的限制,我们不可能对所有的搜索词建立到竞价的广告的倒排索引。很多搜索词,虽然形式不一样,但是他们代表的用户意图可能是一样的。用户输入的查询多种多样,在搜索引擎有限的计算能力和存储资源下,不可能对每一个原始的用户查询串建立倒排索引。

为了解决这种问题,就引出了归一化的方法,归一化原本是统计学中概念,这里是指把用户搜索词(查询串)和广告主的买词(竞价词),转化到一个搜索引擎内部的检索词典里。归一化是一个多对一的关系,即好几个搜索词,对应的归一化词可能是同一个。查询改写后产出的所有词,都是经过归一化后的词。广告搜索引擎中是用归一化后的词去检索广告。而用户的竞价词,也是通过归一化后建立的倒排索引。

归一化的好处是能够帮助我们减少搜索引擎需要处理的词的数量,帮助我们降低问题的规模,但是也是坏处,可能会丧失掉一些语义信息的精度。搜索词和买词往往是人操作产出的,更具有可读性,而归一化是一种数学方法,归一化后的词可读性差一些。

查询改写的输出

可以这样简单理解查询改写的:
它就是搜索引擎进行匹配(Match)的大脑,用来揣测出用户的搜索意图,这些搜索意图是有权重区分的,来指导检索模块进行检索,排序模块进行排序

对于搜索广告,一般的查询改写输出,包含以下几个部分:

改写出的查询(rewritten query)。每个查询都会包含如下的信息:

查询词:最终用来查询倒排索引的查询词

权重:刻画跟原始搜索词的相关性

对于电商环境的查询改写(例如淘宝和京东),还会预测出当前query的类目和属性
关于类目属性,可以看看鬼脚七的浅谈淘宝类目属性体系

关于query改写,有这篇诙谐幽默的文章可以看看:
http://www.searchtb.com/2011/01/from-augur-to-etao-query-analysis.html

检索

倒排索引和正排索引

查询改写是query->bidword的映射,而检索过程是bidword->ad的映射,即找到所有购买了这个竞价词的广告。查询的时候是用检索词去查广告,为了加快速度,就建立了一份竞价词到购买了此竞价词的广告的倒排索引: bidwordx->(adi, adj, adm, adn)。这个跟网页搜索引擎中的倒排索引(inverted index)的作用是一样的,都是为了加快检索速度,类似于书籍中的目录页。这样对于一次检索,遍历此次所有查询词的倒排数据,把宝贝取出来,就能得到广告的候选集合。

正排数据存储的是推广组(ad-group)、推广计划(campaign)和客户(cust)的相关信息,如宝贝状态,销量,属性,类目,地域,以及推广计划的id,客户的id等。对候选集合的过滤就是根据正排数据来进行的。检索过程只负责检索出购买了这些竞价词的广告。根据正排数据来进行过滤的过程是由单独的一个阶段来完成的。

可以看到在搜索广告中检索过程是十分简单的,其实是一个精确匹配的结果,不像网页搜索引擎,需要支持多种语义

广告排序(Ranking)

检索完成后,就需要确定广告的输出顺序,需要兼顾用户体验和搜索平台的收益。这个阶段必须综合考虑竞价和相关性分数(例如ecpm)。目前有两种主流的方法,以赛马为例:

  1. 反应式(Reactive):选定一匹马,根据它的历史成绩来预测未来的表现
  2. 预估式(Predictive):根据体重,腿长等特征为赛马建模,找到这些特征在预测比赛名次终的重要程度,然后基于这些特征来给见过、未见过的赛马预测成绩。
    当我们拥有对某赛马的足够信息的时候,就使用这些信息(反应性),否则使用模型(预测性)。

分层排序

记得计算机界某大牛曾经说过,任何问题都可以通过增加一层来解决,在广告搜索引擎中也是通过分层的形式解决复杂问题的,大到匹配(Matching)和排序(Ranking),小到广告集合的处理,无处不在分层的思想。

在广告搜索引擎中,由海选、初选和精选三个阶段来配合完成广告的排序工作,其中海选和初选都是在做剪枝操作,尽量缩小问题的规模。广告和自然搜索的差异之一,就在于广告位相对自然搜索的位置,是相当少的。所以决定了在竞争激烈的情况下,排在后面的广告是没有机会展现的。因此可以考虑在早期过程就发现这些宝贝,然后干掉这些宝贝,此时每个宝贝的排序分数不需要非常精确,能达到一定的筛选效果就可以,这就是全量索引截断、海选和初选的思想。而最精确的打分,是发生在精选阶段的。一般都会采用单独的线上打分服务来完成的。

全量索引截断
全量建索引的时候,会对倒排链超过一定数量的热词进行截断,根据排序分数来取这个倒排链下的top N个宝贝。

海选
广告搜索是轻检索,重过滤的。当检索阶段拿到的广告候选集合后,会进行海选。海选这个名称非常形象,这不就是歌手大赛的海选阶段吗?只有实力唱将才能脱颖而出。

初选
为了减少对线上打分服务的压力,海选阶段完成后,还需要经历初选阶段。

初选打分与海选打分的计算过程类似,但此时分数更加精确了,考虑的因素更加全面。

精选
最后线上打分服务,会对这些经历了海选和初选脱颖而出的广告进行精确打分。

为什么每次都需要实时去打分:

上述提到的海选、初选和ORS打分,都是需要实时计算出分数的,因为竞价同一个关键词的广告是快速动态变化的。广告主可能手动或者自动[第三方软件]地更改竞价词和对应的竞价价格,而且会修改广告的创意,都会对打分造成影响,因此需要实时的打分

点击扣费

对于目前的搜索广告来说,都被设计成了拍卖的机制。搜索引擎拍卖的是每个流量中可能的广告位,广告主提交对购买的关键词的每次点击的最高出价,广告主是不知道其他人的出价信息的。虽然每个流量中一般会有多个广告位置,但是广告主只出一个价格。最终搜索引擎根据广告主竞价和广告的点击率CTR来对广告进行排序,决定最终的展示位置和扣费价格。

点击扣费时,目前普遍采用的是Google发明的广义第二价格扣费GSP(General Second Price),有两种策略:

  1. 竞价排序:根据广告的出价倒序排列,位于第i个的广告支付第i+1个广告的竞价
  2. 根据广告平台的收益排序:根据期望最大收益ecpm来排序: ecpm=bidprice*ctr。此时被点击的广告主i付的费用为clickprice=bidprice(i)*(ctr(i)/ctr(i+1))

目前广告的顺序都是根据期望最大收益ecpm来排序的,因此bidprice(i+1)*ctr(i+1)>bidprice(i)*ctr(i),可以从上述公式看到广告主实际扣费肯定小于他自己的出价

参考资料:

Efficient Query Rewrite for Structured Web Queries

Query Rewriting in Search Engines

斯坦福大学自然语言处理公开课

posted on 2015-07-14 22:32  生栋  阅读(4758)  评论(1编辑  收藏  举报

导航