文章排序的那些事·一

事先說明:這是一篇會讓人想吐的文章俩由,如果你看到一半感到身體不適毒嫡,請果斷關(guān)閉瀏覽器。


問題提出

在一個以頁為單位的信息交流平臺上,一個不可避免的問題就是如何為這些信息做一個恰當?shù)呐判颉?br>   這種行為的出發(fā)點有很多兜畸,比如要找出最有用的信息努释,最受歡迎的信息,最讓人喜歡或者討厭的信息咬摇,最有趣的新聞伐蒂,最Hot的熱點,等等肛鹏,這都需要排序逸邦。
  排序的指標是什么,指標如何量化在扰,這些都不是本文要說的內(nèi)容缕减,于是忽略不提惋鸥。
  那么茄袖,我們假定已經(jīng)為文章列表{A_i}訂好了一個屬性I(A_i),來表示這個量化的排序指標颅围,剩下的事情就容易了皱卓,以I(A_i)為指標做降序(或者升序)處理裹芝,事情就做完了。
  似乎一切都很簡單娜汁。

下面局雄,讓問題復(fù)雜一點,假定一個平臺上有N個人存炮,文章A_i被其中的n(A_i)個人看過炬搭,并被賦予了指標值I(A_i),請問如何排序穆桂?
  乍看之下宫盔,這個問題似乎沒什么營養(yǎng),還是根據(jù)I排序就好了嘛享完。
  但灼芭,如果我們將問題這么描述,會如何呢——
  給出一篇文章在整個平臺上的預(yù)期受歡迎程度般又,并以此來排序(假定I表示的就是受歡迎程度)彼绷。
  顯然,既得值I(A_i)并無法完全表達“預(yù)期受歡迎程度”這個需要的量茴迁。
  一個最簡單的做法寄悯,就是I_pre(A_i)=I(A_i)/n(A_i)*N。
  從這里開始堕义,問題就要開始變得復(fù)雜了猜旬,而且是越來越復(fù)雜。

一個可選的方向,是下面分析文章A_i的興趣集洒擦,并且和人群的興趣集做分析椿争,以此來給出在離散空間中的耗散動力學(xué),這基本算是網(wǎng)格模擬的問題熟嫩,我們這里不做進一步考慮秦踪。

另一個這里更有興趣的問題,就是考慮上“時間”的因素掸茅,來看看對“預(yù)期”這個謂詞來說洋侨,會帶來什么樣的影響。
  比如說倦蚪,如果我們將文章的“點擊數(shù)”和“點贊數(shù)”的比值作為評判一篇文章質(zhì)量的標準希坚,那么顯然這個值是會隨著時間的改變而改變的,那么我們?nèi)绾潍@得這個值的“真實正確”值陵且,來建立一個合理的排序呢裁僧?

所以,下面的內(nèi)容就是建立各種模型慕购,來模擬N個元素中n個已經(jīng)參與過投票的情況下聊疲,如何推算出最終的弛豫值。


最簡模型及其近似解

現(xiàn)在重新明確一下問題沪悲,并做恰當?shù)暮喕?br> <blockquote>
  現(xiàn)在有兩個空間A和B获洲。A中有N個元素,B中有P個元素殿如。
  A中元素可以對B中元素做兩個操作x和y贡珊,且要執(zhí)行y必須先執(zhí)行x,且x和y只能執(zhí)行一次涉馁。
  每一個時間點门岔,A中元素都可以對B中元素進行操作,記為“一次”烤送。
  問題:已知B中元素p第一次操作的結(jié)果為n個A中元素對其進行了x操作寒随,m個A元素進行了y操作,求第t次x和y的可能操作數(shù)帮坚。
</blockquote>

問題描述到這里妻往,其實還不夠完整,因為A的具體性質(zhì)對上述問題有著關(guān)鍵的影響试和,于是下面給出A的性質(zhì)描述:
<blockquote>
A中元素a與b相連的概率為p讯泣。
如果a對B中元素m進行過操作y,則在下一次操作時灰署,若b與a相連且沒有對m進行過x操作判帮,則b會對m進行x操作局嘁。
A中元素q如果對B中元素m進行了x操作溉箕,則有一定的概率q進行y操作晦墙。
</blockquote>

