最近更新

仿酷狗音樂播放器開發日志十五——音樂電台清單控件的實作

轉載請說明原文出處,謝謝~~

          前些日子封裝了好幾天控件,把webkit浏覽器控件,vlc視訊播放控件,音頻播放控件做好了,做這些控件一來是可以單獨使用,用到其他項目中,而來可以直接用到這個仿酷狗播放器項目中,後期把他們結合起來就是個完整播放器了。

          今天就繼續前段時間的工作,繼續完善仿酷狗的界面。前面的文章裡已經把左側的各個清單的外觀做好了,尤其是做好了播放器清單,不過今天發現,音樂電台清單中的電台項目也是個比較複雜的控件,是以今天就把他做出來。

          雖然複雜,但是有前面的做音樂播放清單的基礎,做這個就簡單多了,有很多代碼可以複用。

外觀分析

          首先來看看原酷狗的音樂電台的外觀。

仿酷狗音樂播放器開發日志十五——音樂電台清單控件的實作

          其中的每一個子項也是分為三種狀态,普通狀态下

仿酷狗音樂播放器開發日志十五——音樂電台清單控件的實作

          這隻是個簡單的橫向布局,一個logo,兩端文字和一個小标志圖檔。

          Hot和Down狀态下

仿酷狗音樂播放器開發日志十五——音樂電台清單控件的實作

           在普通狀态下,整體顔色略微加深,右側出現了兩個控制按鈕,也就是在原來的基礎上增加一個橫向布局

          輕按兩下狀态下

仿酷狗音樂播放器開發日志十五——音樂電台清單控件的實作

          這個狀态下的子項目相比之下就複雜多了,大緻的布局如下

仿酷狗音樂播放器開發日志十五——音樂電台清單控件的實作

          把他劃分為塊,從裡到外一塊一塊做就行,我直接拿我做音樂清單項目的子控件的布局來修改一份,在布局裡面要寫出這三種

下的布局代碼,然後我們隻要在c++代碼中根據控件收到的事件來動态修改控件的布局的高度和隐藏不隐藏就可以了。

         我寫duilib的xml布局幾乎不用float屬性的絕對布局,而是用控制邊距達到微調的效果,不過有例外的時候,寫這個控件的hot狀态的右上角的小關閉按鈕我是用了float屬性,因為不至于為了他而去額外使用一個布局。

代碼實作

       我直接拿來原來的CMusicItemUI控件,做稍微的修改就可以了,音樂電台項目的hot狀态和音樂清單的hot狀态不一樣,自習觀察可以看到音樂清單在hot狀态下外層有一個邊框,而電台沒有,如圖

仿酷狗音樂播放器開發日志十五——音樂電台清單控件的實作

        另外電台的每個項目之間有一道灰色的橫線分割,這個功能List控件自帶了,設定分割線顔色就可以了。

        再專門為電台項目寫一個RadioListItemInfo結構體來儲存他的各種資訊(電台名字,收聽人數等)

       然後再CMusicListUI控件  增加一個AddRadio函數,讓他根據傳入的RadioListItemInfo結構體,動态的根據音樂電台控件的xml檔案建構電台控件,增加到電台清單裡,這些代碼和分析已經在做播放清單的文章裡說過了,我就不再贅述了,最後把效果圖貼一下,包含三種狀态的控件。

仿酷狗音樂播放器開發日志十五——音樂電台清單控件的實作

         2014.8.1  14:30  Redrain

上一篇: 文章收集
下一篇: Vue

推薦系統走向下一階段最重要的三個問題

推薦系統走向下一階段最重要的三個問題

推薦系統和搜尋引擎一直是比較火熱的技術,因為離商業化比較近。她們是網際網路領域兩個衣着光鮮的美人,小腰一扭就是錢的味道。這幾年憑借着兩個紅利:

1. 網際網路行業的經濟紅利

2. 硬體技術突破觸發的炒熱了深度學習冷飯帶來的技術紅利,推薦系統的效果有了比較明顯的提升。

工業界的技術,從傳統的人工先驗特征設計組合+線性模型(如 logistics regression),逐漸過渡到了 wide&deep、deepFM、DIN、GRU4REC、DIEN 等等深度學習模型。這些深度學習模型普遍采用 embedding 的技術先将原始輸入的離散高維信号投影到一個低秩的 embedding 空間,然後用不同結構的神經網絡去拟合輸入信号和輸出的關系。神經網絡的非線性能力可以部分學習不同輸入信号之間的非線性關系,把人力從特征設計解放出來,研發一些新的技術。硬體的發展讓我們擁有更多的計算資源,可以收集和利用更多的樣本。這些條件讓高自由度的深度學習模型普遍能取得更好的效果。

