• 神经蛙
    2020-11-24
    课后题: 1.排序依据: 根据影片历史平均评分,降序排列。详细调用过程: a.index.html里面的js代码,调用在头部加载的recsys.js 的addGenreRow, 传入参数(页面ID,影片类别名称,rowId, 每行放置影片个数,baseUrl) b.在addGenreRow调用已注册的 getrecommendation 服务,传参的排序依据为rating. c.服务getrecommendation绑定类RecommendationService, GET请求数据 d.RecommendationService.doGet 中 调用 online.datamanager.DataManager#getMoviesByGenre,根据每个影片的历史平均rating,降序排列. 2.根据popularity排序: a.recsys.js function addGenreRow(pageId, rowName, rowId, size, baseUrl) { addRowFrame(pageId, rowName, rowId, baseUrl); $.getJSON(baseUrl + "getrecommendation?genre="+rowName+"&size="+size+"&sortby=popularity", function(result){ $.each(result, function(i, movie){ appendMovie2Row(rowId, movie.title, movie.movieId, movie.releaseYear, movie.averageRating.toPrecision(2), movie.ratingNumber, movie.genres,baseUrl); }); }); }; b.com.wzhe.sparrowrecsys.online.datamanager.DataManager#getMoviesByGenre: 添加一行: case "popularity": movies.sort((m1, m2) -> Integer.compare(m2.getRatingNumber(), m1.getRatingNumber()));break; 用mmovie.getRatings.size() 也行,但应该效率比上面的低。 c.改改前端的展示代码 不太擅长
    展开

    作者回复: 非常好。前端展示代码不用修改,修改js就可以了。

    共 2 条评论
    24
  • Sean
    2021-04-28
    第一题 是根据电影的分数(rating)排序的 第二题 1. 先从RecSysServer.java进入,找到68行的RecommendationService 2. 再看到getMoviesByGenre.java第35行的getMoviesByGenre() 3. 在switch中新增: case "popularity": movies.sort((m1, m2) -> Integer.compare(m2.getRatingNumber(), m1.getRatingNumber()));break; 就是按照热度排序了 4. 再回到RecommendationService的33行, String sortby = request.getParameter("sortby"); 代表排序依据的参数是由某个api传入的 5. 找到recsys.js第102行,把sortby=rating修改为sortby=popularity即可:$.getJSON(baseUrl + "getrecommendation?genre="+rowName+"&size="+size+"&sortby=popularity", function(result)
    展开

    作者回复: 赞

    共 2 条评论
    10
  • 朱月俊
    2020-10-07
    先说一下每一种类型的电影是如何排名的: 默认是按照打分平均分数以及发布时间排名,在recsys.js中的addGenereRow处指定排名的方式。 如何新增排名算法,比如增加热度这个指标? 需要在DataManager中照葫芦画瓢增加ratingNumber,然后在js中指定一下即可。 还在研究的问题:首页是如何调用getrecommendation接口以及如何传入参数的。麻烦老师指教一下。

    作者回复: 关注一下addGenereRow方法中的sortby参数 $.getJSON(baseUrl + "getrecommendation?genre="+rowName+"&size="+size+"&sortby=rating"

    
    8
  • Kepler
    2021-02-03
    问题:如果修改js及对应的RecommendationService后,主页仍未显示排序效果 解决: 方式1. 拉新github(推荐,避免后续有什么其他问题) 方式2. 修改index.html的<script src="./js/recsys.js"></script>,原加载js文件为recsys.js?v=1.19

    作者回复: 非常好 改js版本可是避免很多缓存问题

    
    3
  • ALAN
    2020-10-05
    问题一:按电影的平均打分从高到低排序 问题二:修改DataManager.java中221行代码。将compara函数中参数getAverageRating函数改成getRatingNumber函数

    作者回复: 是的,如果需要看到效果的话,还需要修改一些recsys.js中相关的js代码

    
    3
  • 大钰儿
    2020-10-13
    今天拉的主干代码,默认用了redis载入embedding导致无法启动,是不是需要改一下😅

    作者回复: good point,已经改回了默认从file load数据

    
    2
  • 金鹏
    2020-10-02
    问题一: 首页每行(一个类别)按电影的AverageRating平均打分从高到低做为排序依据; 问题二: public List<Movie> getMoviesByGenre(String genre, int size, String sortBy){ if (null != genre){ List<Movie> movies = new ArrayList<>(this.genreReverseIndexMap.get(genre)); switch (sortBy){ case "rating":movies.sort((m1, m2) -> Double.compare(m2.getAverageRating(), m1.getAverageRating()));break; case "releaseYear": movies.sort((m1, m2) -> Integer.compare(m2.getReleaseYear(), m1.getReleaseYear()));break; case "popularity":movies.sort((m1, m2) -> Integer.compare(m2.getRatingNumber(), m1.getRatingNumber()));break; default: } ........
    展开

    作者回复: 赞。 要真正更改排序的方法,还需要修改一下前端js的一些条件。

    共 2 条评论
    2
  • 轩
    2021-01-06
    课后选择题习题第二题:感觉选项D其实也是深度学习带来的重要变革。 推荐系统是连接人与物的,那么如何表示和编码人与物就是非常重要的,毕竟只有更好的认知,才能带来更好的连接,深度学习带来的表示学习我觉的能算是重要变革吧?虽然非深度学习时代的矩阵分解等得到的latent vector也算是embedding吧,但和如今万物皆可embedding,应该算是个重要变革?

    作者回复: 这样理解也没有错。原题选项D是 “推荐系统可利用的特征发生了根本性的变化”,我的本意是推荐系统可利用的特征原数据其实没有变化,只是处理特征的方式发生了根本性的改变。 只是一道选择题,大家理解知识就好,不用解决于说法。

    
    1
  • VICTOR
    2021-11-29
    针对修改完后前端没有现实的原因,可能是因为js缓存的原因,尝试Win: Ctrl+Shift+R / Mac OS: Cmd+Shft+R 强制刷新缓存进行刷新
    
    1
  • 闫阿佳需要学习
    2021-10-04
    修改index.html的<script src="./js/recsys.js"></script> 没有起作用,最后还是清楚缓存重新加载后显示的 步骤:(chrome)F12->勾选" Disable cache" -> 刷新
    
    1