到這里,事情就開始有趣起來了肴茄,我們可以建立在這樣的系統(tǒng)上y操作的傳播動力學(xué)晌畅,其基本運動方程為:
<pre>
N_{n+1}=[1-(1-p)^{q N_n}](N-\sum\limit_{i=0}^n N_i)
</pre>

當然,就實際來說寡痰,需要對上述式子加一個取整函數(shù)抗楔,所以就是:
<pre>
N_{n+1}=Round{[1-(1-p)^{q N_n}](N-\sum\limit_{i=0}^n N_i)}
</pre>

到了這一步,用計算機模擬總是沒問題的拦坠,但如果想要用解析的手法來獲得一些結(jié)果连躏,則將變得素手無策。
  我們可以用一些近似的手段來處理這個函數(shù)贞滨,使得不用計算機模擬也能得到一定程度的解析結(jié)果入热。

第一步,是將上述差分方程做一個近似晓铆,其近似前提是A的元素總數(shù)N足夠大勺良、p足夠小:
<pre>
N_{n+1}=p q N_n (N-\sum\limit_{i=0}^n N_i)
</pre>

第二步骄噪,是給出差分方程近似的微分方程:
<pre>
y: \sum\limit_{i=0}^n N_i
y': N_n
y'': N_{n+1}-N_n
y''=Cy'[pq(N-y)-1]
</pre>

這里的C是由差分和微分的轉(zhuǎn)變而帶來的系統(tǒng)參數(shù)尚困,我們可以通過第一代數(shù)據(jù)的簡單計算來作擬合,從而是解析的链蕊。
  這個方程的解為:
<pre>
S_n = \sum \limit_{i = 0}^n N_i) = [p q N - 1 + tanh(C n + A)] / (p q)
N_n = [tanh(C n + A) - tanh(C n + A - C)] / (p q) n > 0
</pre>

其中A為待定參數(shù)事甜,由代數(shù)方程y(0)=N_0給出,這里的N_0是第0代的“初始”進行x操作的A的元素的數(shù)量滔韵,因此參數(shù)A也是可以通過初始條件解析得到的:<code>A = arctanh[1 - p q (N - N_0)]</code>讳侨。
  進而利用第一代數(shù)據(jù)N_1=y(1)-y(0)給出待定系數(shù)C:<code>C = arctanh[1 - p q (N - N_0 - N_1)] - A</code>。
  而N_1可以通過已知條件獲得:<code>N_1 = [1 - (1 - p) ^ {q N_0}] (N - N_0)</code>

而最后奏属,原本用取整函數(shù)來獲得的“截斷”則由y'(t)<B這個代數(shù)方程來獲得臨界t跨跨,而B的“自然”值得當然是1,雖然就擬合來說實際值應(yīng)該大于1囱皿。
  具體截斷方程為:
<pre>
B > [tanh(C m + A) - tanh(C m + A - C)] / (p q)
</pre>

從而可以得到截斷臨界時間m勇婴,并利用m獲得最想要的數(shù)據(jù):S_m。
  到這一步嘱腥,所有數(shù)據(jù)都可以解析獲得耕渴,于是我們可以很好地分析傳播相關(guān)的各種性質(zhì),包括一篇B中元素可以獲得的最終x操作數(shù)<code>X = S_m</code>(最終y操作數(shù)顯然為<code>Y = X q = q S_m</code>)齿兔。

到這里橱脸,我們先來看一下對最終的排序來說础米,這樣的模型和最一開始的模型到底有什么不同。

最根本的不同添诉,就在于原來排序的指標是q N屁桑,而現(xiàn)在則變?yōu)榱藂 S_m。
  而栏赴,如果排序是根據(jù)當前值(第n代就是q S_n)來做排序的判斷蘑斧,那么可以看到,由于傳播的動態(tài)性须眷,這樣的排序會是很有意思的竖瘾。
  我們這里主要感興趣的,是初試y操作數(shù)量N_0花颗、相連幾率p和x操作轉(zhuǎn)化為y操作的幾率q對于最后的穩(wěn)定值q S_m的影響以及對整個序列q S_n的影響是怎么樣的捕传。

