推荐算法的模型优化与最终实现

5月16日

数据的优化处理方式:

通过观察数据集发现,action表的user和jd的匹配的结果(satisfied是否为1)和前面的字段几乎没有什么区别,所以我们判断需要自己从数据集中提取一些数据。一开始时,使用action表中字段satisfied为1的3w行数据,与我们自行在user表与jd表生成笛卡尔积生成3w行,拼凑在一起。需要生成3w行,所以我们为了数据尽可能随机,取了175个用户和175个岗位,做笛卡尔积,然后将它们全部设置为不匹配,这样制造3w行不匹配的数据,与3w行satisfied为1一定匹配的数据相结合,做出3w行匹配,3w行不匹配。但最终学习的成功率只有80%,并且有相当多的匹配获得了最高分,冒泡排序出前20的匹配序列经过人的判断也不是很匹配。总结而言,这一次是比较失败的。
就在这时,我们通过观察数据发现,3w不匹配的数据中,有相当一部分数据只有一部分是匹配的,只是由于剩下的另一部分数据的简历与岗位不是很匹配导致整条数据不匹配,换言之,不匹配的数据量过少,导致影响过小。所以我们决定生成10w的笛卡尔积。但最终结果还是不尽人意,原理上讲,这样做的数据的岗位的类别和求职者的专业应该完全匹配上,但是在排名靠前的序列中还是有很多匹配不上,而且获得最高分的序列过多,测试中获得最高分的序列有63条,次高分有600余条。测试时的输入是设计的完美匹配其中一个岗位的人进行各项信息的输入,而在最终看结果时,这个岗位的匹配度只得了次高分。最后,为了排除在做笛卡尔积时将本来能匹配上的简历和岗位给默认为不匹配,我们对简历的专业和岗位的类别用代码进行过滤,过滤掉所有可能匹配上的内容,只留下绝对不匹配的数据,作为不匹配的数据加入到数据集中。这是考虑到之前笛卡尔积的生成很有可能将原本能够匹配的序列默认设计为不匹配导致降低精度,所以第三次在生成时将岗位的类别和求职者的专业进行限制,只生成岗位的类别和求职者的专业对不上的序列。同样生成9w。

模型的优化:

在之前的实现中,隐藏层为两层,然而训练完成后的正确率始终不能提高,就更换了神经网络的模型。同时在参数上也进行了调整,使用了学习率动态改变的算法,最终提高了正确率。 
如果要真正实现快速推荐,就只能在算法运行时仅进行矩阵的运算,以保证速度。所以我们将神经网络中的参数保存到本地,在进行推荐时仅进行矩阵计算,这样便提高了速度,节省了资源。此外,我们所有的后端代码全部是java实现的,但算法是python实现的,在java中算法运行速度较慢,所以我们选择了在java中调用python并接受return值来实现,根据我们自己的需求,选用了runtime的方法进行调用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值