这里是「非科班出身的机器学习工程师成长之路」第一篇文章。这篇文章要和大家分享的是构建用户侧的特征能应用到哪些业务场景,个人判断较多,偏颇难免,所以还请谨慎参考。仅看标题也许就会有疑问,“用户特征的应用”这是个什么工作范畴,别着急,听我娓娓道来。想必大家听说过大中台,小前台,数据中台这些大厂的支撑部门,没错我也处在类似这种的部门里,所以平时的工作就是构建一些公共的底层知识和数据。用户侧特征就是抽离出来的公共知识,构建公共的用户侧特征,供给公司内各个业务线使用。
本片内容概览:
一、需求场景分析
需求场景
首先做一下需求场景分析,我平时的工作会接触个性化推荐,主要包括item召回,推荐列表排序;还有广告场景,包括广告的定向投放,ctr/cvr预估;以及智能营销场景,包括个性化push,产品推广活动,用户拉新/促活。
需求分析
从应用场景中的几个典型的模块做进一步分析,会发现使用到的数据都是类似的,提取特征的类型上也是相似的。比如个性化推荐--召回模块,包括协同过滤召回,标签召回,模型召回等多路召回方式,使用到的数据包括用户行为数据、用户侧与item侧语义标签数据、用户侧特征以及item侧特征数据;比如ctr预估、个性化推荐--排序模块,从模型层面来讲,业界常用人工特征工程 + LR,GBDT/XGB + LR,FM/FFM,DNN(wide&deep、DeepFM、PNN、DIN)等方法,使用到的数据包括用户侧特征,item侧特征,用户-item匹配特征数据;再比如人群定向模块,可以使用规则圈选用户群,也可使用模型分类用户群,使用到的数据同样包括用户行为数据,用户侧语义标签数据,item侧特征数据。
特征分析
我们这篇文章的核心是讨论特征,所以以上只从数据层面进行分析,可以梳理出三类特征,包括
1,用户相关的特征:
a,年龄、性别、职业、兴趣、品类偏好、浏览/购买品类等基本信息
b,用户近期点击量、购买量、消费额等统计信息
2,item相关的特征:
a,所属品类、销量、价格、评分等基本信息
b,历史CTR/CVR等统计信息
3,用户-item匹配特征:浏览/购买品类匹配、浏览/购买商家匹配、兴趣偏好匹配等几个维度
不同的场景,item侧需要构建的特征大不相同,需要深入业务去进一步分析并构建,而用户侧特征相对会显得通用一些,比如用户属性特征(性别,教育程度,职业),比如用户兴趣特征(常购买3c产品,科幻电影爱好者),当然用户兴趣特征针对不同的场景也需要进一步细分。
分析到这里,作为数据中台这类支撑部门,为了给业务线提供公共的能力和数据,也就有构建用户相关特征这个工作方向了。
二、用户特征构建
用户特征包括用户属性特征、用户偏好特征和用户统计特征,为了更方便的使用,可以构建两种格式的特征数据(显示特征,隐示特征):
语义特征:即语义标签,是显示特征(如学历,职业等用户属性特征,如科技极客、省油的车、老人机等用户偏好特征)
embedding特征:是隐示特征,包括用户行为embedding(如浏览url向量,点击feed流向量等用户统计特征);也包括语义embedding(如语义标签向量化等用户偏好特征)
下面介绍具体的构建方法。
1、属性特征与偏好特征
1.1、语义特征
语义形式的特征也就是语义标签,包含用户属性特征和偏好特征,用户属性特征构建方法在这篇文章里就不详细介绍了,后面的文章会单独展开介绍,后续文章发布后会将链接附到这里,请收藏本文或关注本专栏留意文章更新。
构建用户偏好语义特征的大致思路是:构建标签体系-》item侧打标签-》item侧标签传导用户侧。
标签体系的建立,如图:
偏好特征即偏好标签,分为三个层面,分类,概念,实体关键词。分类层中包含购物,体育等一级分类,以及购物女装,体育排球等二级分类;实体关键词层中包含粒度最细的实体和关键词等,如梅西,奔驰,华为手机;概念层相对比较特殊,包含的标签有通过实体关键词抽象出来的概念标签,如省油的车,老人机等,也有通过分类层向下的又一个子类,如科技极客,总的来说概念层里的标签偏自然语义,相对抽象,也可理解为另一维度的分类。
分类-概念-实体关键词层级结构,如图:
基于标签体系,为item打标签,流程如图:
通过以上流程给item打上分类标签、概念标签和实体关键词标签,下面展开介绍分类标签、概念标签和实体关键词标签在技术上的具体实现:
1.1.1,分类标签
分类标签主要由人工定义,如上述提到的购物、体育等一级分类,购物女装、体育排球等二级分类。如果使用有监督学习方式训练多标签分类模型,则需要人工预先构建大量标注数据,这个代价是很高的,于是采用了上图的分类流程。
1)规则引擎
以搜索场景举例,需要对用户搜索点击的自然结果(url)分类,即对用户点击的网页分类。人工预先构建一些pattern,如某些一二级域名对应的一二级分类标签,将pattern放入规则库,起初构建的域名pattern可以对网页打上标签的覆盖度肯定是很低的,需要迭代的扩展出更多的pattern。人工分析已经分类出来的网页(以下以网页标题做介绍),从标题中提取固定句式,概念词和实体关键词,将这些固定句式,概念词和实体关键词添加到规则库里,此时规则库里有一二级域名pattern,固定句式pattern,以及概念词和实体关键词pattern,同时概念词和实体关键词可作为ner(命名实体识别)任务的训练语料,训练实体识别模型,预测所有网页标题,筛选出置信度高的实体和所对应的网页标题,实体可继续添加到规则库,网页标题可进一步提取固定句式加入到规则库。使用规则库进行第二轮网页标题打标签,规则库中的pattern会给更多的网页标题打上一二级分类标签,标签覆盖度会有一定比例的提升,进一步分析新打上标签的网页标题,提取固定句式,概念词和实体关键词,再继续给更多的网页标题打标签,以此迭代几轮就可以了,后续定期(月/季或者节日前后)执行以上流程补充新的pattern即可。
2)有监督分类
以上通过规则匹配出的网页标题可作为初始的样本数据去训练多标签分类模型,上面提到的从网页标题中提取出的概念词和实体关键词作为特征,使用fasttext模型为网页标题预测标签,借助主动学习(active learning)的思想,将预测出的高置信度标签添加到样本数据扩大样本,进行第二次训练,将预测出低置信度标签的网页标题交给人工,重新标注后添加到样本数据中进行第二次训练。同样迭代多轮后,模型准确率提升至符合业务需求即可。
3)无监督相似度计算
对于输入的网页标题,使用规则和有监督分类的方式都无法准确打上二级标签的情况下,可以进一步采用无监督的方式给标题打二级标签。初步做法可以将二级标签词向量化,与标题计算相似度,相似度的值即为该标题属于某个二级标签的置信度,该方法简单有效,但精度不高。接下来可以使用LDA主题模型或者ABAE模型为二级标签泛化出相关的实体关键词,将这些实体关键词词向量化后做pooling处理,然后再与标题计算相似度,该方法可以提升一定的精度。另外也可在上一种方法的基础上,使用WMD模型以计算短文本相似的方式计算标题与二级标签的相似度。由于这三种方法都是对网页标题和二级标签计算相似度,所以标题和每个二级标签都会有一个cosine值,需要设置一个阈值过滤掉一些标签,保留下来的就是网页标题最终的二级标签。
1.1.2,实体关键词标签
实体关键词的来源包括人工收集、头部query(和部分腰部query) 和模型识别,上文标签分类的规则中便使用到了模型识别的部分高置信度结果。
人工收集不必多讲,主要就是基于业务场景,人为的定义一些实体关键词,数量有限,但是足够准确,可以作为模型训练的样本数据。头部腰部query的获取也需要从业务出发,从统计出来的query中筛选出和业务场景有关的数据。这两部分数据都可作为模型训练的样本数据,对于实体的抽取,目前采用的是bilstm+crf模型,输入采用BIOSE标注集,这个结构比较成熟了,网上有很多讲解,这里不做过多介绍。关键词抽取基本采用的是无监督学习的方法,简单有效的做法是对网页标题切词并提取关键词,有很多封装好的工具可以使用,细节在于要对结果数据做一定的清洗。同时可以取头部query对应的网页文本数据,选取质量高的文本内容训练LDA,输出文章最大主题下的最大概率的top k个词。
1.1.3,概念标签
概念标签的来源同实体关键词一样,人工可以预先定义一些,除了数量少之外还存在一个不足,人工很难从真实用户的视角定义概念标签,大部分更像是名词短语,如中大型suv,拍照手机,偏光眼镜等,而用户更感兴趣的是省油的车,颜值高的suv,爆款口红和明星款太阳镜等,所以概念标签的生产更多的要从用户行为数据出发。概念挖掘的流程和上文标签分类中规则引擎流程类似。
1)模型识别
从第一版规则分类出来的网页标题中人工提取概念标签,作为种子概念标签,同样转化为序列标注问题,输入采用BIOSE标注集,bilstm+crf模型预测更多的概念标签。
在搜索场景中,基于大量的用户query搜索点击日志统计出头部和部分腰部query,聚类(一级或者二级分类数可作为聚类类别数),将每一类中的top k的query作为概念标签。
2)规则匹配
同样基于头部和部分腰部query数据,以及对应的网页标题数据,另一种方法是提取query与网页标题中共有的n-gram作为概念标签。
1.2、embedding特征
基于用户对item产生的行为,将item语义标签传导到用户身上,如图:
对于语义标签,人们能很方便地理解每个标签含义,展示到产品中可以提升用户体验,在推荐场景应用可增加推荐系统的可解释性。但是语义标签毕竟是通过无监督或有监督模型学习出来的,会损失一定的精度,为了更完整的保留用户行为信息,并使得无需再做处理就能应用到算法模型中,构建用户行为向量特征也是很有必要的。
例如用户的浏览网页行为,或者用户打开app行为,可构建近7天、近30天等短期、长期用户行为向量特征;例如搜索场景中,用户语义标签向量化,可以很方便的和候选query计算相似度作为交叉特征使用。
2、统计特征
用户购买金额,购买商品数量,点击量,消费额等特征,也可以按时间窗口以长期、中期、短期统计,针对特定业务场景,还需要统计周期性的特征,如每年的各种节日前后,或者每年重大事件前后等,用户表现出的特征是有规律的。
三、用户特征应用
广告场景--广告定向投放
以语义标签举例,当广告进行初次投放时,广告主可以通过选择用户标签来选择初始用户,当web服务端发来广告请求时,系统根据该广告位的页面标签或者用户标签,从广告索引列表中查找符合条件的广告(粒度到素材级别)。
广告索引列表是指当前参与投放的广告与预定用户标签之间的映射关系。有些用户标签可能会对应多个广告,或者同一用户不同维度的标签也可能会对应不同的广告。于是会出现多个广告主抢一个广告位的局面。广告与用户标签的对应数据来自于广告投放客户端。
广告主通过选择用户标签进行人群定向投放是广告定向投放的其中一个策略,效果评估主要分为两种,离线验证用户标签构建准确率和覆盖率,在线AB测试实际投放效果。
个性化推荐--召回
以语义标签举例,对用户侧和item侧都建立语义标签,那么在推荐场景中,用户的标签与item的标签match上,那么该item便可以作为候选推荐结果了。match可以分为两种情况:
1、单标签匹配,即使用实体关键词匹配 此类场景中是直接使用最细粒度的实体关键词标签作为召回的有效标签(如梅西,奔驰,华为手机,王宝强,xc60,配置,马蓉等),这种方式简单、粗暴,且召回结果丰富,不存在召回结果为空的情况。但具体要用哪些标签需要从实际业务出发。使用最细粒度的标签召回也存在明显的不足,一方面是因为部分实体关键词标签不能完整表达用户兴趣,如“王宝强”和“马蓉”这两个标签是作为两个兴趣点表达用户的,而用户可能对“王宝强马蓉离婚”这个感兴趣;另一方面,实体关键词标签仅刻画了用户是什么和item是什么,而没有解决“为什么”这个背后的逻辑,如用户身上的“xc60”这个标签只会匹配到和xc60相关的item,而不会理解用户其实是对沃尔沃这个品牌感兴趣,或者不能理解用户其实是对车的安全性有要求。
2、组合标签召回 上面说的单标签虽然召回结果丰富,但表达用户完整的兴趣欠缺,并且也不能较好的理解用户,于是就有了组合标签召回。 我们的标签是分了多层的,组合标签召回可以是实体关键词层标签组合(如王宝强马蓉,即将两个单一的兴趣点组合为一个,会偏向召回同时包含“王宝强”和“马蓉”的item,比如一篇王宝强马蓉离婚的报道文章)、分类层标签顺序组合(如视频-视频搞笑,会召回包含视频搞笑的item,也会召回和视频相关的其他item),也可以多层组合(如论坛-论坛汽车-安全性好的suv-沃尔沃suv-xc60,除召回xc60相关item外,也会召回沃尔沃其他系列车型,除此之外还会召回和安全性能好有关的item,更全面更深层次的理解用户兴趣),还可以将用户基础属性标签与用户偏好标签进行组合等,具体组合类型及组合的深度可通过产品特性和业务特点大家自己去发现和探索。即使不做太多优化,组合标签召回的效果也比单标签好很多,同时也会提高召回的多样性。
个性化推荐--排序
语义标签和向量特征都可以使用在推荐排序中,这里需要根据排序模型使用的不同分别介绍语义标签和向量特征的使用方式。
1、人工特征工程+LR
LR 算法简单有效,但为线性模型,不能捕捉到非线性信息,需要大量人工特征工程找到特征组合,我们利用用户语义标签、item语义标签,计算多种相似度,作为<用户,item>相关性的交叉特征,根据特征重要性排序,最终选取最优的top k个组合特征。将用户语义标签,item语义标签和用户-item二阶组合特征一起给 LR 进行训练,输出结果。
2、GBDT/XGBoost+LR
这里会将用户向量特征、用户统计特征输入XGBoost,将叶子节点和方法1提到的特征concat后作为LR的特征,训练LR,最终输出结果。
3、FM/FFM
相比较LR而言,fm主要解决了特征交叉的问题。对于分类标签或者概念标签,用户和item的覆盖度较高,而实体关键词标签虽然量级大,但是平均打到用户和item上就表现的较为稀疏,利用fm可以在训练数据中很少或者没有出现过特征组合的情况下仍能学到单一特征的隐向量,通过隐向量的内积提取特征组合,即也解决了在高度稀疏的情况下特征之间的交叉仍然能够估计,而且可以泛化到未被观察的特征交叉。在实际业务中,我们仍将用户向量特征和用户统计特征等连续型值输入XGBoost,将叶子节点和方法1提到的离散型特征concat后输入fm得到结果。ffm是在fm基础上改进得来的,这里就不过多介绍了。
4、DNN(wide&deep、DeepFM、PNN、DIN)
实际业务使用的是DIN模型,用户侧构建了近7天,近15天,近30天和近90天的用户行为向量特征,作为定长序列特征和候选item做注意力,当然用户点击item和item类别等用户行为特征和候选item做注意力这些步骤和DIN论文中介绍的是保持一致的。最后,concat用户侧的语义标签one-hot特征输出结果。实际业务中还预先构建了用户侧近7天,近15天,近30天和近90天的用户行为向量特征与候选item计算相似度(向量内积或者cosθ)的交叉特征,加到模型中作为用户侧特征去使用,也有效果的提升。
总结
用户侧特征可以在很多业务场景中应用,显然针对不同的业务场景单独去构建特征效果会更好,但如果从公司全局的数据集出发,构建通用的用户特征,不但能丰富各业务可利用的信息,还能全面的理解用户,带来用户体验的提升。这是一个愿景,也是现阶段的一个总结,想要达到节省人力和不浪费数据资源,用户侧特征构建还要走很长的路,也许随着DNN的进一步发展,以后数据全交给模型端到端的输出结果就可以了。
这里是「非科班出身的机器学习工程师成长之路」 的第一篇文章。
认为文章有价值或者想进一步交流的同学欢迎评论和私信,谢谢。
参考资料:
Bidirectional LSTM-CRF Models for Sequence Tagging
A User-Centered Concept Mining System for Query and Document Understanding at Tencent
https://blog.csdn.net/lilyth_lilyth/article/details/48032119