无编码利用协同算法实现个性化推荐

简介: 根据昨天的URL上报数据生成ALS模型。之后将模型加载到流式计算中,对实时URL的访问用户进行内容推荐。整个流程只需要你写写SQL(做解析),弄弄配置就搞定。

目标

根据昨天的URL上报数据生成ALS模型。之后将模型加载到流式计算中,对实时URL的访问用户进行内容推荐。整个流程只需要你写写SQL(做解析),弄弄配置就搞定。

资源准备

模型训练

首先我们拷贝一份配置文件   als-training,我在配置文件里模拟了一些数据,假设是一些URL,大体如下,表示itemId 为2的文章被userId=1的用户访问了。
http://123.com/path?userId=1&itemId=2
之后的SQL就是抽取出userid 和itemId,然后得到一个包含label, features 的表。在StreamingPro中,所有的的算法的输入都会遵循这个规范。对于ALS算法而言,label 表示userId, features则是userId,ItemId,rating 三个按逗号拼接的字符串。对于回归类算法,则是逗号拼接的数字。
最后通过组件AlgorithmOutputCompositor 完成模型训练。
{
        "name": "streaming.core.compositor.spark.output.AlgorithmOutputCompositor",
        "params": [
          {
            "path": "/tmp/als_log",
            "algorithm": "als"
          },
          {
            "rank": 10,
            "alpha": 1.0
          }
        ]
      }
path表示输出路径。 algorithm 表示算法。目前只支持 als,lr(线性回归),lr2(逻辑回归)三种算法。后续会不断添加。
第二组参数则是对应算法的一些配置参数。你可以配置多组,算法自动回选择最优的一组参数得到模型,并且保存到对应的path路径下。
你可以直接运行得到结果:
./bin/spark-submit   \
--class streaming.core.StreamingApp \
--master local[2] \
/tmp/streamingpro-0.3.2-SNAPSHOT-online-mllib-1.6.1.jar  \
-streaming.name test \
-streaming.platform spark  \
-streaming.job.file.path file://tmp/strategy.v2.json

推荐预测

接着我们要给指定的用户进行推荐。参看 als-predict。
解析出用户的逻辑是和上面的是一样的。里面的核心模块是:
{
        "name": "streaming.core.compositor.spark.transformation.AlgorithmCompositor",
        "params": [
          {
            "path": "file:///tmp/als_log",
            "algorithm": "als",
            "outputTableName": "test4",
            "recommendUsersForProductsNum": 1
          }
        ]
      }
path 是模型文件所在的位置。recommendUsersForProductsNum 表示对每个用户推荐多少内容。outputTableName是输出的表, 方便后续继续操作,比如存储到Redis或者数据库中,方便前端程序做调用。
大家讲上面的运行脚本里的配置文件路径调整下,就可以运行起来,看到运行结果,比如我这里的结果是:
+----+----+--------------------+
|user|item|             ratings|
+----+----+--------------------+
|   3|   2|[[2,3,0.900332472...|
|   2|   3|[[2,2,0.900333589...|
|   2|   2|[[2,2,0.900333589...|
+----+----+--------------------+
你可以输入到任何你感兴趣的系统中,StreamingPro目前支持ES,Parquet等Spark已经支持的格式作为输出。

在流式计算中进行数据推荐

参看 als-streaming-predict,将所有的包名前缀从
streaming.core.compositor.spark
转换为
streaming.core.compositor.spark.streaming
即可支持流式。运行脚本如下:
./bin/spark-submit   \
--class streaming.core.StreamingApp \
--name "join"  \
--master local[2] \
/tmp/streamingpro-0.3.2-SNAPSHOT-online-mllib-1.6.1.jar  \
-streaming.name test \
-streaming.job.file.path file://tmp/strategy.v2.json

总结

在StreamingPro中,一个算法的模型训练,仅仅被看做一个特殊的存储。我们完全可以将对应的AlgothrimOutputCompositor换成 其他的输出源。
而对于数据的预测,我们仅仅是把它看做一个数据Transformer,根据进来的数据,新生成一个prediction字段。
无论是模型训练还是预测,都是基于SQL流来完成的,完美的融入到了数据的流程当中。

附录

感兴趣实现的,可以参考 代码
目录
相关文章
|
6月前
|
机器学习/深度学习 人工智能 搜索推荐
协同过滤算法:个性化推荐的艺术与科学
协同过滤算法:个性化推荐的艺术与科学
协同过滤算法:个性化推荐的艺术与科学
|
6月前
|
机器学习/深度学习 数据采集 搜索推荐
Paper Digest | 突破个性化推荐数据稀疏性:长尾增强的图对比学习算法研究
本文提出了一种新的长尾增强的图对比学习方法(LAGCL),该方法促使模型同时兼顾头部节点与尾部节点之间的知识,并通过长尾增强技术来使模型产出更均匀更准确的节点表征,从而改进基于 GNN 的推荐任务。
|
存储 算法 语音技术
基于ACF,AMDF算法的语音编码matlab仿真
基于ACF,AMDF算法的语音编码matlab仿真
|
存储 算法 C语言
C语言---数据结构实验---哈夫曼树及哈夫曼编码的算法实现---图的基本操作
C语言---数据结构实验---哈夫曼树及哈夫曼编码的算法实现---图的基本操作
基于DCT变换和huffman编码的语音压缩算法matlab仿真
基于DCT变换和huffman编码的语音压缩算法matlab仿真
|
3月前
|
算法 5G vr&ar
基于1bitDAC的MU-MIMO的非线性预编码算法matlab性能仿真
在现代无线通信中,1-bit DAC的非线性预编码技术应用于MU-MIMO系统,旨在降低成本与能耗。本文采用MATLAB 2022a版本,深入探讨此技术,并通过算法运行效果图展示性能。核心代码支持中文注释与操作指导。理论部分包括信号量化、符号最大化准则,并对比ZF、WF、MRT及ADMM等算法,揭示了在1-bit量化条件下如何优化预编码以提升系统性能。
|
3月前
|
算法
【Azure Developer】完成算法第4版书中,第一节基础编码中的数组函数 histogrm()
【Azure Developer】完成算法第4版书中,第一节基础编码中的数组函数 histogrm()
|
4月前
|
机器学习/深度学习 存储 算法
编码之舞:从算法到应用的探索之旅
在数字化时代的浪潮中,编程技术如同一种语言,连接着人类与机器。本文将带领读者踏上一场自数据结构基础至高级算法应用的探索旅程,通过实际案例分析,揭示算法在现代软件开发中的重要作用,并分享作者在编程实践中的心得体会,旨在为初学者和资深开发者提供有价值的参考与启示。
|
4月前
|
机器学习/深度学习 算法 计算机视觉
通过MATLAB分别对比二进制编码遗传优化算法和实数编码遗传优化算法
摘要: 使用MATLAB2022a对比了二进制编码与实数编码的遗传优化算法,关注最优适应度、平均适应度及运算效率。二进制编码适用于离散问题,解表示为二进制串;实数编码适用于连续问题,直接搜索连续空间。两种编码在初始化、适应度评估、选择、交叉和变异步骤类似,但实数编码可能需更复杂策略避免局部最优。选择编码方式取决于问题特性。