得物词分发平台技术架构建设与演进

前言

在文章开始前先介绍下导购,导购通常是指帮助消费者在购物过程中做出最佳决策的人或系统。在电商网站中,导购可以引导用户关注热卖商品或促销活动等,帮助用户更好地进行购物。导购的目的是为了提高用户的购物体验,促进销售额的增长。

接着开始正文,词分发也属于导购的一部分,他主要提供词推荐相关的功能,比如下拉词、底纹词、榜单、锦囊词、风向标等。而词分发平台则致力于构建一个通用的词推荐平台,避免重复开发和维护成本,提高运营效率和业务灵活性,从而支持公司各个域的业务发展和用户需求。

这个平台的主要作用是集成各种算法和工具,并提供一些通用的服务和接口,让各个域可以快速开 展业务,并实现自己的词推荐功能。这样一来,就不用每个域都进行单独的开发和维护,节省了很多时间和成本。同时,这个平台的灵活性也非常高,因为它可以根据不同的业务需求和场景特点快速地调整和修改,保证业务的顺利推进。

初期

背景

在当今数字时代,搜索引擎已经成为人们生活和工作中不可或缺的工具,通过搜索指定关键词,获取有用的信息和资料已经成为人们的共同需求。因此,在搜索引擎优化过程中,关键词的选择和排名就显得尤为关键。

在常规的搜索引擎中,搜索词的结果通常是基于全局搜索结果,而针对某一个用户的兴趣和需求的推荐服务往往是缺失的,这使得用户在需要相关信息时往往需要自行搜索大量的结果进行筛选。通过个性化推荐的词分发服务,用户可以获得更具针对性的关键词推荐,大大减少了用户自行搜索的时间和精力成本。因此,提供一个针对用户个性化推荐的词分发服务是十分必要的。

总之,设计一个词服务,提供个性化推荐的词分发,可以为不同类型的用户提供更准确、更快捷和更全面的关键词推荐服务,有利于企业吸引更多的潜在用户,提高品牌知名度和客户忠诚度,同时也提升了企业市场竞争力和盈利能力。

服务建设

个性化推荐的词分发服务的核心技术主要包括了:

针对不同用户群体,个性化推荐的词分发服务通过对用户行为数据的智能分析,可以对用户群体进行精准的画像,并针对不同用户群体提供针对性的推荐服务。例如,对于喜欢购买化妆品和服装的女性用户,服务平台可以推荐与之相关的底纹词、热词和下拉词;对于喜欢 aj 鞋和手表的男性用户,平台可以根据其搜索历史和行为数据,为其推荐与 aj 和手表相关的关键词和内容。

功能分析

因为底纹词,热词和下拉词功能实现有所不同,所以需要提供特定的实现方案,以便能够更好地满足不同场景下的需要。 底纹词和热词的实现逻辑类似,对于用户来说无主动触发条件,它们主要依赖于用户行为来为用户推荐热门词。底纹词和热词实现的关键在于分析用户的搜索行为和历史,通过用户历史的 item 点击以及 query 搜索进行 i2q 和 q2q 的召回,从而为用户推荐个性化的热门词。 下拉词的实现方案不同于底纹词和热词。需要有用户的主动触发条件,通过对用户实时输入内容进行关键字匹配召回,然后通过个性化排序进行推荐。 综上所述,底纹词、热词和下拉词的实现方案各不相同,需要根据场景和需求提供相对应的实现方案。

功能实现

底纹词/热词

底纹词和热词的实现主要依赖于用户行为来为用户推荐热门词。在实现过程中,需要通过分析用户的行为历史,利用算法对用户历史行为分析和处理,从而实现 i2q 和 q2q 的召回。

通过分析用户搜索行为和历史数据等信息,底纹词和热词可以针对用户的兴趣和需求推荐最热门的关键词。例如,对于经常浏览 nike 相关商品的用户来说,系统可以向其推荐最近最热门的相关 nike 系列的底纹词和热词。

底纹词和热词的实现方案的关键在于该功能对于用户来说无主动触发条件,主要是服务内部对用户历史行为数据的细致分析和处理。通过对用户行为的深入挖掘,识别用户兴趣和需求的热门领域和方向,以便精确地推荐与用户需求相关的底纹词和热词。同时,为了更好地提高底纹词和热词的效果,还需要不断地优化算法,不断升级推荐策略,提高词的覆盖度和准确度,从而实现更加个性化和精准的推荐服务。

下拉词

下拉词是指搜索框下方的词语提示,需要有用户的主动触发条件,用户在搜索框中输入关键字时,搜索引擎会根据用户实时输入内容进行关键字匹配召回,然后通过个性化排序进行推荐。与底纹词和热词不同,下拉词的推荐与当前用户的实际需求和搜索意图关系更加密切。

