软件工程大作业——violet音乐社区 个人工作汇报

二次信任 提交于 2020-12-26 07:56:01

一、项目概述

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. 书上可以划点重点,讲道理,考试有点慌

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!