例如,Reddit 排名的数学算法来自哪里?

Posted

技术标签:

【中文标题】例如,Reddit 排名的数学算法来自哪里?【英文标题】:Where do mathematical algorithms for Reddit's ranking, as an example, come from? 【发布时间】:2011-09-27 19:17:08 【问题描述】:

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

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

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

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

谢谢!

-- 巴克兹

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

【问题讨论】:

看起来您发布的链接包含相当多的细节。有没有让你感到困惑的特定公式?此外,您也可以考虑在 math.stackexchange.com 上提问。 看来你已经发现了算法;你想知道它来自哪里吗?发现问题;和一个解决方案。与编程技能没有太大区别。 Randall Munroe 有一篇关于 Reddit 如何对其 cmets 进行排序的好文章:blog.reddit.com/2009/10/reddits-new-comment-sorting-system.html 具体来说,amix.dk/uploads/reddit_cf_algorithm.png 该图像中的最后一个公式可以。 “他们怎么知道使用它们?” -- 人们很好地理解数学并将其应用于各种情况,算法创建是数学中的一项主要技能,就像在编程中一样。这就像在说厨师如何知道要使用什么食材,或者医生如何知道您有什么问题。 【参考方案1】:

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

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

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

一旦他们想出了公式,他们可能会想出 10 或 15 种不同类型的帖子,然后将数字填入其中,并认为这很有意义,因此坚持下去。事实上,最初的几次尝试可能结果并不那么好,在稍微摆弄了一些数字之后,就得出了这个公式。

【讨论】:

【参考方案2】:

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

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

    如果两个故事的历史相同,则赞成票较多的故事应该较高。 (所以需要有来自投票的贡献。)

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

    老故事不应该永远保持在排行榜的首位,即使他们有很多赞成票。很快(一两天后),新故事的排名需要超过它们。 (所以从日期开始就需要有贡献,而且这必须超过分数,因为很快就会得到票数,不管有多少票。)

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

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

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

    如果两个故事的年龄相同,则它们的 t 值相同。但是点数越多的人的 z 值就越高,而且由于 log 是单调的,所以它的得分也更高。这满足要求 (2)。

    一个故事的点赞数越多,它的 z 就越高,所以它会越长直到另一个具有更高 t 的故事的排名超过它。这满足要求 (3)。

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

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

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

【讨论】:

以上是关于例如,Reddit 排名的数学算法来自哪里?的主要内容,如果未能解决你的问题,请参考以下文章

可以处理负面排名的 Reddit/Hacker News 风格的流行时间衰减算法

数学小计--欧几里得算最大公约数

演算法是啥?主要的数学意义是啥

中文翻译成英文(数学方面的)

有啥经典的c语言算法书推荐一下吗

网页上显示数学公式目前哪种方案最好? 来自知乎