内容推荐

用户画像  User Profile

基于内容推荐离不开用户画像。在推荐系统中,并不以市场销售人员的第一视角去看待用户(绘制标签云图像或者若干统计学属性),用户画像应该给机器看而不是给人看。

推荐系统在对匹配评分之前,要先对 user 和 item 都向量化才能进行计算,其中用户向量化的结果,就是 user profile。用户画像不是推荐系统的目的,而是构建推荐系统过程中的一个关键环节。

用户画像除了用户最终的匹配评分(ranking),还用于在此之前的召回阶段(candidate generation)

 

构建用户画像的两个关键因素:维度、量化

  1. 每个维度的实际含义都是可理解的;维度的数量并不确定;具体有哪些维度也不确定(要根据实际情况设计)

  2. 不要先主观量化每个维度(交给机器),应该以推荐效果的好坏为导向来反向优化用户画像

 

构建用户画像的方法:

  1. 查户口。直接使用原始数据作为用户画像的内容。比如注册的资料(人口统计学信息)、购买历史、阅读历史等。除了数据清洗,没有对数据本身进行任何抽象和归纳,没什么技术含量,但对于用户冷启动等场景有用。

  2. 堆数据。堆积历史数据做统计工作。比如兴趣标签,从历史行为数据中去挖掘出标签,然后在标签维度上做数据统计,用统计结果作为量化结果。

  3. 黑盒子。例如矩阵分解得到的隐因子、embedding 向量、潜在语义模型构建用户阅读兴趣。通常不可解释、不能直接被人看懂,但实际上在推荐系统中承担的作用非常大。

 

 

从文本数据中挖掘

文本数据是互联网产品中最常见的信息表达形式,数量多、处理快、存储小,构建用户画像中常用文本挖掘算法。

user 端举例:

  1. 注册资料中的姓名、个人签名

  2. 发表的动态、评论、日志

  3. 聊天记录(?安全性和隐私在哪。。。)

item 端举例:

  1. 物品的标题、描述

  2. 物品本身的内容(比如新闻资讯类)

  3. 物品的其他基本属性的文本

 

从文本信息中构建一个基础的用户画像,要做以下两件事:

1. 把非结构化的文本结构化,filtering,保留关键信息

2.根据用户行为数据把物品的结构化结果传递给用户,于用户自己的结构化信息合并。

 

一、结构化文本

从物品端的文本信息,可以利用成熟的 NLP 算法分析得到的信息有下面几种:

  1. 关键词提取:最基础的标签来源,常用 TF-IDF 和 TextRank

  2. 实体识别:人物、位置和地点、著作、历史事件和热点事件等,常用基于词典的方法结合 CRF 模型

  3. 内容分类:将文本按照分类体系分类,用分类来表达较粗粒度的结构化信息

  4. 文本:在无人制定分类体系的前提下,无监督地将文本划分成多个类簇。虽然不是标签,类簇编号也是用户画像的常见构成

  5. 主题模型:从大量已有文本中学习主题向量,然后再预测新的文本在各个主题上的概率分布情况。

  6. embedding:用有限维度的向量来表达,挖掘字面意思之下的语义信息(往下再找一层)

 

以上涉及到的常见文本结构化算法:

1. TF-IDF

词频-逆文档频率。核心思想:在一篇文字中反复出现的词会更重要,在所有文本中都出现的词更不重要。这两点就分别量化成 TF 和 IDF 和两个指标。

TF = 某词在文章中出现的次数/文章总词数  或者  TF = 某词在文章中出现的次数/该文章中出现最多的词的出现次数

IDF = log(语料库的文章总数 / 包含该词的文章总数+1 )

将两个值相乘就得到每一个词的权重,然后可以根据权重筛选关键词:1. 取 Top K 个词。但如果总共得到的词个数少于K,显然不合理;2. 计算所有词权重的平均值,取在权重平均值之上的词作为关键词

 

2. TextRank

  i. 文本中设定一个窗口宽度,比如 K 个词,统计窗口内的词和词的共现关系,将其看成无向图。

  ii. 所有词初始化的重要性都是1

  iii. 每个节点把自己的权重平均分配给“和自己有连接”(共现)的其他节点

  iv. 每个节点将所有其他节点分给自己的权重求和,作为自己的新权重

  v. 迭代iii、iv,直到所有的节点权重收敛为止

那些有共现关系的会互相支持对方成为关键词

 

3. 内容分类

图文信息流 app 的资讯内容需要被自动分类到不同的频道中,从而能够得到最粗粒度的结构化信息,也被用来在用户冷启动时探索用户兴趣。

短文本分类的经典算法是SVM,在开源工具上最常用的是 Facebook 开源的 FastText。

 

4. 实体识别

命名实体识别(Named-Entity Recognition),对每一个分好的词,识别为定义的命名实体集合之一。在 NLP 中被认为序列标注问题。

序列标注问题常用的算法就是 HMM 或者 CRF,推荐系统中主要是想挖掘出想要的结构化结果。

另外还有实用的非模型做法:词典法。用字典树存储,提前准备好各种 entity 的词典;拿着分好的词去词典里找,找到了某个词就认为是提前定义好的 entity 了。

工业级别的工具中 spaCy 效率较高。

 

5. 聚类

同样是无监督,以 LDA 为代表的主题模型能更准确地抓住主题,得到软聚类的效果(一条文本可以属于多个类簇)。

如果没有业务专家专门制定分类体系,LDA 会有很大帮助。设定主题个数 K,可以通过实验的方式来确定 K 值:每次计算 K 个主题两两之间的平均相似度,选择一个较低的 K 值。另外,得到文本在各个主题上的分布,可以保留概率最大的前几个主题作为文本的主题。

