音乐是一门艺术,是由有组织的乐音来表达人们情感、反映人类现实生活情感的艺术。现代科技的发展使得人们能够利用网络随时随地的享受音乐,然而在当今互联网却不多有一个以音乐为媒介的社交平台。本开发团队想以“音乐+社交”的形式,开发一款集听歌、交友和讨论为一体的网上社区——“Violet”音乐社区。Violet多指紫罗兰,也可形容羞怯的人,本团队旨在经过此平台加强人们对音乐的交流,同时拉近人与人之间的距离。html
此文档为本人做为该项目成员的我的工做总结,用于记录在开发过程当中的经验、感悟以及对该课程的意见和建议,望从此的其余项目能以此为鉴。前端
完成版:violet音乐社区java
前端源码:violet音乐社区前端源码git
后端源码:violet音乐社区后端源码 程序员
需求分析:violet音乐社区需求分析github
设计文档:violet音乐社区设计文档web
原型手册:violet音乐社区原型手册算法
此项目将模块按功能划分为曲库、播放器、动态、圈子等主要模块。小组按模块将任务分配给各成员。其中,本人负责圈子模块及其内部帖子模块的后端开发。数据库
该平台是创建在音乐基础上的社交平台。圈子是用户交流、探讨音乐的最主要场所。后端
圈子类的字段、方法及解释以下所示
本人在此模块编写的功能以下:
在界面中点击“圈子”导航栏,页面将会跳转至圈子页面,同时加载目前平台上的全部圈子。呈现的内容有:圈子图片、圈子名称、成员数。圈子的排列顺序按其关注人数排序。
此功能可供用户建立本身的圈子。用户需输入圈子标题以及主要内容,圈子标题不得与已有圈子重名,内容必须合法规范。若圈子建立成功,则在数据库内为其赋予自增惟一id以标识。
此功能为管理员的特权功能。用于删除内容有违法、不文明、不道德的圈子。
此功能可供用户关注本身感兴趣的圈子。若用户对某圈子内容感兴趣,则可点击“关注”按钮关注该圈子,数据库中用户和圈子关联表则会加入记录。
此功能可供用户将圈子推荐给本身的好友(相互关注的人),提高了该平台用户间交流的途径。
帖子模块为圈子模块的子模块,用于发布相关的帖子,用户能够在贴子内评论。
贴子类的字段、方法及解释以下所示
本人在此模块中编写的功能以下:
此方法用于当用户进入圈子时,加载该圈内的全部帖子。帖子按其内部最新评论排序,最新发评的帖子将在最顶部呈现(相似贴吧顶贴)。
此功能用于用户在圈子内发布帖子。用户需输入帖子标题和主要内容。若帖子建立成功,则在数据库内为其赋予自增惟一id以标识。
此功能为管理员功能。用于删除内容有违法、不文明、不道德的帖子。
现在在市场上成功的app或互联网平台,都有针对用户的推荐系统。如淘宝网,会根据用户的浏览、购买记录向用户推荐商品;如新浪微博,会根据用户的点赞和关注向用户推荐相关博文;再如抖音app,会根据用户的观看记录和关注对象推荐短视频。一个好的推荐系统能帮助用户扩大浏览范围,提升用户体验,同时也能帮助运营商赢得更多利益。
基于以上的市场背景,本人在圈子模块使用了推荐系统,能够根据用户喜爱,向用户推荐合适的圈子。
协同过滤系统(Collaborative Filtering System)这类系统经过计算用户或/和项之间的类似度来推荐项。与某用户类似的用户所喜欢的项会推荐给该用户。协同过滤算法能够从基于用户(userCF)和基于项(itemCF)两方面向用户推荐内容,将这两个基于不一样方面的方法结合能够提高推荐的合理性。如下将从这两个方面介绍该推荐系统。
基于用户
基于用户的协同过滤算法能够差分为两个步骤:
1. 找到与目标用户兴趣类似的用户集合 2. 找到这个集合中用户喜欢的、且目标用户没有据说过的项目并推荐给用户
在计算用户和用户之间的类似度时,本人使用了余弦距离来计算,设 N(u) 为用户 u 喜欢的物品集合,N(v) 为用户 v 喜欢的物品集合,则用户u和用户v的类似度为:
固然也能够选择Jaccard距离或其余距离的方法,但此处使用余弦距离更加合理且易实现。基于用户的协同过滤原理较为简单,但在实际的应用中仍有缺陷,由于人做为一个复杂的有机体,其思惟的随机性、不肯定性较大,仅凭借用户的喜爱类似程度来推荐会有不许确、覆盖面不广等问题,由此引出基于项的协同过滤算法。
基于项
基于项的推荐能够分为如下三个步骤:
1. 计算物品和物品之间的类似度 2. 根据用户的历史行为的偏好计算对不一样物品的兴趣度 3. 最终根据物品兴趣度计算用户对圈子的兴趣度
在以上步骤中,计算类似度一样选择了余弦距离,此处再也不赘述。至此,基于用户和基于项的协同过滤介绍完毕,以上两种方法在用户、圈子数量增长的状况下,会出现矩阵稀疏、空间浪费等问题,网上为此也有基于模型的协同过滤算法,可供从此项目做参考。
协同过滤算法参考:传送门
冷启动的处理
协同过滤的有个明显的缺点,即须要大量的user-item信息以作出推荐,若平台前期信息不足,则系统不会作出充分推荐或乱推荐,该问题称为“冷启动”。
网上解决冷启动的策略有不少种,如:
1. 提供非个性化推荐:前期在用户信息不足的状况下给用户推荐热门排行版,即从众推荐,等到信息收集足够再进行个性化推荐; 2. 利用用户注册信息:如年龄、性别、职业、民族、学历、居住地等,按必定规则向用户腿甲物品; 3. 选择合适物品启动用户信息:在用户登录时对一些物品进行反馈,收集用户对物品的兴趣信息; ……
本人结合该项目实际状况,采用了第一种策略,旨在体验与积累经验,真实状况还需查阅更多资料、结合更多策略。
解决冷启动问题参考:传送门
推荐系统测试
最后,融合上述的两种方法以及对针对冷启动的策略,默认取基于项的比例β=0.6为权重,得出了最终的圈子推荐系统算法。如下为该系统的效果测试:
在“用户-圈子”关联表中,记录了用户关注圈子的状况,以下图中,用户2关注了[1,6,8]三个圈子,用户1关注了 [1,6]两个圈子,则人为认为这两个用户是类似的,推荐系统应该向用户1推荐圈子8。
下图为使用Postman向推荐系统url发出GET请求的测试,能够看到推荐系统的确向用户1推荐了圈子8,同时也推荐了圈子1,这有多是基于项和基于用户方法共同做用的结果。这也反映了推荐算法具备结果难解释性,在用户和圈子数量增多时,此现象更为明显。
加载圈子(成员数排序)
添加圈子
加载帖子(时间排序)
发表评论
添加帖子
这一学期,经过violet音乐平台项目的合做开发,令我收获颇丰,我对软件工程开发有了新的理解和感悟:
项目选择
一个项目在市场上成功与否不只仅取决于其质量,是否迎合市场需求也一样重要。咱们选择violet音乐社交平台,集音乐和社交为一体,正是抓住网民对音乐的依赖以及互联网交流的便捷,填补了市场上的空缺。所以项目的选择需合理分析市场状况,才能作出准确判断。
项目设计
项目设计阶段咱们对其进行了需求分析,对该平台的使用人群、功能模块、开发工具等细节进行统一,这一环节每每须要团队间不断讨论和磨合,并经过实际开发状况进行调整和改进。这一过程能明确开发目的,提升后期开发的效率。
协做分工
咱们小组合理分析了工做需求,设定了两个前端开发人员和四个后端开发人员,同时四个后端开发人员又按功能模块进行细化分工。这一步明确了各程序员的职责和任务。
代码编写
代码编写需简洁、规范;要有适量注释帮助本身和他人阅读;程序接口需统一,以方便他人调用。
优势
1. 讲过过程当中朱老师会结合我的生活经历,不只交授专业知识,还穿插人生哲理👍👍👍
2. 讲课逻辑清晰、课堂内容丰富、氛围轻松愉快👍👍👍
3. 课堂留有充足的时间让咱们对大做业进行讨论,而且朱老师会给出建设性的意见,受益不浅👍👍👍
……
建议
1. 书上能够划点重点,讲道理,考试有点慌