為什麼之前不說推薦系統有了比較明顯進展,而僅僅說效果上有提升呢?因為從技術層面來說,進入深度學習時代後,推薦系統像是各個應用技術領域中比較玩賴的一個。在深度學習時代,我們大部分情況下隻是在利用别的領域誕生出的技術,卻沒有真正從自有領域出發找出特色的問題并在嘗試解決的過程中提出新的技術,也沒有從這個商業價值轉化這麼直接的場景研發出可以推廣到其他領域的技術。從社會服務模式來說,推薦系統并沒有形成新的服務形态,推薦系統還僅僅是掌握在平台手中,使用推薦系統的使用者和推薦内容提供方都沒能很好的參與到推薦系統的建設當中。推薦系統真的懂使用者要什麼嗎?有想過能為推薦系統的内容提供者做點什麼嗎?

簡單的說就是這個領域拿了很多錢,卻沒辦太多事。

雖然我對自己從事這個領域的評價,嘴比較臭,但是我想的還是美的。我覺得推薦系統會走入下一階段,成為一個能為社會提供更好的服務,同時還能源源不斷的孕育新技術的好孩子。個人愚見,要步入下一階段,我們需要研究三個重要問題:

1. 和真實應用場景貼近的統一 benchmark。我們需要一個工業級、可以疊代真實應用場景技術的資料集。

2. 推薦系統的可解釋性。在我看來可解釋性重要的不是指導研究人員之後怎麼疊代方法,而是增加透明性,讓使用推薦系統的使用者和為推薦系統提供内容的生産者能看得懂推薦系統,能參與進來。

3. 算法對系統資料的 Confounding 問題。可以簡單了解為回報循環(Feedback Loop)問題,簡單來說就是算法會決定推薦系統展示給使用者内容,進而間接的影響了使用者的行為。而使用者的行為回報資料又會決定算法的學習。形成一個循環。

▌資料集

統一可疊代的資料集對一個領域技術發展的推動作用不言而喻。圖像領域從 mnist、cifar 到 ImageNet 等等,這些開放的資料集為從業者提供了公平疊代的土壤。每個人有自己的想法都可以去盡力嘗試,同時自己的想法有統一的标準可以驗證,技術自然百花齊放。

反觀推薦系統,大家疊代的資料集都不一樣,資料集一樣處理方式不一樣,很難保證我們 report 出來的是一個可行的方法,而不是讓這個方法可行的實驗 setting。還有一個比較大的問題是現在開放的資料集規模都和真實工業場景使用的規模相去甚遠。推薦系統的真實場景很多問題本就是在真實規模的資料上才特有存在的。學術界和工業界在不同的資料上疊代,這就讓産出的方法到真實應用間還存在着巨大的天然鴻溝。我還記得我在找實習的時候和面試官讨論問題,他們經常都會說出一句“工業界不是這樣的,你的這個想法太天真”。現在我自己在工業界,我能認識到學界和工業界的差別,但是我想我們能盡量部分縮小這個鴻溝。至少讓更多的人有機會參與到貼近實際應用場景的疊代中來。提供一個工業級的開放資料集,讓更多的力量參與進來,總會碰撞出一些新的想法。同時大家提出的方法可對比,也就能一步一步的把技術推向更高。工業界把自己特有的問題通釋化,讓外界的人參與進來分擔壓力,自己也就能投入更多精力去攻克那些暫時還不可通釋化的問題。可能會比說一句“工業界不是這樣的”好。

當然要開源這樣的一個資料集也面臨特别的挑戰,如何保護使用者的隐私?大規模的資料集如何維護?如何讓大家有能力使用這樣的資料集等等... 雖然困難,但是我最近和一些同僚已經在計劃推進嘗試開放這樣的一個資料集。我相信也有很多同行也在規劃類似的工作,最後我們總會有一個可以讓大家公平有效疊代的土壤。

▌可解釋性

推薦系統目前做的事情是把内容(如商品、新聞、音樂等)和使用者聯系起來,讓使用者更高效的接觸對自己有意義的内容。我們