开源 LDA 工具有 Gensim、PLDA

 

6. embedding 

比较熟悉,不多说了。主要是就是把高维稀疏的数据映射成一个稠密的向量,查表的计算方式会让前向和反向传播计算都很快,有助于提升后续模型的效果。

 

二、标签选择

如何把物品的结构化信息给到用户呢?

把用户对物品的行为,消费或者没有消费看成是一个分类问题。用户的实际行动就已经标注了若干数据,那么挑出他实际感兴趣的特性就变成了特征选择问题。

最常用的是两个方法:卡方检验(CHI)和信息增益(IG)

基本思想:

  1. 把物品的结构化内容看成是文档

  2. 把用户对物品的行为看成是类别

  3. 每个用户看见过的物品就是一个文本集合

  4. 在这个文本集合上使用特征选择算法选出每个用户关心的东西

 

1.卡方检验

本身是一种特征选择方法。是有监督的(TF-IDF、TextRank 都是无监督的),需要提供分类标注信息。为什么需要呢?

在文本分类任务中,挑选关键词是为了分类任务而服务,而不仅仅是挑选出直观上看上去重要的词。卡方检验本质做的是,检验“词和某个类别 C 相互独立”这个假设是否成立,和这个假设偏离越大,越说明这个词和类别 C 非常有关系,那显然这个词就是关键词了。

计算一个词 Wi 和一个类别 Cj 的卡方值,需要统计四个值:

  1. 类别为 Cj 的文本中出现词 Wi 的文本数 A

  2. 词 Wi 在非 Cj 的文本中出现的文本数 B

  3. 类别为 Cj 的文本中没有出现 Wi 的文本数 C

  4. 词 Wi 在非 Cj 的文本中没有出现的文本数 D

 

然后计算每一个词和每一个类别的卡方值:

几点说明:

  1. 每个词和每个类别都要计算,只要对其中一个类别有帮助的词都应该留下

  2. 由于是比较卡方值的大小,所以公式中的 N 可以不参与计算,因为它对每个词都一样,就是总的文本数

  3. 卡方值越大,意味着偏离“词和类别相互独立”的假设越远,靠“词和类别互相不独立”这个备择假设越近

 

2. 信息增益

信息增益(Information Gain)也是一种监督的关键词选择方法,也需要标注信息。与卡方检验不同的是,卡方检验是对每个行为单独筛选一套标签出来,信息增益是全局统一筛选。

如何理解信息熵呢。一批文本被标注了类别,任意挑出一个文本,其类别?如果原来每个类别的文本数量都一样,那肯定最不好猜,但如果其中一个类别的文本 C 数量远远多于其他类别,那么就很容易猜对。区别就在于信息熵不同,前者信息熵大,后者小。

进一步再想,如果从这一堆文本中再挑出包含有词 W 的文本数,再来看任意一条文本的类别时,仍然有上面说的两种情况。考虑一种情况:如果在整个文本上的情况是1,但挑出包含词 W 后的情况变成2了,那么这个词 W 就非常有用!

这就是信息增益的思想:

  1. 统计全局文本的信息熵

  2. 统计每个词的条件熵(知道了一个词后再统计文本的信息熵,只不过要分别计算包含词和不包含词两部分的信息熵,再按照各自文本比例加权平均)

  3. 两者相减就是每个词的信息增益

CART 决策树就用信息增益作为选择分裂点的标准。

 

卡方检验和信息增益都是在离线阶段批量完成的,这样就可以每天更新用户画像。(新用户呢?——MAB问题)

 

 

超越标签的内容推荐系统

基于内容的推荐系统,标签只是很小一部分(而且也不是说标签越多就一定越有帮助)。基于内容推荐,其实就是一个信息检索系统(包装成推荐系统),但确是复杂推荐系统的基础,而且有助于解决冷启动问题(新物品)。

内容数据是比较容易得到的,而且容易挖掘出有用信息供推荐系统使用(尤其是文本数据)。

多抓数据补充内同源,增加分析的维度;数据清洗,去冗余、垃圾、敏感内容;对数据深入的挖掘;计算用户兴趣和物品属性之间更合理的相关性

1. 基于内容推荐的框架:

 

基于内容推荐,最重要的不是算法,而是内容挖掘和分析。内容分析越深入,能抓住的用户群体就越细致,推荐的转化率就越高,用户的好感度就上升,反馈就越多。

 

内容分析的产出有两个:

  结构化内容库(结合用户反馈去学习用户画像);

  内容分析模型(分类器、主题模型、entity识别模型、embedding,新物品进入时需要被实时推荐出去,需要这些模型对内容是实时分析,提取结构化内容,再用于用户画像匹配)

 

2. 内容推荐算法

i. 最简单的方法就是计算 用户画像端的稀疏向量 和 内容端的稀疏向量 之间的相似度,基于相似度对推荐物品排序。(可解释性强)

ii. 更好地利用内容中的结构化信息:不同字段的重要性不同。常用的开源搜索引擎 Lucene 已经实现了 BM25F 算法(相关性计算)

iii. 机器学习方法(考虑推荐的目标),CTR预估模型。每条样本由两部分构成,一部分是特征,包含用户端的画像内容、物品端的结构化内容、日志记录的上下文信息(时间、地理位置、设备...);另一部分就是用户行为,作为标注信息(有反馈、无反馈两类)。训练一个二分类器,常用 LR 和 GBDT 或两者混合,按照用户行为发生的概率排序。

 

posted @ 2019-09-21 23:01  王朝君BITer  阅读(742)  评论(0编辑  收藏  举报