文章目录

  • 前言
  • 一、语言模型
    • 1. 跳字模型(Skip-gram)
    • 2. 连续词袋模型(CBOW)
  • 二、近似训练
    • 1. 负采样(Negative Sampling)
    • 2. 层序softmax (Hierarchical Softmax)
    • 3. 小节
  • 三、训练过程
  • 总结

前言

推荐系统中通常需要计算物品的内容相似度,内容相似就是通过对物品内容的理解,比如物品的基础属性、物品的特征等,得到物品的向量表达,然后通过向量之间的相似度计算得到相似物品列表。基于文本内容的物品,常用Word2vec方法计算相似内容。

本篇博文主要介绍Word2vec算法的理论。


一、语言模型

语言模型也就是自然语言处理(NLP),语言模型的范围非常广,比如分词、信息抽取、命名实体识别、词性标注、句法分析、语音识别、语音合成、机器翻译、问答系统、信息检索等。

语言模型是对一段文本的出现概率进行估计的数学表达式,就是一个长度为TTT的字符串所确定的概率分布p(w1,w2,...,wT)p(w_1,w_2,...,w_T)p(w1​,w2​,...,wT​),表示其存在的可能性,其中wiw_iwi​表示这段文本中的一个词,则有
p(s)=p(w1,w2,...,wT)=p(w1)∗p(w2∣w1)∗...∗p(wT∣w1,w2,...,wT−1)=∑p(wi∣contenti)p(s)=p(w_1,w_2,...,w_T)=p(w_1)*p(w_2|w_1)*...*p(w_T|w_1,w_2,...,w_{T-1})=\sum p(w_i|content_i)p(s)=p(w1​,w2​,...,wT​)=p(w1​)∗p(w2​∣w1​)∗...∗p(wT​∣w1​,w2​,...,wT−1​)=∑p(wi​∣contenti​) Word2vec是语言模型中的一种,它是从大量文本预料中以无监督方式学习语义知识的模型,它被大量用于NLP中。

如果用一个词语作为输入来预测它的上下文,这个模型就叫做Skip-Gram模型。而如果拿一个词语的上下文作为输入预测这个词语本身,则是CBOW(Continuous Bagof-Words)模型。

1. 跳字模型(Skip-gram)

在跳字模型中,每个词被表示成两个ddd维向量,用来计算条件概率。假设这个词在字典中索引维iii,当它为中心词时向量被表示为vi∈Rdv_i \in \mathbb{R} ^dvi​∈Rd,而为背景词时向量表示为ui∈Rdu_i \in \mathbb{R} ^dui​∈Rd。设中心词wcw_cwc​在词典中索引为ccc,背景词wow_owo​在词典中索引为ooo,给定中心词生成背景词的条件概率可以通过对向量内积做softmax运算而得到
P(wo∣wc)=exp(uoTvc)∑i∈νexp(uiTvc)P(w_o|w_c) = \frac{exp(u_o^T v_c)}{\sum_{i \in \nu} exp(u_i^T v_c)} P(wo​∣wc​)=∑i∈ν​exp(uiT​vc​)exp(uoT​vc​)​其中词典索引集ν={0,1,...,∣ν∣−1}\nu = \{0,1,...,|\nu|-1\}ν={0,1,...,∣ν∣−1}。假设给定一个长度为TTT的文本序列,设时间步ttt的词为w(t)w^{(t)}w(t)。假设给定中心词的情况下背景词的生成相互独立,当背景窗口大小为mmm时,跳词模型的似然函数即给定任一个中心词生成所有背景词的概率
∏t=1T∏−m≤j≥m,j≠0P(w(t+j)∣w(t))\prod_{t=1}^{T}\prod_{-m\le j \ge m , j \ne 0} P(w^{(t+j)}|w^{(t)}) t=1∏T​−m≤j≥m,j​=0∏​P(w(t+j)∣w(t)) 这里小于1或大于TTT的时间步可以忽略。

接下里介绍跳词模型的训练过程

