5

最近我正在研究 Reddit 的算法,用于确定是什么使帖子成为“热门”主题以及哪些内容适合 reddit 主页。

我正在阅读的文章在这里: http ://amix.dk/blog/post/19588

我注意到他们有数学逻辑并创建了某种数学函数来确定帖子的热度/相关性。

在使用的公式中,每个数学成分来自哪里以及它们如何知道使用它们?

谢谢你!

——巴克兹

编辑:澄清一下,我刚刚高中毕业,如果这个问题的答案似乎很明显,我深表歉意。再次感谢!

4

2 回答 2

22

我将解决第一个公式,即帖子的“热度”。像这样的公式来自需求。Reddit 的设计师已经考虑过他们想要实现的目标,并相应地设计了公式。我不能确切地告诉你他们的想法是什么,但我可以看一下实现并猜测他们想要一个这样的系统:

  1. 除非票数发生变化,否则不需要重新计算分数。这减少了对数据库的更改次数,并且在复制数据时更容易实现一致性。(因此,任何基于随着文章年龄而降低分数的评分系统都不好)。

  2. 如果两个故事的历史相同,那么点数更多的故事应该更高。(因此需要从选票中做出贡献。)

  3. 故事获得的支持越多,它应该在排名靠前的时间越长。

  4. 老故事不应该永远保持在排行榜的首位,即使他们有很多赞成票。很快(一两天后),新故事的排名需要超过它们。(因此,从日期开始就需要做出贡献,并且由于投票很快就会超过分数,无论某事获得了多少票。)

  5. 反对票多于赞成票的故事根本不应该出现在排名中。

现在让我们看一下公式:log z + yt / 45000,看看它是如何满足这些要求的。

  1. 如果投票数不变,则zyt都不变。所以分数不变。这满足要求(1)。

  2. 如果两个故事的年龄相同,则它们的t值相同。但是赞成票多的人的z值更高,并且由于 log 是单调的,因此它的得分更高。这满足要求(2)。

  3. 一个故事的投票越多,它的z就越高,所以它会越长,直到另一个具有更高t的故事能够超越它。这满足要求(3)。

  4. 对数是一个随着它变大而增长更慢的函数(看看它的图表)。因此,随着时间的推移,一个故事需要越来越多的支持,以跟上更新的故事。这满足要求(4)。

  5. 如果故事的反对票多于赞成票,则z = 1 且y = -1,因此得分为负数。这满足要求(5)。

常数 45,000 是一个比例因子,它使赞成票和年龄达到平衡。一天有 86,400 秒,因此t每天都会增加这个量。将t除以45,000 得到 1.92,这意味着一天的相对新鲜度是 10 1.92  = 83 票,两天的相对新鲜度大约值 7,000 票。

于 2011-07-03T23:13:49.177 回答
2

他们不是来自任何地方。对他们来说没有绝对的真理,也没有什么可以证明的。这只是一种以开发团队认为最明智的方式量化属性的方法。

当您希望某些因素成为一个不太重要的因素时,您会使用 log(因为较大的值确实会增长,尽管非常缓慢)。但出于同样的原因,他们本可以选择立方根。

这些公式只是代表那些我们可以假定的那些因素,这些因素在特征上属于“热”的东西,并且它们的组合方式是以适当的比例考虑每个因素(例如,我们将平方那些非常重要的值,并记录那些不太重要的值)。

一旦他们想出了公式,他们可能会想出 10 或 15 种不同类型的帖子,并将数字插入,发现这在所有方面都很有意义,所以坚持下去。事实上,最初的几次尝试可能并没有那么好,在稍微摆弄一下数字之后就得出了这个公式。

于 2011-07-03T23:04:56.263 回答