推薦系統走向下一階段最重要的三個問題

來表示某個商品,其中

推薦系統走向下一階段最重要的三個問題

一共有 N 個商品,

推薦系統走向下一階段最重要的三個問題

來表示某個使用者,其中

推薦系統走向下一階段最重要的三個問題

一共有 M 個使用者。同時用

推薦系統走向下一階段最重要的三個問題

表達将

推薦系統走向下一階段最重要的三個問題

推薦給

推薦系統走向下一階段最重要的三個問題

産生的價值(可以是點選成交等可直接量化的名額,或者是使用者的滿意度等)。現在推薦系統做的事情是通過預估

推薦系統走向下一階段最重要的三個問題

來決定如何在有限的推薦機會中最大化總體的推薦價值

推薦系統走向下一階段最重要的三個問題

其中

推薦系統走向下一階段最重要的三個問題

代表推薦系統給使用者

推薦系統走向下一階段最重要的三個問題

選取的推薦内容集合。我們的目标其實是讓推薦産生的價值更大,但是目前我們的推薦系統局限于通過預估

推薦系統走向下一階段最重要的三個問題

來決定推薦給使用者的

推薦系統走向下一階段最重要的三個問題

,僅僅從配置設定推薦機會的角度來優化推薦價值。

可是這個遊戲的參與方不僅僅是推薦系統,還有為系統提供内容的内容生産者,以及使用者。如果推薦系統僅僅是配置設定流量,那麼它本身能創造的價值有限,為什麼不能讓内容生産者和使用者參與一起創造新的價值,做大這個蛋糕呢。如果内容生産者能提供更優質的内容,是不是總體的推薦價值會變大。推薦系統目前預估推薦價值

推薦系統走向下一階段最重要的三個問題

很大程度上依賴使用者的回報,如果使用者能提供更真實,更準确的回報是不是能更準确的預估推薦價值

推薦系統走向下一階段最重要的三個問題

進而提升總體的推薦價值。如果我們在建設推薦系統的技術時僅僅局限于平台自己如何精準的預估

推薦系統走向下一階段最重要的三個問題

,那麼總體的推薦價值是有上限的。我們需要的是尋找如何讓内容生産者和使用者參與到優化推薦系統的橋梁。

最近幾年,在如何更精準的預估推薦價值

推薦系統走向下一階段最重要的三個問題

上,有不少有效的模型被提出(大部分是深度學習的方法),但是這些模型也越來越黑盒化了。不僅僅是使用者和内容提供者不明白推薦系統推薦的邏輯,就連做這些模型的工程師、把控推薦系統平台的人也不了解每一次推薦的邏輯。面對這樣一個黑盒的系統,内容提供方和使用者不能了解,如何能很好的參與進來呢。

有意思的是即使在這樣一個黑盒的推薦系統下,内容提供方和使用者其實是有意識或者有欲望想參與建設更好的推薦系統的。不過由于目前系統的黑盒特性,導緻大家不知從何入手。舉幾個例子。從内容生産者來說,我們以電商為例,大家可以看一下淘寶上那些商品的“标題”。

推薦系統走向下一階段最重要的三個問題

随機選自淘寶場景,這些商品的标題,是内容生産者(商家)更多為了寫給使用者看的呢,還是寫給推薦系統看的呢?

這些标題,在簡短的标題中,出現了大量的屬性詞,可讀性并不強。很多時候這些标題可能承載了商家通過标題來影響推薦系統進而擷取更多的流量的期望。從使用者角度來說,我們就以豆瓣為例,大家對内容是有很強的評價意識的。隻是很多場景,我們可能隻能通過使用者的點選之類的信号來模組化推薦價值

推薦系統走向下一階段最重要的三個問題

。這個時候我們會研(bao)究(yuan)使用者的點選信号是帶有大量噪聲的。但是使用者又能怎樣呢?是不是很多時候是我們展現給使用者的内容具有誤導性呢(想象一下商品推薦場景的美女圖檔)?

為什麼可解釋性可能是讓内容生産者和使用者參與到優化推薦系統的橋梁呢?想象一下,如果我們的推薦系統不僅僅是模組化了推薦價值

推薦系統走向下一階段最重要的三個問題

