最好走的路越走越难,最难走的路越走越容易

Follow guwendong on Web
  • Subscribe to Beyond Search via RSS
  • Join Resys Google Group
  • Follow @clickstone on Douban
  • Follow @clickstone on Twitter

Category Archives: 技术研究

Social Media Algorithm: StumbleUpon

StumbleUpon 是目前互联网上最老牌也最成功的个性化推荐服务。它创办于 2002 年初,目标很简单,“help people discover interesting or informative web content that they wouldn’t have thought to search for.”这里面直接突出了“search”和“discover”的区别,这点我非常同意,当你明确自己需要什么的时候,search 有用,但当你漫无目的的游逛的时候,你需要的是 discover。最近正好看到一篇不错的文章,也是在说这个问题,“Finding, Locating, Discovering”。

在 StumbleUpon 身上有一段儿传奇的经历。2007年5月,eBay 花了 75 个 million 的美刀把 StumbleUpon 收入囊中,而且据说当时 Google 对它也很有兴趣。但在归入 eBay 旗下之后,StumbleUpon 并没有取得预期的更大的发展,反而星光暗淡停滞不前了。其实这倒也没什么,要知道绝大多数类似的收购案例都是差不多的结局。但令人意外的是,差不多一年半以后,StumbleUpon 的两位创始人 Garrett Camp 与 Geoff Smith 又把它从 eBay 手里买了回来!算是拯救自己的孩子于水火了。无独有偶,据报道,eBay 刚刚把它2005年收购的 Skype 又给卖了出去。eBay 不好好搞自己的拍卖,当起了高科技二道贩子,让人无语啊。

好了,言归正传,说说 StumbleUpon 的算法吧。毋庸置疑,算法绝对是 StumbleUpon 的 top secret,外人是不可能知道确切情况的。所以我这里给出的,只是某位高人经过不断实验得到的推测。

具体的推理过程大家可以看那篇 blog,我这里直接给出结果:用来衡量一篇文章在 StumbleUpon 系统内得分的公式。假设 stumbler a 提交了一篇文章 d,d 属于 domain D。

这里面最重要的一个参数,就是 A -“stumbler audience”。stumbler 指的就是使用 StumbleUpon 的用户,所以顾名思义,stumbler audience 大概说的就是一个 stumbler 在 StumbleUpon 系统内的权重,它由下面三个主要因素构成,

  • Number of fans
  • Number of thumbs up and down you have given
  • Stumble thumb bonus – increase to score based on number of thumbs received on a page.

这个公式的大意可以理解为,文章 d 的权重,等于最初的提交者贡献的得分,加上后续 stumble up 用户贡献的得分,再减去后续 stumble down 用户带来的负面影响。
公式具体的解释如下,
1)第一个加号之前的部分,表示 a 的权重,除以 a 在 domain D 内总共提交的文章数。
2)第一个求和部分,表示后续的 stumble up 用户做出的总体贡献。alpha 是 stumble up 操作的调和参数。gamma 表示“organic bonus”,是一个预设值,是对使用了 StumbleUpon Toolbar 的额外加分。delta 表示“nonfriend”惩罚因子,用来减弱无/少 friends 用户的影响力。
3)第二个求和部分与前面这个类似,表示后续的 stumble down 用户对总体得分造成的影响。
5)N,比较奇怪,高人文章里说是一个随机数,不过我没太搞明白为什么要加这么一个参数。

不知道是高人的英文写作水平有问题,还是我的英文阅读能力不行,反正高人的这篇文章看起来非常晦涩,如果我这里的理解有什么问题的话,大家一定帮忙指出来。

延伸阅读:Social Media排序算法的四种模式,旁观者 – 郑昀

最后插一句,汪峰的新专辑《信仰在空中飘摇》,非常之好听,强烈推荐!

 

Social Media Algorithm: Hacker News

我发现 Hacker News 是因为 reddit 的缘故。Hacker News 所属的 Y Combinator 是 reddit 的种子投资公司,后来 reddit 卖给了 Condé Nast,两个团队都赚了一票。

Y Combinator 只关注于最早期的创业团队,在创业团队的起步阶段介入并提供相应的帮助。Y Combinator 会定期举行 Funding Application 的活动,接受创业团队提交的项目资料。项目如果评审通过的话,Y Combinator 会提供一种“$5000 + $5000n”模式的投资,其中 n 指的是愿意参与此项目投资的 Y Combinator 合伙人的人数。比如,如果有 2 个合伙人愿意投资,那么最终的投资额度是 $15000;如果有 3 个的话就是 $20000。作为回报,Y Combinator 将占有创业团队 2% 到 10% 的股份,通常是 6%。钱虽然不多,但在现今创业公司大量使用 open source,AWS 或者 GAE 的情况下,这些钱也确实够展开工作了。

