程序可以判斷用戶當前的狀態嗎?
我在使用網易雲音樂的時候感覺到這麼一個問題。我在工作時,聽到「挺喜歡的歌曲我也沒空點「我喜歡」,聽到討厭的歌曲我也沒空跳。那麼這段時間,我對歌曲的反饋其實是比較無效的(我感覺從中收集的信息最多是我不排斥哪些歌,畢竟如果歌曲特別難聽我可能會去跳一下)。當時我就在想:做「私人FM」根據用戶喜好選擇播放歌曲的演算法時,有沒有考慮用戶當前的工作狀態?如果通過一定機制考慮這一點(比如我長時間不反饋或者把程序調成小窗口,就判定是這種狀態,隨口說說),是否可以捕捉得更準確一點?
推而廣之: 程序可以監控用戶是否最大化、最小化本程序界面嗎? 程序可以監控用戶還打開了哪些程序嗎? 如果可以監控,這種監控是合法的嗎?如果上述的一些監控是合法的,或者有其它我暫時沒有想到的手段,這些挖掘用戶喜好的演算法可以判別用戶的狀態嗎?判別演算法的主流思想是什麼?如果這個問題太廣,那麼就音樂軟體而言,答案是什麼?
謝謝大家的關注。
這類問題統稱為implicit feedback。在推薦系統的研究中,是一個已經被人們所關注的子課題了。
推薦一篇比較著名的paper:
Collaborative Filtering for Implicit Feedback Datasets你根據它引的文章和引它的文章順藤摸瓜~====次日清晨起來覺得自己說的實在語焉不詳,補充兩句====
你手動點喜歡/不喜歡的時候,產生了一個explicit feedback。這個explicit feedback可能會考慮到的信息有:1. 賬號歷史/當月/當日點贊頻率(看你是否是點贊狂魔或者間歇性點贊狂魔)2. 賬號註冊日期(新註冊的用戶傾向多點贊)3. 點贊時間(有的人傾向於早起點贊)
4. 歌曲播放計數5. 點贊時刻的歌曲位置etc...你沒點的時候,產生了一個implicit feedback。這個implicit feedback可能會考慮到的信息有:
1. 賬號歷史/當月/當日點贊頻率2. 賬號註冊日期3. 當前時間4. 歌曲播放計數5. 前N首歌曲都是哪些歌etc...
當然,你說的程序是否最大化最小化,也在這些feature裡面如果要想枚舉,你可能能列出上百個explicit/implicit feedback features。如果我們擁有無限數據和無限計算資源,那麼當然把所有features都考慮進來是最好的。但是我們既沒有那麼多數據,也沒有那麼多計算資源——尤其是推薦演算法需要經常更新訓練模型(每隔一段時間,就把最新的explicit/implicit反饋數據加入模型——順便說一句,這也正是為什麼Netflix challenge之後,冠軍演算法並沒有被用在實際系統里)。
演算法模型通常會選擇一個最經濟的點,選擇計算上足夠便宜,且效果上足夠有效的feature。所以你說的這些判斷最大化最小化的feature,幾乎不可能由於法律等原因沒有用。我猜要麼大多數在線播放器已經在用這些信息了(想證實的話,需要看前端js代碼,或者是上傳的數據),要麼是用過之後效果不理想,就不再繼續使用了。
但是相信我,廣大feature engineer (a.k.a. big data scientist) 一定不會沒有想到這一點。舉個例子來說,Pandora會在一段時間之內停止播放,然後問你 are you still there——這是一個很明顯的implicit feedback產生的explicit action不請自答。
這是一個推薦問題中比較基礎的部分,已有兩個答案其實都答到了,不過他們都在裡面摻雜了很多術語,以及一些英文辭彙。我來簡單一點解釋。
用戶在使用推薦系統的時候是會產生很多行為的,這些行為會作為日誌被系統記錄下來,記錄下來的數據,叫做「用戶行為數據」。這些數據會是什麼數據呢,比如用戶在淘寶上收藏了某個商品,比如用戶在FM上喜歡了一首歌,比如用戶在門戶網站上點擊了一個廣告,等等等等。
用戶行為在推薦系統中一般分為兩種——顯性反饋行為(explicit feedback)和隱性反饋行為(implicit feedback)。
顯性反饋行為,代表用戶做出的明確表意的反饋,喜歡了某款商品、對某個電影評了多少分、喜歡了某首音樂。這些行為明確地表達了用戶對某一個事物的態度,推薦系統可以「直接」(當然了原始數據會被處理過)地去使用這些數據。顯性反饋行為的數據量往往比較小(相對於隱性反饋行為的數據量而言),因為大多數的用戶很少去主動地去表達對一件商品(一首歌、一個廣告、一部小說、一部電影)的明確態度。
而按題主的描述,就是所謂的「監控」,則是對應了隱性反饋行為,即不能明確地反應使用者態度的行為,系統收集到這些數據的時候,需要去「猜」用戶的態度。在隱性反饋行為數據裡面,比較常見的是網頁頁面瀏覽行為數據,比如,用戶在一個頁面停留的時間、用戶點擊一個鏈接的頻率,等等。再擴展來看,很多東西都是用戶產生的隱性行為數據,比如,用戶跳過一首歌的行為、用戶把選好的物品從購物車裡刪去的行為、用戶讓手機應用停留在後台的時間(是的,用戶使用手機的習慣,也是可用的數據)。為什麼說這些數據是隱性的,拿用戶停留在頁面的時間來講,用戶停留在這個頁面很長的時間,有可能是他非常喜歡這個頁面的內容以致於他認真花費時間看了這個頁面的內容,也很有可能是他打開了這個頁面就忘了關掉而已,並不能很明確地去表達用戶的態度。
那麼系統收集到隱性反饋行為數據之後,是如何去「猜」用戶的,拿FM來舉例子,假定隨機給用戶播放了三首音樂,第一首用戶點擊了「喜歡」,第二首用戶聽了一小段然後跳過,第三首用戶則點了「不喜歡」。那麼系統就會去猜了,這個跳過行為,到底是什麼意思呢,是喜歡還是不喜歡呢。這就是題主提到的「判別」了。
我們權且說跳過這個行為表示用戶「不這麼喜歡」,那麼用戶「不這麼喜歡」的程度是怎樣呢?假定這個時候要再給用戶推薦一首歌曲,第二首歌曲還會不會出現呢(我們假設喜歡的歌曲一定會出現,不喜歡的歌曲肯定不會出現)?
最簡單的方法就是加權(當然實際的系統中會使用複雜的演算法,這裡只是便於理解提出的一種方法),假定用戶明確表示的「喜歡」權重為1,明確表示的「不喜歡」權重為0,那麼用戶跳過的歌曲就可以以(已播放時長/歌曲總時長)來表達用戶對這首歌曲的態度。如果用戶已經播放的時間特別短,可能說明用戶剛聽前奏已經覺得這首歌難聽死了;如果用戶差不多快聽完了才跳過,可能說明用戶只是覺得最後一點太冗長了。
題主在問題的最後提到了「監控」的合法性問題。這一點我沒有什麼了解,就不瞎摻和了。推薦閱讀:
※想學習推薦系統,如何從小白成為高手?
※如何看待人民網三評演算法推薦?
※廣告投放和排序效果如何進行多目標優化?
※最近我在完成一個旅遊個性化推薦系統的設計,裡面用到的關聯規則和一些協同過濾演算法,目前是用weka在做測試,有沒有對此比較熟悉的朋友?
※類似微博的 feed 熱度演算法如何計算?
TAG:推薦演算法 |