,而是我們真正模組化了使用者的興趣,且這個興趣我們能白盒化的給出一些人能了解的解釋。推薦系統可以實時的去預估未來使用者的興趣。那麼如果這些興趣不再是一串無法了解的數字 ( embedding ),如果是人類可以了解的興趣,比如比較簡單的文字标簽。這樣一些人類可以了解的興趣是不是可以指導内容生産者去生産更滿足使用者需要的内容呢。而更豐富更滿足使用者需要的内容自然會将整個系統的推薦價值推到更高。同時推薦系統推薦某個商品的邏輯,是不是可以顯式的透傳給使用者,讓使用者給出對這個推薦邏輯的回報,而不是僅僅給出對推薦結果的回報。讓我們能更接近感覺使用者真實的興趣。這樣推薦系統的學習也有可能變得更精準。這兩個隻是我比較局限的思考給出的兩個例子。基本的邏輯是,讓推薦系統變得白盒化,或者有白盒化的能力,讓内容生産者和使用者的力量一起加入到推薦系統的優化中來。而不是僅僅推薦系統自說自話,讓這個系統變得越來越不可琢磨,不可了解,讓使用者和内容生産者都無從入手。

▌算法對資料 Confounding

先用一張簡圖介紹一下回報循環 ( Feedback Loop ):

推薦系統走向下一階段最重要的三個問題

算法決定了模型,模型決定了推薦的結果,推薦的結果會影響使用者的決策和行為,最後使用者的行為資料又回到影響算法訓練出的模型。算法、平台、使用者整個形成了一個回報的循環。

簡單來說,算法對資料的 confounding 就是算法會改變了整個系統能觀測到的資料分布,而 feedback loop 導緻算法永遠在一份已經被自己 confunded(混淆)過的資料上進行訓練和觀測,無法跳出這一循環。甚至有很大的可能會在這個循環中讓整個系統逐漸收斂,所能觀測的資料分布越來越局限,進而引發一些列問題。

舉個例子。有一小部分使用者 part A,他們的喜好很特别,但是現有算法無法很有效的将 part A 和其他大部分使用者 part B 區分開。那麼這些使用者的資料無法很好的影響算法的訓練,導緻模型最終決定了推薦系統給 part A 推薦的結果和 part B 推薦的結果一樣。part A 的使用者不喜歡這些推薦結果,給出了負向的回報,然而推薦系統的優化目标是整體的準确率或者收益,這部分使用者的回報就被忽視掉,模型繼續往 part B 所在的那部分優化。慢慢的 part A 使用者和平台的互動可能變得越來越少,最終推薦系統成功的擠走了這部分使用者。這個時候,即使有一個算法能給 part A 使用者提供好的推薦結果,它也再沒有機會為 part A 的使用者服務了,也沒有機會證明自己。而這一切發生得是很隐蔽的,可能系統都沒意識到自己丢失了這部分價值。

從道德上講,這樣對少數派的忽略是不公平的。從商業價值上講,可能短期看上去僅僅失去占比很少的少數派代表的價值,然而如果我們的系統這樣循環下去,其實是在源源不斷的失去一小部分價值,累積起來是非常大的損失。算法對資料的 confounding 讓系統觀測的資料分布逐漸收斂,讓整個系統的收益邊界不斷縮小,慢慢陷入無法疊代提升的境地。

可能有同學會覺得這就是一個簡單的系統需要 explore 問題。然而推薦系統涉及到商業價值,explore 變得不是這麼簡單。我們需要:

1. 衡量explore帶來的收益和成本;

2. 高效的explore方法。

1和2在學術界都有非常多的研究,但是在一個快速疊代的工業系統中,這兩個問題變得相當艱難。這要求我們必須在很短的周期内 explore 産生收益并可以衡量 explore 的效果,不然就得擁抱系統的變化,很多時候可能還得擁抱人事組織的變化。

▌總結

如果把優化推薦系統的準确率是一個一階梯度 learning 方向,可能它吸引了我們過多的精力。優化推薦系統,可以從更多的視角來推動。統一的 benchmark、可解釋性(透明化)、算法對資料 confounding 這幾個問題的推動可能更像是一種更上層對推薦系統 meta-learning。當然了,推薦系統研究發展的環境和氛圍并沒有我前面表達的那麼悲觀,還是有很多人在這個領域提出了很多有趣的想法,在一些很 tough 的問題上持續的努力。最後和大家一起共勉,希望我們能見到更公平、更高效、更滿足使用者時刻變化需要的推薦系統。

