用户画像 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 或两者混合,按照用户行为发生的概率排序。