#1 - 2018-5-13 23:16
windrises (一个纠结的面瘫伪宅)
我又来了,这次做了一个推荐系统(bgm38)(是的,之前也有人做过)
本帖是对https://github.com/windrises/recommendation/blob/master/recommendation.ipynb这个文档的补充,主要是说明系统的使用方式和我的一些工程上的考量。如果打不开github,可以尝试这个地址https://windrises.net/recommendation.html
脚本安装地址:https://greasyfork.org/zh-CN/scripts/367956-%E6%BC%AB%E6%B5%B7%E6%8B%BE%E8%B4%9D
算法的文档和代码以及用到的数据在https://github.com/windrises/recommendation
后端和脚本等代码依然在之前的项目地址:https://github.com/windrises/bgmtools
这次的数据是5月6号爬取的,你可以在上面找到包括爬取的原始数据,数据库导出数据,训练模型使用的数据等等

主要功能有:
1、针对每个动画条目提供“相似条目”和“可能喜欢”两个推荐模块,并且提供api
2、在网站首页提供个人的每日推荐
3、个性化定制你的每日推荐
4、查看推荐历史
5、提供好友推荐

详细说明:
1、在动画条目页显示,可以点击“更多推荐”按钮查看更多推荐,分别最多有48个推荐,按相似度排序。
“相似条目”的意思是两个条目有很多相同的标签,当然并不是简单的统计有多少是相同的,这里不再赘述。
“可能喜欢”的意思就是“喜欢该条目的用户可能也喜欢这些条目”。
下图是花开物语中推荐结果的截图

2、在首页查看,再次点击“每日推荐”可以换一组推荐,每日最多推荐四组。
每一组前两个是按你的预测评分中比较高的条目中随机选取的(数据是5月6号爬的,在这之前评分数超过50个的用户可以使用这个功能,并且不会推荐那些你已经标记过的条目,我对每个用户预存了推荐top500的条目)。第三个是从你曾经给过好评的条目的相似条目中随机抽取的(如果你不满足前面的条件,那你的首页会全是这种相似条目的推荐)。
这个功能是所有功能中最复杂的,涉及到很多考量,下面是效果截图

3、在 个人设置--漫海拾贝 里,可以定制你的每日推荐。
同步按钮点击后服务器会爬取你最近标注的条目数据加入到数据库,并可能会影响到之后的每日推荐结果(注:这个同步功能暂时还没有实现,看情况以后有可能会完善)。

4、在动画的收藏页可以看到历史推荐(只有每天推荐的第一组才会被记录在这里,并且一般来说之后不会重复推荐)

5、先转到你的好友列表,然后会在旁边出现好友推荐的按钮。这里推荐的用户都是与你有相似喜好的(包括未评分的潜在的喜好),按相似度排序。


这个系统从我开始构思找资料到着手做大量的实验到现在最终完成花了整整一个月中的每个夜晚,其中光是做实验就花去了大部分时间,然后写上面的文档也用了好几天。最终的结果我也比较满意,你也可以自己找些条目看看推荐结果。
我做这个推荐系统除了想学点东西,更大的想法其实就是想在大量的动画里拾取那些我可能会喜欢的。用这个系统先帮我筛选一遍,剩下推荐给我的,我自己再挑选着看。在这之前我偶尔会去看b站里我喜欢的动画下面提供的推荐,也靠着这个推荐找到了很多喜欢的动画,但是我还是不够满意。我也对一些常见的有推荐系统的网站做过调研,上面文档里写的有,这里就不多说了。
我之前想过如果有些动画的资源随着时间的流逝而下载不到了,那这个动画可能就真的永别了。现在我觉得如果我连那些可能喜欢的冷门作品的名字都没听过的话,这才是真正的遗憾。而这个每日推荐其实更加注重推荐那些你可能感兴趣的冷门佳作,如果你在每日推荐里看到了一些从没听过的并且评分人数很少的条目,不要单纯认为这个推荐算法有问题。其实每个人的推荐结果中靠前的往往都是那些很有名并且口碑很好的作品,但是并不是每个人都想把那些捧上神坛的作品看一遍。我个人比较喜欢找那些7分档的非热门番看,当然每个人有每个人的口味,这些推荐方面的个性化偏好你都可以自定义。