跳词模型的参数是每个词所对应的中心词向量和背景词向量。训练中我们通过最大似然函数来学习模型参数,即最大似然估计。这等价于最小化以下损失函数:
−∑t=1T∑−m≤j≤m,j≠0logP(w(t+j)∣w(t))-\sum_{t=1}^{T}\sum_{-m\le j \le m , j \ne 0} log P(w^{(t+j)}|w^{(t)}) −t=1∑T​−m≤j≤m,j​=0∑​logP(w(t+j)∣w(t)) 如果使用随机梯度下降,那么在每一次迭代里我们随机采用一个较短的子序列来计算有关该子序列的损失,然后计算梯度来更新模型参数。梯度计算的关键是条件概率的对数有关中心词向量和背景词向量的梯度。根据定义,首先看到
logP(wo∣wc)=uoTvc−log⟮∑i∈νexp(uiTvc)⟯log P(w_o|w_c) = u_o^T v_c - log \lgroup \sum_{i \in \nu} exp(u_i^T v_c) \rgroup logP(wo​∣wc​)=uoT​vc​−log⟮i∈ν∑​exp(uiT​vc​)⟯ 通过微分,我们可以的到上式中vcv_cvc​的梯度
∂logP(wo∣wc)∂vc=u0−∑j∈νexp(ujTvc)uj∑i∈νexp(uiTvc)=u0−∑j∈ν⟮exp(ujTvc)∑i∈νexp(uiTvc)⟯uj=u0−∑j∈νP(wj∣wc)uj\begin{aligned} \frac{\partial {log P(w_o|w_c)}}{\partial {v_c}} &= u_0 - \frac{\sum_{j \in \nu} exp(u_j^T v_c)u_j}{ \sum_{i \in \nu} exp(u_i^T v_c) } \\ &= u_0 - \sum_{j \in \nu} \lgroup \frac{exp(u_j^T v_c)}{ \sum_{i \in \nu} exp(u_i^T v_c) } \rgroup u_j \\ &= u_0 - \sum_{j \in \nu} P(w_j | w_c) u_j \end{aligned} ∂vc​∂logP(wo​∣wc​)​​=u0​−∑i∈ν​exp(uiT​vc​)∑j∈ν​exp(ujT​vc​)uj​​=u0​−j∈ν∑​⟮∑i∈ν​exp(uiT​vc​)exp(ujT​vc​)​⟯uj​=u0​−j∈ν∑​P(wj​∣wc​)uj​​ 它的计算需要词典中所有词以wcw_cwc​为中心词的条件概率。有关其他词向量的梯度同理可得。

训练结束后,对于词典中的任一索引为iii的词,均得到该词作为中心词和背景词的两组词向量viv_ivi​和uiu_iui​。在自然语音处理应用中,一般使用跳词模型的中心词向量作为词的表征向量。

2. 连续词袋模型(CBOW)

与跳字模型最大的不同在于,连续词袋模型假设基于某中心词在文本序列前后的背景词来生成该中心词。因为连续词袋模型的背景词有多个,我们将这些背景词向量取平均,然后使用和跳词模型一样的方法来计算条件概率。

