在产品算法化的时代,不了解算法,恐怕难以做好一款产品的设计。无论是信息流的推送还是搜索结果的展示,算法深刻塑造了用户体验。因此,了解算法,是作为PM的一项基础功课。本文总结了常见的一些算法知识,很多来自我对网路大神们的分享进行的梳理,大家一起补补课。由于文章内容较长,因此会分很多天更新完,下面进入正题。
一、热度算法。
假如现在我们要给一款新闻应用设计内容的分发机制,请问怎样分发新闻内容更为合理呢?在考虑算法时,我们首先想到有几个约束条件:
①不同新闻的重要性并不相同。
②用户参与的各种行为会助推或拉低新闻热度。
③新闻有时效性,热度随时间衰减。
④不同的人,新闻喜好是不同的。
前3个问题,我们首先解决。
1.1初始热度分S0
问题1的解决方案很简单,给不同类型的新闻赋予不同的初始值S0。比如,娱乐类新闻往往比文化类的新闻的热度更高,大家更爱看,因此初始值更大一点。
上图中,0.6、0.8、1.2、1.5就是不同类别新闻的初始权重。
上述初始值的设定还有一条补充,就是当天的重大头条新闻,我们希望入库时热度就很高。比如马保国老师打拳居然赢了迪迦奥特曼。为了让新闻媒体刚发出来就有很高的热度。我们需要提前准备一个 热词库 ,每天抓取各类头部门户网站或社交网站上的新闻热词。一旦平台上有用户发布的新闻命中了当天的热词,如:“马保国”、“奥特曼”、“迪迦”,我们就给这个用户的内容赋予较高的初始热度。
1.2用户交互热度分S(Users)
问题2的解决方案,是把表征用户喜好的各种行为拎出来。比如浏览、评论、点赞、喜欢、收藏、分享、转发、点踩、举报、截图等等。行为越多,颗粒越细。
比如我们只取几个指标:浏览(1分)、点赞(3分)、评论(5分)、分享(10分)
一个用户如果在某条新闻上都命中了上述行为,那么这条新闻可以获得的该用户S(Users)为:18分。
但是,这种计算方法还有一个问题要解决,那就是用户规模的问题。刚发出去的新闻,肯定看得人少,我们希望可以强化用户行为分,让用户的一个点赞和评价可以很强地助推该条新闻热度。但是随着阅读的人越来越多,我们希望可以弱化用户行为分。因此,需要针对用户规模,强化或者弱化用户的行为权重。用什么数学工具去解决这一问题?留给你思考。
1.3时间衰减热度分
问题3的解决方案需要用到一个工具。我们希望新闻的热度是随着时间而递减的,这样大家随时看到的都是新闻而不是旧闻了。如何来度量这种随时间递减的热度呢?
想像一下,房间里放了一杯热咖啡,这杯咖啡会随着温度慢慢衰减,直到与房间室温持平。新闻的热度就像房间里的热咖啡,随着时间而慢慢降温。因此,这里的工具就是牛顿冷却定律。
牛顿冷却定律 是由英国物理学家艾萨克·牛顿爵士(1642-1727)所提出的一个经验性的关系。是指物体所损失的热的速率与物体和其周围环境间的温度差是成比例的。当物体表面与周围存在温度差时,单位时间从单位面积散失的热量与温度差成正比,比例系数称为热传递系数。
数学公式为:
公式变换之后,变成下面更容易理解的公式:
其中,T0:初始温度、T(t):物体当前的温度、to:初始时刻、t:某个时刻、H:周围的温度、α: 冷却系数。
将公式里的温度T换成热度,就可以用来衡量新闻的热度衰减了。这里面最核心的是冷却系数α,α在控制不同类型内容的衰减程度。有些内容的更替速度快,我们设置的冷却系数可以大一些,有些更替速度慢,我们可以控制得小一些。
具体计算冷却系数,可以这样操作。假设我们认为初始热度分为100,24小时后,热度分为1,那么就有:1=100*e^(-24α),得到α=0.192。从这里可以看到,当我们希望一条内容,用时多久,可以冷却到何种程度时,即可确定α值。需要注意的是,此处计算我们设定的t-to的差值,是按小时为单位来计算的,而不是按照分钟或者秒。
找到了衡量新闻热度衰减的办法,如何用在整体的新闻热度分呢?
开头部分用了这个公式来大概描述我们希望达成的效果: 新闻热度分 = 初始热度分 + 用户交互产生的热度分 – 随时间衰减的热度分, Score = S0 + S(Users) – S(Time)。
看了上面的牛顿冷却定律后,该公式可以演化为Score =(S0 + S(Users))/(e^α*(t-t0))
如果只是解决了前3个问题,即:初始热度分、用户行为助推热度分、热度分衰减,那么大家看到的新闻都是一样的,以前的网易新闻、腾讯新闻不就是这样么?现在我们想给不同的人推荐不同的新闻,怎么办?这便是今日头条解决的问题了。需要用到个性化推荐了。
个性化推荐一般有两种方法,方法1是根据内容相识度推荐。比如你喜欢看科比的新闻,那么我推荐欧文的似乎也不错。方法2是根据用户品味相识度推荐。比如你喜欢科比,另一个人也喜欢科比,那么我可以推荐另一个喜欢的新闻给到你。下来来说一说如何采取这两种办法来推荐。
二、基于内容推荐
按照方法1,我们是需要计算出两篇新闻的相似度。那么两篇新闻的关系要怎么计算呢?
首先呢,第一步我们需要对新闻进行分词。比如这样一个句子:科比是世界上最优秀的篮球运动员,詹姆斯也是。这句话我们分词后便得到了如下词组:科比、世界、优秀、篮球运动员、詹姆斯、是、也、上。
从这个词组可以看出,“是”、“也”、“上”这类词并没有太多含义,需要去掉,留下的词才有意义。因此,我们分词的时候,需要用到两个词库,正常词库和停用词库。停用词库的内容就是上述去掉的那类词,而正常词库就是我们拆解内容的标准。一篇新闻就是按照正常词库拆成一个个单独的词&词组的。
那么这里有个问题,就是分词到底是怎么分的。一般分词的方法有很多种,正向匹配拆分,逆向匹配拆分,最少切分。
正向匹配法是从左向右扫描寻找词的最大匹配。一般会先规定一个词的最大长度,每次扫描的时候寻找当前开始的这个长度的词来和字典中的词匹配,如果没有找到,就缩短长度继续寻找,直到找到或者成为单字。
举个例子。我们拟分词的长句为:科比见过凌晨四点的天空。
我们词典是这样的:{科比、见过、凌晨四点、天空}
那么正向匹配法是怎么运行的呢?
首先我们设定最大词长为4。我们从左到右,先试试4个字符"科比见过",来跟我们词典匹配,发现没有匹配到的。那就缩短字符,试一试“科比见”,发现还是没有。继续缩短字符,试一试“科比”,词组中出现了!
好了,我们分出了第一个词,把这个词从原句中踢掉,那么原句现在变为:见过凌晨四点的天空。
继续按照原方法分词。先试试最左侧的4个字符“见过凌晨”,来跟词典匹配,找不到匹配的词。继续缩短字符“见过凌”,来跟词典匹配,还是匹配不到,那么继续缩短。
依次按照上述方法,这样长句就会被分成一个个词组了。这就是正向匹配法。
逆向匹配法是从右至左,分词规则跟正向匹配法差不多,就不赘叙了。
最少切分法是依据最少切分原则,从几种分词算法切分结果中取切分词数最少一种的。比如,从正向最大匹配和逆向最大匹配两者中选择词数较少的方案,当词数相同时,采取某种策略,选择其中一个。