在网页搜索排序中,关于排序目标,特征选择,嵌入方法等,业界都积累了大量经验。
ListNet: ListNet是微软n年前提出的基于列表的排序框架,主要是针对排序问题是针对顺序,而非具体文档得分进行了loss构建【即:一个query的结果列表,文档的相对顺序是想要保证的,而每个文档的具体得分是5, 4,3, 2,1还是5, 4.5, 3.5, 3,1.5却不是我们关心的。】。因此构建了一个query结果集合不同排列的分布。即认为在给定打分下,顺序也可能因为噪声具有随机性,产生出n!个不同的排列,工作的目标是要构造一个关于排列的概率分布(每个排列是概率空间中的一个点),满足:按得分从高到低的排列概率最高,反之最低。论文中构造的排列也满足topk的排列仍满足概率分布,从而为搜索引擎中最关心的前k个结果的选择提供了好的支持。论文强调了两点:1、排列对应的文档顺序才是工作的重点,得分不是,这样实际上是释放了对得分进行拟合的要求,使得模型在学习得分函数时的空间更大更灵活;2、基于列表doct list建模而不是基于doc pair,可以避免pairwise方法的固有缺陷,即:最关心的topk个结果的顺序在模型训练中得不到突出,相反,因为需要两两比较来选择topk以及topk内部的排序,导致大量非topk的文档之间的两两比较,从而使学到的得分函数关注了过多次要的信息,拉低了topk的准确率;而且,两两比较的过程还在于偏序和全序的问题,即根据偏序结果没法构造出合理的全序,只能根据经验进行设定,降低了模型的自洽性;3、在标注得分score基础上,因为得分本身的分值不重要,因而引入了一层新的单增映射,保证得分高的doc映射输出的数值也越高,引入该映射的好处是,可以进一步的操作得分的取值空间,文中对映射给出了线性kx和指数elamda*x,结合概率分布的形式(参见原文),可知kx使得概率具有scale-invariant,elamda*x具有additive-invariant,从而为1中所述得分函数的拟合过程提供了具体的操作方式,同时,也可以让模型容忍标注得分的不一致性,即:在不同标注条件(人)下产生的标注得分不同,只要标注结果的相对顺序一致即可。
ListNet中,构建了list permutation的分布和对应的loss function,以及对标注得分的线性映射。注意该文并没有对score function本身的限制。因此score function到底关注那些特征,如何构造特征到得分的映射关系是另外的话题。
针对文档特征到得分的映射,业界也产生了不同的方案。分为两类:
- 语义特征(生成式特征):即文档内容本身的特征,这块重点在于如何表征一个文档的语义内容,根据query 和 doc之间的语义相似性进行匹配打分。代表工作思路有DSSM(Deep Structured Semantic Model),特点在于使用深度网络,对文档进行从词到文档的多层语义嵌入(semantic embedding),并在此基础上求相似度。论文中使用了余弦距离。为了降维,文中还采用了word hash–将单词拆成按字母的ngram表示,(拆的越小,ngram的多样性越少,词表越小,ngram重复度越大),同时这样的方法也增加了对语义的理解,因为单词的含义是由固定组合的词根的含义构成的(汉语中的词也可以拆成单字进行,甚至将单字拆成偏旁部首来表示(阿里做过类似工作))。
- 语义特征指表示了语义信息,但是在搜索引擎场景中,人们的对结果的接受程度,很多时候不仅仅是根据语义进行判断,一些直观的判断比如是否出现搜索的词汇等等发挥着很重要的作用,而且一篇doc很长,包含的语义元素很多,而query很短,语义明确,而且进行笼统的相似度计算本身就有缺陷。因此提出了DRMM(Deep Relevance Matching Model),突出使用相关性特征而非语义特征进行搜索。具体上采用了term-term cosine similarity,进行分区(bin)统计,对相似度在不同bin的term pair进行count,然后可以构造出bin之间的histogram(count-based, or normalized-count based, or log-count based),由这个histogram向量作为输入,另外,对于query和document之间完全相同的term pair作为单独的bin进行了统计,从而包含了很强的原词匹配特征。
实际上,排序是个广义的问题,对于搜索引擎、对话、QA等等领域都会用到,不同的领域对语义或者相关性的关注方向是不同的,可以根据实际问题进行取舍。在传统搜索引擎排序中,一般还会引入用户点击反馈等等行为信息作为特征加入都模型中。
对于像物品推荐等等本身内容不好直接嵌入的场景,其方法又有不同,阿里使用了用户行为构造graph,然后在graph中采用random walk生成更多的用户行为序列,采用序列中的word-embedding的方法来嵌入物品,实际上是嵌入的物品之间在用户行为或者用户兴趣点转移上的关联性。另一些graph embedding模型也可以参考,比如根据直接相邻(好友之间的相似)和间接相邻(朋友圈类似的人具有相似性)分为不同的相似类型进行分别的嵌入。这在之前的论文记录中有记载。