由于這里所做的近似都是在N足夠大、p足夠小這個前提下的(這也就是說扩劝,當S_n接近N時上述近似其實已經(jīng)失效了庸论,也所以截斷方程其實是需要通過實驗來擬合出合適的B才能正常使用的而不能通過理論分析獲得),所以在這個前提下我們可以得到如下近似結(jié)果:
<pre>
M = p q N - 1
S_n = [M + tanh(C n + A)] / (p q)
N_n = [tanh(C n + A) - tanh(C n + A - C)] / (p q)
A = N_0 / N / (1 - M) - arctanh(M)
C = p q N_0 / (1 - M)
N_1 = p q N N_0

So:
m = {arccosh{sqrt[N_0 / B / (1 - M)]} + arctanh(M)} (1 - M) / (p q N_0) - 1 / (p q N)
C m + A = arccosh{sqrt[N_0 / B / (1 - M)]}
S_m = N - {1 - sqrt[1 - (2 - p q N) B / N_0]} / (p q)
</pre>

從而可以看出今野,N_0基本上決定了函數(shù)的上升速度葡公,p q雖然也能起到類似的作用,但并不是簡單的線性關(guān)系(<code>p q / (2 - p q N)</code>)条霜。
  而最有趣的部分則在于最終的穩(wěn)定值S_m上:初試值N_0約小催什,則最終穩(wěn)定值S_m也約小宰睡;而和傳播相關(guān)的屬性pq則在某個特定值前越小蒲凶,最終穩(wěn)定值S_m也約小,特定值之后越大則S_m越小拆内,但這個特定值本身卻不小旋圆,從而打破了p為小值的前提。
  現(xiàn)在麸恍,如果我們要排序的話灵巧,其實更好的預(yù)測值應(yīng)該是<code>q S_m = q N - {1 - sqrt[1 - (2 - p q N) B / N_0]} / p</code>。

不得不說的是抹沪,這是利用N足夠大和pq足夠小這兩個前提構(gòu)造出的近似分析刻肄,尤其在截斷發(fā)生的部分,這種近似本身就值得商榷融欧,所以只是一種定性分析的手段而已敏弃。

上面是通過模型,正向推倒出我們可觀測的現(xiàn)象噪馏,也就是每一段時間x操作和y操作數(shù)的變化情況麦到。
  在實際使用的時候绿饵,我們往往需要用到的是反向的問題——如何通過x操作和y操作的數(shù)據(jù)列,來反推出模型種的那些參數(shù)瓶颠?
  也就是拟赊,如果我們知道的是N和N_n(代表了x操作數(shù)),以及y操作數(shù)Y_n步清,如何求出最重要的參數(shù)p和q要门?

q的獲得相對來說很容易<code>q = Y_n / N_n</code>虏肾。p的獲得也還可以:
<pre>
p = 1 - [1 - N_{n+1} / (N - S_n)] ^ [1 / q / N_n]
</pre>

但廓啊,這都是理論上的情況,實際上我們所獲得數(shù)據(jù)都不可能是正好的理論值封豪,都有誤差谴轮,于是下面就要看誤差會導(dǎo)致怎么樣的改變。

先將上述運動方程用更好的方式來重寫一下:
<pre>
第n代的x操作數(shù)為X_n吹埠,y操作數(shù)為Y_n第步,x操作總數(shù)為R_n,y操作總數(shù)為T_n缘琅。
R_n = sum{X_i, i = 0 ~ n}
T_n = sum{Y_i, i = 0 ~ n}
Y_n = q X_n
X_{n + 1} = [1 - (1 - p) ^ Y_n] (N - R_n)
</pre>

