一、用户画像简介
画像是一种人类可理解的、机器可读写的,对用户的结构化描述。它不仅可以提供个性化服务,还在企业的战略决策和商业分析中发挥了重要作用。
1. 画像的分类
画像可以根据数据来源分为社会通识类和领域知识类。社会通识类画像又可以按照时间维度划分成静态类和动态类,最常见的静态类社会通识画像包含人口统计学特征,比如性别,户籍,毕业学校等,这些内容在相当长一段时间窗口里都是相对静态的,除了画像用到它,人口统计学、人类学和社会学当中也常会用到。动态社会通识类画像则更为重要,也称为人生阶段画像,举个电商的例子,人的收入会随着职业发展不断变化,其购物倾向也会发生变化,所以这些人生阶段的画像是非常有实用价值的。
除了上述通识类画像,企业内部可能更多的是去构建领域知识类画像。领域知识类画像从时间的维度上面可以分成半静态和动态,进一步可细分为长期性、周期性、短期性和未来属性的画像,这些时间维度画像又和概念领域是纠缠在一起的,概念领域包含了行为模型、兴趣模型和意图模型。
行为模型主要是跟踪用户周期性行为,比如用户每天早上通勤时间会做什么、晚上下班以后会做什么、周中工作日会做什么、周末会做什么等一些周期性行为。兴趣模型则是对领域知识内的标签进行一定的联合建模与排序,比如用户和APP 等平台产品进行交互后可以得到一些操作日志,日志可以关联解析出结构化、标签化的一些数据,我们可以把它们分门别类,同时赋予一定的权重,最终排序形成一定的兴趣画像。需要注意的是意图模型更多的是未来式的,是对用户未来意图的预测。但是在新用户还没有进行交互的时候,如何提前预知其可能的意图呢?这个问题就更偏向于实时的、未来的画像,也对画像数据的整体基建结构有着更高的要求。
2. 用户画像基础应用架构
了解了画像的概念以及大致分类后,再来简要介绍一下用户画像的基础应用框架。整个框架可以分为四个层次,首先是数据收集,其次是数据预处理,再次是基于这些处理好的数据进行画像的构建和更新,最后就是应用层,在应用层定义一个使用协议,让下游各种各样的应用能够比较便捷地、快速地、高效地去使用画像。
从这个框架中我们可以发现,用户画像应用以及用户画像算法需要懂得的内容特别的广、特别的杂,因为我们面对的不只是简单的、标签化的、文本类的数据,还有各种多模态的数据,可能是音频、视频或者图文,需要通过各种预处理手段才能得到高质量的数据,然后构建出更置信的画像。这里会涉及到数据挖掘、机器学习、知识图谱、统计学习等各个方面。用户画像与传统搜推广算法的不同之处是,我们需要和领域专家密切合作,才能不断在迭代和循环中构建更高质量的画像。
二、基于本体论(Ontology)的传统用户画像
在对用户画像的概念有了大致了解后,接下来看一下在早期,非深度学习时代,用户画像是怎样建立的。
在早期,用户画像主要依赖于知识图谱,知识图谱源于本体论(Ontology)的概念。而本体论,则属于哲学范畴。首先本体论的定义和画像的定义非常相似,就是人类可理解、机器可读写的一个概念系统。当然这个概念系统本身的复杂程度可以非常高,它是由实体、属性、关系和公理组成的。基于 Ontology 的用户画像,它的好处是便于对用户及内容进行分类,并且方便生产出可供人类直观理解的数据报告,再根据报告的相关结论进行决策,这也是为什么非深度学习时代会选择这一技术形态。
接下来介绍一下 Ontology 中一些基本的概念。要构建一个 Ontology,首先要把领域知识进行概念化,也就是构造实体、属性、关系和公理,并处理成机器可读取的格式,比如 RDF 和 OWL。当然,也可以用一些比较简单的数据格式,甚至可能是把 Ontology 退化为关系数据库或者图数据库可存储读写和分析的格式。这种画像的获得方式,一般都是通过领域专家构建,或者基于已有的一些行业标准,去进行丰富和细化。比如淘宝采用的商品标签体系其实也是借鉴了国家对于各种各样的制造商品行业的公开标准,并在这个基础之上丰富和迭代的。
下图是一个非常简单的 Ontology 的例子,其中包含了 3 个节点,图里面的实体是文娱领域的一个兴趣标签,比如在奈飞等平台里面有很多电影,每个电影都有唯一的 ID 标识,然后每个电影又有自己的属性,比如标题、主演,这个实体同时又属于犯罪题材系列,而犯罪系列又属于动作电影里的子类。我们根据该可视化的图去写成如下图右边的 RDF 文本文档,在该文档里除了前面我们能够直观理解的实体属性关系外,还定义了一些公理,比如里边约束了“has title”只能作用于电影这个基本概念域,如果有其他概念域,比如用电影的导演作为实体去构建到 Ontology 里面的时候,电影导演就不能拥有“has title”的属性了。以上就是关于本体论的一些简单介绍。
在基于本体论去做用户画像的早期时代,会用类似 TF-IDF 的方法对构建出来的结构化标签计算权重。TF-IDF 以往主要用于搜索领域或文本主题领域,主要是对某个搜索词或者主题词的权重进行计算,应用到用户画像里面只需稍微加点限制和变形即可,比如上个例子中的 TF 就是去数一下用户观看该类标签的电影或者短视频的数量,IDF 则是先统计用户每一类标签下的观影或短视频数量和所有历史观看总量,再根据图中公式计算 IDF 和 TF *IDF。TF-IDF 的计算方式非常直且效果稳定,同时也可解释、好用。
但它的缺点也很明显:TF-IDF 对标签颗粒度非常敏感,但是又对 Ontology 结构本身是不敏感的,它可能会存在过度强调冷门兴趣而导致平凡解的情况,比如用户只偶尔看了某一个标签下的某一个视频,TF 会非常小,IDF 会特别大,TF-IDF 有可能会变成一个和它的热门兴趣接近的值。更重要的是,我们需要随着时间维度进行更新、调整用户画像,而传统的 TF-IDF 方法不太适合这种情况。因此,研究人员提出了新的方法,基于本体论的结构化表达直接构建用户带权重的画像以满足动态更新的需求。
该算法从 Ontology 的叶子类目开始,使用用户在对应标签下的媒体消费行为来更新权重,权重初始化为0,然后根据用户行为定义的 fbehavior 函数进行更新。fbehavior 函数会根据用户消费的不同程度,给予不同的隐式反馈信号,例如电商领域的点击、加购和下单,或者视频领域的播放和完成度。同时对不同的用户行为我们也会给予不同强度的反馈信号,比如电商消费行为里,下单>加购>点击,视频消费里,更高的播放完成度、更高的播放时长等也会设置更强的 fbehavior 值。
叶子类目标签权重更新后,需要更新父类权重,需要注意的是更新父类时需要定义一个小于1 的衰减系数。因为,如图所示,用户可能对“战争”中的“二战”这个子类目感兴趣,但是对其他战争题材不一定感兴趣。这个衰减系数可以作为一个超参数进行自定义,这样定义是强调每个子类兴趣对父类贡献的平等性,也可以用子类标签数的倒数来作为衰减系数,这样更多的强调小众的兴趣,比如某些大型父类节点包含的子类主题广泛且关系不紧密,它们之间的受众面取决于作品数量,通常情况下这种作品数量会非常非常多,衰减速度可以适当设置快一点,而较小的分类别标签可能是一些小众兴趣,作品也不多,子类主题间的关系会比较紧密,衰减速度可适当设置小一点。总之,我们可以根据 Ontology 中定义的这些领域知识属性来设定衰减系数。
以上方式可以做到结构化标签的更新效果,也基本上能够打平甚至超越 TF-IDF 效果,但是它缺少一个时间尺度属性,即怎样构建一个对时间尺度更敏感的画像。
我们首先想到可以对权重本身的更新去做进一步调整。当需要区分长短期用户画像时,可以在权重上添加一个滑动窗口,并定义一个时间衰减系数 a (0-1之间),滑动窗口的作用是只关注窗口期内的用户行为,对窗口前的进行丢弃,原因是用户的长期兴趣也会随着人生阶段的变化而进行缓慢变化,比如用户可能会喜欢某一类题材的电影一两年,之后就不喜欢了。
此外,大家也可能观察到这个公式和带动量的 Adam 梯度更新方式有异曲同工之妙,我们通过调节 a 的大小让权重的更新在一定程度上更侧重于历史或者当下。具体来说,当给一个较小的 a 时,会更侧重于当下,然后历史积累会有较大的衰减。
以上的方法论都局限在用户已经接收到了的信息里,但我们通常情况下也会遇到大量的标签丢失的情况,以及用户冷启动或者在用户可能没有接触到这一类内容但不代表用户不喜欢的情况。在这些情况下就需要进行兴趣补全和兴趣推断了。
最基础的方法就是借用推荐系统中的协同过滤进行画像补全,假设有一个标签矩阵,横轴是用户,纵轴是各个标签,这个超大规模矩阵里面的元素就是用户对于这个标签的兴趣,这些元素可以是 0 或 1,也可以是兴趣权重。当然也可以改造这个矩阵,使其适应人口统计学的画像,比如可以将标签表达成是否是学生,或者是否是职业者,或者哪种职业等,也可以用一种编码方式去构造这个矩阵,同样也可以去应用矩阵分解的方式去得到矩阵分解,然后补全缺失的特征值,这个时候优化目标如下图中的公式。
在这个公式里可以看到,原矩阵为 M,补全矩阵为 X,外加一个约束,这个约束是希望数值不缺失的地方,X 和 M 是尽可能接近的,同时也希望 X 是一个低秩矩阵,因为我们假设大量用户的兴趣是相似的,在这个相似用户的假设下,标签矩阵一定是低秩的,最后对这个矩阵做一个正则化,完成非负矩阵分解的目标。这个方法其实也可以用我们最熟悉的随机梯度下降的方法去进行求解。
当然,除了以矩阵分解的方式进行缺失属性或兴趣的推断,也可以使用传统机器学习的方法。还是假设相似的用户会有相似的兴趣,这时就可以用 KNN 分类或回归的方式去进行兴趣推断,具体做法为,建立用户近邻关系图谱后,将用户近 k 个近邻里面最多的标签或者标签权重均值赋值给用户缺失的属性。近邻关系图可以是自己构建的,也可以是现成的近邻图结构,比如社交网络的用户画像,或者 B 端的企业画像--企业图谱。
以上就是关于 Ontology 构建传统画像的介绍。传统画像构建算法的价值在于其非常简单、直接、易于理解,且容易实现,同时其效果也不错,因此并不会完全被更高阶算法替代,尤其是当我们需要对画像进行 debug 时,这一类传统算法会具有更大的便捷性。
三、画像算法&深度学习
1. 深度学习算法之于画像算法的价值
进入深度学习时代后,大家希望结合深度学习算法进一步提升画像算法的效果。深度学习之于画像算法到底有哪些价值?
首先肯定是有更强大的用户表征能力,在深度学习以及机器学习领域,有一个专门的门类--表征学习,或者是 metric learning,这种学习方法可以帮助我们去构建非常强大的用户表征。其次是更简单的建模流程,我们可以利用深度学习端到端(end to end)的方式简化建模流程,很多时候只需要构造好特征,做一些特征工程,然后把神经网络当成黑盒将特征输入进去,并在输出端定义好标签或者其他的监督信息,而无须关注其间的细节。
再次,深度学习在强大的表达能力基础上,我们也在很多任务上面得到了更高的准确度。接着,深度学习还可以将多模态的数据统一建模。传统算法时代我们需要在数据预处理上耗费大量精力,比如上文提到的对视频类型标签提取需要非常复杂的预处理,先把视频切断,然后提取主题,再识别出其中的人脸,逐一打上对应的标签,最后再去构建画像。有了深度学习后,想要一个统一的用户或 item 表达时,可以端到端直接处理多模态的数据。
最后,我们希望在迭代中尽可能地降压成本。前文中提到画像算法的迭代和搜推广等其他类目的算法迭代的不同之处是需要很多的人工参与进来。有些时候最可靠的数据就是人去标注的,或者是通过问卷等方式收取来的数据,这些数据的获取成本是相当高的,那么如何以更低成本获得更有标注价值的数据呢?这个问题也在深度学习时代有了更多的思路和解决方案。
2. 基于深度学习的结构化标签预测
C-HMCNN 是对 Ontology 结构化标签进行预测的经典深度学习方法,它并不是一个 fancy 的网络结构,而是定义了一种适合标签,尤其是适合结构化的标签分类或预测的算法框架。
其核心是把层次化的结构化标签拍平再预测,如下图右侧所示,该网络直接给出 A\B\C 三个标签的预测概率,不需要考虑结构的层次、深度等。它的 Loss 公式设计也能够尽可能地惩罚违反结构化标签的结果,公式首先对叶子类目 B 和 C 用经典的交叉熵 Loss,对父类类目则用 max(yBpB,yCpC)来约束结构信息,只有在子类类目被预测为真时才预测父类类目 A,用 1-max(pB,pC)来表达,当父类类目标签为假时,强制子类类目的预测尽可能也接近于 0,从而实现对结构化标签的约束。这样建模的好处在于计算 Loss 非常简单,它对所有的标签一视同仁地进行预测,几乎可以无视标签树深度信息。
最后要提到的一点就是这个方法要求每个标签都是 0 或 1,比如 PB 只代表用户喜欢或者不喜欢,而不能设置成一个多分类,因为多分类的 LOSS 约束会比较难成立,所以该模型建模时相当于把所有标签全部拍平了,然后进行 0、1 预测。拍平可能带来的一个问题是,当标签树结构里父类标签有海量子标签时就会面临一个超大规模的多标签分类问题,一般的处理方式是用一些手段提前过滤掉用户很可能不感兴趣的标签。
3. 基于表征学习的 lookalike
在用户画像的应用环节,lookalike 这一思想经常被用到。在画像下游应用可以用 lookalike 去做广告潜在用户群的定向,也可以基于种子用户利用 lookalike找到一些缺失目标属性的用户,然后把这些用户相对应的缺失属性用种子用户去进行替换或表达。
Lookalike 的应用最需要的是一个强大的表征学习器,如下图所示,最常用的有三类表征建模方式。
第一种是多分类方式,如果我们有多种分类标签画像数据,可以在有监督信号的情况下学到更有针对性的表征,针对我们想要去预测的某一类标签进行预测所训练得到的表征对于定向的标签缺失预测非常有价值。
第二种是 AE( auto encoder) 范式,模型结构是一个沙漏形式,不需要关注监督信息,而只需要找到一种 encoding 模式,先把用户 encoding 出来,然后在中间细腰的地方做信息压缩并得到表征,这种范式在没有足够的监督数据时比较靠谱。
第三种是图范式,目前 GNN 和 GCN 之类的图网络的应用领域越来越广,在画像里面也一样,而且 GNN 可以基于最大似然的方法进行无监督训练,也可以在有标签信息的情况下进行有监督训练,并且优于多分类范式。因为图结构除了表达标签信息以外,还可以 embedding 进去更多图结构的信息。当没有显示的图结构的情况下,也有很多方式去构建图,比如电商领域的知名推荐算法 swing i2i,根据用户的共同购买或者共同观看记录构建二部图,这样的图结构也是有非常丰富的语义信息的,可以帮助我们学到更好的用户表征。当有了丰富的表征以后,我们可以选定一些种子用户去用最近邻检索进行扩圈,然后通过扩圈扩到的用户进行丢失标签的推断,或者 targeting。
在小规模的应用上面去做最近邻检索是很容易的,但是在超大规模的数据上面,比如有几亿月活用户的大平台上面,对这些用户进行 KNN 检索是一个非常耗时的事情,因此目前最常用的方式是近似最近邻检索,其特点是用精度换效率,在保证接近 99% 精度的同时把检索的时间压缩到原来暴力检索的 1/ 1000,1/ 10000,甚至 1/ 100000。
目前近似最近邻检索的有效方法都是基于图索引的向量检索算法,这些方法在当下的大模型时代被重新推向了一个高潮,也就是前段时间大模型里面最火的一个概念-- RAG(检索增强生成),检索增强对文本检索采用的核心手段就是向量检索,最常用的方法就是基于图的向量检索,最广泛应用到的方法有 HNSW、NSG 和 SSG,后两者的原版开源代码和实现链接也放在下图中。
4. 基于主动学习的画像迭代
在进行画像迭代的过程中,仍然有一些盲区是无法覆盖的,比如有一些低消费行为的用户画像还是没法很好地定位,最后很多方法还是会回退到人工收集方式。然而,我们有那么多低活用户,如果可以只在其中选择更有价值、有代表性的用户去进行标注,就可以收集到更有价值的数据,因此我们引入了主动学习框架,主动学习加上不确定学习实现低成本的画像迭代。
首先基于已有的标注的数据,训练一个带不确定性预测的分类模型,使用的方法是概率学习领域里面的经典方法--贝叶斯网络。贝叶斯网络的特点是预测的时候不仅可以给出概率,同时还可以预测出它对于这个预测结果的不确定性。
贝叶斯网络非常容易实现,如下图右侧所示,在原有的网络结构上面增加一些特殊层就可以了,我们在这些网络中间增加一些 drop out 层,去随机丢弃前馈网络的一些参数。贝叶斯网络包含多个子网络,其中每一个网络参数完全相同,但由于 dropout 层的特性,在随机丢弃时每个网络参数被随机丢弃的可能性是不一样的,在最后训练好网络进行推理的时候也保留 drop out,这和 drop out 在其他领域的应用方式不一样。其他领域只有在训练的时候 drop out,在推理的时候会应用全部参数,只是在最后计算 logit 和概率值时,对 drop out 带来的一个预测值的 scale 倍增情况做一个还原。
贝叶斯网络不同的地方是,在前馈推理的时候要保留所有的 drop out 随机性,这样每一个网络都会给出这个标签的一个不同的概率,然后对这一组概率求出均值,这个均值其实就是一种投票的结果,也是我们想要预测的概率值,同时对这一组概率值做一个方差的计算用来表达预测的不确定度。当一个样本经历了不同的 drop out 参数表达以后,最后得到的概率值是不一样的,概率值方差越大,代表学习过程中的概率确定性越小。最后就可以对不确定度高的标签预测样本进行人工标注,对确定度高的标签则直接采纳机器打标的结果。然后再不断回到主动学习框架的第一步进行循环,以上就是主动学习的基本框架。
5. 基于大模型世界知识的画像标注/预测
在大模型时代,还可以引入大模型的世界知识进行画像标注。下图举了两个简单例子,左边是用大模型对用户画像进行标注,将用户的观影历史按照一定序列组织起来,形成一个 prompt,会看到大模型能给出非常详尽的分析,比如该用户可能喜欢什么类型、什么导演、什么演员等等。右边是大模型对一个商品的标题进行分析,给出商品标题让大模型去推测其属于哪些类目。
到这里我们发现一个很大的问题是大模型的输出是非结构化的,是比较原始的文本表达,还需要一些后处理的过程。比如需要对大模型的输出进行实体识别、关系识别和规则挖掘、实体对齐等等,而这些后处理又属于知识图谱或者 Ontology 范畴里面的基础应用规则。
为什么用大模型的世界知识做画像标注会有更好的效果,甚至可以取代一部分人工?因为大模型是在广泛的开放网络的知识上进行训练的,而推荐系统、搜索引擎等只拥有自己封闭平台里的用户和商品库之间的一些历史交互数据,这些数据实际上是一些 ID 化的系统日志,其中很多相互关联的关系很难通过现有平台里的封闭知识进行诠释,但大模型的世界知识可以帮我们填补封闭系统所缺少的这部分知识,从而帮助我们更好地进行画像的标注或者预测。大模型甚至可以理解为一种高质量的对于世界本身的概念系统的抽象刻画,这些概念系统非常适合去做画像和标签体系。
四、总结与展望
最后简单总结一下用户画像目前存在的局限,以及未来的发展方向。
首要问题就是如何进一步提高现有画像的准确度。阻碍准确度提升的因素有以下几个方面,首先是从虚拟 ID 到自然人的统一,现实中一个用户有多个设备去登录同一个账号,也可能有多个端口、多个渠道登录,比如用户登录不同的 APP,但这些 APP 同属于同一个集团,我们是否可以在集团内部进行自然人的拉通,把所有的虚拟 ID 映射到同一个人,然后把它识别出来。
第二是对于家庭共享账户的主体人识别问题。这个问题在视频领域非常常见,尤其是长视频领域,我们经常会遇见一些 badcase,比如用户明明是一个 40 岁左右的成年人,推荐的却全是动画片,其实是一个家庭共用一个账号,每个人的兴趣是不一样的。针对这种情况,能否通过一些手段识别出当下的时间和行为模式,从而实时地、快速地去更新画像,然后确定当前的主体人到底是谁,再针对性地提供个性化的服务。
第三是多场景联动的实时意图预测。我们发现平台发展到一定阶段,其搜推广画像还是比较割裂的,比如有时候一个用户刚刚有踏入过推荐场景,现在准备搜索,我们是否可以根据刚刚推荐场景的实时意图给出一个更好的搜索推荐词,或者刚搜过一个东西,能否根据这个意图扩散,预测出用户可能想要看到的一些其他类目的东西,去做意图预测。
从封闭式的 Ontology 到开放式 Ontology 的过渡也是画像领域亟待解决的一个问题。在之前很长一段时间里采用的是一些比较固化的行业标准来定义 Ontology,但现在很多系统的 Ontology 是完全开放增量更新的,比如短视频平台,短视频的各种各样的标签本身是用户和平台在共同创作下不停自发生长、爆发的状态,有很多热词、热门标签,是随着时间的推进不停涌现的。如何在开放式的 Ontology 上提升画像的时效性,去掉噪声,然后去更多地探索和利用一些手段帮助我们提升画像的准确度,也是一个值得研究的问题。
最后,在深度学习时代,如何在画像算法里面,尤其是应用了深度学习的画像算法里面提升可解释性,以及如何更好地让大模型在画像算法中落地,这些都将是未来研究的方向。
以上就是本次分享的内容,谢谢大家!
五、Q & A
Q1:画像的处理和实际应用链路非常长,实际业务中采用 AB test 的验收效果可能会有很多问题,请问傅聪老师在画像的 AB test 方面有什么经验分享吗?
A1:画像的应用链路确实比较长。如果你的画像主要服务对象是算法,那确实从画像的精确度提升到传导下游的这些模型是有一个精确度的损失 gap。我其实不是特别建议做画像 AB test,我觉得可能更好的一个应用方式是去找运营人员,在用户圈选还有广告定投等这种偏运营性质的一些应用场景,比如大促的优惠券定向投放等场景上进行 AB Test。因为它们的效果是直接基于你的画像来施加影响的,所以可以考虑这种链路比较短的应用方合作线上 AB test。另外,我可能会建议除了 AB test 以外,也考虑一下另外一种 test 方式--交叉检验,给一个用户同时去推荐基于优化前后画像的排序结果,然后让用户去评估哪个更好。比如说我们现在可以看到的某些大模型厂商会让模型输出两个结果,然后让用户去决定哪个大模型产出的文本更好。其实类似这种交叉检验,我觉得可能效果更好,而且它和画像本身是直接关联的。
Q2:贝叶斯网络测试集上也有 drop out?
A2:不是说在测试集上有 drop out,而是说我们在测试推理的时候,依然会将网络里面的 drop out 的随机特性保留下来进行随机推理。
Q3:考虑隐私安全问题,在客户数据不能导出的前提下,如何利用大模型的成果。
A3:很坦诚地说,目前业界没有一个非常好的方案。但是可能存在两种方式,一种是考虑互信的第三方去做本地化大模型的推理部署。另外一种,也是最近的一种新概念叫做联邦网络,不是联邦学习,可以去看看联邦网络里所包含的一些可能性。
Q4:与大模型结合,除了标注方面还有其他的结合可以提一下吗?
A4:除了标注方面,还有用户的一些分析和推理。可以基于现有的画像,推测用户的下一次的意图,或者说把大量的用户数据汇集起来,用大模型的方式去分析一些地区性的,或其他约束限制下的用户模式。这个其实也是有一些开源 Demo,可以去探索一下这个方向。