仿酷狗音樂播放器開發日志十五——音樂電台清單控件的實作

轉載請說明原文出處,謝謝~~

          前些日子封裝了好幾天控件,把webkit浏覽器控件,vlc視訊播放控件,音頻播放控件做好了,做這些控件一來是可以單獨使用,用到其他項目中,而來可以直接用到這個仿酷狗播放器項目中,後期把他們結合起來就是個完整播放器了。

          今天就繼續前段時間的工作,繼續完善仿酷狗的界面。前面的文章裡已經把左側的各個清單的外觀做好了,尤其是做好了播放器清單,不過今天發現,音樂電台清單中的電台項目也是個比較複雜的控件,是以今天就把他做出來。

          雖然複雜,但是有前面的做音樂播放清單的基礎,做這個就簡單多了,有很多代碼可以複用。

外觀分析

          首先來看看原酷狗的音樂電台的外觀。

仿酷狗音樂播放器開發日志十五——音樂電台清單控件的實作

          其中的每一個子項也是分為三種狀态,普通狀态下

仿酷狗音樂播放器開發日志十五——音樂電台清單控件的實作

          這隻是個簡單的橫向布局,一個logo,兩端文字和一個小标志圖檔。

          Hot和Down狀态下

仿酷狗音樂播放器開發日志十五——音樂電台清單控件的實作

           在普通狀态下,整體顔色略微加深,右側出現了兩個控制按鈕,也就是在原來的基礎上增加一個橫向布局

          輕按兩下狀态下

仿酷狗音樂播放器開發日志十五——音樂電台清單控件的實作

          這個狀态下的子項目相比之下就複雜多了,大緻的布局如下

仿酷狗音樂播放器開發日志十五——音樂電台清單控件的實作

          把他劃分為塊,從裡到外一塊一塊做就行,我直接拿我做音樂清單項目的子控件的布局來修改一份,在布局裡面要寫出這三種

下的布局代碼,然後我們隻要在c++代碼中根據控件收到的事件來動态修改控件的布局的高度和隐藏不隐藏就可以了。

         我寫duilib的xml布局幾乎不用float屬性的絕對布局,而是用控制邊距達到微調的效果,不過有例外的時候,寫這個控件的hot狀态的右上角的小關閉按鈕我是用了float屬性,因為不至于為了他而去額外使用一個布局。

代碼實作

       我直接拿來原來的CMusicItemUI控件,做稍微的修改就可以了,音樂電台項目的hot狀态和音樂清單的hot狀态不一樣,自習觀察可以看到音樂清單在hot狀态下外層有一個邊框,而電台沒有,如圖

仿酷狗音樂播放器開發日志十五——音樂電台清單控件的實作

        另外電台的每個項目之間有一道灰色的橫線分割,這個功能List控件自帶了,設定分割線顔色就可以了。

        再專門為電台項目寫一個RadioListItemInfo結構體來儲存他的各種資訊(電台名字,收聽人數等)

       然後再CMusicListUI控件  增加一個AddRadio函數,讓他根據傳入的RadioListItemInfo結構體,動态的根據音樂電台控件的xml檔案建構電台控件,增加到電台清單裡,這些代碼和分析已經在做播放清單的文章裡說過了,我就不再贅述了,最後把效果圖貼一下,包含三種狀态的控件。

仿酷狗音樂播放器開發日志十五——音樂電台清單控件的實作

         2014.8.1  14:30  Redrain

上一篇: 文章收集
下一篇: Vue

推薦系統走向下一階段最重要的三個問題

推薦系統走向下一階段最重要的三個問題

推薦系統和搜尋引擎一直是比較火熱的技術,因為離商業化比較近。她們是網際網路領域兩個衣着光鮮的美人,小腰一扭就是錢的味道。這幾年憑借着兩個紅利:

1. 網際網路行業的經濟紅利

2. 硬體技術突破觸發的炒熱了深度學習冷飯帶來的技術紅利,推薦系統的效果有了比較明顯的提升。

工業界的技術,從傳統的人工先驗特征設計組合+線性模型(如 logistics regression),逐漸過渡到了 wide&deep、deepFM、DIN、GRU4REC、DIEN 等等深度學習模型。這些深度學習模型普遍采用 embedding 的技術先将原始輸入的離散高維信号投影到一個低秩的 embedding 空間,然後用不同結構的神經網絡去拟合輸入信号和輸出的關系。神經網絡的非線性能力可以部分學習不同輸入信号之間的非線性關系,把人力從特征設計解放出來,研發一些新的技術。硬體的發展讓我們擁有更多的計算資源,可以收集和利用更多的樣本。這些條件讓高自由度的深度學習模型普遍能取得更好的效果。