在這樣的情況下粘都,如果在某一代n上,X_n和上述計算獲得的值(<code>|X|_n</code>)相比有一個dX_n的偏差刷袍,那么我們就要來看一下這個偏差在下一代數(shù)據(jù)上會導(dǎo)致什么樣的偏離:
<pre>
X_n = |X|_n + dX_n
Y_n = q |X|_n + qdX_n + dY_n
R_n = |R|n + dX_n
T_n = |T|n + qX_n + dY_n
X
{n + 1} = |X|
{n+1}
- {1 - (1 - p) ^ Y_n [1 - q ln(1 - p) (N - R_n)]} dX_n
- (1 - p) ^ Y_n ln(1 - p) (N - R_n) dY_n
</pre>

在p和q很小的極限下翩隧,上述結(jié)果則可以寫為:
<pre>
X_{n + 1} = |X|_{n+1}
-p [Y_n - q (1 - p Y_n) (N- R_n)] dX_n
+ p (1 - p Y_n) (N - R_n) dY_n
</pre>

這個數(shù)據(jù)有點意思。
  可以看到呻纹,由于n代的Y_n的擾動dY_n引起的n+1代的的擾動的系數(shù)堆生,是恒正的,但對于X_n的擾動dX_n來說則不一定雷酪。
  更重要的是淑仆,這個數(shù)據(jù)幾乎不出意外地是在不斷減小的——因為Y_n即便某一次會增大,但其作為一個小于一的數(shù)的冪次哥力,產(chǎn)生的影響幾乎不能和N - R_n相比蔗怠,而這個是隨著n的增加恒減小的。
  同時吩跋,在早期寞射,從上述分析可以看到,dY_n引起的擾動的比例系數(shù)近似等于p N钞澳,而這個值則近似等于一個節(jié)點的“鄰點”個數(shù)怠惶,從而基本是一個大于1的值——因此,這就表示早期擾動對數(shù)據(jù)的影響是逐漸放大的轧粟,會極大地影響到X_n的生成策治。
  而隨著R_n的積累脓魏,這種偏差也會被極快地消除——事實上,當Y_n達到一個極大值后開始減小后通惫,Y_n的干擾基本就會自我消除——從前面獲得近似解析解可以看到茂翔,系數(shù)A中由于存在1 - p q (N - N_0),從而在很大程度上A是負值履腋,這就表示sech(C n + A)會是一個先升后降的函數(shù)珊燎,從而N_n也將在很大程度上是這種函數(shù),而這樣的函數(shù)在升到最頂端的時候遵湖,其實N - R_n便已經(jīng)積累到接近一半的值了悔政,而Y_n又是最大,從而此時dY_n的影響因子已經(jīng)變得足夠小了延旧。
  所以谋国,總結(jié)來說,早期dY_n的影響對整個系統(tǒng)是最大的迁沫,此后影響越來越小芦瘾。而當Y_n開始下降后,dY_n的影響基本可以不做考慮集畅。
  從而近弟,對Y_n來說,早期數(shù)據(jù)由于擾動過大從而不宜做太多的考慮挺智,后期的Y_n的數(shù)據(jù)則比較可信祷愉。
  而對于X_n的擾動來說,情況則更微妙——
  存在一個臨界條件Y_n < q (N - R_n)逃贝,當條件滿足時谣辞,dX_n最終對X_{n+1}的影響是正反饋,而當這個條件被破壞時沐扳,則變成了負反饋——即使擾動會自己消減泥从。
  可以看到,dY_n的影響始終是累計的沪摄,只不過影響因子在不斷減星怠(后期),而dX_n的不單單會累計杨拐,還會彼此抵消祈餐。
  綜合這兩項分析可知,當Y_n序列(也即X_n)序列達到最大值的時候開始哄陶,是最統(tǒng)計的最佳階段帆阳。在此之前的數(shù)據(jù)誤差起到的作用都會比此后要大。

具體到實際操作中屋吨,也就是如果我們獲得了文章的點擊數(shù)序列X_n和點贊數(shù)序列Y_n蜒谤,那么前一段時間的數(shù)據(jù)可以不計如統(tǒng)計山宾,而從X_n開始下降的時刻開始統(tǒng)計。

不過必須要提醒的是鳍徽,這么做的一個前提资锰,就是假定只有一篇文章,且模型別的方面不出現(xiàn)別的擾動(比如肯定會有的p和q的擾動阶祭,以及系統(tǒng)并不能使用平均場假設(shè)這一根本性差異)绷杜。

