得物词分发平台演进
2.1 背景
2.2 服务建设
个性化推荐的词分发服务的核心技术主要包括了:
2.2.1 功能分析
因为底纹词,热词和下拉词功能实现有所不同,所以需要提供特定的实现方案,以便能够更好地满足不同场景下的需要。 底纹词和热词的实现逻辑类似,对于用户来说无主动触发条件,它们主要依赖于用户行为来为用户推荐热门词。底纹词和热词实现的关键在于分析用户的搜索行为和历史,通过用户历史的 item 点击以及 query 搜索进行 i2q 和 q2q 的召回,从而为用户推荐个性化的热门词。 下拉词的实现方案不同于底纹词和热词。需要有用户的主动触发条件,通过对用户实时输入内容进行关键字匹配召回,然后通过个性化排序进行推荐。 综上所述,底纹词、热词和下拉词的实现方案各不相同,需要根据场景和需求提供相对应的实现方案。
2.2.2 功能实现
底纹词/热词
底纹词和热词的实现主要依赖于用户行为来为用户推荐热门词。在实现过程中,需要通过分析用户的行为历史,利用算法对用户历史行为分析和处理,从而实现 i2q 和 q2q 的召回。
通过分析用户搜索行为和历史数据等信息,底纹词和热词可以针对用户的兴趣和需求推荐最热门的关键词。例如,对于经常浏览 nike 相关商品的用户来说,系统可以向其推荐最近最热门的相关 nike 系列的底纹词和热词。
底纹词和热词的实现方案的关键在于该功能对于用户来说无主动触发条件,主要是服务内部对用户历史行为数据的细致分析和处理。通过对用户行为的深入挖掘,识别用户兴趣和需求的热门领域和方向,以便精确地推荐与用户需求相关的底纹词和热词。同时,为了更好地提高底纹词和热词的效果,还需要不断地优化算法,不断升级推荐策略,提高词的覆盖度和准确度,从而实现更加个性化和精准的推荐服务。
下拉词
下拉词是指搜索框下方的词语提示,需要有用户的主动触发条件,用户在搜索框中输入关键字时,搜索引擎会根据用户实时输入内容进行关键字匹配召回,然后通过个性化排序进行推荐。与底纹词和热词不同,下拉词的推荐与当前用户的实际需求和搜索意图关系更加密切。
在下拉词的实现过程中,搜索引擎需要利用算法对用户的历史搜索记录和行为数据进行统计和分析,从而了解用户的兴趣爱好和搜索习惯,识别用户的搜索需求并提前预测可能的搜索意图。在召回阶段,搜索引擎在用户输入搜索词后,会根据匹配规则召回相关的关键词并进行排序,推荐与用户需求最相关的下拉词。在排序阶段,搜索引擎会根据个性化排序算法并结合用户行为特征和搜索历史数据,对召回的关键词进行权重排名,以便让用户看到最为相关和实用的下拉词提示。
综上所述,下拉词的实现方案需要根据用户的搜索历史数据和行为特征等信息,结合相关算法进行分析和处理,从而实现个性化和实用性的推荐服务。下拉词的推荐与用户的搜索需求和搜索意图关系更加密切,因此下拉词的质量和推荐准确度对用户的搜索体验和满意度有着重要影响。
3.1 问题
随着公司的发展,针对现有场景产品业务和算法在已有功能上的迭代有比较多的诉求,例如词库迭代开发,策略变更,业务迭代较多。针对新场景,越来越多的业务域需要前置引导功能,例如 客服智能提示,海外业务导购,营销导购,推荐风向标,主搜锦囊词,榜单等
基于现有服务,主要有以下问题
(1)研发&时间成本:对现有场景进行召回路的增删,策略的变更,资源位的投放等进行迭代,需要工程和算法投入较多的研发资源,而且迭代周期长,同时 PMO、各团队 leader 及 PM、项目联调、测试资源、线上变更 CR 等间接投入也会积少成多。
(2)多场景接入问题:不同场景重复建设也会带来成本的增加,同样需要研发和时间成本,不再赘述。
3.2 目标
综上所述,目前服务存在迭代成本高、周期长、多场景接入重复建设等问题。为了优化现状,构建通用平台,避免重复开发和维护成本,提高运营效率和业务灵活性,从而支持公司的业务发展和用户需求。主要从以下几个点完善提高平台能力:
3.3 阶段性发展
构建通用平台是优化现状的有效途径之一,但具体实施还需要深入考虑和细化。首先,需要在业务流程中明确各个场景的特点和需求,以及它们之间的异同点,并确定哪些部分可以抽象和共享,哪些部分是需要定制化的。其次,需要通过技术手段将通用组件进行抽象和分离,构建通用平台,同时加强平台的可定制性和扩展性,以满足不同场景的需求。这个过程需要,制定完善的流程,建设完善的监控和报警系统等,从而确保平台的可靠性和稳定性。最后,需要对平台进行持续的优化和完善,同时加强对平台的安全性、可维护性、扩展性等方面的管控,以保证平台能够适应不同场景的变化和需求。
通过深入调研,具体规划业务框架如下图
3.3.1 孵化期
首先,在明确各个业务场景的特点和需求的基础上,对流程进行抽象和分离,并通过规范化的流程 pipeline 来统一管理和执行,这样不仅可以降低维护成本,同时也能够提高流程的可重复性和可扩展性,为后期的通用平台构建打下基础。其次,在进行通用平台构建时,考虑到不同的业务场景和需求,通过技术手段将通用组件进行抽象和分离,提高代码的重用性和可维护性,同时加强平台的可定制化和扩展性,让不同的业务场景都能够方便地接入和使用平台,同时也能够快速适应业务的更新与变化。具体功能拆分模块如下图:
预处理
预处理主要做的功能有:
用户画像的调用(可选用功能):为后续模型排序,召回使用到的召回条件(例如用户点击行为 做 i2q 召回,搜索行为 q2q 召回等)
曝光过滤(可选用功能):这里的曝光过滤指假曝光,就是在后置处理返回的数据,用做召回时的过滤条件,排除掉已曝光的内容
获取 qp 分词(可选用功能):例如客服的召回时根据用户输入的词进行分词召回,这里就需要用 qp 对输入词进行分词
缓存数据(可选用功能):这个主要是用在词列表轮循场景用,主要用来记录上一次访问的 index 位置(这里会缓存用户画像相关的内容,如果用户画像不变的情况下,本次访问会看上一次的位置,用户画像一般变化就弃用 index,主要是用户画像变了后召回和排序都会变,列表就不是同一个)
条件处理(可选用功能):在封装召回 DSL 前,增加一些引擎查询条件,过滤条件,这些参数可以是上游传入,用户画像,ab 实验配置。
ab:获取 ab 分流
召回
召回主要的就是封装召回 DSL,提供了不同字段索引查询(前缀、BM25、精准、数组等)和过滤(等于、不等于、大于、小于等)等功能,并支持单字段多条件拼装(且、或)和多字段拼接(且、或)等操作。这些操作在召回配置中进行配置,框架根据不同的需求配置,灵活地封装DSL来获取数据和处理流程。
目前召回支撑多种引擎:c引擎和es引擎。在对引擎进行召回时,提供了多种召回方式的选择,支持并行,串行或串加并的方式,根据不同的需求调整引擎的召回方式,以提高召回过程的性能和效率。
召回主要分为两种类型:混排词和资源位词,混排词的召回主要用在后续的排序以及最后的返回列表;资源位词的召回是用于资源投放,提供给运营做一些活动或产品的推广,数据放在排序好的混排词列表中。
召回融合
召回融合是为了将多路召回结果进行融合,从而提高召回的召回率和召回质量。在这个过程中,主要是对多路召回的混排词进行融合。使用方可以根据自己的需要选择融合策略,也可以使用默认的融合策略。
默认的融合策略主要是根据优先级对多路召回结果进行融合。如果配置了兜底路,会先将非兜底路的结果进行融合,如果非兜底路没有数据,就将兜底路融合的数据列表,作为最终融合结果。如果非兜底路有数据,兜底路的结果就会被弃用。如果没有配置兜底路,则所有路的结果都将进行融合。在融合的过程中,还可以设置一些权重和相关参数,用于调整不同召回结果的比重和优先级。通过这样的方式,可以更好地满足不同场景和需求的要求。
排序
目前召回结果的排序支持 sdk 模型、neuron 和 rs,这些模型可以对每个召回结果进行模型打分,从而得到 ctr、cvr 等指标。通过脚本可以将模型得到的指标进行加权融合,得到一个最终的综合得分 score。在融合过程中,可以使用不同的权重配置来对 ctr 和 cvr 进行数学计算,以达到最优的排序效果。
为了保证最终排序结果的相关性和质量,通常需要对得分进行过滤和限制,去除分数低于一定阈值的召回结果,以减少无关或者低相关的结果和垃圾结果的干扰。
接下来,会对经过融合和过滤的结果进行排序,可以根据不同的需求和场景,使用不同的算法进行排序。最终,得到一个相关性由高到低的列表,其中每个召回结果的相关性和排名都可以通过综合得分进行计算。最终,这个列表中的召回结果就是最终的排序结果,可以返回给用户进行展示。通过这样的方式,可以实现对召回结果的快速排序和过滤,提高结果的相关性和质量。
重排
重排是一种对排序结果进行后处理的技术,主要目的是为了进一步提高排序结果的相关性和质量。重排的方式包括同义词打散和无价过滤等。
同义词打散是对搜索结果的优化,它的目的是通过去除召回结果列表中包含语义相同的结果,来保证搜索结果的多样性和覆盖面。这可以帮助我们提高搜索结果的质量和用户体验,避免结果重复和过度集中在某一特定领域。例如,当用户在搜索引擎中输入“巧克力”关键词时,通过同义词打散技术,搜索引擎可以展示多种与“巧克力”相关的结果,如“巧克力蛋糕”、“巧克力口味”等,以满足不同用户的需求。
无价过滤也是对搜索结果的优化,它的目的是通过去除召回结果列表中包含无价或无法售出的商品,来保证搜索结果的准确性和有效性。这可以帮助我们提高搜索结果的质量和用户体验,避免用户浪费时间浏览无效商品或服务。例如,在平台上进行商品搜索时,通过无价过滤技术,可以快速识别和去除“已售罄”、“暂无售价”等无效商品,保证用户获得有效的商品信息并提高搜索效率。
总之,重排可以对排序结果进行优化和后处理,使结果更加高效、准确和相关。通过适当的同义词打散和无价过滤等技术手段,可以进一步提升排序算法的效果和性能,提高平台的竞争力和用户体验。
资源位
资源位指在重排好的召回结果列表中,将资源位词按照一定的规则进行投放处理。
首先,为了保证资源位投放的效果,需要对资源位进行优先级排序,以保留高优先级的资源位,优先级高的资源位可以覆盖优先级低的资源位。例如,对于下拉词的第五坑位,品牌直跳的优先级最高,其次是内容导购、ip 直跳,优先级逐个降低。
然后,需要去除混排词中与资源位冲突的词,以避免资源位和响应的搜索结果重复。
最后,根据资源位类型,将资源位投放到混排词列表的前置、坑位或者后置位置,以提高资源位的曝光度和点击率。这样,可以有效地提高用户对搜索结果的关注度和点击率,提高搜索引擎的收益和用户体验。
后置
后置功能是指在返回结果前,对返回的结果进行一系列定制化的处理,以满足不同场景的需求。其中包括但不限于以下几个方面:
高亮:为了突出下拉词中的关键词,让用户更容易找到所需信息,我们可以通过后置处理实现下拉词高亮功能,将下拉词中的关键字进行标注,从而使客户端易于识别。
统一埋点处理:为了更好监控结果,我们可以通过后置处理实现统一埋点处理功能,将搜索的实验、场景等信息记录下来,以便后续进行分析和运营优化。
监控功能:为了确保系统的顺畅运行,我们可以通过后置处理实现监控功能,对搜索结果实时监控,一旦发现异常情况及时报警并进行处理,保证服务的可靠性和稳定性。
返回结构封装:为了方便客户端处理返回结果,我们可以通过后置处理对搜索结果进行结构化封装,以满足不同场景的特定的需求。
高亮:为了突出下拉词中的关键词,让用户更容易找到所需信息,我们可以通过后置处理实现下拉词高亮功能,将下拉词中的关键字进行标注,从而使客户端易于识别。
统一埋点处理:为了更好监控结果,我们可以通过后置处理实现统一埋点处理功能,将搜索的实验、场景等信息记录下来,以便后续进行分析和运营优化。
监控功能:为了确保系统的顺畅运行,我们可以通过后置处理实现监控功能,对搜索结果实时监控,一旦发现异常情况及时报警并进行处理,保证服务的可靠性和稳定性。
返回结构封装:为了方便客户端处理返回结果,我们可以通过后置处理对搜索结果进行结构化封装,以满足不同场景的特定的需求。
通过这些定制化处理,可以满足客户特定的搜索需求,提高搜索服务的精准性、速度和用户体验。
3.3.2 成长期
随着各业务域需求的增加,场景变得越来越多,所有场景都集中在一个集群,业务耦合在一起,而且各场景的模型统一加载,资源共用,致使互相影响导致服务不稳定,而且不利于各场景单独的迭代,一旦有一个业务有问题有可能拖垮其他场景,所以现阶段最重要的是将集群隔离开。
服务集群隔离
由于词分发服务不同于其他服务,我们对外的方式有两种,一是直接对 app,通过 http + 域名 url 调用网关,然后网关转发到词分发集群,另一种是通过 dubbo rpc 调用。针对这两种方式,我们刚开始两种分案进行隔离:
方案1 | 方案2 | |
---|---|---|
方式 |
|
|
优点 | 应用的监控在一起,新加集群埋点不需要额外处理 |
|
缺点 |
| 不同应用的监控是分开的,新加应用,埋点需要额外增加采集 |
架构 |
迁移 c 引擎
3.3.3 进阶期
产品业务和算法在已有功能上的迭代有比较多的诉求,例如词库迭代,策略变更等,为了让算法对平台的使用更加方便,快捷,我们进行了新一轮的提效项目。
针对算法在召回和策略变更这一频繁操作的点,提效项目进行了有针对性的迭代。项目团队通过深入分析和了解用户需求,对平台上的召回策略和变更策略进行优化,并结合业务流程的特点和需求,开发出一套更加友好和高效的算法调用流程和界面,并对算法系统的用户界面、交互设计和性能等方面进行了全方位的升级和优化,以帮助用户更加快捷地完成任务。
脚本热部署
这个功能的主要目的是为了方便处理策略经常变更的链路,通过定义同一的出入参的抽象方法,实现具体的逻辑下放给 SDK,然后通过后台进行打包、配置、推送,以便在线服务可以通过反射机制快速加载具体实现,通过 ab 配置选择脚本进行应用。
在具体实现方面,需要首先定义并实现同一出入参的抽象方法,然后将具体实现下放到 SDK 中,以便可以在服务器端动态推送和加载。在后台方面,我们需要提供打包、配置和推送功能,以便将实现代码预先打包好并配置为一个统一的包。这样,在链路需要变更时,只需要将新的实现代码上传到后台,并进行打包、配置和推送即可。
在线服务检测到新的推送后,通过反射加载具体实现,并通过 ab 配置选择相应的脚本进行应用。这种方式不仅节省了服务器重启的时间和成本,而且可以更加灵活地应用不同的脚本,实现策略的动态调整和优化。
总之,这种方法可以提供更加灵活、高效、可靠的链路策略处理,同时还可以节省时间和成本,提高系统的整体性能和稳定性。
脚本执行流程如图:
集群管理 | 配置 | CICD |
召回可视化工具
单路配置 | 多路配置 |
“diff”即“Difference”的缩写,表示两个事物之间的差异或区别。在词分发平台中,“diff工具”指的是用于比较、分析两个不同搜索策略差异并生成报告的工具。这个工具的主要作用是在算法上新策略或新词库时,与旧的策略或词库相比较,查看效果差异并生成报告。
这个工具可以对两个不同版本的策略进行比较,找出它们之间的差异,比如不同的权重、不同的过滤和排序规则等等。通过diff工具,可以快速地获得不同策略的结果比对,帮助分析策略变化对搜索结果产生的影响,并找出问题所在,从而针对性地解决问题。
总之,diff工具在搜索引擎中扮演着非常重要的角色。它不仅有助于搜索系统的优化与升级、提高搜索服务的质量与效率,也为搜索引擎算法的开发和研究提供了便利。
Badcase 干预
Badcase干预是一种用于搜索引擎优化的常见技术手段之一。现代搜索引擎服务的基本目标是提供准确、实用、便捷和高效的搜索结果,但在这个过程中,难免会出现一些‘Badcase’,例如查询结果错误、查询意图不明确、长尾词搜索无效果等等。这些Badcase会影响搜索引擎的搜索质量,进而降低用户的搜索体验和可信
Badcase干预技术就是针对这些问题进行人工干预、调优和扩展搜索结果,以期获得更准确和更满意的结果。通过对搜索结果进行精细化、细节化的优化,Badcase干预可以提高搜索结果的质量和准确度,从而为用户提供更好的搜索体验,同时也为搜索引擎的发展和应用提供了有力的支持。
3.4 场景分布
*文/zhen.lee
END
点这里 ↓↓↓ 记得 关注✔ 标星⭐ 哦
微信扫码关注该文公众号作者