据说 Y Combinator 已经累计投资了 80 多个创业项目,除 reddit 之外,我还算熟悉的另外一个是 Scribd ——“YouTube for Documents”。Y Combinator 最初总共为 Scribd 提供了 $12000 的投资。Scribd 在 2007 年 5 月正式上线,随即就是飞速地增长,上线一个月之后就完成了 $3.5 million 的 A 轮融资,2008 年 12 月又完成了 $9 million 的 B 轮融资,发展得很是不错。一个有意思的事情,Scribd 有一个超级 NB 的用户,Barack Obama,对,现任美国总统!

在 Y Combinator 的合伙人中,我个人比较关注的是 Paul Graham。他写过一篇流传很广的文章,How to Start a Startup。Paul 在 Anti Spam 方面颇有造诣,以前我在研究相关问题时,从他这里学到了很多东西。Paul 是 Lisp 的大牛,另外还是 Arc 语言的设计者,Hacker News 应该就是用 Arc 语言开发的。Paul 始终称自己是一名 programmer,相比于当前乌泱乌泱的架构师,很是洒脱。

下面言归正传,看看 Hacker News 使用了怎么样的算法。

hacker news

Hacker News 所使用的公式非常简单,

    (p – 1) / (t + 2)^1.5

其中,
1)p 表示文章得到的投票数,之所以要使用 (p – 1),应该是想去掉文章提交者的那一票。
2)(t + 2)^1.5, 这个是时间因子。t 表示当前时间与文章提交时间间隔的小时数。但为什么要加 2 之后再取 1.5 的幂,似乎就没什么道理可言了,也许是个 trial-and-error 的结果吧。

总体来讲,Hacker News 的公式不像 reddit 设计的那么巧妙。但是与 reddit 相比,Hacker News 的用户群比较集中,提交的文章更 Focus,质量也相对更高一些,因此实际的效果并不差。其实某些时候,解决问题就是这样,够用就好。

 

Social Media Algorithm: Reddit

毫无疑问,互联网媒体的未来是属于 social media 的。

群体智慧,是 social media 的基础。其基本假设是说,参与到 social 中的群体越多,media 所反应出来的智慧越高超。但如何把群体活动转化为可被使用的智慧呢?这个就是算法发挥作用的地方了。

本文将陆续披露 RedditStumbleuponDel.icio.usHacker News 等一系列站点所使用到的算法。

Reddit,背景介绍可以参考我之前写的两篇短文:1)社会新闻网站:Reddit 和 Findory;2)Reddit 被收购了

Reddit-Rank

1、公式构成

假设有一篇文章《Social Media Algorithm》,与其相关的有两个时间 A 和 B,其中,A 为某篇文章的具体发布时间,精确到秒;B 为一个固定的时间常量,2005-12-8 7:46:43。则可以计算得到 A 和 B 间隔的秒数 ts

reddit01

另外,U 表示 《Social Media Algorithm》一文得到的支持票数,D 表示得到的否定票数,则可以计算得到 x,

reddit02

定义变量 y,

reddit03

定义变量 z,

reddit04

最后定义得分公式 为,

reddit05

2、公式解释

1)时间点 B,2005-12-8 7:46:43,是一个固定的值,猜测应该是 Reddit 的上线时间。ts 反映了文章的新鲜程度。引入 B 是一个非常优雅的技巧,它使得新鲜度的度量可以独立于系统当前时间。
2)y 表示支持数和否定数之间的相对关系。被否定多的文章得负分,这是合乎常理的。
3)45000 代表的是一个 12.5 小时周期内的总秒数。它 与 yts 一起使用,随着时间的推移,新文章的得分会逐渐超越高投票数的老文章,从而实现自动更新的效果。
4)log10 的使用是另外一个技巧,它可以使得早期的投票获得更大的权重。比如,前 10 票获得的权重,与 11 到 101 票所获得的权重是一样的。

整个公式的效果可以简单解释为:在 00:00:00 发布的一个帖子 a,如果它想在 12.5 小时之后,能够取得与在 12:30:00 发布的帖子 b 同样的得分,则必须在 00:00:00 点到 12:30:00 这段时间内,把它的得票数扩大 10 倍。注:这个解释不精确,但容易理解一些,不然写着太绕。
不过,其中 45000 与 log10 的选择不是通用的,得根据自己网站实际的情况进行修正。这是一个 trial-and-error 的过程,也是作算法的人最头大的部分。

3、来源
code.reddit.comRedflavor.com 以及 Hacker News 的用户 Aneesh

 

1. 持续关注 个性化推荐 技术;
2. 持续关注 Semantic Web 技术;
3. 评论与上两项相关的互联网业务与产品;

我相信技术的力量!
wendell.gu@GMail.com

Archives