為什麼之前不說推薦系統有了比較明顯進展,而僅僅說效果上有提升呢?因為從技術層面來說,進入深度學習時代後,推薦系統像是各個應用技術領域中比較玩賴的一個。在深度學習時代,我們大部分情況下隻是在利用别的領域誕生出的技術,卻沒有真正從自有領域出發找出特色的問題并在嘗試解決的過程中提出新的技術,也沒有從這個商業價值轉化這麼直接的場景研發出可以推廣到其他領域的技術。從社會服務模式來說,推薦系統并沒有形成新的服務形态,推薦系統還僅僅是掌握在平台手中,使用推薦系統的使用者和推薦内容提供方都沒能很好的參與到推薦系統的建設當中。推薦系統真的懂使用者要什麼嗎?有想過能為推薦系統的内容提供者做點什麼嗎?

簡單的說就是這個領域拿了很多錢,卻沒辦太多事。

雖然我對自己從事這個領域的評價,嘴比較臭,但是我想的還是美的。我覺得推薦系統會走入下一階段,成為一個能為社會提供更好的服務,同時還能源源不斷的孕育新技術的好孩子。個人愚見,要步入下一階段,我們需要研究三個重要問題:

1. 和真實應用場景貼近的統一 benchmark。我們需要一個工業級、可以疊代真實應用場景技術的資料集。

2. 推薦系統的可解釋性。在我看來可解釋性重要的不是指導研究人員之後怎麼疊代方法,而是增加透明性,讓使用推薦系統的使用者和為推薦系統提供内容的生産者能看得懂推薦系統,能參與進來。

3. 算法對系統資料的 Confounding 問題。可以簡單了解為回報循環(Feedback Loop)問題,簡單來說就是算法會決定推薦系統展示給使用者内容,進而間接的影響了使用者的行為。而使用者的行為回報資料又會決定算法的學習。形成一個循環。

▌資料集

統一可疊代的資料集對一個領域技術發展的推動作用不言而喻。圖像領域從 mnist、cifar 到 ImageNet 等等,這些開放的資料集為從業者提供了公平疊代的土壤。每個人有自己的想法都可以去盡力嘗試,同時自己的想法有統一的标準可以驗證,技術自然百花齊放。

反觀推薦系統,大家疊代的資料集都不一樣,資料集一樣處理方式不一樣,很難保證我們 report 出來的是一個可行的方法,而不是讓這個方法可行的實驗 setting。還有一個比較大的問題是現在開放的資料集規模都和真實工業場景使用的規模相去甚遠。推薦系統的真實場景很多問題本就是在真實規模的資料上才特有存在的。學術界和工業界在不同的資料上疊代,這就讓産出的方法到真實應用間還存在着巨大的天然鴻溝。我還記得我在找實習的時候和面試官讨論問題,他們經常都會說出一句“工業界不是這樣的,你的這個想法太天真”。現在我自己在工業界,我能認識到學界和工業界的差別,但是我想我們能盡量部分縮小這個鴻溝。至少讓更多的人有機會參與到貼近實際應用場景的疊代中來。提供一個工業級的開放資料集,讓更多的力量參與進來,總會碰撞出一些新的想法。同時大家提出的方法可對比,也就能一步一步的把技術推向更高。工業界把自己特有的問題通釋化,讓外界的人參與進來分擔壓力,自己也就能投入更多精力去攻克那些暫時還不可通釋化的問題。可能會比說一句“工業界不是這樣的”好。

當然要開源這樣的一個資料集也面臨特别的挑戰,如何保護使用者的隐私?大規模的資料集如何維護?如何讓大家有能力使用這樣的資料集等等... 雖然困難,但是我最近和一些同僚已經在計劃推進嘗試開放這樣的一個資料集。我相信也有很多同行也在規劃類似的工作,最後我們總會有一個可以讓大家公平有效疊代的土壤。

▌可解釋性

推薦系統目前做的事情是把内容(如商品、新聞、音樂等)和使用者聯系起來,讓使用者更高效的接觸對自己有意義的内容。我們