當然,有趣的事情到這里還沒有結(jié)束濒募。

我們接下來開始引入“相互作用”的環(huán)節(jié)鞭盟。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市萨咳,隨后出現(xiàn)的幾起案子懊缺,更是在濱河造成了極大的恐慌疫稿,老刑警劉巖培他,帶你破解...
    沈念sama閱讀 218,122評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異遗座,居然都是意外死亡舀凛,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評論 3 395
  • 文/潘曉璐 我一進店門途蒋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來猛遍,“玉大人,你說我怎么就攤上這事号坡“每荆” “怎么了?”我有些...
    開封第一講書人閱讀 164,491評論 0 354
  • 文/不壞的土叔 我叫張陵宽堆,是天一觀的道長腌紧。 經(jīng)常有香客問我,道長畜隶,這世上最難降的妖魔是什么壁肋? 我笑而不...
    開封第一講書人閱讀 58,636評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮籽慢,結(jié)果婚禮上浸遗,老公的妹妹穿的比我還像新娘。我一直安慰自己箱亿,他們只是感情好跛锌,可當我...
    茶點故事閱讀 67,676評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著届惋,像睡著了一般髓帽。 火紅的嫁衣襯著肌膚如雪驾茴。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,541評論 1 305
  • 那天氢卡,我揣著相機與錄音锈至,去河邊找鬼。 笑死译秦,一個胖子當著我的面吹牛峡捡,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播筑悴,決...
    沈念sama閱讀 40,292評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼们拙,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了阁吝?” 一聲冷哼從身側(cè)響起砚婆,我...
    開封第一講書人閱讀 39,211評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎突勇,沒想到半個月后装盯,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,655評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡甲馋,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,846評論 3 336
  • 正文 我和宋清朗相戀三年埂奈,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片定躏。...
    茶點故事閱讀 39,965評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡账磺,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出痊远,到底是詐尸還是另有隱情垮抗,我是刑警寧澤,帶...
    沈念sama閱讀 35,684評論 5 347
  • 正文 年R本政府宣布碧聪,位于F島的核電站冒版,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏矾削。R本人自食惡果不足惜壤玫,卻給世界環(huán)境...
    茶點故事閱讀 41,295評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望哼凯。 院中可真熱鬧欲间,春花似錦、人聲如沸断部。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至她渴,卻和暖如春达址,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背趁耗。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評論 1 269
  • 我被黑心中介騙來泰國打工沉唠, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人苛败。 一個月前我還...
    沈念sama閱讀 48,126評論 3 370
  • 正文 我出身青樓满葛,卻偏偏與公主長得像,于是被迫代替她去往敵國和親罢屈。 傳聞我的和親對象是個殘疾皇子嘀韧,可洞房花燭夜當晚...
    茶點故事閱讀 44,914評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 一年級語文上冊生字表 生字表一(共400字) 啊(ā)愛(ài)安(ān)岸(àn)爸(bà)八(bā)巴(bā)...
    meychang閱讀 2,796評論 0 6
  • sì 支zhī茶chá 對duì 酒jiǔ,賦fù 對duì 詩shī缠捌,燕yàn子zi 對duì 鶯yīng 兒é...
    每個人的孟母堂閱讀 1,210評論 0 6
  • Zhōng huá zì jīng 中 華 字 經(jīng) dì yī bù fēn 第 一 部分 qián kūn yǒ...
    玉妖凰兒閱讀 2,609評論 0 9
  • 這周我要和我的朋友一起去夏令營锄贷,我很期待!這次夏令營在威海舉辦曼月,我們要做一個半小時的飛機才能到谊却,時間也不算太長。這...
    小海why閱讀 274評論 1 2
  • 風(fēng)兒停歇了十嘿, 雨就來了因惭。 雨下久了, 烏云就散去了绩衷。 烏云散去了, 藍天和白云就來了…… 就這樣激率, 你那看得見的夢...
    小劇在成長閱讀 159評論 0 4