个人技术博客(α)
首先是关于edgerank的一些内容
第一次听到这个词语是silchen告诉我的(我还以为是google的pagerank),当时我们是想要讨论关于推送文章该采取什么样的一种思路,那时候通过网络了解到了这个算法
其实edgerank这个算法是Facebook用于推送新鲜事的,有别于PageRank还需要对论文或者资料排序,他要做的就是推送新鲜事(不是简单的按照时间逆序),这与我们推送文章有一点类似,那么可以采取这种思路
但是实质上,推送的方法千千万万,没有一个很具体的标准,因为事实上(我觉得)不存在一个完美的算法可以包含世界上所有的情况,我们能做的只是尽量的满足用户的需求。就如同音乐播放软件,我们点击随机播放,我们要得并不是真正的随机,而是random shuffle。如果是真正的随机random,我们又往往会抱怨,怎么又听到了这首歌,怎么有一首歌老是听不到。那么这就涉及到很多考虑的因素了。
回到pagerank,它是决定这些新鲜事先后顺序的一个排序算法,核心计算公式是 E = uwd,这个E就是一个具体的事件对于一个具体用户的权重
u,w,d的定义分别如下u是Affinity Score,也就是所谓的亲密度(?不好翻译),大致上是事件生产者和观察者之间的亲密度,由于我们的APP没有社交模块,事实上我们只会采集用户的行为(而没有采集朋友的行为),来进行判断。主要的用户行为就是点击、刷新、收藏这些,各自权重不同。
w是Edge Weight,对于我们的APP作用不大,我就没去看了。
d是Time Decay,时间衰减因子,事实上文章越过气,那么它出现的概率就应当下降,但是具体的d函数,还需要探讨。同时我们可以看出,如果推送的算法只有d,那么就完全是一个按照时间排序的算法了。
回到我们的APP
那我们的APP采用的并不是一个完整的edgerank的思路(事实上应该也找不到完整的一模一样的edgerank是怎么实现的),只是采取了一个相似的思路,对于文章计算权重,并且进行推送。
那么文章的指标是有很多考虑因素的,粗糙的想象过去,时间和兴趣是必不可少的,那么呢我们就可以建立起一个简单的计算公式。
对于一个用户,每一片文章,我们先看看它与用户的兴趣的匹配程度,然后根据这个匹配程度,我们再去算具体的文章得分,考虑文章被阅读次数以及文章发表时间,来计算权值,最后进行推送
还是那句话,用户的感受是很容易发生变化的,而且每一个用户的偏好都是不同的,我们无法很好的去刻画用户的心理,只能说采取某一种思路进行推送,不可能时刻让用户满意。
接下去是关于python部分
首先要做的事情是配置环境,我也不懂啥时候配置过了,那就不管他了,然后在选择编辑器上,没有选择pycharm,而是选择了sublime text(原本就装了,拿来写C++的作业什么的),于是就可以开始写代码了(假装会语法)
遇到的第一个问题是缩进问题,简单来说它不可以用括号,或者是开始结束的标识符,而是通过缩进来表示一块的语句,这让我一下不是很适应。但是事实上,缩进是一个好东西,应该说是py的优点之一吧,写出来的代码还挺优雅的,并且可以避免一些错误,从逻辑上来说,或者直观感受上,都是比较清楚的。网络上说,如果混用tab和空格,或是采用不同编辑器可能会导致一些错误,这也算是py缩进特色的缺点,但是实际运行过程中,暂时还没有遇到这个问题。
==========================