- 什么是推荐系统
一种信息过滤系统,预测用户对物品的评分和偏好- 能做什么:可以把那些最终会在用户和物品之间产生的连接提前找出来
- 需要什么:需要已经存在的连接,从已有的连接去预测未来的连接
- 怎么做:预测用户评分和偏好,实现方式:机器推荐和人工推荐
- 推荐系统的问题模式
- 评分预测(20%)
- 数据不易收集
- 数据质量不能保证
- 评分的分布不稳定,整体评分在不同时期会差别很大,个人评分在不同时期标准不同,人和人之间的标准差别很大。
- 行为预测(80%):直接预测行为本身发生的概率、预测物品的相对排序
利用隐式反馈数据预测隐式反馈的发生概率- 数据比显式反馈更加稠密
- 隐式反馈更代表用户的真实想法
- 隐式反馈常常和模型的目标函数关联更密切
- 问题
- 冷启动问题
- 探索与利用EE问题
- 安全问题
- 评分预测(20%)
- 思维模式
- 四个元素
- UI 和 UE
- 数据
- 领域知识
- 算法:短期高估,长期低估
- 目标思维和不确定性思维
- 训练机器学习模型是一个不断最大化目标函数的过程
- 绝大多数推荐算法都是概率算法,因此本身就无法保证得到确切结果,只是概率上得到好的效果
- 推荐系统追求的是整体目标的增长,而不是单个 Case是否正确。
- 本身出现意外的推荐也是有益的,可以探索用户的新兴趣
- 四个元素
- 用户画像和物品画像
- 用户画像
- 一个用户喜好的关键词-喜好程度的Key-Value对
- 静态画像:性别、年龄、居住地、注册信息等
- 动态画像:用户的行为特征、偏好及兴趣点(类别、标签、品牌、物品、价格敏感、高价值用户等)、个人签名、发表的评论、动态、日记等、聊天记录
- 要用物品和用户的文本信息构建出一个基础版本的用户画像
- 把所有非结构化的文本结构化,去粗取精,保留关键信息
- 关键词提取:最基础的标签来源,也为其他文本分析提供基础数据,常用 TF-IDF和TextRank。
- 实体识别:人物、位置和地点、著作、影视剧、历史事件和热点事件等,常用基于词典的方法结合 CRF模型。
- 统计学习的方法:HMM、CRF
- 深度学习的方法:Bi-LSTM、Bi-LSTM+CRF、Attention
- 内容分类:将文本按照分类体系分类,用分类来表达较粗粒度的结构化信息。
- 文本 :在无人制定分类体系的前提下,无监督地将文本划分成多个类簇也很常见,别看不是标签,类簇编号也是用户画像的常见构成。
- 主题模型:从大量已有文本中学习主题向量,然后再预测新的文本在各个主题上的概率分布情况,也很实用,其实这也是一种聚类思想,主题向量也不是标签形式,也是用户画像的常用构成。
- LDA
- 嵌入:“嵌入”也叫作 Embedding,从词到篇章,无不可以学习这种嵌入表达。嵌入表达是为了挖掘出字面意思之下的语义信息,并且用有限的维度表达出来。
- 文本结构化算法
- TF-IDF:评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度。字词的重要性随着它在文件中出现的次数成正比增加,但同时会随着它在语料库中出现的频率成反比下降。
T F w = 在 某 一 个 文 档 中 词 条 w 出 现 的 次 数 该 文 档 中 所 有 的 词 条 数 目 TF_w = \frac{在某一个文档中词条w出现的次数}{该文档中所有的词条数目} TFw=该文档中所有的词条数目在某一个文档中词条w出现的次数
I D F = l o g ( 语 料 库 的 文 档 总 数 包 含 词 条 w 的 文 档 数 + 1 ) IDF = log(\frac{语料库的文档总数}{包含词条w的文档数+1}) IDF=log(包含词条w的文档数+1语料库的文档总数)
T F − I D F = T F ∗ I D F TF-IDF = TF*IDF TF−IDF=TF∗IDF- 关键词提取方案:
- 取Top K 个词,缺点:如果词总数少于 K,那么所有词都是关键词;
- 计算所有词权重的平均值,取权重大于平均值的词作为关键词;
- 关键词提取方案:
- TextRank
- 将某一个词与其前面的N个词、以及后面的N个词均具有图相邻关系,设置一个长度为N的滑动窗口,所有在这个窗口之内的词都视作词结点的相邻结点;
- TextRank构建的词图为无向图
W S ( V i ) = ( 1 − d ) + d ∗ ∑ j ∈ I n ( V i ) w j i ∑ V k ∈ O u t ( V j ) w j k W S ( V j ) WS(V_i)=(1-d)+d*\sum_{j\in{In(V_i)}}\frac{w_{ji}}{\sum_{V_k\in{Out(V_j)}w_{jk}}}WS(V_j) WS(Vi)=(1−d)+d∗j∈In(Vi)∑∑Vk∈Out(Vj)wjkwjiWS(Vj)
其中 W S ( V i ) WS(V_i) WS(Vi)为节点权重, w j k w_{jk} wjk是节点j和k的边的共现次数( w j i ∑ V k ∈ O u t ( V j ) w j k \frac{w_{ji}}{\sum_{V_k\in{Out(V_j)}w_{jk}}} ∑Vk∈Out(Vj)wjkwji表示jk边共现次数/j后面的 O u t ( V j ) Out(V_j) Out(Vj)个词的共现次数)- 文本T分割成若干句子
- 对每个句子S进行分词和词性标注处理,并过滤掉停用词,只保留指定词性的单词,如名词、动词、形容词
- 构建候选关键词图G = (V,E),其中V为节点集,由上一步生成的候选关键词组成,然后采用共现关系(co-occurrence)构造任两点之间的边,两个节点之间存在边仅当它们对应的词汇在长度为K的窗口中共现
- 根据上面公式,迭代传播各节点的权重,直至收敛。
- 对节点权重进行倒序排序,从而得到最重要的T个单词,作为候选关键词。
- 内容分类
- FastText
hierarchical softmax似然函数: L = l o g ∏ j = 2 l w P ( d j w ∣ x w , θ j − 1 w ) = ∑ j = 2 l w ( ( 1 − d j w ) l o g [ σ ( x w T θ j − 1 w ) ] + d j w l o g [ 1 − σ ( x w T θ j − 1 w ) ] ) L = log\prod_{j=2}^{lw}P(d_j^w|x_w, \theta_{j-1}^w) = \sum_{j=2}^{lw}((1-d_j^w)log[\sigma(x_w^T\theta_{j-1}^w)] + d_j^wlog[1-\sigma(x_w^T\theta_{j-1}^w)]) L=logj=2∏lwP(djw∣xw,θj−1w)=j=2∑lw((1−djw)log[σ(xwTθj−1w)]+djwlog[1−σ(xwTθj−1w)])
- FastText
- 实体识别
序列标注问题- 分词问题
- ICTCLAS
-
Cascaded Hidden Markov Model
-
先进行原子切分,然后在此基础上进行N-最短路径粗切分,找出前N个最符合的切分结果,生成二元分词表,然后生成分词结果,接着进行词性标注并完成主要分词步骤。
-
在低层的 HMM 识别过程中 ,先识别出普通不嵌套的未登录词 ,然后在此基础上 ,通过相同的方法采取高层隐马模型 ,通过角色标注计算出最优的角色序列 ,在此基础上 ,进一步识别出嵌套的未登录词
a r g m a x ∏ i P ( w i ∣ w i − 1 ) = a r g m i n − ∑ i l o g P ( w i ∣ w i − 1 ) ≈ a r g m i n − ∑ i l o g [ a P ( w i − 1 ) + ( 1 − a ) P ( w i ∣ w i − 1 ) ] \begin{aligned} argmax\prod_iP(w_i|w_{i-1}) &=argmin -\sum_ilogP(w_i|w_{i-1}) \\ &≈argmin-\sum_i log[aP(w_{i-1})+(1-a)P(w_i|w_{i-1})] \end{aligned} argmaxi∏P(wi∣wi−1)=argmin−i∑logP(wi∣wi−1)≈argmin−i∑log[aP(wi−1)+(1−a)P(wi∣wi−1)]
最大概率问题转化为图的最短路径问题。有时最大联合概率对应的分词结果不一定是最优的,所以有N-best -
N最短路径
1). Dijkstra
a. 使用了广度优先搜索解决赋权有向图或者无向图的单源最短路径问题,算法最终得到一个最短路径树
b. 初始时,S只包含源点,即S={v},v的距离为0。U包含除v外的其他顶点,即:U={其余顶点},若v与U中顶点u有边,则<u,v>正常有权值,若u不是v的出边邻接点,则<u,v>权值为∞
c. 从U中选取一个距离v最小的顶点k,把k加入S中(该选定的距离就是v到k的最短路径长度)
d. 以k为新考虑的中间点,修改U中各顶点的距离: 若从源点v到顶点u的距离(经过顶点k)比原来距离(不经过顶点k)短,则修改顶点u的距离值,修改后的距离值为源点到顶点k的距离加上边(k到u)的权。
e. 重复步骤b和c直到所有顶点都包含在S中。
2). floyd
d [ k ] [ i ] [ j ] = m i n ( d [ k − 1 ] [ i ] [ j ] , d [ k − 1 ] [ i ] [ k ] + d [ k − 1 ] [ k ] [ j ] ) ( k , i , j ∈ [ 1 , n ] ) d[k][i][j] = min(d[k-1][i][j], d[k-1][i][k]+d[k-1][k][j])(k,i,j∈[1,n]) d[k][i][j]=min(d[k−1][i][j],d[k−1][i][k]+d[k−1][k][j])(k,i,j∈[1,n])只能使用第1号到第k号点作为中间媒介时,点i到点j之间的最短路径长度。
-
- Jieba
- Unigram + HMM,Unigram分词后用HMM做未登录词识别,以修正分词结果
- 最大概率问题转化为图的最大路径问题
a r g m a x ∏ i P ( w i ∣ w i − 1 ) = a r g m a x l o g ∏ i P ( w i ) = a r g m a x ∑ i l o g P ( w i ) \begin{aligned} argmax\prod_iP(w_i|w_{i-1}) &=argmax log\prod_iP(w_i) \\ &=argmax\sum_i logP(w_{i}) \end{aligned} argmaxi∏P(wi∣wi−1)=argmaxlogi∏P(wi)=argmaxi∑logP(wi) - DP解最大路径问题
r i = m a x ( i , j ) ∈ E { r j + w ( i , j ) } r_i=max_{(i,j)\in E}\{r_j+w(i,j)\} ri=max(i,j)∈E{rj+w(i,j)}
- ICTCLAS
- 词性标注
- 基于规则的词性标注方法
- 基于统计模型的词性标注方法
- HMM
- 生成式模型
- 有向图
- 求观测序列的概率
P
(
O
∣
λ
)
P(O|\lambda)
P(O∣λ)
暴力求解。 P ( O ∣ λ ) = ∑ I P ( O , I ∣ λ ) = ∑ I P ( O ∣ I , λ ) P ( I ∣ λ ) P(O|\lambda)=\sum_I P(O, I|\lambda) = \sum_I{P(O|I, \lambda)}P(I|\lambda) P(O∣λ)=∑IP(O,I∣λ)=∑IP(O∣I,λ)P(I∣λ)
定义时刻 t t t时隐藏状态为 q i q_i qi, 观测状态的序列为 o 1 , o 2 , . . . o t o_1,o_2,...o_t o1,o2,...ot的概率为前向概率:
α t ( i ) = P ( o 1 , o 2 , . . . o t , i t = q i ∣ λ ) α t + 1 ( i ) = [ ∑ j = 1 N α t ( j ) a j i ] b i ( o t + 1 ) P ( O ∣ λ ) = ∑ i N α T ( i ) \alpha_t(i)=P(o_1, o_2,...o_t, i_t=q_i|\lambda) \\ \alpha_{t+1}(i)=\big[\sum_{j=1}^N\alpha_t(j)a_{ji}\big]b_i(o_{t+1}) \\ P(O|\lambda)=\sum_i^N\alpha_T(i) αt(i)=P(o1,o2,...ot,it=qi∣λ)αt+1(i)=[j=1∑Nαt(j)aji]bi(ot+1)P(O∣λ)=i∑NαT(i)
定义时刻 t t t时隐藏状态为 q i q_i qi, 从时刻 t + 1 t+1 t+1到最后时刻 T T T的观测状态的序列为 o t + 1 , o t + 2 , . . . o T o_{t+1}, o_{t+2},...o_T ot+1,ot+2,...oT的概率为后向概率:
β t ( i ) = P ( o t + 1 , o t + 2 , . . . o T ∣ i t = q i , λ ) β t + 1 ( i ) = ∑ j N a i j β t ( j ) b j ( t + 1 ) P ( O ∣ λ ) = ∑ i = 1 N π i β 1 ( i ) b i ( o 1 ) \beta_t(i)=P(o_{t+1}, o_{t+2},...o_T|i_t=q_i,\lambda) \\ \beta_{t+1}(i)=\sum_j^Na_{ij}\beta_t(j)b_j(t+1)\\ P(O|\lambda)=\sum_{i=1}^N\pi_i\beta_1(i)b_i(o_1) βt(i)=P(ot+1,ot+2,...oT∣it=qi,λ)βt+1(i)=j∑Naijβt(j)bj(t+1)P(O∣λ)=i=1∑Nπiβ1(i)bi(o1) - 鲍姆-韦尔奇算法求解HMM参数
EM
E步: 模型参数为 λ ‾ \overline{\lambda} λ, 联合分布 P ( O , I ∣ λ ) P(O, I|\lambda) P(O,I∣λ)基于条件概率 P ( I ∣ O , λ ‾ ) P(I|O, \overline{\lambda}) P(I∣O,λ)的期望: L ( λ , λ ‾ ) = ∑ I P ( I ∣ O , λ ‾ ) l o g P ( O , I ∣ λ ) L(\lambda, \overline{\lambda})=\sum_IP(I|O, \overline{\lambda})logP(O, I|\lambda) L(λ,λ)=I∑P(I∣O,λ)logP(O,I∣λ)
M步: λ ‾ = a r g m a x λ L ( λ , λ ‾ ) \overline{\lambda}=arg max_{\lambda} L(\lambda, \overline{\lambda}) λ=argmaxλL(λ,λ) - 维特比算法解码隐藏状态序列
第一个局部状态是在时刻𝑡隐藏状态为𝑖所有可能的状态转移路径𝑖1,𝑖2,…𝑖𝑡中的概率最大值。记为𝛿𝑡(𝑖): δ t ( i ) = m a x i 1 , i 2 , . . . i t − 1 P ( i t = i , i 1 , i 2 , . . . i t − 1 , o t , o t − 1 , . . . o 1 ∣ λ ) , i = 1 , 2 , . . . N \delta_t(i)=max_{i_1, i_2,...i_{t-1}}P(i_t=i, i_1, i_2, ...i_{t-1},o_t,o_{t-1},...o_1|\lambda), i=1,2,...N δt(i)=maxi1,i2,...it−1P(it=i,i1,i2,...it−1,ot,ot−1,...o1∣λ),i=1,2,...N δ t + 1 ( i ) = m a x i 1 , i 2 , . . . i t − 1 P ( i t + 1 = i , i 1 , i 2 , . . . i t , o t + 1 , o t , . . . o 1 ∣ λ ) = m a x 1 < = j < = N [ δ t ( j ) a j i ] b i ( o t + 1 ) P ( I ∗ ) = m a x 1 < = j < = N δ T ( i ) \delta_{t+1}(i)=max_{i_1, i_2,...i_{t-1}}P(i_{t+1}=i, i_1, i_2, ...i_{t},o_{t+1},o_{t},...o_1|\lambda)=max_{1<=j<=N}[\delta_{t}(j)a_{ji}]b_i(o_{t+1})\\ P(I*)=max_{1<=j<=N}\delta_{T}(i) δt+1(i)=maxi1,i2,...it−1P(it+1=i,i1,i2,...it,ot+1,ot,...o1∣λ)=max1<=j<=N[δt(j)aji]bi(ot+1)P(I∗)=max1<=j<=NδT(i)
- MEMM
- 判别式模型
- 有向图
- HMM的两个痛点:一是其为生成模型,二是不能使用更加复杂的feature。
- ME:
P w ( y ∣ x ) = e x p ( ∑ i ω i f i ( x , y ) ) Z w ( x ) P_w(y|x)=\frac{exp(\sum_i\omega_if_i(x,y))}{Z_w(x)} Pw(y∣x)=Zw(x)exp(∑iωifi(x,y)) - MEMM: 抛弃了HMM中的观测独立性假设,保留了齐次马尔科夫性。标注偏置问题,本地归一化,导致有更少转移的状态拥有的转移概率普遍偏高,概率最大路径更容易出现转移少的状态。
P w ( s ∣ s ′ , o ) = e x p ( ∑ a λ a f a ( o , s ) ) Z ( o , s ′ ) δ t + 1 ( s ) = m a x s ′ δ t ( s ′ ) P ( s ∣ s ′ , o t + 1 ) P ( Y ∣ X ) = ∏ j e x p ( ∑ i λ i f i ( y j − 1 , y j , x → ) ) Z ( y j − 1 , x → ) \begin{aligned} P_w(s|s', o)=\frac{exp(\sum_a\lambda_af_a(o,s))}{Z(o, s')} \\ \delta_{t+1}(s)=max_{s'}\delta_t(s')P(s|s', o_{t+1}) \\ P(Y|X) = \prod_j \frac{exp\bigg(\sum_{i}\lambda_if_i(y_{j-1}, y_j, \overrightarrow{x}) \bigg)}{Z(y_{j-1}, \overrightarrow{x})} \end{aligned} Pw(s∣s′,o)=Z(o,s′)exp(∑aλafa(o,s))δt+1(s)=maxs′δt(s′)P(s∣s′,ot+1)P(Y∣X)=j∏Z(yj−1,x)exp(∑iλifi(yj−1,yj,x))
- CRF
- 判别式模型
- 无向图
- CRF是最大熵模型(ME vs LR)的sequence扩展
- 全局归一化
P ( Y ∣ X ) = e x p ( ∑ i , j λ i f i ( y j − 1 , y j , x → ) ) Z ( x → ) = 1 Z ( x → ) ∏ j e x p ( ∑ i λ i f i ( y j − 1 , y j , x → ) ) \begin{aligned} P(Y|X) &= \frac{exp \bigg(\sum_{i,j}\lambda_if_i(y_{j-1}, y_j, \overrightarrow{x}) \bigg)}{Z(\overrightarrow{x})} \\ &= \frac{1}{Z(\overrightarrow{x})}\prod_j exp\bigg(\sum_{i}\lambda_if_i(y_{j-1}, y_j, \overrightarrow{x}) \bigg) \end{aligned} P(Y∣X)=Z(x)exp(∑i,jλifi(yj−1,yj,x))=Z(x)1j∏exp(i∑λifi(yj−1,yj,x))
- HMM
- 基于统计方法与规则方法相结合的词性标注方法
- 基于深度学习的词性标注方法
- LSTM+CRF
- BiLSTM+CRF
- 实体识别
- 统计学习的方法:HMM、CRF
- 深度学习的方法:Bi-LSTM、Bi-LSTM+CRF、Attention
- 分词问题
- 聚类
- 词嵌入
- TF-IDF:评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度。字词的重要性随着它在文件中出现的次数成正比增加,但同时会随着它在语料库中出现的频率成反比下降。
- 根据用户行为数据把物品的结构化结果传递给用户,与用户自己的结构化信息合并。
- 方法1:直接把用户产生过行为的物品标签累积在一起
- 方法2:把用户对物品的行为,消费或者没有消费看成是一个分类问题:卡方检验(CHI)和信息增益(IG)(离线阶段批量完成的)。为每个用户选择重要的标签出来。
- 把物品的结构化内容看成文档;
- 把用户对物品的行为看成是类别;
- 每个用户看见过的物品就是一个文本集合;
- 在这个文本集合上使用特征选择算法选出每个用户关心的东西。-
卡方检验(CHI)
χ ² ( W i , C j ) = ∑ i ( f i − n p i ) 2 n p i = N ( A D − B C ) 2 ( A + C ) ( A + B ) ( B + D ) ( C + D ) n p 0 = ( A + B ) ( A + C ) / N \begin{aligned} χ²(W_i, C_j) &=\sum_i\frac{(f_i-np_i)^2}{np_i} \\ &=\frac{N(AD-BC)^2}{(A+C)(A+B)(B+D)(C+D)} \\ np_0 & =(A+B)(A+C)/N \end{aligned} χ²(Wi,Cj)np0=i∑npi(fi−npi)2=(A+C)(A+B)(B+D)(C+D)N(AD−BC)2=(A+B)(A+C)/N- 特征选择方法;有监督的
- 卡方值越大,意味着偏离“词和类别相互独立”的假设越远,靠“词和类别互相不独立”这个备择假设越近
-
信息增益
- 有监督的
-
- 把所有非结构化的文本结构化,去粗取精,保留关键信息
- 物品画像
- 标签、主题、词嵌入向量等
- 物品的标题、描述、物品本身的内容(一般指新闻资讯类)、物品的其他基本属性的文本
- 利用用户标签来给物品分类
- 分类、标签、聚类
- 用户画像
- 基于内容的推荐
- 结构化内容库:结合用户反馈行为去学习用户画像
- 内容分析模型:在内容分析过程中得到的模型:分类器模型;主题模型;实体识别模型;嵌入模型等。这些模型主要用在:当新的物品刚刚进入时,需要实时地被推荐出去,这时候对内容的实时分析,提取结构化内容,再与用户画像匹配。
- 人以群分
- 基于记忆的协同过滤(Memory-Based)
- 基于用户的协同过滤
- 只有原始用户行为日志,需要从中构造出矩阵,怎么做?
- CSR
- COO
- 如果用户的向量很长,计算一个相似度则耗时很久,怎么办?
- 对向量采样计算
- 向量化计算
- 如果用户量很大,而且通常如此,两两计算用户相似度也是一个大坑,怎么办?
- 将相似度计算拆成 Map Reduce 任务,将原始矩阵 Map 成键为用户对,值为两个用户对同一个物品的评分之积,Reduce 阶段对这些乘积再求和,Map Reduce 任务结束后再对这些值归一化
- 不用基于用户的协同过滤
- 在计算推荐时,看上去要为每一个用户计算他和每一个物品的分数,又是一个大坑,怎么办?
- 只有相似用户喜欢过的物品需要计算
- 把计算过程拆成 Map Reduce 任务
- 遍历每个用户喜欢的物品列表;
- 获取该用户的相似用户列表;
- 把每一个喜欢的物品 Map 成两个记录发射出去,一个是键为 < 相似用户 ID,物品 ID,1> 三元组,可以拼成一个字符串,值为 < 相似度 >,另一个是键为 < 相似用户 ID,物品 ID,0> 三元组,值为 < 喜欢程度 * 相似度 >,其中的 1 和 0 为了区分两者,在最后一步中会用到;
- Reduce 阶段,求和后输出;
- < 相似用户 ID,物品 ID, 0> 的值除以 < 相似用户 ID,物品 ID, 1> 的值
- 惩罚对热门物品的喜欢程度,增加喜欢程度的时间衰减
- 只有原始用户行为日志,需要从中构造出矩阵,怎么做?
- 基于物品的协同过滤
- 物品中心化
- 用户中心化
- TopK 推荐,类似“猜你喜欢”。
- 相关推荐
- Slope One 算法
- 相似度矩阵计算无法实时更新,整个过程都是离线计算的,相似度计算时没有考虑相似度的置信问题。
- 专门针对评分矩阵,不适用于行为矩阵
- 计算的不是物品之间的相似度,而是物品之间的距离
- 基于用户的协同过滤
- 基于模型的协同过滤(Model-Based)
- 协同过滤中的相似度计算方法
- 欧氏距离
- 余弦相似度
- 皮尔逊相关度
- 杰卡德相似度
- 算法
- 交替最小二乘 (ALS)
- 隐式反馈
- 评分预测->预测行为
- Weighted-ALS
- 如果用户对物品无隐式反馈则认为评分是 0;
- 如果用户对物品有至少一次隐式反馈则认为评分是 1,次数作为该评分的置信度。
m i n q ∗ , p ∗ ∑ ( u , i ) ∈ K c u i ( r u i − p u q i T ) 2 + λ ( ∥ q i ∥ 2 + ∥ p u ∥ 2 ) min_{q^*, p^*}\sum_{(u,i)\in K} c_{ui}(r_{ui}-p_uq_i^T)^2 + \lambda(\|q_i\|^2 +\|p_u\|^2) minq∗,p∗(u,i)∈K∑cui(rui−puqiT)2+λ(∥qi∥2+∥pu∥2)
其中 c u i = 1 + α C c_{ui}=1+\alpha C cui=1+αC是置信度, C C C是购买次数, α \alpha α是超参。 - One-Class。本身隐式反馈就只有正类别是确定的,负类别是我们假设的,需要负采样,按照热门程度负采样negative sampling
- 直接使用用户和物品的隐因子向量相乘来计算推荐的复杂度太大:a. 独特的数据结构存储所有物品的隐因子向量,通过一个用户向量可以返回最相似的 K 个物品:Faiss、NMSLIB、 KGrap; b. 物品的隐因子向量先聚类,再逐一计算用户和每个聚类中心的推荐分数,给用户推荐物品聚类。
- 贝叶斯个性化排序
- point-wise -> pair-wise
- 分数 X ‾ = W H T \overline X = WH^T X=WHT, 最大后验概率 P ( W , H ∣ > u ) P(W, H| >_u) P(W,H∣>u)求解用户矩阵 W W W和物品矩阵 H H H, 其中, > u >_u >u代表用户u对应的所有商品的全序关系,贝叶斯公式: P ( θ ∣ > u ) = P ( > u ∣ θ ) P ( θ ) P ( > u ) P(\theta|>_u)=\frac{P(>u|\theta)P(\theta)}{P(>_u)} P(θ∣>u)=P(>u)P(>u∣θ)P(θ)。a. 假设了用户的排序和其他用户无关, b. 同一用户对不同物品的偏序相互独立 P ( θ ∣ > u ) ∝ P ( > u ∣ θ ) P ( θ ) P(\theta|>_u)∝P(>u|\theta)P(\theta) P(θ∣>u)∝P(>u∣θ)P(θ), ∏ u ∈ U P ( > u ∣ θ ) = ∏ ( u , i , j ) ∈ D P ( i > u j ∣ θ ) \prod_{u\in U}P(>_u|\theta)=\prod_{(u,i,j)\in D}P(i>_uj|\theta) ∏u∈UP(>u∣θ)=∏(u,i,j)∈DP(i>uj∣θ), P ( i > u j ∣ θ ) = σ ( x ˉ u i j ( θ ) ) = σ ( x ˉ u i ( θ ) − x ˉ u j ( θ ) ) P(i>_uj|\theta)=\sigma(\bar x_{uij}(\theta))=\sigma(\bar x_{ui}(\theta)- \bar x_{uj}(\theta)) P(i>uj∣θ)=σ(xˉuij(θ))=σ(xˉui(θ)−xˉuj(θ)), c. 加上服从正态分布, l n P ( θ ) = λ ∥ θ ∥ 2 ln P(\theta) = \lambda\|\theta\|^2 lnP(θ)=λ∥θ∥2
- FM
- 解决数据稀疏的情况下,特征怎样组合的问题。学习的是单个特征的embedding,0/1硬匹配->向量软匹配。(MF是只有两个特征UserId/ItemId的FM)
- 每个特征引入latent factor
y = w 0 + ∑ i = 1 n w i x i + ∑ i = 1 n ∑ j = i + 1 n < V i , V j > x i x j ∑ i = 1 n ∑ j = i + 1 n < V i , V j > x i x j = 1 2 ∑ i = 1 n ∑ j = 1 n < V i , V j > x i x j − 1 2 ∑ i = 1 n < V i , V i > x i x i = 1 2 ( ∑ i = 1 n ∑ j = 1 n ∑ f = 1 k v i f v j f x i x j − ∑ i = 1 n ∑ f = 1 k v i f v i f x i x i ) = 1 2 ∑ f = 1 k ( ( ∑ i = 1 n v i f x i ) 2 − ∑ i = 1 n v i f 2 x i 2 ) \begin{aligned} &y=w_0+\sum_{i=1}^nw_ix_i+\sum_{i=1}^n \sum_{j=i+1}^n<V_i, V_j>x_ix_j \\ &\sum_{i=1}^n \sum_{j=i+1}^n<V_i, V_j>x_ix_j \\ &=\frac{1}{2} \sum_{i=1}^n \sum_{j=1}^n<V_i, V_j>x_ix_j - \frac{1}{2} \sum_{i=1}^n<V_i, V_i>x_ix_i \\ &= \frac{1}{2} (\sum_{i=1}^n \sum_{j=1}^n \sum_{f=1}^k v_{if}v_{jf}x_ix_j - \sum_{i=1}^n \sum_{f=1}^kv_{if}v_{if}x_ix_i) \\ & = \frac{1}{2} \sum_{f=1}^k (( \sum_{i=1}^n v_{if}x_i)^2 - \sum_{i=1}^n v_{if}^2x_i^2) \end{aligned} y=w0+i=1∑nwixi+i=1∑nj=i+1∑n<Vi,Vj>xixji=1∑nj=i+1∑n<Vi,Vj>xixj=21i=1∑nj=1∑n<Vi,Vj>xixj−21i=1∑n<Vi,Vi>xixi=21(i=1∑nj=1∑nf=1∑kvifvjfxixj−i=1∑nf=1∑kvifvifxixi)=21f=1∑k((i=1∑nvifxi)2−i=1∑nvif2xi2)
- FFM
- 每一维特征 x i x_i xi,针对其它特征的每一种field f j f_j fj,都会学习一个隐向量 V i , f j V_{i, f_j} Vi,fj
- y = w 0 + ∑ i = 1 n w i x i + ∑ i = 1 n ∑ j = i + 1 n < V i , f j , V j , f i > x i x j y=w_0+\sum_{i=1}^nw_ix_i+\sum_{i=1}^n \sum_{j=i+1}^n<V_{i, f_j}, V_{j, f_i}>x_ix_j y=w0+∑i=1nwixi+∑i=1n∑j=i+1n<Vi,fj,Vj,fi>xixj
- FNN
- Pre-trained FM + MLP
- 受限于 FM 预训练的效果
- 高阶特征
- PNN
- FNN + product layer, 1st order + 2nd order
- 高阶特征
- 内积外积计算复杂度高
- product layer 的输出需要与第一个隐藏层全连接,导致计算复杂度高
- NFM
- LR + Embedding + Bi-Interaction Pooling + MLP
- LR + Embedding + Bi-Interaction Pooling + MLP
- AFM
- Wide&Deep
- Wide: Memorization,Deep: Generalization
- 高阶+低阶特征
- 需要专业的领域知识来做特征工程
- DeepFM
- 在FM部分,Vi用于表征二阶特征,同时在神经网络部分用于构建高阶特征
- FM部分与深度部分共享相同的embedding
- 从原始数据中同时学习到了低维与高维特征,FM 提取低阶组合特征,Deep 提取高阶组合特征
- FM 和 Deep 共享输入和feature embedding使得训练更快,使得在反向传播的时候,模型学习 feature embedding,而后又会在前向传播的时候影响低阶和高阶特征的学习,学习更加的准确
- 不再需要特征工程。而Wide&Deep Model需要
- 交替最小二乘 (ALS)
- 基于记忆的协同过滤(Memory-Based)
- 特征
- 用户相关特征(用户历史行为类特征,比如用户过去点击物品的特征,可以当作描述用户兴趣的特征,放入用户相关特征集合内)
- 物品相关特征
- 上下文相关的特征(比如何时何地用的什么牌子手机登陆等)
- 架构
- 离线
- spark/kafka。MF(只有UserId/ItemId两个特征,没有其他side information,不能作为排序阶段算法,只能作为一路召回算法)、CF、DL、内容信息推荐、关联规则、点击反馈、统计信息推荐、兴趣分类、兴趣标签、兴趣topic、兴趣实体、热点、相同地域
- 近线
- 融合算法 :LR、SVM、RBF、迭代决策树、FM(FFM在大规模数据下资源和效率问题,不被采用)、DeepFM、Wide&Deep、RCD
- 在线
- 内存或者redis 。规则。
- 离线