搜索引擎中,用户每天数以亿计的点击数据,是系统不断优化的有利数据。而将点击数据直接反馈到搜索引擎返回结果排序的模型,正是点击模型。
搜索引擎上线初期,点击数据稀少,排序依赖于 content-based 的相关性排序模型,就是说,用户搜索词与某一条搜索结果之间的内容相关性关系有多高,按照这个分数由高到低排序。相关性排序是一种先验模型,在建模时经常有不足之处(模型、特征、内容质量等假设不足)。此时,即使相关性模型判定分数更高,也未必保证结果更加符合用户的预期。
因此,点击模型基于点击数据这类后验知识,开始作为相关性模型的有力补充,发挥用处。一个搜索结果好与不好,不仅与相关性分数高低有关,同样与用户点击的多少有关。同一个搜索词下,用户点的多的,是优质相关结果的概率更大;而点击寥寥无几的,是劣质无关结果的概率更大。毕竟是用户“用脚投票”的结果,大多是可信的。
讲到这里,最朴素的点击模型便会诞生:把点击最多的搜索结果往上排,是不是就解决了问题?这样做肯定是有效的,但同样会带来很多问题。此处列举几个最主要的问题:
- 稀疏问题:大量的长尾数据、新产生的数据,无法获得足够置信的点击数据。
- 点击反作弊问题:雇佣大量虚假流量,进行“搜索-点击”的造假,利用点击模型,给某些并不相关的搜索结果增加曝光度。
- 冷启动问题:新内容或长尾内容由于缺乏用户行为,在点击模型中应该如何公平计算。
- 内部关联:相近或相同搜索词的多次点击,或单次搜索下的多次点击,应该视为整体建模。
- 偏置(bias)问题:bias 有几种不同的类型:
- attractive bias:用户一般会被标题党、图片等其他与相关性之外的信息干扰或“欺骗”,产生点击行为,此时的点击行为便是有偏的,需要区别对待。
- position bias:最简单的例子,根据生物信息捕捉,一般用户对搜索的头部结果的观察是充分的,而对尾部结果的观察是完全不够的,甚至压根就不观察,这对尾部结果是不公平的。即使同个结果,在不同位置上就会产生的点击数据也是不同的,需要区别对待。
- intent bias:同个搜索词,对不同人群来说,可能是完全不同的意思。举个真实的例子,搜索“灌篮”,80后可能是想找《灌篮高手》,而对00后可能是想找《这就是灌篮》。而搜索引擎在不同群体在不同场景获得的点击数据,需要区别对待。
当然,问题还有很多。这个系列里,我们会逐个认识几个经典的点击模型。这些问题,会或多或少地被这些模型解决。完美的模型并不存在,还需要我们的积极探索。
点击模型的基础是概率图模型,不同假设带来不同的模型。常见行为(event)注明如下:
- :某条搜索结果被用户检验的事件。
- :某条搜索结果吸引到用户的事件。
- :某条搜索结果被用户点击的事件。
除了常见行为,还有常见变量(variable)的注明如下:
- :一条搜索结果(可以是一条 url,一张图片,一个视频等),又称一条“文档”
- :用户搜索词
- :一条搜索结果的排序(位置)
- :一个占位符,可以表示任何概念(concept),例如搜索词-文档对、排序等
参数(parameter),而不是变量。
好的,基础概念介绍到这里。让我们来几道开胃菜,认识几个最简单的点击模型。
随机点击模型(Random Click Model, RCM)
假设:用户点不点击搜索结果
,
参数(parameter)概率
是固定的。概率表示如下:
求解:统计所有搜索结果的展示数、点击数。
参数估计应该为点击率(点击数 / 展示数)。
点击率模型(Click-through Rate Models)
模型假设:在随机点击模型的基础上,统计不同位置的点击率,即为基于排序的点击率模型(Rank-based CTR Model, RCTR);统计不同
搜索时的
的点击率,即为
基于文档的点击率模型(document-based CTR Model, DCTR)。
RCTR 模型的公式表示为:
DCTR 模型的公式表示为:
CTR 模型仅仅依赖统计量,就可以估计参数,比较简单,因此不做过多讨论。
级联模型(Cascade Model)
模型假设:各搜索 Session 仅产生一次点击行为,文档是否被点击由两个因素决定:是否被检验、是否能吸引用户。但 CM 与 PBM 的不同点在于,是否被检验并不是由单一变量控制的,而是由排序在此文档前的单个文档是否被检验、被点击所决定。直观来说,用户从上到下浏览文档,如果上个文档被检验甚至被点击后,会直接影响下个文档的被检验情况。
图 2:CM 概率图
CM 的概率图模型如图 2 所示,符号化表达如下:
。根据此概率图以及符号化表达,可以得到 CM 的概率公式如下:
,
表示吸引度,仅与搜索词
与文档
有关
,可以理解为:上一个文档没有检验,则不会往下检验
,可以理解为:上一个文档点击之后,则不会往下检验,表明了 CM 模型的特点:
各搜索 Session 仅产生一次点击行为。
,可以理解为:
只要不产生点击,会一直检验下去。
对于点击模型的参数估计,传统求解方法分为两类。RCM, CTR, CM 这种只包含被观测到的随机变量(observed random variable)的模型,直接使用极大似然估计(maximum likelihood estimation, MLE)求导可以求解;而有一个或多个未观测到的隐变量(hidden variable)的模型,需要配合上 EM(expectation-maximization)算法来求解,下一篇我们再深入探讨。
最终结论;如果希望深入理解的朋友,可以按照顺序继续阅读下去公式的推导过程。
点击模型中充满着二值事件,可以假设随机变量都符合伯努利分布,其中分布参数为
:
(
)即概率密度函数为:
参数估计:极大似然估计(MLE)算法
用户的搜索 session 的集合被定义为
,其中某个 session 即为
,且有
。
搜索 session,表示用户执行一次搜索意图,直至停止搜索的 所有行为,可能包括多次搜索、多次点击行为。 在点击问题求解中,session 可以视为采样样本。举例:小明想找一张皮卡丘的头像,先在百度搜索“皮卡丘”,看了几条结果,点击了几次,没找到中意的结果,于是搜索“皮卡丘 头像”,最终找到并且退出百度,这整个过程即为一个 session。
对于某个 session 内的概念,其所代表的变量
在 session
内的第
次出现时取值为
(仅能取值为 0 或 1)。此时整个 session 中,有关参数
的似然函数为:
似然函数,就是概念
在 session 内整体的事件发生概率。如果我们希望参数
逼近真实情况,我们需要使得整体的事件发生概率最大化,即最大化
。容易得知,
是一个凸函数,因此函数最大值点出现在导数为 0 的取值。
比较复杂,这里有个技巧:等号两边套上对数函数后,再求导,不改变极大点出现位置。
因此,求解过程如下(下文简称公式一):
*公式一
最终结论
好了,有了公式一我们已经可以对 RCM, CTR 和 CM 模型进行参数估计:
- 概念 为“任意文档”,根据 公式一,RCM 参数估计: 。直白来说,就是统计点击与展现比例。
- 概念 为“任意排序位置”,根据 公式一,RCTR 参数估计: 。直白来说,就是统计不同排序位置的点击与展现比例。
- 概念 为“搜索词-文档对” ,根据 公式一,DCTR 参数估计: ,这里 。直白来说,就是统计不同“搜索词-文档对”的点击与展现比例。
- 概念 为“搜索词-文档对” ,根据 公式一,CM 参数估计: ,这里 , 是第一个点击文档的顺序。直白来说,就是统计不同“搜索词-文档对”的点击与展现比例,但是只关注点击之前的展现。
各个模型的详细计算代码,可见以下链接:
markovi/PyClickgithub.com