杂:向量空间与推荐系统
我们经常会有这样的需求:向用户推荐相似的商品,向用户推荐相似的歌曲或者向用户推荐用户购买商品后相互配合的商品。常规做法是通过维护一个关系表,将各个项目之间的关系存储起来,在用户进行某项操作之后推荐给他。
推荐系统的核心在于 “理解用户兴趣,预测用户偏好”。
向量空间
要解决此问题最原始的做法是协同过滤 (CF),利用用户-物品交互矩阵(“物以类聚,人以群分”)为用户维护一个向量空间,记录用户的每个偏好项目(商品、歌曲等等),为每个项目维护一个向量空间,记录其他项目与该项目的关系。如果要实现项目之间的相互配合推荐(比如剃须刀和剃须膏)还需要配合知识图谱(Knowledge Graph)。
每个用户在同一时间段感兴趣的商品是不一样的:
用户\商品 | 剃须刀 | T恤 | 卫生巾 | 《TCP/IP协议详解》 | 《小时代》 | 玻璃试管 |
---|---|---|---|---|---|---|
A | 5 | 4 | 0 | 3 | -1 | 0 |
B | 4 | 5 | 0 | 0 | -3 | 5 |
C | 0 | 3 | 5 | 0 | 4 | 0 |
D | 1 | 1 | 1 | 1 | 1 | 1 |
E | 0 | 0 | 0 | 0 | 0 | 5 |
商品和商品的关联式不一样的:
商品\商品 | 剃须刀 | T恤 | 卫生巾 | 《TCP/IP协议详解》 | 《小时代》 | 玻璃试管 |
---|---|---|---|---|---|---|
剃须刀 | 10 | 5 | 3 | 1 | 0 | 1 |
T恤 | 3 | 10 | 2 | 0 | 0 | 0 |
卫生巾 | 2 | 3 | 10 | 0 | 5 | 0 |
《TCP/IP协议详解》 | 1 | 1 | 0 | 10 | -1 | 0 |
《小时代》 | 0 | 1 | 5 | -1 | 10 | 0 |
玻璃试管 | 1 | 1 | 0 | 0 | 0 | 10 |
我们很容易用矩阵,有向有权图来表示上面的向量空间。有了结构之后,那么就需要做推荐系统最关键的步骤:用户分类找到相似用户,项目分类找到相似的项目,然后将相似的项目推荐给兴趣近的用户。
用户分类
我们通过用户感兴趣的项目的相似度来判断用户的兴趣是不是相近的。首先搜集用户对每件商品的兴趣程度,比如:
查看详情 | 点击收藏 | 点击不感兴趣 | 下单 | 详情停留时间大于10秒 | 查看店铺 |
---|---|---|---|---|---|
+2 | +3 | -10 | +2 | +2 | +2 |
我们搜集到数据之后就有了上面的表格。
我们可以通过计算向量空间里面两个向量的欧几里得距离来计算用户与每个其他用户的相似度,比如:
A = (5,4,0,3,-1,0)
B = (4,5,0,0,-3,5)
AB = √((5-4)^2+ (4-5)^2 + (0-0)^2 +(3-0)^2 + (-1-(-3))^2 + (0-5)^2) = √40
值越小,说明口味越接近。那么我们就可以将其他相似用户感兴趣的项目推荐给他。
项目分类
我们可以对不同的项目进行标签分类,然后将推荐不同用户,只要该用户查看过相似标签的项目。这是视频平台推荐的基本推荐方案,和上面的表格类似。
商品\商品 | 剃须刀 | T恤 | 卫生巾 | 《TCP/IP协议详解》 | 《小时代》 | 玻璃试管 |
---|---|---|---|---|---|---|
剃须刀 | 10 | 5 | 3 | 1 | 0 | 1 |
T恤 | 3 | 10 | 2 | 0 | 0 | 0 |
卫生巾 | 2 | 3 | 10 | 0 | 5 | 0 |
《TCP/IP协议详解》 | 1 | 1 | 0 | 10 | -1 | 0 |
《小时代》 | 0 | 1 | 5 | -1 | 10 | 0 |
玻璃试管 | 1 | 1 | 0 | 0 | 0 | 10 |
我们也可以围绕用户来进行评价收集信息,然后对口味相近的用户对不同项目的评价进行计算欧几里得距离,距离越近,说明项目越相似,就可以推荐给相同的人群。
商品\用户 | A | B | C | D | E |
---|---|---|---|---|---|
剃须刀 | 5 | 4 | 0 | 1 | 0 |
T恤 | 4 | 5 | 3 | 1 | 0 |
卫生巾 | 0 | 0 | 5 | 1 | 0 |
《TCP/IP协议详解》 | 3 | 0 | 0 | 1 | 0 |
《小时代》 | -1 | -3 | 4 | 1 | 0 |
玻璃试管 | 0 | 5 | 0 | 1 | 5 |
推荐系统
graph LR
A[原始日志] --> B[行为数据采集]
B --> C[特征工程]
C --> D[样本构造]
D --> E[负采样]
现代推荐系统是一个复杂的工程,上面的方案由于项目最初阶段数据不足本身需要人工提前为用户和项目打标,冷启动时间很长。
现代推荐系统是人工智能的统治区,是人工智能应用最成功的一个领域。
工业级推荐系统通常采用 “多级漏斗”架构:
召回层(千级候选集)→ 粗排层(百级精简)→ 精排层(精准打分)→ 重排层(多样性调整)
每层选用不同算法(如召回用双塔,精排用DeepFM),兼顾效果与性能。