推荐系统三十六式-原理篇·内容推荐 | 4.画鬼容易画人难:用户画像的“能”和“不能”

做好一个推荐系统,总共分三步:

  1. 认识每一个用户
  2. 给他推荐他感兴趣的东西
  3. 坐等各项指标上升

开个玩笑,如果这么简单的话,那么你和我都要失业了;但是话说回来,认识用户是必须的,不过不用担心,认识用户不用请他们吃饭,这就是我们常常听说的“用户画像”这个词。今天,我们就来聊一聊:用户画像的那些事儿。

用户画像比较抽象,就像每个人都听说过鬼,但很少有人见过。事实上,它也没有那么神秘,只是大家对它有误解,要么觉得没什么用,要么觉得它是“银弹”,可能相信后者的人略多一些,但实际上这两种看法都不准确。

什么是用户画像

先说说“用户画像”这个词,它对应的英文有两个:Personas 和 User Profile。Personas 属于交互设计领域的概念,不在本文讨论范围内,请出门右转去找交互设计师们聊,留下来的人,我们聊聊 User Profile 这种用户画像。

User Profile 原本用于营销领域。营销人员需要对营销的客户有更精准的认识,从而能够更有针对性地对客户和市场制定营销方案。这个理念本身没有错,但是有一个问题:传统营销领域,是以市场销售人员为第一人称视角去看待客户的,也就是用户画像为营销人员服务。在这种用途下谈论的用户画像,和我们即将在推荐系统领域谈论的相差有点大;但是很遗憾,今天在媒体上看到的大多数“用户画像”案例分享,都停留在这个意思上。比如最常见的用户画像出现在高大上的 PPT 上:用标签云的方式绘制一个人的形状,或者在一个人物形象旁边列出若干人口统计学属性,以此来表达“用户画像”这个概念。看上去非常酷炫,但是我得悄悄告诉你一个赤裸裸的真相:越酷炫的用户画像越没什么用。

为什么会这样?根本原因是:用户画像应该给机器看,而不是给人看。

既然是给机器看的,那么画像是不是酷炫、是不是像、维度是不是人类可读,都不重要。那它到底是个什么样子呢?

一个推荐系统来到这个世界上,它只有一个使命,就是要在用户(User)和物品(Item)之间建立连接。

一般方式就是,对用户和物品之间的匹配评分,也就是预测用户评分或者偏好。推荐系统在对匹配评分前,则首先就要将用户和物品都向量化,这样才能进行计算。而根据推荐算法不同,向量化的方式也不同,最终对匹配评分的做法也不同,在后面讲到具体推荐算法时你会看到这一点。用户向量化后的结果,就是 User Profile,俗称“用户画像”。所以,用户画像不是推荐系统的目的,而是在构建推荐系统的过程中产生的一个关键环节的副产品。另外,通常大型推荐系统一般都分为召回和排序两个阶段,这个在后面会专门讲到。因为全量物品通常数量非常大,无法为一个用户(User)逐一计算每一个物品(Item)的评分,这时候就需要一个召回阶段,其实就是预先筛选一部分物品(Item),从而降低计算量,用户画像除了用于最终匹配评分,还要用在召回。所以,构建用户画像就要以这两个阶段为目的。

用户画像的关键因素

举个例子,我想去吃点夜宵,楼下有五家大排档,那么从推荐系统的思路来看,我怎么选择呢?

首先就是将五家大排档向量化,我暂定向量的维度有:

  1. 价格,1-5 分,最贵的 1 分,最便宜的 5 分
  2. 种类,1-5 分,只烤馒头片的是 1 分,天上飞的、海里游的、地上跑的、地里种的都有就是 5 分
  3. 味道,1-5 分,根据以前吃的,最难吃的是 1 分,最好吃的是 5 分

现在每一个大排档都有一个向量,我自己也要有一个对应的向量,就是你有多看中这三个元素:

  1. 价格: 1-5 分,土豪不差钱就是 1 分,囊中羞涩就是 5 分
  2. 种类: 1-5 分,早就想好吃什么了不在乎选择多不多 1 分,看看再说就是 5 分
  3. 味道: 1-5 分,只是果腹就是 1 分,资深吃货就是 5

这样一来就可以对五家大排档做匹配打分了,你很容易得出哪家大排档最适合。假如我的向量是:

  1. 价格: 3
  2. 种类: 5
  3. 味道: 5

