標籤:

這次,我給知乎點 32 個「贊同」——淺析知乎新的回答排序演算法

今天(2014年12月5日),知乎官方公布了新的回答排序演算法,具體內容可以參見

知乎如何對回答進行排序?你的一票很重要。 - 知乎產品專欄 - 知乎專欄

如何評價知乎的回答排序演算法? - 知乎產品

如果你是一個對回答排序有興趣的人,你會發現這個改革非同小可,仔細看看,你就會發現,很多問題下的回答排序發生了翻天覆地的變化:有些原本高高在上的高票回答突然就降到了第三、第四,那些原本贊同數不是很高的答案突然就排到了第一。

那麼,這種新的回答排序演算法究竟好不好呢?

我個人的觀點是,這次,應該給知乎點 32 個「贊同」。

********************

在今天之前,知乎的排序演算法是:

得分 = 加權贊同數 - 加權反對數

而現在,知乎的排序演算法叫做「威爾遜得分」演算法(參見Binomial proportion confidence interval),它的公式是:

(其中 u 為加權贊同票數,v 為加權反對票數, z_{alpha }為參數,另外,默認所有回答者對自己的回答投了一票贊同,所以 u 至少為 1)

這個公式,究竟有哪些性質呢?

易見,n為 贊同和反對票的綜合,而p是贊同數占投票行為的比例。

根據對Score 表達式的分析,我們可以看到以下幾個簡單性質:

  1. Score 的範圍變為了 (0,1) (而不是像過去那樣有正有負,而且差距極大);

  2. 當n很小的時候,由於 Score 的除數 1+frac{z_{alpha }^{2} }{n} 較大,而被除數 不超過 1+frac{z_{alpha }^{2} }{2n} ,所以Score 的值不會太大,但如果p較小,Score 的值依然可以趨於 0;

  3. 當n很大的時候,Score 最重要的影響因素是 p,也就是贊同比。

不妨假設 z_{alpha }=2 ,下圖可以清楚地看到得分和贊同及反對數的關係——

對照在今天之前的演算法:

我們可以看到明顯的不同。

舉例:

  • 如圖,A回答收到了 40 個贊同和 18 個反對,B回答收到了 11 個贊同 1 個反對;

按照過去的排序方式,A回答在黃色區間,B回答在綠色區間,顯然A回答在B回答的上面,而且B回答要超越A回答還有相當一段距離;

但按照現在的排序方式,A回答在綠色區間,B回答卻在黃色區間,B回答卻在A回答的上面;

以上現象說明了,在過去,只要贊同票多於反對票,那麼贊同數票數越多,得分越高;但現在,贊同/反對 比 卻比較重要了,在獲取大量贊同票時,反對票的比例也要儘可能控制在較低水平,才能有較高的得分。

********************

分析了那麼多,那麼,新的回答排序演算法對知乎有什麼影響呢?

在我看來,最重要的影響,是在一定程度上遏制了知乎的一些怪像:

  • 並不切題的抖機靈不再容易大行其道

在知乎,總有人抱怨,自己辛辛苦苦寫一個有乾貨的答案,卻排在了一個抖機靈答案的後面,關鍵是這機靈往往還抖得不怎麼好,也沒有幫助,這總是讓人有些失落的。

但現在不會了。一個沒有幫助的機靈往往自帶很多反對,而有誠意的回答很少有人反對。即使你的回答只有 20 個贊同 1 個反對,你的答案也會在 100 個贊同 30 個反對的「抖機靈」答案的前面。

  • 站隊答案,尤其是帶攻擊性的站隊答案很難再排在前面

在知乎總是有些可能需要站隊的問題,在過去,常常有一些毫無幫助的站隊答案排在前排。這些答案,有的沒有做任何解釋,往往只是帶有強烈的情感或者不容置疑的語氣罷了,有的為了博眼球甚至惡意貶低對方,但只要贊同數大於反對數,它就能一直高高地掛在前面,而那些誠懇的分析雙方利弊的答案雖然不會有太多反對,卻因為不吸引眼球而排在了後邊。

但現在,如果你只是單純地站隊,一定數量的「反對」和「沒有幫助」會讓你的答案不再有很強的競爭力,如果你還帶幾句粗話,得,在後面呆著吧。

  • 高關注度用戶的低質量回答也難以風光了

很多高關注度用戶(也叫「大V」)有個特性叫做「出場自帶XX贊」,這讓某些高關注度用戶有了為所欲為的資本。上去吐兩句槽,結果排在最前面,容易打擊到認真作答用戶的積極性,但現在不會了。高關注度用戶的低質量回答,也必然會收到到較多的反對票,是很難排在前面的。

除了以上變化外,新的回答排序演算法也對高質量用戶努力去回答問題有一定的促進作用——

  • 領域內的專家或許更願意答題了

我們注意到,新的規則中,有這麼一條,「默認所有回答者對自己的回答投了一票贊同」,而領域專家往往在自己的領域會有更高的權重,所以他們的回答更容易出現在前面被人看到,這是對專家的一種鼓勵和肯定。

  • 回答數較多的問題不再變得難以觸碰

在過去,有一些問題已經有了較多的答案,有些回答有了較多的贊同數,這讓想回答的用戶很為難。因為回答完以後自己的答案一定在後面,如果自身不是高關注度用戶,自己的答案是很難被人看見,從而超過前面的回答的。

但現在,寥寥數個贊同,也可能讓自己的答案在很多亂七八糟的答案的前面,這對於關注數並不多的用戶來說,是一個很大的福音。

********************

以上就是我贊同知乎這次新的回答排序演算法的原因。

當然,完美的解決方案並不存在。「威爾遜得分」演算法也可能造成一些負面的效應。

比如:

  • 一些人在回答爭議問題時可能會畏手畏腳,不敢明確表態,傾向於中立;

  • 一撥人組隊去黑一個答案,可以較為輕易地把一個超高票答案拉下來;

(如:假設z_{alpha }=2,那麼一個5000贊同1反對的答案,是可以排在10000贊同5反對的上面的,反對萬票的人只要刷5個反對就行了。針對這個問題,或許可以通過調整 z_{alpha }來緩解,z_{alpha }越大,絕對贊同數就越重要,而 z_{alpha }越小,贊同率就越重要。個人意見,取z_{alpha }=5 左右或許比較合理)

  • 新演算法下,由於回答者本身有權重,加上反對票的權重變大,可能會出現很多低票答案在高票答案前面,甚至有 0 票或 1 票的答案在最前面,這可能會讓部分玻璃心的人感到不爽,從而不理智地故意點反對票,這是值得注意的;

雖然可能會存在各種問題,但是,只要有所進步,一個改變總是值得去嘗試的,不是嗎?

願知乎越做越好。

推薦閱讀:

排序演算法-N個正整數排序
【演算法】希爾排序 ( 插入排序3.0版本已經發布,是否更新? ( ̄▽ ̄") )
【演算法】小白的演算法筆記:堆排序 (,,? ? ?,,)
c語言關於快速排序?
試問和直接選擇排序比起來,簡單選擇排序的意義何在?

TAG:排序算法 |