设vi∈Rdv_i \in \mathbb R ^dvi​∈Rd和ui∈Rdu_i \in \mathbb R ^dui​∈Rd分别表示词典中索引为iii的词作为背景词和中心词的向量(注意符合的含义与跳词模型中的相反)。设中心词wcw_cwc​在词典中索引为ccc,背景词wo1,wo2,...,wo2mw_{o_1},w_{o_2},...,w_{o_{2m}}wo1​​,wo2​​,...,wo2m​​在词典中索引为o1,...,o2mo_1, ..., o_{2m}o1​,...,o2m​,那么给定背景词生成中心词的条件概率
P(wc∣wo1,wo2,...,wo2m)=exp⟮12mucT(vo1+...+vo2m)⟯∑i∈νexp⟮12muiT(vo1+...+vo2m)⟯P(w_c|w_{o_1},w_{o_2},...,w_{o_{2m}}) = \frac{exp \lgroup \frac{1}{2m} u_c^T (v_{o_1} +...+ v_{o_2m}) \rgroup}{\sum _{i \in \nu} exp \lgroup \frac{1}{2m} u_i^T (v_{o_1} +...+ v_{o_2m}) \rgroup } P(wc​∣wo1​​,wo2​​,...,wo2m​​)=∑i∈ν​exp⟮2m1​uiT​(vo1​​+...+vo2​m​)⟯exp⟮2m1​ucT​(vo1​​+...+vo2​m​)⟯​ 为了让符号更加简单,记Wo={wo1,wo2,...,wo2m}\mathcal W _o = \{ w_{o_1},w_{o_2},...,w_{o_{2m}} \}Wo​={wo1​​,wo2​​,...,wo2m​​},且vˉo=(vo1+...+vo2m)/(2m)\bar{v}_o = (v_{o_1} +...+ v_{o_2m})/(2m)vˉo​=(vo1​​+...+vo2​m​)/(2m) ,那么上式可以简写成
P(wc∣Wo)=exp(ucTvˉo)∑i∈νexp(uiTvˉo)P(w_c|\mathcal W _o) = \frac{exp(u_c^T \bar{v}_o)}{\sum _{i \in \nu} exp(u_i^T \bar{v}_o)} P(wc​∣Wo​)=∑i∈ν​exp(uiT​vˉo​)exp(ucT​vˉo​)​ 给定一个长度为TTT的文本序列,设时间步ttt的词为w(t)w^{(t)}w(t),背景窗口大小为mmm时,连续词袋模型的似然函数即由背景词生成任一中心词的概率
∏t=1TP(w(t)∣w(t−m),...,w(t−1),w(t+1),...,w(t+m))\prod_{t=1}^{T} P(w^{(t)}|w^{(t-m)},...,w^{(t-1)},w^{(t+1)},...,w^{(t+m)}) t=1∏T​P(w(t)∣w(t−m),...,w(t−1),w(t+1),...,w(t+m)) 下面介绍连续词袋模型的训练过程

训练连续词袋模型的过程与跳词模型基本一致。连续词袋模型的最大似然估计等价于最小化损失函数
−∑t=1TlogP(w(t)∣w(t−m),...,w(t−1),w(t+1),...,w(t+m))-\sum_{t=1}^{T} log P(w^{(t)}|w^{(t-m)},...,w^{(t-1)},w^{(t+1)},...,w^{(t+m)}) −t=1∑T​logP(w(t)∣w(t−m),...,w(t−1),w(t+1),...,w(t+m)) 注意到
logP(wc∣Wo)=ucTvˉo−log⟮∑i∈νexp(uiTvˉo)⟯log P(w_c|\mathcal W _o) = u_c^T \bar{v}_o - log \lgroup \sum _{i \in \nu} exp(u_i^T \bar{v}_o) \rgroup logP(wc​∣Wo​)=ucT​vˉo​−log⟮i∈ν∑​exp(uiT​vˉo​)⟯ 通过微分,可以计算出上式中条件概率的对数有关任一背景词向量voi(i=1,2,...,2m)v_{o_i}(i=1,2,...,2m)voi​​(i=1,2,...,2m)的梯度
∂logP(wc∣Wo)∂voi=12m⟮uc−∑j∈νexp(ujTvˉo)uj∑i∈νexp(uiTvˉo)⟯=12m⟮uc−∑j∈νP(wj∣Wo)uj⟯\frac{\partial log P(w_c|\mathcal W _o)}{\partial v_{o_i}} = \frac{1}{2m} \lgroup u_c - \sum_{j \in \nu} \frac{exp(u_j^T \bar{v}_o)u_j}{\sum_{i \in \nu} exp(u_i^T \bar{v}_o)} \rgroup = \frac{1}{2m} \lgroup u_c - \sum_{j \in \nu} P(w_j|\mathcal W _o)u_j \rgroup ∂voi​​∂logP(wc​∣Wo​)​=2m1​⟮uc​−j∈ν∑​∑i∈ν​exp(uiT​vˉo​)exp(ujT​vˉo​)uj​​⟯=2m1​⟮uc​−j∈ν∑​P(wj​∣Wo​)uj​⟯ 有关其他词向量的梯度同理可得。同跳字模型不一样的一点在于,我们一般使用连续词袋模型的背景词向量作为词的表征向量。