这就是一个大排档推荐系统的简单用户画像了,是不是很简单!这里只需要简单计算一下:每一个因素相乘后再相加,就得到每一个大排档的评分了。

接下来我们来围绕这个大排档推荐系统的用户画像,看看建立用户画像的关键因素:第一个是维度,第二个是量化。首先先来说说“维度”。看前面这个例子,我定下来的几个维度:价格、种类、味道。这几个维度有三个特点:

  1. 每个维度的名称都是可理解的: 当我们去给每一个大排档计算评分时,想象你是一台计算机,你读取了用户画像的“价格”取值为 3,再去取出一个大排档的“价格”评分,两者相乘,用户画像的维度“价格”和大排档的“价格”天然匹配上了。这里的关键就是”匹配”。比如我们将用户向量中的”价格”改为”价钱”,虽然人是能知道二者是同一个意思的,但是机器很傻,它就不知道该如何是好了。另一方面,对这三个维度,把两边同时换成 1、 2、3 或者 a、b、c 都是可以的,也不影响计算结果,计算机依然能够匹配上;所以用户画像的维度不一定需要人类能够理解,只要计算机能把两边对应上就可以了。所以这一点不是必须的
  2. 维度的数量是我拍脑袋定的: 假如是根据用户的阅读历史挖掘阅读兴趣标签,那么我们无法提前知道用户有哪些标签,也就不能确定用户画像有哪些维度,所以第二点也不是必须的
  3. 有哪些维度也是我拍脑袋确定的: 这一点也不是必须的,用户画像的维度个数可以不用确定。理论上来说维度越多,画像越精细,但带来的计算代价也是很大的,需要权衡

总之,这3点都不是必须的。此外,虽然这里以标签作为例子,但是要注意的是,用户画像是向量化结果,而不是标签化。标签化只是向量化的一种,因为向量的维度不一定需要人理解。

然后,我们再来说说量化。

我们这里的量化都是主观的,而在实际生产系统上,用户画像每个维度的量化,应该交给机器,而且以目标为导向,以推荐效果好坏来反向优化出用户画像才有意义,像这里这个简单的例子,没有去管推荐效果而先行主观量化了每一个维度,是大忌。所以用户画像的量化是和第三个关键元素“效果”息息相关的。前面已经说过,不要为了用户画像而用户画像,它只是推荐系统的一个副产品,所以要根据使用效果(排序好坏、召回覆盖等指标)来指导用户画像的量化。

用户画像构建的方法

再来整体说说怎么构建用户画像,按照对用户向量化的手段来分,用户画像构建方法分成三类:

  1. 查户口: 直接使用原始数据作为用户画像的内容,如注册资料等人口统计学信息,或者购买历史,阅读历史等,除了数据清洗等工作,数据本身并没有做任何抽象和归纳。这就跟查户口一样,没什么技术含量,但通常对于用户冷启动等场景非常有用
  2. 堆数据: 方法就是堆积历史数据,做统计工作,这是最常见的用户画像数据,常见的兴趣标签,就是这一类,就是从历史行为数据中去挖掘出标签,然后在标签维度上做数据统计,用统计结果作为量化结果。这一类数据贡献了常见的酷炫用户画像
  3. 黑盒子: 就是用机器学习方法,学习出人类无法直观理解的稠密向量,也最不被非技术人员重视,但实际上在推荐系统中承担的作用非常大。比如使用潜语义模型构建用户阅读兴趣,或者使用矩阵分解得到的隐因子,或者使用深度学习模型学习用户的 Embedding 向量。这一类用户画像数据因为通常是不可解释的,因此不能直接被人看懂。我们会在后面专门讲解这些技术手段,以及它们在推荐系统中的实际使用

总结

现在总结一下本文的内容:

  1. 用户画像到底是什么?它是对用户信息的向量化表示,为什么不向量化表示不行呢?因为没办法交给计算机计算,而且,用户画像是给机器看的,而不是给人看的
  2. 用户画像的关键元素有哪些?维度、量化。用户画像是跟着使用效果走的,用户画像本身并不是目的
  3. 通常构建用户画像的手段有哪几类?有三类,第一类只会查户口做记录,第二类就是堆数据做统计,第三类就是黑盒子看不懂