推薦系統走向下一階段最重要的三個問題

來表示某個商品,其中

推薦系統走向下一階段最重要的三個問題

一共有 N 個商品,

推薦系統走向下一階段最重要的三個問題

來表示某個使用者,其中

推薦系統走向下一階段最重要的三個問題

一共有 M 個使用者。同時用

推薦系統走向下一階段最重要的三個問題

表達将

推薦系統走向下一階段最重要的三個問題

推薦給

推薦系統走向下一階段最重要的三個問題

産生的價值(可以是點選成交等可直接量化的名額,或者是使用者的滿意度等)。現在推薦系統做的事情是通過預估

推薦系統走向下一階段最重要的三個問題

來決定如何在有限的推薦機會中最大化總體的推薦價值

推薦系統走向下一階段最重要的三個問題

其中

推薦系統走向下一階段最重要的三個問題

代表推薦系統給使用者

推薦系統走向下一階段最重要的三個問題

選取的推薦内容集合。我們的目标其實是讓推薦産生的價值更大,但是目前我們的推薦系統局限于通過預估

推薦系統走向下一階段最重要的三個問題

來決定推薦給使用者的

推薦系統走向下一階段最重要的三個問題

,僅僅從配置設定推薦機會的角度來優化推薦價值。

可是這個遊戲的參與方不僅僅是推薦系統,還有為系統提供内容的内容生産者,以及使用者。如果推薦系統僅僅是配置設定流量,那麼它本身能創造的價值有限,為什麼不能讓内容生産者和使用者參與一起創造新的價值,做大這個蛋糕呢。如果内容生産者能提供更優質的内容,是不是總體的推薦價值會變大。推薦系統目前預估推薦價值

推薦系統走向下一階段最重要的三個問題

很大程度上依賴使用者的回報,如果使用者能提供更真實,更準确的回報是不是能更準确的預估推薦價值

推薦系統走向下一階段最重要的三個問題

進而提升總體的推薦價值。如果我們在建設推薦系統的技術時僅僅局限于平台自己如何精準的預估

推薦系統走向下一階段最重要的三個問題

,那麼總體的推薦價值是有上限的。我們需要的是尋找如何讓内容生産者和使用者參與到優化推薦系統的橋梁。

最近幾年,在如何更精準的預估推薦價值

推薦系統走向下一階段最重要的三個問題

上,有不少有效的模型被提出(大部分是深度學習的方法),但是這些模型也越來越黑盒化了。不僅僅是使用者和内容提供者不明白推薦系統推薦的邏輯,就連做這些模型的工程師、把控推薦系統平台的人也不了解每一次推薦的邏輯。面對這樣一個黑盒的系統,内容提供方和使用者不能了解,如何能很好的參與進來呢。

有意思的是即使在這樣一個黑盒的推薦系統下,内容提供方和使用者其實是有意識或者有欲望想參與建設更好的推薦系統的。不過由于目前系統的黑盒特性,導緻大家不知從何入手。舉幾個例子。從内容生産者來說,我們以電商為例,大家可以看一下淘寶上那些商品的“标題”。

推薦系統走向下一階段最重要的三個問題

随機選自淘寶場景,這些商品的标題,是内容生産者(商家)更多為了寫給使用者看的呢,還是寫給推薦系統看的呢?

這些标題,在簡短的标題中,出現了大量的屬性詞,可讀性并不強。很多時候這些标題可能承載了商家通過标題來影響推薦系統進而擷取更多的流量的期望。從使用者角度來說,我們就以豆瓣為例,大家對内容是有很強的評價意識的。隻是很多場景,我們可能隻能通過使用者的點選之類的信号來模組化推薦價值

推薦系統走向下一階段最重要的三個問題

。這個時候我們會研(bao)究(yuan)使用者的點選信号是帶有大量噪聲的。但是使用者又能怎樣呢?是不是很多時候是我們展現給使用者的内容具有誤導性呢(想象一下商品推薦場景的美女圖檔)?

為什麼可解釋性可能是讓内容生産者和使用者參與到優化推薦系統的橋梁呢?想象一下,如果我們的推薦系統不僅僅是模組化了推薦價值

推薦系統走向下一階段最重要的三個問題

