Line团队打造一套3阶段购物推荐系统,分别从上千万商品库中捞出几百个用户可能有兴趣的商品,接著透过使用者行为,来排名候选的推荐商品、缩小推荐范围,最后加上商业逻辑来决定最终推荐给用户的商品。(图片来源/Line)
「在数百万到数千万的商品中,如何快速找到用户有兴趣的商品,推荐给他们?」Line台湾机器学习工程师黄耀庆这句话,点出推荐系统对Line购物的重要性和挑战。
Line购物是一个导购平台,就像是消费者与店家的桥梁,将使用者导向成千上万款商品各自的品牌商网站、电商平台上的商品网页。为了提高销售量,得想办法从百万、甚至是千万量级的商品数量,迅速找出使用者有兴趣的几个商品,推荐给他们。
为此,Line团队发展出一套高度个人化的购物推荐系统,光是推荐情境模组就有20多种,比如个人化文章推荐、降价商品推荐、搜寻关键字推荐,又或是类似商品推荐等。这套以机器学习驱动的核心推荐系统叫做Brickmaster,在2022年正式启用。
Line台湾如何设计它,来因应多情境和海底捞针般的精准推荐挑战?多位Line台湾开发团队成员,在Hello World开发者大会上揭露了背后的挑战和开发经验。
分3阶段打造精准推荐系统
首先,开发团队将Line购物导购的推荐流程,切分为3大阶段,一方面提高推荐精准度,又能整合不同消费者行为和业务考量的需求。
第一步是「检索(Retrieval)」,从包含千万个商品的资料库中,捞出数百个使用者可能感兴趣的商品。接著是「排名(Ranking)」,根据使用者行为,将第一阶段捞出的上百个候选推荐商品,缩小至数十个商品。
最后是「重新排名(Re-rank)」,这是用来结合各种商业逻辑(如促销活动、节日活动和商品获益)、商品新鲜度和商品多样性的考量,来调整候选推荐商品。完成这些阶段后,系统可以产生一份用来吸引顾客的推荐商品清单。
阶段1:检索
黄耀庆指出,与全站商品相比,使用者有兴趣、会点击的商品,几乎只占了全站商品的「0.001%」想要从庞大的商品中,找出这么少的目标商品,正是第一步,检索阶段的严峻挑战。
为快速从巨量商品中,找出使用者感有兴趣的商品,Line采用推荐领域中经典的双塔模型方法。这个双塔模型可分为使用者塔(User tower)和商品塔(Item tower),两个塔各为一套多层的类神经网路。
其中,使用者塔用来处理使用者特征,得到使用者的嵌入向量。商品塔则用于处理商品特征,产出商品嵌入向量。这双塔产出的使用者向量和商品向量,再经过内积运算,进行使用者-商品向量的相似度搜寻,经运算最终得到目标答案,也就是使用者有兴趣点击的商品清单。
为让模型精准产出使用者向量和商品向量,得先进行特征工程。Line将双塔模型所需的特征分为两种,即档案和行为,比如在使用者特征部分,就有使用者档案(如基本资料)和使用者行为(如点击次数、点击品项),在商品特征部分,则是商品档案和商品行为,如商品名称、ID、价格,以及同一商品被不同性别购买的次数、商品与不同族群的互动关系等。
这些特征涵盖数值、类别和文字等3种类型,Line对这些类型特征,各有其处理方式。比如针对数值型特征进行标准化(Normalization),来缩小数值范围、好让类神经网路学习;又或是使用威尔逊得分区间(Wilson Score Interval),来减少数值的偏差。
对于类别型特征,也有几种常见的处理方式,像是将商品品项转换为数字编码的独热编码方法、确保顺序逻辑的序数编码等。文字型特征则以BERT编码来处理。
在实务上,Line将双塔模型拆为2种运作模式,商品塔采取离线处理,使用者塔则靠线上处理。这是因为,商品行为的改变频率较低,但使用者喜好变动快速,模型得在短时间内处理,才能筛选出最贴近需求的商品。
不只可以利用使用者与商品的相似度,来寻找推荐商品,也可以利用使用者最近喜欢的商品清单,来寻找更多使用者感兴趣的同一类商品。这是Line购物在检索阶段,会使用的另一种商品相似度搜寻(Item to item)作法,一样采用双塔模型方法,只是将其中一塔改为使用者最近喜欢的商品,另一塔则是商品库商品,透过比对使用者最近喜欢的商品特征,以及商品库商品最新特征,来找出用户可能有兴趣的商品。
阶段2:排名
经过检索阶段,可以从上千万个商品中,筛选出几百个使用者感兴趣的商品了。但这个数量还是太多,接下来借由排名作法,找出优先推荐的项目。
Line会根据使用者在Line购物「推荐版位」(比如夯话题)上的行为,推测使用者感兴趣的浓厚程度,来排列候选推荐商品的顺序。这可以想像为,另一种缩小推荐商品范围的方法。
在这个阶段,Line团队一样采用类神经网路,来计算在推荐版位,使用者会点击的商品。排名模型所处理的特征有3种,包括使用者特征、商品特征,以及使用者-商品特征(比如用户对商品的点击或购买次数)。
在实务上,为支援庞大的运算需求,Line采用开源大数据处理工具PySpark,以分散式运算来执行排名模型的推论工作。这一步,就像是将原本一台机器100秒才能完成的工作,分散给100台机器处理,1秒就能完成该工作。
阶段3:再排名
完成第二阶段的排名工作,筛选出使用者最有兴趣到一般有兴趣的商品排序后,还需要进行最后一步的调整,才推荐给使用者。
调整条件可分为三类,包括商品多样性、商品新鲜度和商业逻辑。进一步来说,商品多样性是指,推荐商品要包含不同类型的商品,而不是前10名都推同一类型商品给用户,比如滑鼠。
就商品新鲜度而言,顾名思义是尽量推荐较新的商品给用户。不过,新上架的商品缺乏足够的资料,难以靠模型学习来筛选。于是,Line团队改以规则式方法,让新上架的商品,也能纳入推荐商品名单内,来增加曝光度。于是,Line团队改以规则式方法,将新上架的商品纳入推荐商品名单内,来增加曝光度。这么做,短期内点击率虽会下降,但长期而言,有益于推荐系统发展。
这是因为,当使用者接收到的推荐商品,都来自自己认知范围内,久而久之容易腻。而保留流量给新品推荐,不只能让使用者探索兴趣,也能曝光新品、累积资料,利于后续模型训练和推荐。
最后的商业逻辑,则是指推荐商品要符合促销活动、节假日活动或商品获益考量。比如父亲节时,提高当时时令礼品的权重。
至此,「检索」、「排名」、「再排名」这三大阶段,构成了Line购物推荐系统的核心流程。
善用开源技术提高模型处理效率
由于商品库和用户数量庞大,模型必须处理成千上万个特征,需要大量运算处理。因此,除了分散式处理特征工程的PySpark,Line团队还借助一些开源工具,来提高作业效率和各阶段任务管理。
这包括用来支援模型分散式训练的数据函式库Petastorm,用来管理和追踪模型实验成效的MLflow,能将PyTorch模型训练程式码模组化的PyTorch Lighting,以及视觉化管理模型训练排程的Airflow。
这些工具相互搭配,而且缺一不可。比如,PySpark借助多台机器资源,来分散式执行Line购物商品和使用者特征工程,Petastorm能快速打散Line购物累积的巨量资料并读取,MLflow则用来追踪推荐模型表现,比如实验中哪些模型超参数效果最好,而PyTorch Lighning除了能将模型训练模组化,还能简洁记录推荐模型资讯等。这些工具也是Line购物打造出超强推荐系统的关键。