1. 程式人生 > >機器人--推薦系統

機器人--推薦系統

距離 -m 們的 data- -type 分解 排序 zha blog

430的目標是完成機器人的推薦系統,提高機器人回答問題的準確率,關於過程碰到的問題以及解決方案與大家分享一下,(請輕噴!) 那麽這個推薦系統到底應該怎麽做呢? 最開始的第一個思路是 根據用戶 進入到ERP的模塊 推薦該模塊下的相關問題。其實就是根據用戶的軌跡來推薦問題,這是一個思路但是不太完整。因為很有可能用戶就從ERP的桌面就進入了機器人,但他實際要咨詢的是銷售系統的相關知識,那麽此時的推薦就不太滿足用戶的咨詢需求。 因此參考一些業界其他公司的做法,可以基於內容的協同過濾(Collaborative Filtering,即CF)來設計機器人推薦系統。 那麽什麽是基於內容的協同過濾,一個最經典的例子就是看電影,有時候不知道哪一部電影是我們喜歡的或者評分比較高的,那麽通常的做法就是問問周圍的朋友,看看最近有什麽好的電影推薦。在問的時候,都習慣於問跟自己口味差不多的朋友,這就是協同過濾的核心思想。 協同過濾是在海量數據中挖掘出小部分與你品味類似的用戶,並讓這些用戶成為鄰居,然後根據他 們喜歡的東西組織成一個排序的目錄推薦給你。所以就有如下兩個核心問題 (1)如何確定一個用戶是否與你有相似的問題? (2)如何將鄰居們的喜好咨詢的問題組織成一個排序目錄? 協同過濾算法包括基於用戶和基於物品的協同過濾算法。so 我們應該怎麽做呢 1、收集用戶偏好習慣 機器人經過一段時間的積累,已經積累了一些用戶經常咨詢的問題以及對問題的反饋,以及一些問題本身的屬性,比如問題的類型、以及問題所屬的模塊系統 2、數據預處理 一、降燥處理,主要針對對於用戶的誤操作數據進行過濾,減少對整體數據的影響 二、歸一化處理,不同行為數據的取值相差可能很大,通過歸一化,才能使數據更加準確。 3、經過上述處理後 我們得到一張用戶的user profile的二維的矩陣。如圖:
I1 I2 I3
U1 1 1 1
U2 1 0 0
U3 0 1 0
u表示用戶,k表示知識庫條目 1:表示機器人對用戶咨詢問題反饋的知識庫條目有效,0:則表示無效。 同樣的道理,我們可以建立知識庫條目的item profile 二維矩陣,每一個知識庫條目 有所屬的子系統、所屬模塊、以及當前的問題類型等。在這裏我截取了4個屬性,所屬子系統、所屬一級模塊、所屬二級模塊,以及問題類型。如圖:
attr1 attr2 attr3 attr4
I1 0.01 0.02 0.08 0.33
I2 0.01 0.03 0.17 0.5
I3 0.98 0.95 0.75 0.17
4、計算相似度 有了評分矩陣以後,那麽開始要找到用戶相似度及物品相似度了。 推薦系統中通常使用余弦相似性作為距離度量,在n維孔空間中評價被視為向量,基於這些向量之間的夾角來計算相似性。 計算用戶k與用戶a的相似度: 技術分享 計算條目m與條目b的相似度: 技術分享 經過計算以後,我們可以拿到用戶和物品的相似度矩陣。 5、推薦 準備了這麽多,最後最終的目的還是要進行推薦,剛剛我們提到了2個算法,基於用戶的協同過濾和基於物品的協同過濾,(雖然可以百度到,但是補充說明一下) 基於用戶的協同過濾,因為我們計算出了用戶的相似度矩陣,如圖:
u1 u2 u3
u1 0 0.156874 0.21221
u2 0.14213 0 0.56231
u3 0.165984 0.62123 0
然後我們還可以設計一個權重,根據最近鄰居的相似度以及它們對物品的偏好,預測當前用戶偏好的但未涉及條目,計算得到一個排序的條目列表進行推薦 基於物品的協同過濾,類似的我們還可以拿到一個物品的相似度矩陣(不貼圖了),他是從物品本身出發,比如A喜歡咨詢知識庫條目k,那麽我們根據物品相似度矩陣,拿到與k相似的並且用戶A並未咨詢過的條目推薦給A。 6、評估 用於評估預測精確度的指標之一是Root Mean Squared Error(RMSE) 技術分享 所以我們可以直接用sklearn中的mean_square_error(mse)函數,然後再求個平方根,就是RMSE。 結果如圖: 技術分享 從最終的結果來看,基於用戶與基於物品的預測精確度差距不大,同時,由於基於物品計算復雜會比基於用戶的計算復雜少很多,目前采用就是基於物品的協同過濾算法。 兩種算法的適用場景請參考: https://www.ibm.com/developerworks/cn/web/1103_zhaoct_recommstudy2/index.html 7、後續 推薦系統在業界一直有一個問題比較難處理,就是冷啟動,由於收集到的用戶信息不足,導致數據稀疏,推薦效果不是很不理想;那麽解決方案是基於模型的協同過濾(MF),采用奇異值分解算法svd。他的推薦效果很不錯,如圖: 技術分享 (ps:相對svd算法的復雜度是最高的。。。。。對於沒有GPU必要設備的我們來說只能放棄了) 言歸正傳,後續準備分享建設機器人寒暄庫,讓機器人可以口吐“人言”,甚至口吐“甄嬛體”。 目前還需要童鞋幫忙建設寒暄庫,各路大神有時間的,助小的一臂之力。 推薦資料: https://www.ibm.com/developerworks/cn/web/1103_zhaoct_recommstudy2/index.html http:[email protected]
/blog/static/2414832520123269713813/

機器人--推薦系統