本发明属于音乐推荐技术领域,具体涉及一种基于词嵌入的个性化音乐推荐方法。
背景技术:
现有音乐推荐大多使用基于内容的推荐,主要是通过传统的信号处理方法分析声学元数据来获得音乐的底层信号特征,并依据这些频域上的特征进行相似性度量以得到关联性较强的歌曲。移动互联网时代,人们通过流媒体服务消费音乐内容已成为一种新的趋势。音乐收听序列中蕴含着关于用户收听习惯和歌曲内在关联的丰富信息,这使得基于收听序列的音乐推荐也日益受到关注。
现有方法虽然简单直观但效果有限,音乐底层特征和用户真实需求之间往往无法准确对应,即不能有效地反映用户对音乐的主观真实感受。此外复杂度较高的特征处理算法由于计算量大、响应时间长,也很难在各种在线场景中部署应用。
技术实现要素:
本发明克服上述现有技术的不足,提供一种运算复杂度低、预测准确率高、泛化能力强的基于词嵌入的个性化音乐推荐方法。
解决上述技术问题所采用的技术方案由下述步骤组成:
(1)构建音乐会话记录
设定用户集合u为:
u={u1,u2,…,un}
其中,ui表示用户集合u中的任意一个用户,ui∈u。
设定音乐集合m为:
m={m1,m2,…,mn}
其中,mi表示音乐集合m中的任意一首音乐,mi∈m。
设定用户u的历史音乐收听序列hu为:
其中,
对于每个用户u,其历史音乐收听序列hu中的每一首音乐
设定用户u的音乐会话记录
其中,
用户u的每个音乐会话记录
用户u的音乐会话记录的集合su为:
其中,
(2)音乐会话记录预处理
1)将音乐会话记录中连续重复的音乐视作一首音乐。
2)剔除音乐数量小于5首的音乐会话记录。
3)剔除音乐数量大于40首的音乐会话记录。
4)对于音乐数量处在20到40之间的音乐会话记录,以音乐会话记录中的第20首音乐为分割点,将原音乐会话记录分割成两个不同的音乐会话记录,从第1首到第20首为一个音乐会话记录,从第21首到最后一首为另一个音乐会话记录。
(3)构建音乐词向量提取模型
1)确定会话记录的中心词和上下文词
设定任意用户u收听历史记录中单个音乐会话记录s为:
s={m1,m2,…,mn}
其中,mi为单个音乐会话记录s中的每一首音乐,即为中心词,mi∈s。
使用大小为w滑动窗口捕获mi的上下文歌曲集合ci:
ci={mi-w,…,mi-1,mi+1,…,mi+w}
其中,mi为上下文歌曲集合ci中的音乐,即为上下文词。
2)初始化中心词和上下文词向量
采用独热编码的方法在cbow神经网络的映射层处对中心词和上下文词进行编码。用户历史收听序列中的歌曲总数量为n,每首音乐与0到n-1之间的连续整数索引一一对应,对于某个具体的音乐,构建一个长度为n的向量,将该音乐索引对应的状态位设置成1,其余状态位设置为0,每个上下文词对应的独热编码向量记为xi。
3)获取上下文词和向量
初始化cbow神经网络的映射层与cbow神经网络的第一个隐藏层之间的权重矩阵wn×d,wn×d是一个n行d列的矩阵,d为音乐词向量的特征维度,根据需求自行设定。将所有上下文词的独热编码向量xi送至cbow神经网络的第一个隐藏层,上下文词和向量h1×d由下式得到:
其中,w为滑动窗口的大小,cbow神经网络的映射层与cbow神经网络的第一个隐藏层之间为权重矩阵wn×d,xi为每个上下文词对应的独热编码向量,xi∈ci。
4)获得预测的中心词音乐
初始化cbow神经网络的第一个隐藏层与cbow神经网络的第二个隐藏层之间的权重矩阵w′n×d,w′n×d是一个n行d列的矩阵,按下式得到输出向量y1×n:
y1×n=h1×d×(w′n×d)t
其中,cbow神经网络的第一个隐藏层与cbow神经网络的第二个隐藏层之间权重矩阵w′n×d,h1×d为上下文词的和向量。
在cbow神经网络的输出层处采用softmax函数对输出向量y1×n进行归一化处理,得到一个n维的概率值softmax(y1×n):
其中,yi为输出向量y1×n每一维度的取值,softmax(y1×n)是一个经由softmax函数进行归一化处理获得n维的概率值,每一维都代表一首预测音乐,概率最大的那一行为预测出的中心词音乐。
5)获得音乐会话记录中每首歌曲的音乐词向量
一对训练样本由下式确定:
<mi,ci>
对音乐会话记录中的每一对训练样本<mi,ci>,重复上述步骤直至会话记录末端,即反复凭借上下文词ci来预测中心词mi,cbow神经网络最终训练得到的权重矩阵wn×d中的所有行向量,即为音乐会话记录中每首歌曲的音乐词向量。
(4)训练音乐词向量提取模型
采用负采样优化方法训练构建的音乐词向量提取模型的步骤如下:
1)构建正样本
训练样本<mi,ci>构成一个正样本,即当给定上下文词ci,训练样本中的另一个词为中心词mi时,则标记为正样本。
2)构建负样本
引入neg(m)个与中心词mi不同的噪声词mk,k为1,2,…,neg,则<mk,ci>构成了neg(m)个负样本,即当给定上下文词,训练样本中的另一个词为噪声词mk时,标记为负样本,噪声词mk服从概率分布p(m):mk~p(m),表示根据分布p(m)来采样中心词mi的负样本mk,词频越高被选中的概率越大,分布p(m)的计算公式如下:
其中,counter(m)表示音乐m在音乐集合m中出现的频次。
3)负采样优化
采用softmax函数处理cbow神经网络的输出向量y1×n的过程中,以neg(m)个负样本和一个正样本进行反向传播参数迭代。
(5)音乐推荐
以cbow神经网络训练得到的所有音乐词向量的均值表示用户向量,衡量用户向量与音乐集合中的每一首歌曲的音乐词向量之间余弦相似度,寻找10个与用户向量最为接近的音乐词向量,这10个音乐词向量所对应的音乐便构成一个推荐列表。判断用户下一首真实收听的音乐是否在此列表中,如果真实收听的音乐处在推荐列表命中,表明推荐结果对用户有效。
本发明结合推荐技术和自然语言处理技术,通过用户行为数据学习音乐的词向量表示。学习到的词向量不仅能反映音乐间的内在关联,还可作为其他模型的输入。本发明用户的音乐会话记录作为模型输入,采用基于cbow的词向量学习工具,提取会话记录中的音乐内在特征,学习音乐的低维,稠密的向量表示。与现有的方法相比,本方法聚焦于用户的短期动态意图推测,具有运算复杂度低、预测准确率高、泛化能力强等优点,可用于下一首曲目预测推荐。
附图说明
图1是本发明实施例1的流程图。
具体实施方式
下面结合附图和实施例对本发明进一步详细说明,但本发明不限于下述的实施方式。
实施例1
以last.fm-1k数据集中992个用户和19150868首音乐为例,基于词嵌入的个性化音乐推荐方法的步骤如下(参见图1):
(1)构建音乐会话记录
设定用户集合u为:
u={u1,u2,…,un}
其中,ui表示用户集合u中的任意一个用户,ui∈u。
本实施例中的总用户数为992个,设定音乐集合m为:
m={m1,m2,…,mn}
其中,mi表示音乐集合m中的任意一首音乐,mi∈m。
本实施例的总音乐数为19150868首,设定用户u的历史音乐收听序列hu为:
其中,
对于每个用户u,其历史音乐收听序列hu中的每一首音乐
设定用户u的音乐会话记录
其中,
用户u的每个音乐会话记录
用户u的音乐会话记录的集合su为:
其中,
(2)音乐会话记录预处理
为最大限度减少原始数据中的噪声干扰,对音乐会话记录进行一些预处理操作:
1)将音乐会话记录中连续重复的音乐视作一首音乐。
2)剔除音乐数量小于5首的音乐会话记录。
3)剔除音乐数量大于40首的音乐会话记录。
4)对于音乐数量处于20到40之间的音乐会话记录,以音乐会话记录中的第20首音乐为分割点,将原音乐会话记录分割成两个不同的音乐会话记录,从第1首到第20首为一个音乐会话记录,从第21首到最后一首为另一个音乐会话记录。
本实施例中的last.fm-1k数据集经会话分割和数据预处理后,得到可用的会话记录总计84902个,每个用户平均拥有865条会话记录,每条会话记录中含12首音乐。
(3)构建音乐词向量提取模型
1)确定会话记录的中心词和上下文词
设定任意用户u收听历史记录中单个音乐会话记录s为:
s={m1,m2,…,mn}
其中,mi为单个音乐会话记录s中的每一首音乐,即为中心词,mi∈s。
本实施例中的音乐会话样例为{backspin,footwork,freeze,jazzflares,headspin}。使用大小为w滑动窗口捕获mi的上下文歌曲集合ci,本实施例中滑动窗口w的大小可以取值为2:
ci={mi-w,…,mi-1,mi+1,…,mi+w}
其中,mi为上下文歌曲集合ci中的音乐,即为上下文词。
本实施例中{backspin,footwork,jazzflares,headspin}为中心音乐freeze的上下文歌曲集合。
2)初始化中心词和上下文词向量
采用独热编码的方法在cbow神经网络的映射层处对中心词和上下文词进行编码。用户历史收听序列中的歌曲总数量为n,每首音乐与0到n-1之间的连续整数索引一一对应,对于某个具体的音乐,构建一个长度为n的向量,将该音乐索引对应的状态位设置成1,其余状态位设置为0,每个上下文词对应的独热编码向量记为xi。
3)获取上下文词和向量
初始化cbow神经网络的映射层与cbow神经网络的第一个隐藏层之间的权重矩阵wn×d,wn×d是一个n行d列的矩阵,d为音乐词向量的特征维度,根据需求自行设定。本实施例中特征维度可以设为150。将所有上下文词的独热编码向量xi送至cbow神经网络的第一个隐藏层,上下文词的和向量h1×d由下式得到:
其中,w为滑动窗口的大小,cbow神经网络的映射层与cbow神经网络的第一个隐藏层之间为权重矩阵wn×d,xi为每个上下文词对应的独热编码向量,xi∈ci。
4)获得预测的中心词音乐
初始化cbow神经网络的第一个隐藏层与cbow神经网络的第二个隐藏层之间的权重矩阵w′n×d,w′n×d是一个n行d列的矩阵,按下式得到输出向量y1×n:
y1×n=h1×d×(w′n×d)t
其中,cbow神经网络的第一个隐藏层与cbow神经网络的第二个隐藏层之间为权重矩阵w′n×d,h1×d为上下文词的和向量。
在cbow神经网络的输出层处采用softmax函数对输出向量y1×n进行归一化处理,得到一个n维的概率值softmax(y1×n):
其中,yi为输出向量y1×n每一维度的取值,softmax(y1×n)是一个经由softmax函数进行归一化处理获得n维的概率值,每一维都代表一首预测音乐,概率最大的那一行为预测出的中心词音乐。
5)获得音乐会话记录中每首歌曲的音乐词向量
一对训练样本由下式确定:
<mi,ci>
对音乐会话记录中的每一对训练样本<mi,ci>,重复上述步骤直至会话记录末端,即反复凭借上下文词ci来预测中心词mi,cbow神经网络最终训练得到的权重矩阵wn×d中的所有行向量,即为音乐会话记录中每首歌曲的音乐词向量。
(4)训练音乐词向量提取模型
用户的收听记录中音乐规模往往过于庞大,使用softmax函数进行归一化操作的时间复杂度太高,故采用负采样优化方法来加速训练模型。
采用负采样优化方法训练构建的音乐词向量提取模型的步骤如下:
1)构建正样本
训练样本<mi,ci>构成一个正样本,即当给定上下文词ci,训练样本中的另一个词为中心词mi时,则标记为正样本。
2)构建负样本
引入neg(m)个与中心词mi不同的噪声词mk,k为1,2,…,neg,则<mi,ci>构成了neg(m)个负样本,本实施负样本的数量设置为15个,即当给定上下文词,训练样本中的另一个词为噪声词时mk时,标记为负样本,噪声词mk服从概率分布p(m):mk~p(m),表示根据分布p(m)来采样中心词mi的负样本mk,词频越高被选中的概率越大,分布p(m)的计算公式如下:
其中,counter(m)表示音乐m在音乐集合m中出现的频次。
3)负采样优化
采用softmax函数处理cbow神经网络的输出向量y1×n的过程中,以neg(m)个负样本和一个正样本进行反向传播参数迭代。
(5)音乐推荐
以cbow神经网络训练得到的所有音乐词向量的均值表示用户向量,衡量用户向量与音乐集合中的每一首歌曲的音乐词向量之间余弦相似度,寻找10个与用户向量最为接近的音乐词向量。这10个音乐词向量所对应的音乐便构成一个推荐列表。判断用户下一首真实收听的音乐是否在此列表中,如果真实收听的音乐处在推荐列表命中,表明推荐结果对用户有效。