在下拉词的实现过程中,搜索引擎需要利用算法对用户的历史搜索记录和行为数据进行统计和分析,从而了解用户的兴趣爱好和搜索习惯,识别用户的搜索需求并提前预测可能的搜索意图。在召回阶段,搜索引擎在用户输入搜索词后,会根据匹配规则召回相关的关键词并进行排序,推荐与用户需求最相关的下拉词。在排序阶段,搜索引擎会根据个性化排序算法并结合用户行为特征和搜索历史数据,对召回的关键词进行权重排名,以便让用户看到最为相关和实用的下拉词提示。

综上所述,下拉词的实现方案需要根据用户的搜索历史数据和行为特征等信息,结合相关算法进行分析和处理,从而实现个性化和实用性的推荐服务。下拉词的推荐与用户的搜索需求和搜索意图关系更加密切,因此下拉词的质量和推荐准确度对用户的搜索体验和满意度有着重要影响。

平台化

问题

随着公司的发展,针对现有场景产品业务和算法在已有功能上的迭代有比较多的诉求,例如词库迭代开发,策略变更,业务迭代较多。针对新场景,越来越多的业务域需要前置引导功能,例如 客服智能提示,海外业务导购,营销导购,推荐风向标,主搜锦囊词,榜单等 基于现有服务,主要有以下问题

(1)研发&时间成本:对现有场景进行召回路的增删,策略的变更,资源位的投放等进行迭代,需要工程和算法投入较多的研发资源,而且迭代周期长,同时 PMO、各团队 leader 及 PM、项目联调、测试资源、线上变更 CR 等间接投入也会积少成多。

(2)多场景接入问题:不同场景重复建设也会带来成本的增加,同样需要研发和时间成本,不再赘述。

目标

综上所述,目前服务存在迭代成本高、周期长、多场景接入重复建设等问题。为了优化现状,构建通用平台,避免重复开发和维护成本,提高运营效率和业务灵活性,从而支持公司的业务发展和用户需求。主要从以下几个点完善提高平台能力:

阶段性发展

构建通用平台是优化现状的有效途径之一,但具体实施还需要深入考虑和细化。首先,需要在业务流程中明确各个场景的特点和需求,以及它们之间的异同点,并确定哪些部分可以抽象和共享,哪些部分是需要定制化的。其次,需要通过技术手段将通用组件进行抽象和分离,构建通用平台,同时加强平台的可定制性和扩展性,以满足不同场景的需求。这个过程需要,制定完善的流程,建设完善的监控和报警系统等,从而确保平台的可靠性和稳定性。最后,需要对平台进行持续的优化和完善,同时加强对平台的安全性、可维护性、扩展性等方面的管控,以保证平台能够适应不同场景的变化和需求。

通过深入调研,具体规划业务框架如下图

孵化期

首先,在明确各个业务场景的特点和需求的基础上,对流程进行抽象和分离,并通过规范化的流程 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 直跳,优先级逐个降低。

然后,需要去除混排词中与资源位冲突的词,以避免资源位和响应的搜索结果重复。

最后,根据资源位类型,将资源位投放到混排词列表的前置、坑位或者后置位置,以提高资源位的曝光度和点击率。这样,可以有效地提高用户对搜索结果的关注度和点击率,提高搜索引擎的收益和用户体验。

前置 坑位 后置

后置

后置功能是指在返回结果前,对返回的结果进行一系列定制化的处理,以满足不同场景的需求。其中包括但不限于以下几个方面: 高亮:为了突出下拉词中的关键词,让用户更容易找到所需信息,我们可以通过后置处理实现下拉词高亮功能,将下拉词中的关键字进行标注,从而使客户端易于识别。

统一埋点处理:为了更好监控结果,我们可以通过后置处理实现统一埋点处理功能,将搜索的实验、场景等信息记录下来,以便后续进行分析和运营优化。

监控功能:为了确保系统的顺畅运行,我们可以通过后置处理实现监控功能,对搜索结果实时监控,一旦发现异常情况及时报警并进行处理,保证服务的可靠性和稳定性。

返回结构封装:为了方便客户端处理返回结果,我们可以通过后置处理对搜索结果进行结构化封装,以满足不同场景的特定的需求。

通过这些定制化处理,可以满足客户特定的搜索需求,提高搜索服务的精准性、速度和用户体验。

成长期

随着各业务域需求的增加,场景变得越来越多,所有场景都集中在一个集群,业务耦合在一起,而且各场景的模型统一加载,资源共用,致使互相影响导致服务不稳定,而且不利于各场景单独的迭代,一旦有一个业务有问题有可能拖垮其他场景,所以现阶段最重要的是将集群隔离开。

