软工大作业·历物语(二)
文章来源:中国软工亚洲指挥中心(Steins;Gate)
共同作者:纪神,爵爷,老板,小男孩(按首字拼音排序)
责任编辑:爵爷
先大致说一下这两周完成的内容:
- 登录界面
- 注册界面
- 新闻详情界面
- 用户偏好算法(初版)的设计与实现
- 通知系统
- 私信系统
- 部分实现了数据操作辅助类族
- 部分实现了推送系统
- 部分UI的优化
细节还有非常非常多,当然不是说要拘泥于细节而失去了整体意识,而是在细节的把控中了解整个项目的脉络。虽然功能远没有实现完,但是现在的项目结构已经略显臃肿了,所以下一周准备梳理一下整个项目,开始尝试自上而下地审视并重新设计一下整个结构。
本周做的工作值得细说的还是用户偏好算法的设计。用户偏好算法是我们项目的核心算法,目的是为推测出用户近期对于新闻类型的偏好,并记录在系统内,从而在之后可以让用户选择自己感兴趣的信息,并且每当发布了用户感兴趣的信息之后可以推送给用户。除此之外,最重要的一点是,系统可以根据用户的喜好向用户提供兴趣相投的好友,从而提升用户黏性,并可以隐形中推广应用。
作为一个用户偏好推测算法,可以划分到人工智能的领域,在这里我想谈一下对于算法起点的考虑。说到机器学习,普通水平的实现只要看了Coursera上吴恩达的Machine Learning就够用了(当然我是说非常简单的应用),再不然Github上一堆数千star的项目,甚至都不需要知道基本概念。但是在初版算法设计中我们并没有采用机器学习算法,这是由于以下几点考虑:
- 我们采集的数据特征值非常少
- 我们采集的数据量非常少
- 手机计算资源的限制
- 在对机器学习没有深入的研究的情况下,设计出的算法有时还不如最普通的迭代
在初版算法设计中,我们只是使用了简单的权值计算,目前先实现这版测试一下效果如何,具体设计如下:
算法目的:
为推测出用户近期对于新闻类型的偏好,并记录在系统内,从而在之后可以让用户选择自己感兴趣的信息,并且每当发布了用户感兴趣的信息之后可以推送给用户。除此之外,最重要的一点是,系统可以根据用户的喜好向用户提供兴趣相投的好友,从而提升用户黏性,并可以隐形中推广应用。
算法原理:
算法计算结果是用户对于某种类型的新闻的偏好程度,目的在于两部分,第一部分是推测近期趋势,第二部分是推测用户喜好。
为了体现这两部分,我们使用两个衡量指标:时间因子tf(time factor)和认真程度cd(conscientious degree)来表示。为了突出两方面的因素,我们使用高阶运算来提升权值,计算出的值为tpw(temporary preference weight)。
除此之外,由于偏好值的计算是不断迭代的,所以每次计算新的偏好值时应该考虑之前的计算结果,给定一个权值因子wf(weight factor),并设旧的用户偏好值为opw(old preference weight),则新的用户偏好值为npw = opw wf + (1 - wf) * tpw*,目前取wf为0.3,并取opw初值为0。算法过程:
把用户访问一篇新闻的时间以及在这篇新闻上的停留时间分别设为visitTime(单位:毫秒)和stayTime(单位:毫秒),考虑通过这两个因素来计算tf和cd。
1、对于tf的计算,主要是体现用户的偏好有多“新”,考虑取看这篇新闻距离现在的时间间隔,即currentTime - visitTime,换算成天数设为dayInterval,那么可以取tf = 30 / (dayInterval + 1)(取30为了使tf和cd处于同一个数量级)。
2、 对于cd的计算,取平均阅读每个字所用的时间,设新闻正文字数为newsLength,则cd = stayTime / newsLength。
3、对于tpw的计算,为了使越新、阅读越认真的新闻重要性越大且增长速度越来越快,可以取tf和cd和的平方,即tpw = (tf + cd) ^ 2。 而用户在某一种类的新闻浏览记录有n条,设每条记录计算的tpw值为tpwi,综上所述可得tpwi = (30 24 * 3600 * 1000 / (currentTime - visitTime + 86400000) + stayTime / newsLength) ^ 2*。
4、则tpw最终计算结果为。最终计算所得的npw = wf opw + (1 - wf) * tpw*。
(注意:还可以考虑的一点是,如果我是信息学院计算机系的,你也是信息学院计算机系的,那么我们很可能就有共同语言,也就是同一学院、同一学系或者同一年级的用户也可能有共同的喜好,即使这一点没有体现在算法计算结果上,考虑把这一点也加在偏好算法计算中)。算法实施:
我们在数据库中设置了一张用户偏好表用于记录用户偏好信息,表项有用户id、新闻类型、偏好旧值和详细信息,在详细信息中记录了一个数组,数组中每一个元素都包含visitTime和stayTime两部分。
每当用户访问一篇新闻时,都会更新相应的表项。同时在用户表中添加一个喜好标签表项,记录用户最近最感兴趣的新闻类型,最多记录三个,太多的话匹配结果会过多,使得匹配系统没有了意义,而且用户也没有精力去关注那么多的新闻类型。当分别计算完一个用户对于各个新闻类型的喜好权值之后,将其排序,得到的前三名新闻类型放入喜好标签中。
当推送新闻时,直接根据标签过滤即可。推荐好友时,比对两人的喜好标签即可,只要有共同的标签就推荐,并且如果当前用户没有喜好标签,那么就随机从所有用户中抽取;如果当前用户有喜好标签,那么对于其他待匹配的没有喜好标签的用户而言,也采用随机抽取的办法。
关于用户喜好的计算时机,因为计算不是在服务器上完成的(用云引擎有点麻烦而且也没必要占用服务器资源),所以考虑只要用户登录了,就在后台计算用户偏好,每个登录周期偏好只计算一次。
目前为止只做了简单的试验,算法可以得到较为合理的偏好值,但是在真实的应用场景中效果如何还有待进一步的测试。
软工大作业·历物语(二)相关推荐
- 软工大作业·历物语(一)
文章来源:中国软工亚洲指挥中心(Steins;Gate) 共同作者:纪神,爵爷,老板,小男孩(按首字拼音排序) 责任编辑:爵爷 终于开始了正式的开发工作.鉴于团队之前多少有点开发经验,很多界面写起来并 ...
- 软工大作业·倾物语(三)
文章来源:中国软工亚洲指挥中心(Steins;Gate) 共同作者:纪神,爵爷,老板,小男孩(按首字拼音排序) 责任编辑:爵爷 本周大概把四个界面的样子做出来了(没有做细节,现在不贴图),并且老板那边 ...
- 软工大作业·倾物语(二)
文章来源:中国软工亚洲指挥中心(Steins;Gate) 共同作者:纪神,爵爷,老板,小男孩(按首字拼音排序) 责任编辑:爵爷 本周末我们组已经完成了<需求规格说明书>和<可行性分析 ...
- 软工大作业·倾物语(一)
文章来源:中国软工亚洲指挥中心(Steins;Gate) 共同作者:纪神,爵爷,老板,小男孩(按首字拼音排序) 责任编辑:爵爷 本周六我们进行了一整个下午的详尽讨论,围绕以下几点进行了细致的分析,并且 ...
- 软工作业 5:词频统计——增强功能
一.基本信息 1.1 编译环境.项目名称.作者 1 #编译环境:python3.6 2 #项目名称:软工作业5-词频统计-增强功能 3 #作者:1613072055 潘博 4 # 1613072056 ...
- 第三次软工作业——实现最大字段和算法并进行判定条件覆盖
第三次软工作业 实现最大子段和的算法并进行条件组合覆盖测试 (一)什么是最大子段和? 我自己的理解: 一个数组可以若干个子数组,包含自身.每一个字数组都有一个数组元素之和,求这些和之间的最大值. 最朴 ...
- visual studio 没有属性页_驯龙物语10月14日更新|新增快捷购买页签
更新公告 大家好,我是小白龙,很高兴又与大家见面啦!维利克洛大陆又迎来了新内容,守护者们要仔细阅读看到最后喔! 更新时间 本次更新于10月14日6:00-7:00进行,视更新进度可能提前开服或顺延,各 ...
- 万象物语找回服务器,万象物语新手大型攻略 服务器、初始号的选择和新手前期需要做的事说明...
万象物语新手应该怎么玩?前期应该做什么呢?这里手机乐园寻隐者不遇小编来教教大家,咱们往下看! 万象物语新手大型攻略 一.入坑须知 不管是这个游戏哪方面吸引了你决定入坑,想长期玩下去并享受到游戏的乐趣, ...
- 十二星座物语,女生最喜欢的星座性格【1】
@[TOC]十二星座物语,女生最喜欢的星座性格(这里写自定义目录标题) 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页.如果你想学习如何使用Markd ...
最新文章
- python 命令-Python中执行系统命令的四种方法
- Outlook通过RPC或RPC over HTTPS访问Exchane邮箱:Exchange2003系列之四
- flex image 控件显示bmp 格式图片
- 12c闪回 oracle_Oracle12.1闪回功能
- 再有人问你Java内存模型是什么,就把这篇文章发给他。
- html分页 css,js+css实现的简单易用兼容好的分页
- 数据导入时出现的问题:
- 免费源码赠送之 printf(C语言简化版)
- Spring源码学习(十八)---基于注解配置Aop的aspectj-autoproxy解析
- Lumion 11.0:领先的建筑可视化工具再次升级!+全版本安装包
- c语言else if设计一个成绩表,c语言 学生成绩管理系统设计学生成绩信息包括:学号,姓名,三门课程成绩(数学、英语和计算机)等。主要功能:(1) 计算各...
- 前端开发中自己常见问题
- AliOS Things 3.3.0 : KV组件介绍
- python远程安装软件_在家想远程公司电脑?Python + 微信一键连接!
- CSDN蒋涛:从产品经理到通证设计师
- linux用户名设置,怎样更改linux的用户名
- 算法:从25匹马中选出最快的三匹马
- 埃森哲杯第十六届上海大学程序设计联赛春季赛暨上海高校金马五校赛 L-K序列
- python连数据库如何不写明文密码_在Python中开发时保护MySQL密码?
- Qt编写地图综合应用25-echart动态交互
热门文章
- uni-app开发经验分享二十二: uni-app大转盘思路解析
- DPDK-RSS负载均衡分流
- n维椭球体积公式_土建安装中你经常会用到又容易忘记的计算公式
- 图像主结构的提取方法
- 暗角教程,如何加镜头晕影暗角效果
- isam 驱动程序 下载_将ISAM反向代理配置为与OpenID连接提供程序的PEP
- ISAM error: no free disk space故障分析处理
- 传智播客 php系列,传智播客PHP 2015-JS高级系列视频教程 83集
- linux-DNS域名正向解析、服务程序BIND安装与配置
- 用高德地图实现点击地图添加标记点,获取该点的经纬度,详细地址,通过输入框进行地址搜索自动定位到输入框地址