二、近似训练

Word2vec作为神经概率语言模型的输入,其本身就是神经概率语言模型的副产品,是为了通过神经网络学习CBOW模型和Skip-Gram模型而产生的中间结果,在学习过程中会用到两个降低复杂度的近似方法——Hierarchical Softmax和Negative Sampling。

跳字模型的核心在于使用softmax运算得到给定中心词wcw_cwc​来生成背景词的条件概率
P(wc∣wo)=exp(uoTvc)∑i∈νexp(uiTvc)P(w_c|w_o) = \frac {exp(u_o^T v_c)} {\sum_{i \in \nu} exp(u_i^T v_c)} P(wc​∣wo​)=∑i∈ν​exp(uiT​vc​)exp(uoT​vc​)​ 该条件概率对应的对数损失
−logP(wc∣wo)=−uoTvc+log∑i∈νexp(uiTvc)-log P(w_c|w_o) = -u_o^T v_c + log \sum_{i \in \nu} exp(u_i^T v_c) −logP(wc​∣wo​)=−uoT​vc​+logi∈ν∑​exp(uiT​vc​) 由于softmax运算考虑了背景词可能是词典ν\nuν中的任一词,以上损失包含了词典中大小数据的项的累加。从上述“一”中的分析可以看到,每一步的梯度计算都包含词典大小数目的项的累加。对含几十万或上百万的较大词典而言,每次的梯度计算开销可能过大。为了降低计算复杂度,在学习过程中会用到两个近似方法——负采样(Negative Sampling)和层序softmax(Hierarchical Softmax)。

由于跳字模型和连续词袋模型相似,这里以跳词模型为例。

1. 负采样(Negative Sampling)

负采样修改了原来的目标函数。给定中心词wcw_cwc​的一个背景窗口,我们把背景词wow_owo​出现在该背景窗口看作一个事件,并将该事件的概率计算为
P(D=1∣wc,wo)=σ(uoTvc)P(D=1|w_c, w_o) = \sigma(u_o^T v_c) P(D=1∣wc​,wo​)=σ(uoT​vc​) 其中的σ\sigmaσ函数与sigmoid激活函数的含义相同。

