《一种结合主题模型的推荐算法》学习笔记
于2019年6月发表于计算机应用研究。作者,西南交通大学的曹占伟。
摘要
传统协同过滤推荐算法存在冷启动、数据稀疏以及相似度度量准确性的问题(这里作者指出还有一个相似度度量准确性的问题,普遍是冷启动和数据稀疏)。
基于LDA主题模型对文本隐式主题挖掘很有效(我把这个理解为挖掘上下文信息以处理冷启动),以及KL散度在主题分布相似性度量的准确性。
基于这两种情况,文章提出了结合LDA主题模型的矩阵分解推荐算法。
利用改进的LDA算法输出项目-主题分布(从这里看,作者对LDA算法也进行了改进),并用困惑度作为主题数设置的修正函数;然后分别基于余弦相似度和KL散度计算得到项目相似度矩阵(KL散度作为对相似度准确性的处理)。将相似度矩阵结合原评分训练集=>输出预评分,最后将预评分作为训练集(多维度矩阵的输入),最后输入ALS矩阵分解算法得到推荐结果(矩阵分解)。
实验部分:通过MovieLens数据集的实验结果表明,该算法在不同隐式参数设定下均能得到比ALS推荐算法更小的预测误差。最优预测误差小于传统推荐算法。
个人理解为LDA主题模型挖掘上下文信息改进冷启动、ALS矩阵分解改进数据稀疏、KL散度改进相似度度量准确性。
引言
SVD的协同过滤算法,对高维稀疏矩阵降维,缓解了数据稀疏的问题。利用K-means对用户进行聚类,减小邻居搜索空间(挖掘用户之间的信息,还是解决不了冷启动问题,有一个比较的过程),仍然存在冷启动问题。Maryam等人针对用户兴趣的动态性,提出了FIDFAR方法。该算法结合LDA,通过关联规则挖掘出兴趣-时间模型,根据关联规则和主题分布计算项目相似度,缓解了冷启动问题,但对数据稀疏没有深入讨论。分享三个算法,缓解不同的方面问题。并没有综合考虑。
LDA算法,将项目属性映射成输入文档,通过LDA算法输出项目之间的主题分布,进而得到相似度矩阵,然后通过此矩阵与原评分矩阵进行联合操作得到预评分,再将预评分填充到源矩阵汇总,最后通过ALS算法得到推荐结果。ALS算法缓解了数据稀疏问题。本文在此基础上结合主题模型进行数据填充缓解了冷启动问题,并进一步缓解了数据稀疏问题。
ALS算法过程
通过交替最小二乘法不断求解最合适的两个矩阵,近似评分矩阵R。这篇文章有很详细的求解过程。
ALS这种求解近似矩阵,已经建立SVD矩阵分解的推荐算法基础上了。(不知道还有没有对矩阵分解这块进行改进的可能性。)
LDA主题模型
主题模型概念
Topic Model是用来在大量文档中提取抽象主题的一种统计模型,它可以根据不同文档中出现相同或者不同词汇的条件概率确定文档的隐主题以及词汇的主题归属。
由于TF-IDF方法对文本主题分析的局限性,先后出现了潜在语义分析模型(LSA),马尔科夫模型等,但计算复杂度高、多文档的过拟合以及扩展性不好等问题。也就诞生了潜在狄利克雷分布LDA主题模型。
LDA算法描述
LDA是一种无监督的生成模型。该方法认为每篇文档的生成方式如下:先从主题集合中以一定的概率抽取主题,然后再从这个主题对应的词汇集合中以一定的概率抽取当前词汇,循环执行,直到生成整篇文档。
文本对其改进。利用LDA主题模型对项目信息进行建模,讲项目文件的每一行(单个项目的描述信息)转换为主题的分布,不仅对文档进行了降维而且挖掘除了不同词可能包含的相同或者相近的主题信息。主题分布信息经过本文方法处理后编程项目相似度矩阵,可以结合原评分矩阵产生预评分填充到原评分矩阵中形成新的输入集。(引入了困惑度,同时采用KL散度计算相似度矩阵)
数据集美国GroupLens提供的MovieLens数据集。
算法过程
实验结果
显示根据不同的步长,得到最优困惑度。
以此困惑度,去找到最优的隐因子。其中用MAE值作为比较。
结束语
文章后续工作将着重于将LDA-IT-ALS算法并行化,实现其在线实时处理。也就有了后面《基于Spark的推荐算法研究》。
参考文献
在文末有一篇参考文献。
嵌入LDA主题模型的协同过滤推荐算法。