,而是我們真正模組化了使用者的興趣,且這個興趣我們能白盒化的給出一些人能了解的解釋。推薦系統可以實時的去預估未來使用者的興趣。那麼如果這些興趣不再是一串無法了解的數字 ( embedding ),如果是人類可以了解的興趣,比如比較簡單的文字标簽。這樣一些人類可以了解的興趣是不是可以指導内容生産者去生産更滿足使用者需要的内容呢。而更豐富更滿足使用者需要的内容自然會将整個系統的推薦價值推到更高。同時推薦系統推薦某個商品的邏輯,是不是可以顯式的透傳給使用者,讓使用者給出對這個推薦邏輯的回報,而不是僅僅給出對推薦結果的回報。讓我們能更接近感覺使用者真實的興趣。這樣推薦系統的學習也有可能變得更精準。這兩個隻是我比較局限的思考給出的兩個例子。基本的邏輯是,讓推薦系統變得白盒化,或者有白盒化的能力,讓内容生産者和使用者的力量一起加入到推薦系統的優化中來。而不是僅僅推薦系統自說自話,讓這個系統變得越來越不可琢磨,不可了解,讓使用者和内容生産者都無從入手。

▌算法對資料 Confounding

先用一張簡圖介紹一下回報循環 ( Feedback Loop ):

推薦系統走向下一階段最重要的三個問題

算法決定了模型,模型決定了推薦的結果,推薦的結果會影響使用者的決策和行為,最後使用者的行為資料又回到影響算法訓練出的模型。算法、平台、使用者整個形成了一個回報的循環。

簡單來說,算法對資料的 confounding 就是算法會改變了整個系統能觀測到的資料分布,而 feedback loop 導緻算法永遠在一份已經被自己 confunded(混淆)過的資料上進行訓練和觀測,無法跳出這一循環。甚至有很大的可能會在這個循環中讓整個系統逐漸收斂,所能觀測的資料分布越來越局限,進而引發一些列問題。

舉個例子。有一小部分使用者 part A,他們的喜好很特别,但是現有算法無法很有效的将 part A 和其他大部分使用者 part B 區分開。那麼這些使用者的資料無法很好的影響算法的訓練,導緻模型最終決定了推薦系統給 part A 推薦的結果和 part B 推薦的結果一樣。part A 的使用者不喜歡這些推薦結果,給出了負向的回報,然而推薦系統的優化目标是整體的準确率或者收益,這部分使用者的回報就被忽視掉,模型繼續往 part B 所在的那部分優化。慢慢的 part A 使用者和平台的互動可能變得越來越少,最終推薦系統成功的擠走了這部分使用者。這個時候,即使有一個算法能給 part A 使用者提供好的推薦結果,它也再沒有機會為 part A 的使用者服務了,也沒有機會證明自己。而這一切發生得是很隐蔽的,可能系統都沒意識到自己丢失了這部分價值。

從道德上講,這樣對少數派的忽略是不公平的。從商業價值上講,可能短期看上去僅僅失去占比很少的少數派代表的價值,然而如果我們的系統這樣循環下去,其實是在源源不斷的失去一小部分價值,累積起來是非常大的損失。算法對資料的 confounding 讓系統觀測的資料分布逐漸收斂,讓整個系統的收益邊界不斷縮小,慢慢陷入無法疊代提升的境地。

可能有同學會覺得這就是一個簡單的系統需要 explore 問題。然而推薦系統涉及到商業價值,explore 變得不是這麼簡單。我們需要:

1. 衡量explore帶來的收益和成本;

2. 高效的explore方法。

1和2在學術界都有非常多的研究,但是在一個快速疊代的工業系統中,這兩個問題變得相當艱難。這要求我們必須在很短的周期内 explore 産生收益并可以衡量 explore 的效果,不然就得擁抱系統的變化,很多時候可能還得擁抱人事組織的變化。

▌總結

如果把優化推薦系統的準确率是一個一階梯度 learning 方向,可能它吸引了我們過多的精力。優化推薦系統,可以從更多的視角來推動。統一的 benchmark、可解釋性(透明化)、算法對資料 confounding 這幾個問題的推動可能更像是一種更上層對推薦系統 meta-learning。當然了,推薦系統研究發展的環境和氛圍并沒有我前面表達的那麼悲觀,還是有很多人在這個領域提出了很多有趣的想法,在一些很 tough 的問題上持續的努力。最後和大家一起共勉,希望我們能見到更公平、更高效、更滿足使用者時刻變化需要的推薦系統。