服务集群隔离

由于词分发服务不同于其他服务,我们对外的方式有两种,一是直接对 app,通过 http + 域名 url 调用网关,然后网关转发到词分发集群,另一种是通过 dubbo rpc 调用。针对这两种方式,我们刚开始两种分案进行隔离:

- 方案1 方案2
方式 1. http接口转dubbo RPC,提供 dubbo 接口 2. 现有接口过业务网关,业务网关根据 path 调用不同的服务 tag 进行路由 1.同一套代码,部署不同的应用名 2. 网关通过应用名进行接口精确路由
优点 应用的监控在一起,新加集群埋点不需要额外处理 1. 无需提供 dubbo 接口 2. 流量直接到服务,无需业务网关干涉
缺点 1. 单独提供 dubbo 接口 2. 流量到服务之间多一层业务网关,强依赖业务网关,性能方面额外增加业务网关流程 不同应用的监控是分开的,新加应用,埋点需要额外增加采集
架构

但是,通过跟网关沟通,方案一实现不了,所以最终采用第二种方式实现集群隔离。

迁移 c 引擎

在词分发平台中,各个场景使用不同的存储底层会造成很多问题,其中包括维护难度高、可扩展性差等。为了解决这些问题,我们需要一个统一的存储底层来管理所有的应用,从而提升整体系统的性能和稳定性。而且,伴随着公司C++引擎的快速发展,以及C++引擎整条相关链路的成熟,因此,我们决定把词分发各个场景的数据迁移到 C++ 引擎中。

首先,C++ 引擎具有完善的数据结构和内存管理机制,通过前缀树等高效的数据结构组织数据,可以快速查询和操作数据。同时,C++ 引擎的内存管理机制能够以更加高效的方式管理内存,提高系统性能。此外,C++ 引擎还具有完整成熟的调度机制,能够高效地调度任务并管理线程池,保证平台的稳定性和可扩展性。C++ 还提供了快照恢复链路,这意味着即使系统出现异常,我们仍然可以通过快照恢复机制将系统恢复到之前的状态。这种机制不仅提高了系统的可靠性,还保证了数据的安全性。除此之外,C++ 引擎还具有dump链路,能够在出现错误时输出相应的日志和错误信息,方便快速排查错误和修复问题。

总之,将词服务的数据迁移到 C++ 引擎中,不仅可以统一算法平台各应用的存储底层,提升整体系统稳定性和扩展性,还能通过C++ 引擎的成熟调度、dump链路以及快照恢复链路等功能来提高平台的可靠性和数据安全性。

进阶期

产品业务和算法在已有功能上的迭代有比较多的诉求,例如词库迭代,策略变更等,为了让算法对平台的使用更加方便,快捷,我们进行了新一轮的提效项目。 针对算法在召回和策略变更这一频繁操作的点,提效项目进行了有针对性的迭代。项目团队通过深入分析和了解用户需求,对平台上的召回策略和变更策略进行优化,并结合业务流程的特点和需求,开发出一套更加友好和高效的算法调用流程和界面,并对算法系统的用户界面、交互设计和性能等方面进行了全方位的升级和优化,以帮助用户更加快捷地完成任务。

脚本热部署

这个功能的主要目的是为了方便处理策略经常变更的链路,通过定义同一的出入参的抽象方法,实现具体的逻辑下放给 SDK,然后通过后台进行打包、配置、推送,以便在线服务可以通过反射机制快速加载具体实现,通过 ab 配置选择脚本进行应用。

在具体实现方面,需要首先定义并实现同一出入参的抽象方法,然后将具体实现下放到 SDK 中,以便可以在服务器端动态推送和加载。在后台方面,我们需要提供打包、配置和推送功能,以便将实现代码预先打包好并配置为一个统一的包。这样,在链路需要变更时,只需要将新的实现代码上传到后台,并进行打包、配置和推送即可。

在线服务检测到新的推送后,通过反射加载具体实现,并通过 ab 配置选择相应的脚本进行应用。这种方式不仅节省了服务器重启的时间和成本,而且可以更加灵活地应用不同的脚本,实现策略的动态调整和优化。

总之,这种方法可以提供更加灵活、高效、可靠的链路策略处理,同时还可以节省时间和成本,提高系统的整体性能和稳定性。

脚本执行流程如图:

集群管理

配置

CICD

召回可视化工具

在现代的搜索引擎系统中,多路召回是一个非常重要的组件,其决定了搜索引擎的性能和准确性。因此,多路召回的配置和管理,对于搜索引擎系统的性能、稳定性和可维护性来说是至关重要的。