我们先考虑最大化文本序列中所有该事件的联合概率来训练词向量。具体地说,给定一个长度为TTT的文本序列,设时间步ttt的词为w(t)w^{(t)}w(t)且背景窗口大小为mmm,考虑最大化联合概率
∏t=1T∏−m≤j≤m,j≠0P(D=1∣w(t),w(t+j))\prod_{t=1}^{T} \prod_{-m \le j \le m, j \neq 0} P(D=1|w^{(t)}, w^{(t+j)}) t=1∏T​−m≤j≤m,j​=0∏​P(D=1∣w(t),w(t+j)) 然而,以上模型中包含的事件仅考虑了正类样本。这导致当所有词向量相等且值为无穷大时,以上的联合概率才被最大化为1。很明显,这样的词向量毫无意义。负采样通过采样并添加负类样本使目标函数更有意义。设背景词wow_owo​出现在中心词wcw_cwc​的一个背景窗口为事件PPP,我们根据分布p(w)p(w)p(w)采样KKK个未出现在该背景窗口的词,即噪声词。设噪声词wk(k=1,..,K)w_k(k=1,..,K)wk​(k=1,..,K)不出现在中心词wcw_cwc​的该背景窗口为事件NkN_kNk​。假设同时含有正类样本和负类样本的事件P,N1,...,NKP,N_1, ..., N_KP,N1​,...,NK​相互独立,负采样将以上需要最大化的仅考虑正类样本的联合概率改写成
∏t=1T∏−m≤j≤m,j≠0P(w(t+j)∣w(t))\prod_{t=1}^{T} \prod_{-m \le j \le m, j \ne 0} P(w^{(t+j)} | w^{(t)}) t=1∏T​−m≤j≤m,j​=0∏​P(w(t+j)∣w(t)) 其中条件概率被近似表示为
P(w(t+j)∣w(t))=P(D=1∣w(t),w(t+j))∏k=1,wk∼P(w)KP(D=0∣w(t),wk)P(w^{(t+j)} | w^{(t)}) = P(D=1|w^{(t)}, w^{(t+j)}) \prod\limits_{k=1, w_k \sim P(w)} ^{K} P(D=0|w^{(t)}, w_{k}) P(w(t+j)∣w(t))=P(D=1∣w(t),w(t+j))k=1,wk​∼P(w)∏K​P(D=0∣w(t),wk​) 设文本序列中时间步ttt的词w(t)w^{(t)}w(t)在词典中的索引为iti_tit​,噪声项wkw_kwk​在词典中的索引为hkh_khk​。有关以上条件概率的对数损失函数为
−logP(w(t+j)∣w(t))=−logP(D=1∣w(t),w(t+j))−∑k=1,wk∼P(w)KP(D=0∣w(t),wk)=−logσ(uit+jTvit)−∑k=1,wk∼P(w)Klog(1−σ(uhkTvit))=−logσ(uit+jTvit)−∑k=1,wk∼P(w)Klogσ(−uhkTvit)\begin{aligned} -log P(w^{(t+j)}|w^{(t)}) &= -log P(D=1|w^{(t)}, w^{(t+j)}) - \sum\limits_{k=1, w_k \sim P(w)} ^{K} P(D=0|w^{(t)}, w_{k}) \\ &= -log \sigma(u_{i_{t+j}}^{T} v_{i_t}) - \sum\limits_{k=1, w_k \sim P(w)} ^{K} log(1-\sigma(u_{h_k}^{T} v_{i_t})) \\ &= -log \sigma(u_{i_{t+j}}^{T} v_{i_t}) - \sum\limits_{k=1, w_k \sim P(w)} ^{K} log\sigma(-u_{h_k}^{T} v_{i_t}) \end{aligned} −logP(w(t+j)∣w(t))​=−logP(D=1∣w(t),w(t+j))−k=1,wk​∼P(w)∑K​P(D=0∣w(t),wk​)=−logσ(uit+j​T​vit​​)−k=1,wk​∼P(w)∑K​log(1−σ(uhk​T​vit​​))=−logσ(uit+j​T​vit​​)−k=1,wk​∼P(w)∑K​logσ(−uhk​T​vit​​)​ 现在,训练中每一步的梯度计算开销不再与词典大小相关,而与KKK线性相关。当KKK取较小的常数时,负采样在每一步的梯度计算开销较小。

2. 层序softmax (Hierarchical Softmax)

层序softmax是另一种近似训练法。它使用了二叉树这一种数据结构,树的每个叶节点代表词典ν\nuν中的每个词。

假设L(w)L(w)L(w)为从二叉树的根结点到词www的叶结点的路径(包括根结点和叶结点)上的节点数。设n(w,j)n(w,j)n(w,j)为该路径上第jjj个结点,并设该结点的背景词向量为un(w,j)u_{n(w,j)}un(w,j)​。以下图为例,L(w3)=4L(w_3)=4L(w3​)=4。


