软件工程大作业——violet音乐社区 个人工作汇报
一、项目概述
1.1 项目背景
音乐是一门艺术,是由有组织的乐音来表达人们情感、反映人类现实生活情感的艺术。现代科技的发展使得人们可以利用网络随时随地的享受音乐,然而在当今互联网却很少有一个以音乐为媒介的社交平台。本开发团队想以“音乐+社交”的形式,开发一款集听歌、交友和讨论为一体的网上社区——“Violet”音乐社区。Violet多指紫罗兰,也可形容羞怯的人,本团队旨在通过此平台增强人们对音乐的交流,同时拉近人与人之间的距离。
1.2 编写目的
此文档为本人作为该项目成员的个人工作总结,用于记录在开发过程中的经验、感悟以及对该课程的意见和建议,望今后的其他项目能以此为鉴。
1.3 相关链接
完成版:violet音乐社区
前端源码:violet音乐社区前端源码
后端源码:violet音乐社区后端源码
需求分析:violet音乐社区需求分析
设计文档:violet音乐社区设计文档
原型手册:violet音乐社区原型手册
二、个人工作
2.1 模块划分
此项目将模块按功能划分为曲库、播放器、动态、圈子等主要模块。小组按模块将任务分配给各成员。其中,本人负责圈子模块及其内部帖子模块的后端开发。
2.2 圈子模块
该平台是建立在音乐基础上的社交平台。圈子是用户交流、探讨音乐的最主要场所。
圈子类的字段、方法及解释如下所示
本人在此模块编写的功能如下:
- 加载圈子:
在界面中点击“圈子”导航栏,页面将会跳转至圈子页面,同时加载目前平台上的所有圈子。呈现的内容有:圈子图片、圈子名称、成员数。圈子的排列顺序按其关注人数排序。
- 添加圈子:
此功能可供用户创建自己的圈子。用户需输入圈子标题以及主要内容,圈子标题不得与已有圈子重名,内容必须合法规范。若圈子创建成功,则在数据库内为其赋予自增唯一id以标识。
- 删除圈子:
此功能为管理员的特权功能。用于删除内容有违法、不文明、不道德的圈子。
- 关注圈子:
此功能可供用户关注自己感兴趣的圈子。若用户对某圈子内容感兴趣,则可点击“关注”按钮关注该圈子,数据库中用户和圈子关联表则会加入记录。
- 邀请用户:
此功能可供用户将圈子推荐给自己的好友(相互关注的人),提升了该平台用户间交流的途径。
2.3 帖子模块
帖子模块为圈子模块的子模块,用于发布相关的帖子,用户可以在贴子内评论。
贴子类的字段、方法及解释如下所示
本人在此模块中编写的功能如下:
- 加载帖子
此方法用于当用户进入圈子时,加载该圈内的所有帖子。帖子按其内部最新评论排序,最新发评的帖子将在最顶部呈现(类似贴吧顶贴)。
- 添加帖子
此功能用于用户在圈子内发布帖子。用户需输入帖子标题和主要内容。若帖子创建成功,则在数据库内为其赋予自增唯一id以标识。
- 删除帖子
此功能为管理员功能。用于删除内容有违法、不文明、不道德的帖子。
2.4 其他
- 参与类图绘制
- 参与数据流图绘制
- 参与需求文档攥写
- 参与设计文档攥写
三、工作亮点
圈子推荐系统
如今在市场上成功的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,这有可能是基于项和基于用户方法共同作用的结果。这也反映了推荐算法具有结果难解释性,在用户和圈子数量增多时,此现象更为明显。
四、模块测试
4.1 圈子模块
加载圈子(成员数排序)
添加圈子
4.2 帖子模块
加载帖子(时间排序)
发表评论
添加帖子
五、项目总结
这一学期,通过violet音乐平台项目的合作开发,令我收获颇丰,我对软件工程开发有了新的理解和感悟:
项目选择
一个项目在市场上成功与否不仅仅取决于其质量,是否迎合市场需求也同样重要。我们选择violet音乐社交平台,集音乐和社交为一体,正是抓住网民对音乐的依赖以及互联网交流的便捷,填补了市场上的空缺。因此项目的选择需合理分析市场情况,才能做出准确判断。
项目设计
项目设计阶段我们对其进行了需求分析,对该平台的使用人群、功能模块、开发工具等细节进行统一,这一环节往往需要团队间不断讨论和磨合,并通过实际开发情况进行调整和改进。这一过程能明确开发目的,提高后期开发的效率。
协作分工
我们小组合理分析了工作需求,设定了两个前端开发人员和四个后端开发人员,同时四个后端开发人员又按功能模块进行细化分工。这一步明确了各程序员的职责和任务。
代码编写
代码编写需简洁、规范;要有适量注释帮助自己和他人阅读;程序接口需统一,以方便他人调用。
六、课程建议
优点
1. 讲过过程中朱老师会结合个人生活经历,不仅交授专业知识,还穿插人生哲理👍👍👍
2. 讲课逻辑清晰、课堂内容丰富、氛围轻松愉快👍👍👍
3. 课堂留有充足的时间让我们对大作业进行讨论,并且朱老师会给出建设性的意见,受益匪浅👍👍👍
……
建议
1. 书上可以划点重点,讲道理,考试有点慌