首先介绍一下阿里健康的业务背景和对现状的分析。
可解释性推荐,举例而言,如下图中当当网“根据您浏览的商品推荐”(告诉用户推荐的理由)及淘宝网“1000+居家控收藏”、“2000+数码达人加购”均属于可解释性推荐,通过提供用户信息来说明推荐商品的原因。
左图中的可解释推荐,有一种较为简单的实现思路:推荐主要包含召回和排序两大主要模块,且召回往往涉及到多路召回,用户行为召回也是常见的一种召回方式。可对经过排序模块后的商品进行判定,若商品来源于用户行为召回池,则可在推荐的商品后添加相应的推荐注释。但该方法往往准确率精度不高,并未给用户提供较多有效信息。
相比而言,右图示例中可由对应的解释性文字提供给用户更多的信息,如产品类别信息等,但该方法往往需要较多的人工干预,在特征到文本输出环节进行人工处理。
而对于阿里健康,由于行业的特殊性,相比于其它场景,可能存在更多的限制。相关条例规定“三品一械”(药品、保健食品、特殊医药用途配方食品和医疗器械)广告中不允许出现“热销、排序、推荐”等文本信息。因此阿里健康需在遵从上述条例的前提下,结合阿里健康的业务对产品进行推荐。
阿里健康现有阿里健康自营店铺和阿里健康行业店铺两类店铺。其中自营店铺主要含有大药房、海外店和医药旗舰店,而阿里健康行业店铺主要涉及到各品类旗舰店及私营店铺。
就产品而言,阿里健康主要涵盖常规商品、OTC 商品、处方药三大类产品。常规商品,即定义为不是药品的商品,对于常规商品的推荐,可展示较多信息,如品类销量 top,超过 n+人收藏/购买等信息。而对于 OTC 及处方药这类药品商品的推荐,则受到相应条例的约束,需更加结合用户关注点进行推荐,如功能主治、用药周期、使用禁忌等信息。
上述提到的可用于药品推荐文字的信息主要有以下几大来源:
第二部分主要介绍商品的特征是如何提取及编码的。
下面以藿香正气水为例,展示如何从上述数据源进行关键特征的提取:
商家为增大产品的召回,往往会在标题中加入较多的关键词,因此可通过商家自带的标题描述进行关键词的抽取。
可借用 OCR 技术基于商品的详情图中提取到商品的功能主治、核心卖点等更为全面的商品信息。
通过用户基于某功能情感的得分,可对商品的对应关键词进行加权减权操作。如对于“防中暑”的藿香正气水而言,可通过用户评论中“防中暑”情感的打分,对其相应的标签进行对应的权重处理。
通过上述多种数据来源,可抽取出信息中的关键词并构建关键词库。由于抽取出来的关键词存在较多重复、同义的情况,需对同义词进行合并,并结合人工校验,生成标准词库。最终可形成单个商品-标签列表的关系,可用于后续编码及在模型中的使用。
下面介绍如何对特征进行编码。特征编码主要基于 word2vec 的方式进行 word embedding。
真实的历史购买商品对数据可分为下述三大类:
(1)共同浏览商品对:用户在一段时间(30 min)内依次点击的用户定义为共同浏览数据。
(2)共同购买商品对:共同购买广义而言,可定义为同一主订单下子订单间互够为共同购买商品对;但考虑到实际用户下单习惯,定义一定时间(10 min)内同一用户的下单产品数据。
(3)浏览后购买商品对:同一用户在点击 A 后又购买了 B 产品,A 与 B 互为浏览后购买数据。
通过对历史数据进行分析,发现浏览后购买数据对商品间相似度较高:往往药品核心功能相似,仅存在轻微不同,可将其定义为相似产品对,即为正样本。
特征编码模型仍基于 word2vec 的思想:主要是希望具有相似的产品/标签间 embedding 更加接近。因此 word embedding 中正样本定义为上述提到的浏览后购买商品对;负样本则为共同浏览商品对和共同购买商品对的并集减去浏览后购买的商品对数据。
基于上述正负样本对的定义,利用 hinge loss,可以学习每个商品的 embedding 用于 i2i 召回阶段,也可同本场景中学习出标签/关键词的 embedding,用作后续模型的输入。
上述方法有两个优点:
(1)特征仅用到产品特性,能在一定程度上解决冷启动问题:对于新上架的商品,仍可通过其标题、商品详情图等信息获取相应标签。
(2)正、负样本的定义可用于不同的推荐场景:如若将正样本定义为共同购买产品对,则训练出来的商品 embedding 可用于“搭配购买推荐”场景。
业界现有较为成熟的可解释类型主要包含内置可解释性( model-intrinsic )和模型无关可解释性( model-agnostic )两大类。
其中内置可解释性模型,如常见的 XGBoost 等,但 XGBoost 虽为端到端模型,但其特征重要度是基于整体数据集而言,不符合“千人千面”的个性化推荐要求。
而模型无关可解释性主要是指重建逻辑模拟模型,并对模型进行解释,如 SHAP,其可对单个 case 进行分析,可判定出预测值与实际值不同的原因。但 SHAP 复杂度较高,较为耗时,经过性能改造后无法满足线上性能需求。
因此需构建一个端到端,且能对每个样本进行特征重要度输出的模型。
而高斯混合分布是多个高斯分布的组合,可输出某个分布的结果值及每个样本结果属于某个分布的概率。因此可进行类比,将归类后的特征理解为具有不同的分布的数据,分别对对应特征的预测结果 及该预测在实际结果中的重要程度 进行建模。
下图为整体的模型结构图,左图为选择模型,可用作特征重要度的展示,右图为特征对应的预测模型。
具体而言,预测模型用于预测对应特征预测/点击的概率,而选择模型则用于说明哪些特征分布是比较重要、可用于作为解释性文字的展示。
下图为预测模型的结果图,预测模型主要借鉴了 DeepFM 的思想,包含一个深度模型和交叉模型。深度模型主要用于学习特征的深层表达,而交叉模型则用于学习交叉特征。
深度模型中,先提前对特征进行分组(假设共有 N 组),如对价格、类别等相关的特征合并为价格、类别大类(图中 field 字段),并对每一组特征进行单独的模型训练,并得到基于该组特征的模型结果。
对模型提前进行合并分组,具有下述两个优点:
(1)通过 N 个模型的独立训练,可通过输入特征的增减改变模型的复杂度,从而影响线上性能。
(2)对特征的合并分组可明显减少特征量级,从而使人工将特征域转化为文字时更加方便。
值得一提的是,attention 层理论上也可用于特征重要度的分析,但在本模型中未引入attention 的原因主要如下:
(1)若将 attention layer 放在太靠前位置则无法体现出特征深层表达的结果;
(2)若将 attention layer 放在较为靠后的位置,则无法回溯、无法找出核心特征。
而对于预测模型:
其交叉层并未沿用 FM 模型而是采用 CNN 代替 DeepFM 中 FM 结构。FM 模型学习特征两两交叉结果,并通过数学公式直接计算两两交叉结果,避免计算时的维度爆炸,但其导致无法回溯特征重要度,因此在交叉模型中引入 CNN 替代原有结构:采用 N 个特征进行相乘以实现特征交叉,再进行 CNN 的相应操作。这样使得特征值在输入后经过 pooling,concat 等操作后,仍可回溯。
除上述优点外,该方法还有一个优点:虽然现有版本仅是单个特征到单个描述文字的转化,但仍希望未来能实现多特征交互的转化。举例而言,如果某用户习惯购买100元低价产品,但若有原价50,000元商品打折至500出售,而用户购买了该商品,模型可能因此将其定义为高消费用户。但实际中,可能是因为高端品牌+高折扣双重因素导致的用户下单,因此需考虑组合逻辑。而对于 CNN-FM 模型而言,后期可直接利用 feature map 进行特征组合的输出。
选择模型由 MLP 和 sparseMax 组成。值得一提的是,选择模型中激活函数采用的是 sparsemax 而不是更为常见的的 softmax。图像右边依次是 sparsemax 的函数定义及 softmax 与 sparsemax 的函数对比图。
从右下的图中可看出,softmax 对重要度较低的输出节点仍会赋予较小值,在该场景下会导致特征维度爆炸,且容易造成重要特征与不重要特征间的输出没有区分度。而 sparseMax 可以将输出离散化,最终仅输出较为重要的特征。
线上效果数据主要来自于大药房首页曝光-点击数据,为避免过拟合,也引入了部分其他场景曝光-点击数据,数据比例为 4:1。
在离线场景下,该模型 AUC 为0.74。
由于线上场景已有 CTR 模型,考虑新版算法除更换模型外,还会展示对应的解释性文字,未控制变量,因此本次实验并未直接采用 AB test。而是当且仅当线上 CTR 模型及新版算法预测值均高于特定阈值时,才会展示推荐理由的文本。上线后,新版算法 PCTR 提升 9.13%,UCTR 提升 3.4%。
A1:同义词合并时会利用模型学习文本标准,并提供出基础词库。但实际上人工校验的比重较大。因为健康/药品的业务场景,对算法准确度的要求较高,可能个别字的偏差会造成实际意义的较大偏离。整体而言人工校验的比重会比算法大。
A2:可以。还有很多其他模型可以做可解释推荐。因为分享者对 GMM 整体熟悉度高,所以选择上述模型。
A3:假设有 N 组特征组,预测模型、选择模型均会会生成 1*N 维的向量,最终将预测模型和选择模型的结果进行相乘(multiple),实现联动。
A4:目前还没有合适的机器学习模型进行文本生成,主要还是采用基于人工的方式。如价格是用户关心的核心特征,则会选择对历史数据进行分析,推荐出性价比较高的产品。但目前而言,主要还是人工操作。希望未来能有合适的模型进行文本生成,但考虑到业务场景的特殊性,模型生成的文本仍需要人工进行校验。
A5:对于 GMM 中子分布的选择,主要通过 GMM 中 Mk 对分布进行学习,并基于 Mk 的高低值进行筛选。
A6:对加属性词,如对产品描述中的疾病、功能、使用禁忌等进行达标。
A7:可以,现在的实际用法即为槽位填充。
今天的分享就到这里,谢谢大家。