层序softmax将跳字模型中的条件概率近似表示为
P(wo∣wc)=∏j=1L(wo)−1σ⟮⟨n(wo,j+1)=leftChild(n(w0,j))⟩⋅un(wo,j)Tvc⟯P(w_o|w_c) = \prod_{j=1}^{L(w_o)-1} \sigma \lgroup \langle n(w_o, j+1) = leftChild(n(w_0,j)) \rangle \cdot u_{n(w_o, j)} ^T v_c \rgroup P(wo​∣wc​)=j=1∏L(wo​)−1​σ⟮⟨n(wo​,j+1)=leftChild(n(w0​,j))⟩⋅un(wo​,j)T​vc​⟯其中,σ\sigmaσ函数为sigmoid激活函数,leftChild(n)leftChild(n)leftChild(n)是结点nnn的左子结点:如果判断xxx为真,则⟨x⟩=1\langle x \rangle = 1⟨x⟩=1;反之⟨x⟩=−1\langle x \rangle = -1⟨x⟩=−1。下面计算上图中给定词wcw_cwc​生成词w3w_3w3​的条件概率。我们需要将wcw_cwc​的词向量vcv_cvc​和根结点到w3w_3w3​路径上的非叶结点向量一一求内积。由于在二叉树中由根结点到叶结点w3w_3w3​的路径上需要向左、向右再向左地遍历,我们得到
P(w3∣wc)=σ(un(w3,1)Tvc)⋅σ(un(w3,2)Tvc)⋅σ(un(w3,3)Tvc)P(w_3|w_c) = \sigma(u_{n(w_3,1)}^T v_c) \cdot \sigma(u_{n(w_3,2)}^T v_c) \cdot \sigma(u_{n(w_3,3)}^T v_c) P(w3​∣wc​)=σ(un(w3​,1)T​vc​)⋅σ(un(w3​,2)T​vc​)⋅σ(un(w3​,3)T​vc​) 由于σ(x)+σ(−x)=1\sigma(x)+\sigma(-x)=1σ(x)+σ(−x)=1,给定中心词生成词典ν\nuν中任一词的条件概率之和为1这一条件也将满足:
∑w∈νP(w∣wc)=1\sum_{w \in \nu} P(w|w_c) = 1 w∈ν∑​P(w∣wc​)=1此外,由于L(wo)−1L(w_o)-1L(wo​)−1的数量级为O(log2∣ν∣)\mathcal O (log_2|\nu|)O(log2​∣ν∣),当词典ν\nuν很大时,层序softmax训练中每一步的梯度计算开销相较未使用近似训练时大幅降低。

3. 小节

负采样通过考虑同时含有正类样本和负类样本的相互独立事件来构造损失函数。其训练中每一步的梯度计算开销与采样的噪声词的个数线性相关。

层序softmax使用了二叉树,并根据根结点到叶结点的路径来构造损失函数,训练中每一步的的梯度计算开销与词典大小的对数相关。

三、训练过程

因为CBOW和Skip-gram具有相似性,所以接下来仅以CBOW模型为例说明word2vec是如何训练到词向量的。

  1. 将上下文词和目标词都进行one-hot表征作为输入;
  2. 将one-hot表征分别乘输入层权重矩阵WWW,这个矩阵也叫嵌入矩阵,可以随机初始化生成;
  3. 将得到的向量结果相加求平均值作为隐藏层向量;
  4. 将隐藏层向量乘输出层权重矩阵,这个矩阵也是嵌入矩阵,可以初始化得到。得到输出向量;
  5. 对输出向量做softmax激活处理得到实际输出,并将其与真是标签做比较,再基于损失函数做梯度优化训练。

总结

本博文介绍的是推荐算法中常用的word2vec模型,参考的是李沐考试的《动手学深度学习》。很多地方自己也没搞懂,之后慢慢学习,慢慢丰富博文。

有错误的地方敬请指正。