由于系统比较复杂,现在可能还不稳定,我也还没来得及做更多的测试。等稳定后你可以在超合金组件里自己创建一个组件,然后把脚本复制过去,这样你就可以在多个终端使用了(你的个人设置是存在服务器端的),当然用油猴的话更新脚本就会很方便。如果你用的app是基于网页爬取来实现的,那么你就可以在app中使用这个功能。

我想写的其实大部分都在上面的文档中,这里就暂时写到这里。如果你发现了有趣的推荐结果,不管是否准确,都欢迎跟帖分享。不管是写网站还是做推荐系统我都只是入门,不懂的地方非常多,非常非常非常欢迎提出各种意见和建议(bgm24)。如果发现了bug也请告知我,我会尽量第一时间修复。

----------------
脚本更新到了0.8版本,合并了@发光的球 做的https://bgm.tv/group/topic/345713
#2 - 2018-5-13 23:58
(温柔可爱的小男孩最棒了)
感觉相似和可能喜欢有点重复。
bug的话,脚本里,条目页的相似超链接没加id,data-original-title属性由于标签是之后插入的没有正常的效果。
#2-1 - 2018-5-14 00:23
发光的球
bgm的推荐也见过不少了,但比起冰冷的算法我还觉得mal的人力推荐比较有温度,所以LZ既然用的django,有没有兴趣把这个合到你的bgmtools里(bgm38)
#2-2 - 2018-5-14 15:04
windrises
发光的球 说: bgm的推荐也见过不少了,但比起冰冷的算法我还觉得mal的人力推荐比较有温度,所以LZ既然用的django,有没有兴趣把这个合到你的bgmtools里
感谢反馈bug,id修改好了
data-original-title看起来有点麻烦,索性删了
你的脚本也合并进来了,0.4版本(油猴刚才各种抽风,害得我一样的代码交了好几个版本
#2-3 - 2018-5-14 15:15
发光的球
windrises 说: 感谢反馈bug,id修改好了
data-original-title看起来有点麻烦,索性删了
你的脚本也合并进来了,0.4版本(油猴刚才各种抽风,害得我一样的代码交了好几个版本
我的意思是,lz有没有兴趣把后端的代码也合进去(bgm38)
#2-4 - 2018-5-14 15:41
windrises
发光的球 说: 我的意思是,lz有没有兴趣把后端的代码也合进去
我再考虑考虑(bgm38)
现在这样不是也挺好的吗
#3 - 2018-5-14 00:13
算、算法看跪了……
#4 - 2018-5-14 00:22
赞!!
几点反馈:
展开以后想收起只能刷新
好友推荐里会出现已经加过的
设置里点按钮没反应
#4-1 - 2018-5-14 15:06
windrises
更新了,再点一次就可以收回来
我没有爬每个用户的好友列表,所以这个不能去重
我看了一下log,确实没有找到你有请求过设置页面,不过我看别人都成功请求了,我也不清楚什么情况...
#4-2 - 2018-5-14 15:49
君寻
windrises 说: 更新了,再点一次就可以收回来
我没有爬每个用户的好友列表,所以这个不能去重
我看了一下log,确实没有找到你有请求过设置页面,不过我看别人都成功请求了,我也不清楚什么情况...
Setting无反应+1,看了代码没什么问题,console也没有,原因不明
#4-3 - 2018-5-14 15:55
windrises
君寻 说: Setting无反应+1,看了代码没什么问题,console也没有,原因不明
你们应该是连设置里 漫海拾贝 那个按钮都点不开吧,我在这边用你们的用户名模拟了一下可以点开
你们是用的什么浏览器,什么客户端
#4-4 - 2018-5-14 16:08
君寻
windrises 说: 你们应该是连设置里 漫海拾贝 那个按钮都点不开吧,我在这边用你们的用户名模拟了一下可以点开
你们是用的什么浏览器,什么客户端
Chrome啊,其他的地方都没问题,就setting不行
#4-5 - 2018-5-15 11:54
君寻
windrises 说: 你们应该是连设置里 漫海拾贝 那个按钮都点不开吧,我在这边用你们的用户名模拟了一下可以点开
你们是用的什么浏览器,什么客户端
找到原因了,原来是因为跟我安装的一个叫“Silent B”的脚本冲突了
#4-6 - 2018-5-16 18:30
Aoi
君寻 说: 找到原因了,原来是因为跟我安装的一个叫“Silent B”的脚本冲突了
哦我是和阿叉的BNM冲突,这几个都涉及在设置里加东西
#5 - 2018-5-14 00:24
#6 - 2018-5-14 00:31
(无论道路通向何方,光明将邀我前往。 ...)
马克
#7 - 2018-5-14 01:13
楼主牛逼!
1个小建议,“可能喜欢”希望去掉已看过的,看了眼我喜欢的几个番的“可能喜欢”要么就是看过的要么就是非常偏的老番冷番(bgm38)
另外发现了一个令人震惊的事实,明明我感觉我和神户小德的口味差异很大的,可他居然在我的好友推荐里(bgm38)
#7-1 - 2018-5-14 15:08
windrises
可能喜欢我是准备了48个推荐,再后面的可能就不太准了(bgm38),如果去掉了可能就没啥推荐的了
我也考虑过把那些相关联的条目去掉(比如第一季与第二季之类的),但是后来又觉得保留着也挺好,可以检验推荐结果是否准确
#7-2 - 2018-5-14 15:09
windrises
好友推荐这个我没有怎么研究,直接把跑出来的结果扔上去了(bgm38)
#8 - 2018-5-14 01:57
(人型自走单线程大脑培养皿#5)
先赞一个
#9 - 2018-5-14 02:05
(。´-д-)
厉害了!!!
#10 - 2018-5-14 02:29
(Then I noticed the fact there was no time.)
#11 - 2018-5-14 04:35
(当一个乐观的笨蛋就可以了)
大佬大佬
#12 - 2018-5-14 08:38
(哼,资本主义者,骗得过正义吗)
得到了一些很新奇的推荐...
#13 - 2018-5-14 15:33
好赞!
#13-1 - 2018-5-14 16:00
theme
有些推荐点过去是“唔咕”……
#13-2 - 2018-5-14 16:03
windrises
theme 说: 有些推荐点过去是“唔咕”……
是哪个条目的哪个推荐,我去瞅瞅
#13-3 - 2018-5-14 16:07
theme
windrises 说: 是哪个条目的哪个推荐,我去瞅瞅
Ghost In The Shell S.A.C -> Robot chicken Season 2 类似的几个
#13-4 - 2018-5-14 16:43
windrises
theme 说: Ghost In The Shell S.A.C -> Robot chicken Season 2 类似的几个
你应该是用的0.1版本的吧,那个版本的脚本里推荐的条目的名字上的超链接没有加上去,图片上的超链接是可以用的
油猴脚本一直更新失败,等更新好了,你再下个最新的就好了
#13-5 - 2018-5-14 16:53
theme
windrises 说: 你应该是用的0.1版本的吧,那个版本的脚本里推荐的条目的名字上的超链接没有加上去,图片上的超链接是可以用的
油猴脚本一直更新失败,等更新好了,你再下个最新的就好了
是 0.4 版本的
#13-6 - 2018-5-14 16:57
theme
windrises 说: 你应该是用的0.1版本的吧,那个版本的脚本里推荐的条目的名字上的超链接没有加上去,图片上的超链接是可以用的
油猴脚本一直更新失败,等更新好了,你再下个最新的就好了
啊 确实点图片就行了。另外,点“可能喜欢” 右侧的 “更多推荐”,展开的是上方的 “相似条目” 的更多推荐。  tempermonkey 里显示的是 0.4,我去换新版的试试~
#13-7 - 2018-5-14 17:00
windrises
theme 说: 啊 确实点图片就行了。另外,点“可能喜欢” 右侧的 “更多推荐”,展开的是上方的 “相似条目” 的更多推荐。  tempermonkey 里显示的是 0.4,我去换新版的试试~
是的,油猴貌似在抽风
0.4的那个显示不正常 总之先用这个更新吧
https://github.com/windrises/bgm ... y/recommendation.js
#13-8 - 2018-5-14 17:02
theme
windrises 说: 你应该是用的0.1版本的吧,那个版本的脚本里推荐的条目的名字上的超链接没有加上去,图片上的超链接是可以用的
油猴脚本一直更新失败,等更新好了,你再下个最新的就好了
嗯 有点奇怪。。。那个脚本安装页面给出了“升级到0.6” 的按钮,但是点过去是给你重新安装 0.4 的提示。不知是不是要过几天再试 :)
#13-9 - 2018-5-14 17:04
windrises
theme 说: 嗯 有点奇怪。。。那个脚本安装页面给出了“升级到0.6” 的按钮,但是点过去是给你重新安装 0.4 的提示。不知是不是要过几天再试 :)
确实是这样,好气(bgm38)
#13-10 - 2018-5-14 17:05
theme
windrises 说: 确实是这样,好气
哦哦哦,换了 0.6 一切都变好了,连推荐的内容感觉都变好了!赞赞赞 👍
#14 - 2018-5-14 15:38
(V1046-R MAHORO)
随便试了下《冰果》相似条目,全是京都的,估计是有tag的缘故吧,
这个权重是不是调整下
#14-1 - 2018-5-14 15:43
windrises
确实是这样的,我也发现了这个问题
权重的设置我没有深入研究,下次更新数据会考虑这个问题(如果有的话(bgm38)
#14-2 - 2018-5-14 15:45
烈之斩
windrises 说: 确实是这样的,我也发现了这个问题
权重的设置我没有深入研究,下次更新数据会考虑这个问题(如果有的话
要想比较合理估计得手动设置tag黑名单…
#14-3 - 2018-5-14 15:46
windrises
烈之斩 说: 要想比较合理估计得手动设置tag黑名单…
确实是的...
#14-4 - 2018-5-14 15:47
Rくん
烈之斩 说: 要想比较合理估计得手动设置tag黑名单…
里番(bgm38)
#15 - 2018-5-14 16:16
(✨️VIP 8✨️)
(bgm38) 打开了新世界的大门
#15-1 - 2018-5-14 16:46
windrises
震惊哭 这个是从哪看到的
#15-2 - 2018-5-15 03:17
若卡
windrises 说: 震惊哭 这个是从哪看到的
http://bgm.tv/subject/198894
#16 - 2018-5-14 17:14
(人工灭亡典礼。)
资瓷。
#17 - 2018-5-14 18:28
mark
#18 - 2018-5-14 19:02
(黑藻并非藻类!)
每次看到推荐系统都有想要好好评分的冲动...
#19 - 2018-5-15 04:13
([Stay alive] 愛してる、それだけです)
为啥我的标签全都有两个(bgm38)
win10 1803 / Firefox 60.0 (64-bit)

#19-1 - 2018-5-15 14:13
windrises
我刚装了一样版本的firefox,试了一下一切正常。有没有可能是你把这个脚本装了两次(bgm38)
#19-2 - 2018-5-15 15:41
神戸小鳥
windrises 说: 我刚装了一样版本的firefox,试了一下一切正常。有没有可能是你把这个脚本装了两次
还真是安了两次(bgm38)正常同一个脚本再安装不是更新吗
#20 - 2018-5-15 08:04
(世界の殼を破られば、我らは生まれずに死んでいく ... ...)
马克一下
#21 - 2018-5-15 11:26
(你的爱还不够啊!)
好劲(bgm38)
#22 - 2018-6-18 21:12
(有爱的宅才是真宅~)
感谢作者@windrises ,有了这个推荐系统的话以后想找合口味的动画看时就方便多了。
不过我在使用过程中出现了一点问题。
“相似条目”和“可能喜欢”两个推荐模块是正常工作的。
然而在首页却看不到“每日推荐"的模块。
对比后发现我的主页模块好像和作者截图相比好像少了一块。
因为不懂论坛贴图的方法我就把主页截图放百度网盘了。https://pan.baidu.com/s/1DnHmy9j5oie2XSluBPzyDA
试着用f12查看主页的html,上面也找不到id为prgCatrgoryFilter的元素。
操作系统和浏览器型号是debian + Mozilla Firefox 52.8.0
我用Chromium 62.0.3202.89也是同样在主页找不到id为prgCatrgoryFilter的元素。
我大概是1213年的时候注册的,但是很久没有上bangumi了,不知道是否需要手动把主页更新到最新样式?
不知道是不是只有我一个人遇到这种情况?
#22-1 - 2018-6-18 21:20
windrises
因为你没有“在看”的动画,所以你的首页模块就少了一块。那个模块就是用来方便管理“在看”条目的
你得先把一个动画/书籍/三次元标记为“在看”,然后那个模块才能出现
这个问题我之前确实没有考虑到(bgm38)...
#22-2 - 2018-6-19 01:13
kagurasaka_koyoi
windrises 说: 因为你没有“在看”的动画,所以你的首页模块就少了一块。那个模块就是用来方便管理“在看”条目的
你得先把一个动画/书籍/三次元标记为“在看”,然后那个模块才能出现
这个问题我之前确实没有考虑到...
多谢回复。我标记了一个想看的动画以后的确就出现“每日推荐”了,但是里面依然没有任何内容。我试着直接访问$.getJSON方法里的url(https://windrises.net/bgmtools/r ... g&user_id=71966),页面显示Server Error (500)。不知道是不是由于我打分的动画太少- -
#22-3 - 2018-6-19 11:36
windrises
kagurasaka_koyoi 说: 多谢回复。我标记了一个想看的动画以后的确就出现“每日推荐”了,但是里面依然没有任何内容。我试着直接访问$.getJSON方法里的url(https://windrises.net/bgmtools/r...
500是服务器出错了,代码有bug,现在修好了
不过你还是没有推荐结果,因为数据是5月6号爬的,在这之前你没有标记过动画,因此没法推荐。。
#22-4 - 2018-6-19 14:22
kagurasaka_koyoi
windrises 说: 500是服务器出错了,代码有bug,现在修好了
不过你还是没有推荐结果,因为数据是5月6号爬的,在这之前你没有标记过动画,因此没法推荐。。
这么悲剧的吗。。。
既然模型已经训练好了的话,能否在收到请求时通过即时爬取用户的最新评分数据来更新推荐数据库?比如增加一个“通过现有评分数据更新结果”按钮(限制1天调用1次)。然后用“换一批”按钮随机选取数据库中已生成的推荐结果进行展示。
#22-5 - 2018-6-19 19:23
windrises
kagurasaka_koyoi 说: 这么悲剧的吗。。。
既然模型已经训练好了的话,能否在收到请求时通过即时爬取用户的最新评分数据来更新推荐数据库?比如增加一个“通过现有评分数据更新结果”按钮(限制1天调用1次)。然后用“换一批”按钮随机...
你说的这个我在主楼里提到了,你看看第三个功能的介绍
按钮加上去了,但是后台功能我暂时还没做,因为这个有点麻烦而且使用这个插件的人好像不是很多。。。
等以后有时间了可能会加上或者再爬一遍数据
#22-6 - 2018-6-19 21:37
kagurasaka_koyoi
windrises 说: 你说的这个我在主楼里提到了,你看看第三个功能的介绍
按钮加上去了,但是后台功能我暂时还没做,因为这个有点麻烦而且使用这个插件的人好像不是很多。。。
等以后有时间了可能会加上或者再爬一遍数据
哦哦。。漏看了。期待更新后的版本~