陈英傑:爱奇艺搜索排序模型迭代之路 DATE: 2024-04-27 19:51:29
导读 :本次分享内容为爱奇艺在做视频搜索时,遇到的傑爱真实案例和具体问题;以及面对这些问题的时候,我们的奇艺解决方案 。这次分享的搜索ppt针对一线的开发人员 ,希望可以给一线的排序开发人员提供一些启示。
01
介绍
首先介绍一下我们支持的模型搜索入口,在我们app的迭代搜索框里,支持下图所示的陈英搜索方式:图搜索 、台词搜索、傑爱语音搜索。奇艺
今天分享的,其实还是排序一个更加通用的搜索方式 ,即文本查询 。模型通过把用户输入的迭代文本做自然语言处理后进行的关键字查询 ,在此,陈英我们做了很多自然语言处理和语义的理解 。
在视频内容层面 ,最重要的是视频本身的描述信息 ,如标题 ,演职人员等信息。还有一个是内容的语义,我们当前并不是多模态特征去抽取,更多的是通过用户对该视频的观看行为,如搜索 、浏览 、评论 、弹幕等各种行为,由此产生的数学结构去抽取语义信息 。所以我们今天更关注在doc层和query层是如何做这些匹配的。
在介绍具体的匹配过程之前,我们先了解一下一个通用的搜索系统的约束条件(下图所示):
- 精准匹配 ,用户搜什么词 ,展现什么内容 ,而且需要top结果排序;
- 内容生态 ,爱奇艺的视频搜索不仅仅是站内搜索引擎 ,而是全网的视频搜索引擎,所以我们会囊括所有中文的视频资源 ,包括我们没有版权的视频 ,我们希望打造的是,帮助用户链接到想要的资源 ,同时我们还支持文学、漫画资源的搜索;
- 智能分发,搜索结果有不同的版权方,我们需要对原创结果进行激励,防止略币驱逐良币 ,载流量上给优质资源进行扶持;
- 冷启动问题,新视频相比于老视频在特征上相对弱势,我们需要给予冷启动空间,在此做一些探索和利用;
- 搜索多样性 ,防止靠前结果都是一样的。
此外 ,我们发现 ,当用户在搜索产生的结果使得自身的的主需求得到满足的时候,可以激发用户一些其他的语义相关的结果 。
在这样五个约束条件下,我们如何搭建全网的搜索引擎呢?下图即是我们的整体系统框架。
我们有大量视频资源 ,通过召回系统,即基于文本匹配的matching system ,得到候选集,经过粗排和精排 ,最后返回给用户,这是大体的流程图,其中最重要的是召回系统和排序系统 。
两个系统的重要模块很多 ,下图列举其中一些 :包括改写纠错,基础召回,知识图谱召回 ,语义匹配召回;排序模块关注特征工程,学习模型的选择,模型融合与智能决策 。
在此我们将要展开的是我们是如何进行一步步迭代的。
- 第一 , 召回策略的迭代,我们从基础相关性慢慢走到语义相关性的路径;
- 第二, 排序模型的尝试 。
--
02
召回策略迭代
1. 基础相关性
首先是基础相关性 ,搜索引擎处理流程图如下:
通过对用户的query进行切词 ,将右边的视频资源的文本描述信息构建构建倒排索引,此过程为精确匹配过程,词匹配则倒排索引拉回归并,然后返回用户,此过程较为经典 ,在传统的搜索引擎也是比较成熟的应用方式 。
这样一个流程里面,它解决的问题也比较通用:
- 切词粒度 ,不同的词的粒度会影响你是否可以通过倒排索引召回内容;
- 词权重,一个query中,哪些词是重要的 ,哪些是不重要的,会影响你在相关性计算的时候的最终得分。
这其实是基础相关性中需要解决的问题 ,也是我们在1.0版本中,花了很多力气去解决的问题。需要注意的是,上面的问题并没有最优解,这是一个根据bad case不断做优化的过程 。
这里举个例子,如下图:
基础相关性解决不了的问题,我们归为四类 :词汇的同义多以问题、语言表达差异 、输入错误兼容 、泛语义召回。
2. 语义相关性
在解决基础相关性遇到问题的时候 ,我们再来思考一下,在文本匹配上是怎么解决语义的问题,如下图所示:
左边是XX老师整理的五个层面 :词、词组 、词义、主题、结构 。在搜索场景下:我们有天然的用户搜索之后的点击行为 ,基于点击行为,我们可以在不同层面做语义匹配 ,紫色框是我们要解决的问题所用到的技术。
下图是机器翻译模型 :
机器翻译是一个目前比较火热的领域,并且在深度学习出现之后 ,其准确率得到了飞跃性的提高。这是我们解决语义相关性的第一个手段 。
- 翻译模型
由于用户在搜词的时候,并不会去把相关词汇都搜索一遍,这就需要由搜索引擎去拓展用户的查询词汇 。通过翻译系统,可以将查询词转化成与语义需求相同的其他词汇,用这些扩展后的新词与视频做相关性计算 ,取top结果返回给用户,以此来实现拓展词召回 。
具体策略为 :
第一步 :根据用户的query以及点击的document生成doc-query点击对,以此来构建翻译的平行语料对;
第二步 :做词对齐和短语对齐,此时,我们并没有用到很多深度学习的技术 ,因为在搜索场景下,并不需要翻译结果的准确性,更为重要的是拓展出来的词汇是不是有意义的,是不是让这个系统往正向发展的;
第三步 :query中的词汇与拓展的词汇行程映射对 ,在映射对里会存在噪音 ,针对噪音,传统的基于统计的短语和基于词的翻译模型会存在一些问题,我们再从新标注一部分翻译的 ground truth 。
在这个基础上,我们根据翻译模型给出的翻译概率,并通过语言模型判断翻译结果是否通顺,再结合相关性的特征来甄别翻译对是否有效。
基于这样翻译过程拓展出来的词汇,能够明显拓宽我们召回的范围,这是第一个解决语义相关性的手段 。
- 点击相关性
第二个解决语义相关性的手段是点击相关性 。
做一个假设 ,当用户有一个搜索需求时,假设其用到的搜索词和编辑取的标题不在同一个语义空间,那么该场景造成的mismatch现象会非常严重 。那么此时 ,我们就需要把二者映射到同一语义空间 ,以提升命中概率。
具体做法:利用搜索点击日志 ,来构建一个搜索点击二部图 。如下图中可以看到:doc4与query2和query4和query6有较强的相关性,虽然此时我们并不知道doc4是什么内容 ,但是我们已然不难看出,三个query词之间具有较强的相关性,并且这个结论的置信度也是很高的。
这对于查询结果来说是一个不错的拓展方式;在这样的二部图中 ,我们可以进行多次的迭代,并以次来拓展query的表达。
在构建二部图的时候有许多高挑战性的事情 :
1) 图的构建,点击存在噪音 ,图的内容足够高的置信度;边的权重设计 ,因为展示数量分布不均,点击数量分布不均 ,会影响向量传播权;
2) 迭代次数越多,向量传播路径越来越长 ,泛化能力越强,但是准确率会下降 ,需要选择最佳迭代次数;
3) 点击关系链接未出现的话,在二部图中是无法出现的 ,该策略需要用n-gram来拆解拟合,最后用动态规划去选择最优的表达向量。
如下图所示 ,右侧为一个例子 。
- 深度学习
第三个解决予以相关性的手段是深度学习,该方式在nlp中应用非常广泛 。在搜索场景下,用一些nlp工具,能够把词表示成低维的向量 ,该向量可以表示词与词之间的相关性,在网络里面加入rnn ,cnn等机制 ,把网络做的足够复杂 ,以提取更加有效的匹配的特征 。同时 ,我们在文本匹配或者搜索语义匹配的时候,其实要做的就是计算多个文本词序列之间的相关性 ,我们把词向量和网络结合在一起就可以解决该问题 。
在传统的语义文本相关性中有两种计算框架 :
1) 基于表达 :将文本串通过模型来表示成向量,并用向量相似度来计算文本相似性(如dssm);
2) 基于交互 :在最底层将query和document中的每个词都计算相关性,以此得到相关性矩阵。
如下图所示:
我们当前的策略是基于表达,如下图所示框架:首先 ,抽取query下的正负样例;之后 ,做多粒度切词,用embedding做加权平均 ,得到文本串的向量表示;再经过两个全连接层生成正样例相关性和负样例相关性;在此基础上,构造损失函数使得正样例大于负样例相关性,用反向传播来优化网络参数。
在视频短文本场景下:表达型方式比交互型方式效果好;网络结构和权重对结果影响很大,idf权重很高;最难点在于ground true构建,严重影响语义模型的效果。
下图是精确匹配2.0的版本,在这个版本我们基于翻译模型把query进行查询词拓展 ,同时click-simi的方式去拓展点击相关性的查询词,然后去搜索原倒排索引和语义倒排索引,最后基于相关性模型去计算query和视频内容是否相关 。