在以前的词分发系统中,多路召回的配置是以JSON字符串的形式存在的。每次修改配置都需要对这个JSON进行手动的编辑,该过程非常耗费时间,随着召回路的增多,配置效率也会越来越低,而且这种方式容易出错。因此,我们需要一种更加高效、可视化的方法来管理和配置多路召回。

为了提高多路召回的配置效率和准确性,我们需要一种可视化的后台工具来替代手动修改JSON字符串的方式。这样的后台工具可以将多路召回的配置以更加直观和可视化的方式展示出来,让配置人员能够直接在页面上进行配置和修改,从而减少手动编辑JSON字符串的错误和繁琐性。

通过使用可视化的后台工具,我们可以方便地管理和配置各种算法和策略,从而大大提高搜索引擎系统的性能和可维护性。

总之,可视化的后台工具对于提高搜索引擎的性能和可维护性非常重要,它可以大大简化配置人员的操作难度和减少错误,进一步提高搜索引擎系统的效率、可靠性和灵活性。

单路配置

多路配置

diff 工具

"diff"即"Difference"的缩写,表示两个事物之间的差异或区别。在词分发平台中,"diff工具"指的是用于比较、分析两个不同搜索策略差异并生成报告的工具。这个工具的主要作用是在算法上新策略或新词库时,与旧的策略或词库相比较,查看效果差异并生成报告。

这个工具可以对两个不同版本的策略进行比较,找出它们之间的差异,比如不同的权重、不同的过滤和排序规则等等。通过diff工具,可以快速地获得不同策略的结果比对,帮助分析策略变化对搜索结果产生的影响,并找出问题所在,从而针对性地解决问题。

总之,diff工具在搜索引擎中扮演着非常重要的角色。它不仅有助于搜索系统的优化与升级、提高搜索服务的质量与效率,也为搜索引擎算法的开发和研究提供了便利。

Badcase 干预

Badcase干预是一种用于搜索引擎优化的常见技术手段之一。现代搜索引擎服务的基本目标是提供准确、实用、便捷和高效的搜索结果,但在这个过程中,难免会出现一些'Badcase',例如查询结果错误、查询意图不明确、长尾词搜索无效果等等。这些Badcase会影响搜索引擎的搜索质量,进而降低用户的搜索体验和可信

Badcase干预技术就是针对这些问题进行人工干预、调优和扩展搜索结果,以期获得更准确和更满意的结果。通过对搜索结果进行精细化、细节化的优化,Badcase干预可以提高搜索结果的质量和准确度,从而为用户提供更好的搜索体验,同时也为搜索引擎的发展和应用提供了有力的支持。

场景分布

还有一些小场景,例如:鉴别下拉,小程序下拉等

总结

词分发平台通过架构改造,稳定性的升级,使得平台具备灵活、可拓展的场景接入方案,协助业务实现个性化的需求定制,在更多、更广泛的场景和业务域中充分发挥平台的应用优势。在稳定性方面,平台针对不同环节提供实时的监控和告警,并且对各个阶段的限流和熔断提供有效的兜底方案,以保障平台的稳定性。通过采用不同的技术手段和系统监测,准确、快速地发现并解决问题,以确保平台的稳定性。

未来平台会联合算法和调控平台,打通词圈品和品圈词的链路,以及不同类型召回提权调控等,完善词分发平台功能 ,使得这个平台可以提供更好的服务。

*文/zhen.lee

本文属得物技术原创,更多精彩文章请看:得物技术官网

未经得物技术许可严禁转载,否则依法追究法律责任!

相关推荐
Apache IoTDB6 分钟前
IoTDB 与 HBase 对比详解:架构、功能与性能
大数据·数据库·架构·hbase·iotdb
monkey_meng6 分钟前
【Rust Crate之Actix Web(一)】
开发语言·后端·rust
2401_8570262328 分钟前
SpringBoot环境下的共享汽车管理策略
spring boot·后端·汽车
星叔43 分钟前
ARXML汽车可扩展标记性语言规范讲解
java·前端·汽车
2401_8576226644 分钟前
共享汽车管理:SpringBoot技术实现与优化
spring boot·后端·汽车
2401_857600951 小时前
SpringBoot框架:共享汽车管理的创新工具
java·spring boot·汽车
夜色呦1 小时前
SpringBoot助力的共享汽车业务优化系统
spring boot·后端·汽车
代码小鑫1 小时前
A15基于Spring Boot的宠物爱心组织管理系统的设计与实现
java·开发语言·spring boot·后端·毕业设计·宠物
爱吃土豆的马铃薯ㅤㅤㅤㅤㅤㅤㅤㅤㅤ1 小时前
mapper.xml 使用大于号、小于号示例
xml·java·数据库
一直学习永不止步1 小时前
LeetCode题练习与总结:迷你语法分析器--385
java·数据结构·算法·leetcode·字符串··深度优先搜索