知乎搜索排序模型的演進

{"type":"doc","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"導讀:"},{"type":"text","text":"搜索,是用戶獲取信息,找答案最方便快捷的方式。一次用戶搜索會經歷 Query 解析、召回、排序多個環節,排序作爲最後整個過程一環,對用戶的體驗有最直接的影響。今天分享的內容是知乎搜索排序模型的演進。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"主要內容包括:"}]},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"知乎搜索發展歷程"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"排序算法的迭代升級"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"一些未上線的嘗試"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"未來方向"}]}]}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"知乎搜索發展歷程"}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"1. 知乎搜索"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"知乎作爲一個大型的中文問答社區,有超過四千萬的提問和超過兩億條回答,其中蘊含了豐富的知識、經驗和見解,知乎搜索是幫助用戶快速獲取信息,找到答案的重要途徑,隨着媒介的升級,搜索結果的形式也不在侷限於圖文,視頻解答也越來越多。"}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"2. 知乎搜索算法發展歷程"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"知乎的搜索算法團隊成立於2017年底,於2018年8月上線了深度語義匹配模型。在2019年4月引入了BERT 模型,同年8月排序模型由 GBDT 升級爲 DNN 模型,隨後在DNN模型的基礎上進行了一系列的迭代升級。"}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"3. 知乎搜索架構"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"一次搜索流程主要包括 Query 解析、召回、排序幾個階段。用戶輸入 Query 之後,首先要進行 Query 解析,生成查詢 Query Tree 和語義表示向量。之後進入多隊列的召回模塊,召回階段從召回方式上說可以分爲倒排召回和向量召回,在這一環節會篩選出前400的文檔進入到排序階段。排序階段又分爲精排和重排序兩個環節,精排階段通過模型對多召回源的文檔進行統一打分,之後將 Top16的文檔送入重排序模型進行位置的微調,最終呈現給用戶。本次主要分享精排和重排序階段兩部分的模型演進。"}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"排序算法的迭代升級"}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"1. 由GBDT模型升級到DNN模型"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"2019年8月份我們將排序模型由GBDT升級到DNN模型,這麼做主要是考慮到兩點:"}]},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"數據量變大之後,DNN能夠實現更復雜的模型,而GBDT的模型容量比較有限。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"新的研究成果都是基於深度學習的研究,採用深度神經網絡之後可以更好的應用新的研究成果,比如後面介紹的多目標排序。"}]}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"升級到DNN模型之後,線上效果有一定的提高。"}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"2. DNN排序模型結構"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"我們的DNN排序模型整體是在谷歌開源的TF-Ranking[1] 框架的基礎上開發的,TF-Ranking 使用了 Estimator API,提供了排序任務常見的損失函數和指標計算實現,比如 Pairwise Loss 和 NDCG指標,以及通過Multi-head支持了多目標訓練。整體的代碼結構根據訓練流程可以拆分成特徵輸入、特徵轉化、模型打分和損失計算等幾個獨立的模塊。清晰合理的模塊劃分爲後續的快速迭代提供了很大的方便和靈活性。下面簡單介紹下各個模塊:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"特徵輸入模塊,將 Query特徵、相關性特徵、文檔質量特徵和歷史點擊特徵等輸入模型。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"特徵轉化模塊,做一些常見的特徵處理工作,比如取 log、歸一化、onehot 和類別特徵轉 Embeding 等。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"模型主體結構部分包括主網絡部分、 End2End 部分,SeRank[5] 部分,Unbias tower 部分和 MOE 方式實現的多目標排序部分,後面會做詳細介紹。"}]}]}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"3. 多目標排序"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"搜索排序任務的學習目標首先能想到的就是預測用戶點擊,我們最初的排序模型也是這樣做的。但是用戶點擊只是第一步,單純的點擊行爲並不能代表用戶對搜索結果的滿意,我們需要同時考慮用戶在點擊之後的一系列行爲,比如閱讀時長、點贊、收藏、關注、分享、評論等等。這些行爲都可以作爲排序任務的訓練目標,由於可選的目標比較多,我們通過分析這些指標與用戶留存的關係進行了篩選,與點擊率一起構成了排序模型的目標,開啓了我們在多目標排序方面的探索。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"① 基於 hard sharing 的第一版多目標排序模型"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"第一版的多目標排序採用的是共享參數層+任務獨立參數層的結構。共同學習的多個目標是有內在聯繫的,對一個目標的訓練會幫助到其他目標,通過共享底層參數可以實現這個目的。在共享參數層之上又加了任務獨立的參數層,使各個訓練任務之間可以獨立更新參數,保證互不影響。需要注意的是,不同目標的訓練數據是不一樣的,轉化類的目標比如閱讀時長、點贊、收藏,這些要用戶點擊之後才能發生,所以只在有點擊的數據上計算 Loss。另外由於閱讀時長呈長尾分佈,需要用對數時長作爲訓練目標。在多目標模型中每個目標都會對應一個模型打分,在線上預測是需要多多個分數進行加權融合。至於不同的目標對應的具體權重我們是通過 AB 實驗確定的。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"② 基於 MMOE 的第二版多目標排序"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在去年年初的時候,我們採用 MMOE[2] 結構對多目標排序模型進行了升級。與 hard sharing 結構不同,MMOE 引入了 Expert,將共享參數層替換爲多個 Experts 加權相加的方式,這些參數既是各個任務共享的,又通過獨立權重的方式給了各個任務一定的獨立性。這一版的更新在上線之後也是取得了一定的收益。"}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"4. Unbias LTR"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在使用用戶點擊日誌作爲訓練數據時,點擊日誌中的一些噪聲會對訓練帶來一定的負面影響。其中最常見的噪聲就是Position bias,由於用戶的瀏覽行爲是從上到下的,所以同樣的內容出現的位置越靠前越容易獲得點擊。以用戶搜索小兒感冒爲例,比如同時給用戶展示了五條結果,用戶在點擊第一條之後獲得了滿足退出了這次搜索,這時就會生成一條訓練數據,第一條作爲正樣本,其他的作爲負樣本,但是其實後面幾條結果質量也比較好,如果後面的結果出現在第一條的位置也會發生點擊,所以點擊是受到位置影響的。在這種情況下訓練數據是有偏的。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"對於這個問題,有兩種解決思路:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"① 降低Top位置的樣本權重"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"既然Top位置更容易受到位置偏差的影響,那麼我們就降低頭部樣本的權重。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"至於樣本權重的確定,我們嘗試過兩種方案:"}]},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"根據點擊模型預估每個位置的權重,預估出來的結果可能是第一位0.7然後一直增加,到第五位是0.9"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"通過模型在訓練的過程中自動學習權重"}]}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"但是這兩種方案上線之後都沒有正向效果。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"② 對Position bias建模"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"用戶實際點擊 = 真實點擊率+ Position Bias"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"另一種思路就是考慮 Position Bias 的情況下,重新對用戶點擊進行建模。既然用戶點擊是由文檔的真實點擊率和文檔的展示位置共同決定的,那就將這兩部分分開預測,用文檔的展示位置作爲特徵通過一個獨立的 shallow tower 對 Position Bias 進行建模[3],將其他的 Query 和 Doc 本身的特徵輸入主模型結構建模文檔的真實點擊率,將兩部分分數相加來預測用戶點擊。在線預測時,只需考慮真實點擊率的部分。另外在訓練的時候有兩點需要注意,一個是最好在 shallow tower 的部分加一些 dropout 防止模型對 Position Bias 的過度依賴,另一個是隻有點擊目標會受到位置偏差的影響,所以只需要在點擊目標上應用這個策略,在轉化類目標上則無需這種處理。這一版的策略上線對點擊比帶來了顯著的提升。"}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"5. Context Aware LTR"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"對於排序任務可以有幾種理解:"}]},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Point wise:確定每個文檔獨立打分,最終根據分數排序"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Pair wise:確定兩兩文檔對的相對順序,推導出最終排序"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"List wise:直接優化待排序的文檔的整體順序"}]}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"三種不同的方式都有對應損失函數,實踐證明,對排序任務而言 List wise loss 優於 Pair wise loss 優於 Point wise loss。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"從特徵角度我們也可以通過構造一些 context 特徵來實現 List wise,比如對待排序文檔的特徵取平均值或者中位數作爲模型排序特徵,實現起來比較簡單,當然也是有效的。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"常規的模型對不同文檔的打分是相互獨立的,我們希望可以實現一個模型在對單條文檔打分時,同時可以考慮到其他的文檔。在實踐中我們借鑑了CV 中的 SE Block[4] 結構,具體到排序的場景就是:以全連接層輸出 X 作爲 SE Block 的輸入,全連接層的輸出維度是 L*C(L代表list size,C代表特徵維度),然後先在 List維度上做Pooling,然後經過兩層的全連接層之後將輸出做Sigmoid 轉換,映射到0到1之間,再跟乘回 X。通過List wise 的 Pooling操作就可以把一整個list信息融合到每個樣本的打分裏面,實現 List wise 打分。每一層全連接層後都可以接一個 SE Block 結構。在訓練時有一個需要注意的點是,由於訓練日誌只是有展現的一小部分文檔,但是在精排線上打分時候選集是比較大的,所以存在線上線下不一致的問題,而這種不一致對於 SE Block 的計算影響很大。爲了解決這種的不一致的問題,我們在精排之後加了一個重排序階段,把精排Top16的結果送到重排序模型中。保證Top16文檔可以完整的加入到訓練數據中,在離線訓練時只有重排序模型應用 SE Block 結構,這樣就保證了線上線下的一致性。這一版的策略更新對於頭部位置的點擊比提升比較明顯。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Se Block結構之所以能發揮作用,本質上是因爲在單條樣本打分過程中融合了所有候選集的信息。另外有一種可能的解釋是 SE Block結構實現了某種注意力機制,輸出的 0 - 1 的打分可以看做是某個特徵在當前 Query context 下的特徵重要性,而同一個特徵在不同 Query 下的特徵重要性是一樣的,所以通過這種結構模型可能可以學到這樣的信息,來幫助模型更好的打分。"}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"6. End2End 學習"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"之前我們的排序模型並沒有直接使用 Query 和文檔的原文作爲排序特徵,而是將其輸入相關性模型將計算得到的相關分數做爲上層排序模型的特徵,所以我們進行了一些 End2End 學習的嘗試。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"由於我們是使用 BERT 模型計算文本相關性,所以我們嘗試了將 BERT 也加入到 LTR 的模型中進行訓練。由於 BERT 的計算量過大,我們實際只加載的前三層的 Transformer。但是訓練時長依然過長,且離線指標無提升。之後我們進行了第二次嘗試,只是將 BERT 編碼之後的 Query 和標題的 Embedding 向量加入到 LTR 模型中,在其上加入 Dense 層進行微調,這種方式最終獲得了一定的線上收益。"}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"7. 個性化 LTR"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"用戶在發生點擊行爲之前,可能已經產生了很多的行爲,比如有過搜索,或者點擊過首頁推薦的內容,這些交互行爲都可以提供一些用戶額外的信息用於排序。我們將用戶近 30min 的搜索 Query 和點擊的文檔標題用 BERT 模型生成句向量輸入到模型裏,跟當前 Query 的Embedding做內積,計算最大匹配分數作爲特徵,這樣操作雖然比較簡單,但是拿到了很好的線上收益。除此之外我們還嘗試了一些更爲複雜特徵交互結構,但是上線之後發現效果都不如這個簡單的策略好。"}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"一些未上線的嘗試"}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"1. GBDT特徵編碼模型"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"這個思路是Facebook 提出的[6],首先用點擊數據訓練一個 GBDT模型,利用模型進行特徵分桶和特徵組合,將GBDT輸出的葉子節點編號作爲排序模型的特徵,但是這個方案沒有線上收益。"}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"2. IRGAN,生成對抗網絡模型"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"利用生成對抗網絡訓練排序任務[7],具體實現:實現一個生成網絡一個判別網絡,把展示未點擊的樣本餵給生成器,採樣出疑似的正樣本(作爲判別器的負樣本)和用戶真實點擊的樣本一起餵給判別器。判別器的錯誤率作爲生成器的 reward。核心思想是希望通過生成器生成的難負樣本提高判別器的分類性能。但是實際訓練時發現在一定步數之後模型會訓練發散,並不能達到比較好的性能。"}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"未來方向"}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"1. Online learning"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"我們之前發現模型在上線一段時間後指標有逐漸下降的趨勢,之後嘗試了模型日更,結果表明日更模型表現較好。提高模型更新頻率可以讓模型更快的適應新的數據分佈,如果可以實時更新模型預計效果會進一步提高。"}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"2. Graph embedding"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"用戶的搜索 Query 和點擊的文檔可以構建一個圖,用圖挖掘的算法有可能從其中挖掘出更多的信息,提高排序模型的性能。"}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"3. 個性化"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"我們目前關於個性化的嘗試只是通過用戶的近期交互行爲挖掘了一些用戶的短期興趣,利用用戶的長期興趣畫像,可以在 Query 意圖寬泛時對結果做一些個性化的排序,更好的滿足用戶的個性化需求。"}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"4. 邊緣計算"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"與雲計算方式不同,邊緣計算可以利用用戶更細粒度的交互信息,通過端上計算即時的對排序結果進行調整,進一步提升排序質量,是一個非常有潛力的發展方向。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"參考資料:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"1.https:\/\/github.com\/tensorflow\/ranking"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"2.Ma, Jiaqi, et al. \"Modeling task relationships in multi-task learning with multi-gate mixture-of-experts.\" Proceedings of the 24th ACM SIGKDD International Conference on Knowledge Discovery & Data Mining. 2018."}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"3.Zhao, Zhe, et al. \"Recommending what video to watch next: a multitask ranking system.\" Proceedings of the 13th ACM Conference on Recommender Systems. 2019."}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"4.Hu, Jie, Li Shen, and Gang Sun. \"Squeeze-and-excitation networks.\" Proceedings of the IEEE conference on computer vision and pattern recognition. 2018."}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"5.Wang, RuiXing, et al. \"SERank: Optimize Sequencewise Learning to Rank Using Squeeze-and-Excitation Network.\" arXiv preprint arXiv:2006.04084 (2020)."}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"6.He, Xinran, et al. \"Practical lessons from predicting clicks on ads at facebook.\" Proceedings of the Eighth International Workshop on Data Mining for Online Advertising. 2014."}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"7.Wang, Jun, et al. \"Irgan: A minimax game for unifying generative and discriminative information retrieval models.\" Proceedings of the 40th International ACM SIGIR conference on Research and Development in Information Retrieval. 2017."}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"今天的分享就到這裏,謝謝大家。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"分享嘉賓:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"王瑞欣,知乎算法工程師。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"本文轉載自:DataFunTalk(ID:datafuntalk)"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"原文鏈接:"},{"type":"link","attrs":{"href":"https:\/\/mp.weixin.qq.com\/s\/DZZ_BCiNw0EZg7V0KvhXVw","title":"xxx","type":null},"content":[{"type":"text","text":"知乎搜索排序模型的演進"}]}]}]}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章