機器人--推薦系統(1)

430的目標是完成機器人的推薦系統,提升機器人回答問題的準確率,關於過程碰到的問題以及解決方案與你們分享一下,(請輕噴!) html

那麼這個推薦系統到底應該怎麼作呢? web

最開始的第一個思路是 根據用戶 進入到ERP的模塊 推薦該模塊下的相關問題。其實就是根據用戶的軌跡來推薦問題,這是一個思路可是不太完整。由於頗有可能用戶就從ERP的桌面就進入了機器人,但他實際要諮詢的是銷售系統的相關知識,那麼此時的推薦就不太知足用戶的諮詢需求。 算法

所以參考一些業界其餘公司的作法,能夠基於內容的協同過濾(Collaborative Filtering,即CF)來設計機器人推薦系統。 函數

那麼什麼是基於內容的協同過濾,一個最經典的例子就是看電影,有時候不知道哪一部電影是咱們喜歡的或者評分比較高的,那麼一般的作法就是問問周圍的朋友,看看最近有什麼好的電影推薦。在問的時候,都習慣於問跟本身口味差很少的朋友,這就是協同過濾的核心思想。 spa

協同過濾是在海量數據中挖掘出小部分與你品味相似的用戶,並讓這些用戶成爲鄰居,而後根據他 設計

們喜歡的東西組織成一個排序的目錄推薦給你。因此就有以下兩個核心問題 htm

   (1)如何肯定一個用戶是否與你有類似的問題? blog

   (2)如何將鄰居們的喜愛諮詢的問題組織成一個排序目錄? 排序

   協同過濾算法包括基於用戶基於物品的協同過濾算法。so 咱們應該怎麼作呢 get

 

一、收集用戶偏好習慣

機器人通過一段時間的積累,已經積累了一些用戶常常諮詢的問題以及對問題的反饋,以及一些問題自己的屬性,好比問題的類型、以及問題所屬的模塊系統

 

二、數據預處理

1、降燥處理,主要針對對於用戶的誤操做數據進行過濾,減小對總體數據的影響

2、歸一化處理,不一樣行爲數據的取值相差可能很大,經過歸一化,才能使數據更加準確。

 

三、通過上述處理後

咱們獲得一張用戶的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

 

四、計算類似度

有了評分矩陣之後,那麼開始要找到用戶類似度及物品類似度了。

推薦系統中一般使用餘弦類似性做爲距離度量,在n維孔空間中評價被視爲向量,基於這些向量之間的夾角來計算類似性。

計算用戶k與用戶a的類似度:

計算條目m與條目b的類似度:

 

通過計算之後,咱們能夠拿到用戶和物品的類似度矩陣。

 

五、推薦

準備了這麼多,最後最終的目的仍是要進行推薦,剛剛咱們提到了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。

 

六、評估

用於評估預測精確度的指標之一是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://blog.163.com/lnhenrylee@126/blog/static/2414832520123269713813/

相關文章
相關標籤/搜索