天天看点

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

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

之后的sql就是抽取出userid 和itemid,然后得到一个包含label, features 的表。在streamingpro中,所有的的算法的输入都会遵循这个规范。对于als算法而言,label 表示userid, features则是userid,itemid,rating 三个按逗号拼接的字符串。对于回归类算法,则是逗号拼接的数字。

最后通过组件algorithmoutputcompositor 完成模型训练。

path表示输出路径。 algorithm 表示算法。目前只支持 als,lr(线性回归),lr2(逻辑回归)三种算法。后续会不断添加。

第二组参数则是对应算法的一些配置参数。你可以配置多组,算法自动回选择最优的一组参数得到模型,并且保存到对应的path路径下。

你可以直接运行得到结果:

接着我们要给指定的用户进行推荐。参看 als-predict。

解析出用户的逻辑是和上面的是一样的。里面的核心模块是:

path 是模型文件所在的位置。recommendusersforproductsnum 表示对每个用户推荐多少内容。outputtablename是输出的表, 方便后续继续操作,比如存储到redis或者数据库中,方便前端程序做调用。

大家讲上面的运行脚本里的配置文件路径调整下,就可以运行起来,看到运行结果,比如我这里的结果是:

你可以输入到任何你感兴趣的系统中,streamingpro目前支持es,parquet等spark已经支持的格式作为输出。

即可支持流式。运行脚本如下:

在streamingpro中,一个算法的模型训练,仅仅被看做一个特殊的存储。我们完全可以将对应的algothrimoutputcompositor换成 其他的输出源。

而对于数据的预测,我们仅仅是把它看做一个数据transformer,根据进来的数据,新生成一个prediction字段。

无论是模型训练还是预测,都是基于sql流来完成的,完美的融入到了数据的流程当中。