推荐系统的主要算法(2)相关推荐

  1. 推荐系统中常用算法 以及优点缺点对比

    推荐系统中常用算法 以及优点缺点对比 2014/09/20 [Martin导读]随着互联网特别是社会化网络的快速发展,我们正处于信息过载的时代.用户面对过量的信息很难找到自己真正感兴趣的内容,而内容提 ...

  2. 推荐系统之 BPR 算法及 Librec的BPR算法实现【1】

    [推荐系统之 BPR 算法] 1.关于BPR的论文原文: BPR: Bayesian Personalized Ranking from Implicit Feedback 2.参考1:论文快读 - ...

  3. 全民K歌推荐系统架构、算法及后台设计实践

    猜你喜欢 0.2021年轻人性生活调研报告1.如何搭建一套个性化推荐系统?2.从零开始搭建创业公司后台技术栈3.2021年10月份热门报告免费下载4.微博推荐算法实践与机器学习平台演进5.腾讯PCG推 ...

  4. 推荐系统架构与算法流程详解

    你知道的越多,不知道的就越多,业余的像一棵小草! 成功路上并不拥挤,因为坚持的人不多. 编辑:业余草 zhuanlan.zhihu.com/p/259985388 推荐:https://www.xtt ...

  5. 推荐系统-协同过滤算法简介简化版实例

    必须先忏悔一下太久没记录学习轨迹,最近感觉脑子里一团浆糊,搞得自己非常难受,自信心也是被严重摧毁.训斥自己必须要保持记录的习惯,因为这不仅是对知识的整理,更让你知道其实你知道的很多! 因为刚结束了一个 ...

  6. 推荐系统的常用算法,选择,漫谈,推荐系统开源软件汇总

    推荐系统的常用算法概述 前一阵子准备毕业论文的开题,一直在看推荐系统相关的论文.对推荐系统有了一个更加清晰和理性的认识,也对推荐算法有了深入了解.借此机会总结分享一下,大家多多拍砖. 推荐系统的出现 ...

  7. 推荐系统之--CF算法

    上一节我们已经讲了CB算法这一次我们就来介绍推荐系统下一个算法: CF(Collaborative Filterin)基于协同过滤的推荐算法 CF算法包含如下两类: User-Base CF 和 It ...

  8. 【干货】全民K歌推荐系统架构、算法及后台设计.pdf(附下载链接)

    今天给大家带来腾讯音乐娱乐集团所做的分享<全民K歌推荐系统架构.算法及后台设计.pdf>,本分享共包含如下三大部分: 1.推荐系统架构及粗排设计: 2.精排与多目标模型迭代: 3.召回及推 ...

  9. 简单在线音乐推荐网 基于用户、物品的协同过滤推荐算法 使用Python+Django+Mysql开发技术 在线音乐推荐系统 音乐网站推荐系统 个性化推荐算法开发 人工智能、大数据分布式、机器学习开发

    简单在线音乐推荐网 基于用户.物品的协同过滤推荐算法 使用Python+Django+Mysql开发技术 在线音乐推荐系统 音乐网站推荐系统 个性化推荐算法开发 人工智能.大数据分布式.机器学习开发S ...

  10. 推荐系统产品与算法概述 | 深度

    作者丨gongyouliu 转载自大数据与人工智能(ID:gh_b8b5b02c348b) 作者在<推荐系统的工程实现>(点击蓝字可回顾)这篇文章的第五部分"推荐系统范式&quo ...

最新文章

  1. Cell子刊:特异靶向病原菌致病力的植物天然产物的作用机制
  2. python中变量的基本使用及命名规则
  3. 支付宝支付 - 构建支付表单填并提交
  4. 关闭sublime3自动更新(要输入license才会奏效)
  5. Javscript 实现字符数串比对排序(包含数字及中文数字)
  6. Linux下判断cpu物理个数,几核,是超线程还是多核心
  7. PHP单次数据库查询实现无限级分类
  8. Django项目:CRM(客户关系管理系统)--41--33PerfectCRM实现King_admin编辑整张表限制
  9. springmvc和encache集成
  10. GD32f103介绍第二章
  11. zcu106 固化_xilinx zcu106 vcu demo
  12. Ques1017勇者斗恶龙
  13. python、变量命名中字母不区分大小写_python变量名不区分大小写吗
  14. ShellExecuteEX打开iqy文件导致excel hang的原因分析
  15. MATLAB中的直方图阈值处理
  16. Android多语言设置
  17. 数字信号处理随堂笔记(2)ᝰ离散时间信号与系统的频域分析
  18. react核心精讲视频与实战教程
  19. Redux源码分析--Enhancer
  20. .bat文件改为windows默认打开方式

热门文章

  1. 【Ubuntu】在VMware上安装Ubuntu
  2. 【科研系列】专利检索工具及方法简单介绍
  3. 免费快递单号查询api接口对接调用(PHP示例)
  4. crm操作报价单实体
  5. 教你如何从Google Map爬数据
  6. linux上如何分辨一个二进制可执行文件是debug还是release的
  7. 你应该知道的项目成本控制技巧
  8. node.js学习笔记Day5
  9. 通信原理包络是什么意思_直缝钢管的矫直原理
  10. 全栈工程师的辛苦路程