推薦系統之 推薦系統例項

2022-06-22 15:27:09 字數 4524 閱讀 3596

前面幾章介紹了各種各樣的資料和基於這些資料的推薦演算法。在實際系統中,前面幾章提到的資料大都存在,因此如何設計乙個真實的推薦系統處理不同的資料,根據不同的資料設計演算法,並將這些演算法融合到乙個系統當中是本章討論的主要問題。本章將首先介紹推薦系統的外圍架構,然後介紹推薦系統的架構,並對架構中每個模組的設計進行深入討論。

一般來說,每個**都會有乙個ui系統,ui系統負責給使用者展示網頁並和使用者互動。

**會通過日誌系統將使用者在ui上的各種各樣的行為記錄到使用者行為日誌中。日誌可能儲存在記憶體快取裡,也可能儲存在資料庫中,也可能儲存在檔案系統中。

從上面的結構可以看到,推薦系統要發揮強大的作用,除了推薦系統本身,主要還依賴於兩個條件——介面展示和使用者行為資料。

 通過一定方式展示物品,主要包括物品的標題、縮圖和介紹等。

 很多推薦介面都提供了推薦理由,理由可以增加使用者對推薦結果的信任度。

 推薦介面還需要提供一些按鈕讓使用者對推薦結果進行反饋,這樣才能讓推薦演算法不斷改善使用者的個性化推薦體驗。

在設計推薦介面時,我們可以綜合考慮其他**的設計並結合自己**的特點。

個性化推薦演算法依賴於使用者行為資料,而在任何乙個**中都存在著各種各樣的使用者行為資料。那麼如何訪問這些資料就是推薦系統需要解決的首要問題。表7-1展示了乙個假想的電子商務**上的典型使用者行為資料。如表所示,從產生行為的使用者角度看,有些行為是只有註冊使用者才能產生的,而有些行為是所有使用者都可以產生的。從規模上看,瀏覽網頁、搜尋記錄的規模都很大,因為這種行為所有使用者都能產生,而且平均每個使用者都會產生很多這些行為。

因而,推薦系統的核心任務就被拆解成兩部分,乙個是如何為給定使用者生成特徵,另乙個是如何根據特徵找到物品。

使用者的特徵種類非常多,主要包括如下幾類。

 人口統計學特徵包括使用者的年齡、性別、國籍和民族等使用者在註冊時提供的資訊。

 使用者的行為特徵包括使用者瀏覽過什麼物品、收藏過什麼物品、給什麼物品打過什麼樣的分數等使用者行為相關的特徵。同時,使用者行為從時間上也可以分為使用者近期的行為和長期的行為。

 使用者的話題特徵可以根據使用者的歷史行為利用話題模型(topic model)將電視劇集和電影聚合成不同的話題,並且計算出每個使用者對什麼話題感興趣。比如使用者如果看了《葉問》、《新龍門客棧》和《醉拳》,那麼可以認為使用者對「香港武俠電影」這個話題感興趣。

推薦系統的推薦任務也有很多種,如下所示。

 將最新加入的物品推薦給使用者。

 將商業上需要宣傳的物品推薦給使用者。

 給使用者推薦不同種類的物品,比如亞馬遜會推薦圖書、音像、電子產品和服裝等。

 給使用者混合推薦,有時需要將圖書和音像製品放到乙個推薦列表中展示給使用者。

 對於不同的產品推薦不同新穎度的物品。比如在首頁給使用者展示比較熱門的推薦結果,在推薦系統頁面給使用者展示長尾中的物品。

 考慮到使用者訪問推薦系統的上下文,比如當你在豆瓣**找到「李宗盛」時,右側會有乙個鏈結告訴你可以在豆瓣電台收聽「李宗盛」。單擊了這個鏈結後,豆瓣電台給你推薦的**就考慮了「李宗盛」這個上下文。

如果要在乙個系統中把上面提到的各種特徵和任務都統籌考慮,那麼系統將會非常複雜,而且很難通過配置檔案方便地配置不同特徵和任務的權重。因此,推薦系統需要由多個推薦引擎組成,每個推薦引擎負責一類特徵和一種任務,而推薦系統的任務只是將推薦引擎的結果按照一定權重或者優先順序合併、排序然後返回。

兩個好處:

推薦引擎架構主要包括3部分。

 該部分負責從資料庫或者快取中拿到使用者行為資料,通過分析不同行為,生成當前使用者的特徵向量。不過如果是使用非行為特徵,就不需要使用行為提取和分析模組了。該模組的輸出是使用者特徵向量。

 該部分負責將使用者的特徵向量通過特徵-物品相關矩陣轉化為初始推薦物品列表。

 該部分負責對初始的推薦列表進行過濾、排名等處理,從而生成最終的推薦結果。

一般來說,使用者的特徵包括兩種,一種是使用者的註冊資訊中可以提取出來的,主要包括使用者的人口統計學特徵。除了這種特徵,另一種特徵主要是從使用者的行為中計算出來的,本節著重討論如何生成特徵。

乙個特徵向量由特徵以及特徵的權重組成,在利用使用者行為計算特徵向量時需要考慮以下因素:

 使用者行為的次數 有時使用者對乙個物品會產生很多次行為。比如使用者會聽一首歌很多次,看一部電視劇集的很多集等。因此使用者對同乙個物品的同一種行為發生的次數也反映了使用者對物品的興趣,行為次數多的物品對應的特徵權重越高。

 物品的熱門程度 如果使用者對乙個很熱門的物品產生了行為,往往不能代表使用者的個性,因為使用者可能是在跟風,可能對該物品並沒有太大興趣,特別是在使用者對乙個熱門物品產生了偶爾幾次不重要的行為(比如瀏覽行為)時,就更說明使用者對這個物品可能沒有什麼興趣,可能只是因為這個物品的鏈結到處都是,很容易點到而已。反之,如果使用者對乙個不熱門的物品產生了行為,就說明了使用者的個性需求。因此,推薦引擎在生成使用者特徵時會加重不熱門物品對應的特徵的權重。

在得到初步的推薦列表後,還不能把這個列表展現給使用者,首先需要按照產品需求對結果進行過濾,過濾掉那些不符合要求的物品。

一般來說,過濾模組會過濾掉以下物品。

 使用者已經產生過行為物品因為推薦系統的目的是幫助使用者發現物品,因此沒必要給使用者推薦他已經知道的物品,這樣可以保證推薦結果的新穎性。

 候選物品以外的物品候選物品集合一般有兩個**,乙個是產品需求。比如在首頁可能要求將新加入的物品推薦給使用者,因此需要在過濾模組中過濾掉不滿足這一條件的物品。

經過過濾後的推薦結果直接展示給使用者一般也沒有問題,但如果對它們進行一些排名,則可以更好地提公升使用者滿意度,一般排名模組需要包括很多不同的子模組,下面將對不同的模組分別加以介紹。

1. 新穎性排名

新穎性排名模組的目的是給使用者盡量推薦他們不知道的、長尾中的物品。

對熱門物品進行降低權重可以提高推薦的新穎度.

2. 多樣性

多樣性也是推薦系統的重要指標之一。增加多樣性可以讓推薦結果覆蓋盡可能多的使用者興趣。

第一種提高多樣性的方法是將推薦結果按照某種物品的內容屬性分成幾類,然後在每個類中都選擇該類中排名最高的物品組合成最終的推薦列表。比如,如果是電影,可以按照電影的類別(愛情片、動作片、科幻片等)對推薦結果中的電影分類,然後每種類別都選出幾部電影組成最終的推薦結果。

因此,第二種提高推薦結果多樣性的方法是控制不同推薦結果的推薦理由出現的次數。本章提出的推薦系統對於每個推薦出來的物品都有乙個推薦理由,這個推薦理由一般是產生推薦結果的重要特徵。那麼,要提高推薦結果的多樣性,就需要讓推薦結果盡量來自不同的特徵,具有不同的推薦理由,而不是所有的推薦結果都對應乙個理由。

下面的**根據推薦理由增加推薦結果的多樣性,這裡輸入的recommendations是按照權重從大到小排序的,程式中每次拿出乙個推薦結果,如果這個結果已經被用過了,就會對推薦結果的權重除以2降權(這裡具體除以幾可以在實際應用中自己調整),最終將推薦結果重新按照權重從大到小排序。

3. 時間多樣性

時間多樣性主要是為了保證使用者不要每天來推薦系統都看到同樣的推薦結果。

 記錄使用者每次登陸推薦系統看到的推薦結果。

 將這些結果發回日誌系統。這種資料不需要實時儲存,只要能保證小於一天的延時就足夠了。

 在使用者登入時拿到使用者昨天及之前看過的推薦結果列表,從當前推薦結果中將使用者已經看到的推薦結果降權。

4. 使用者反饋

排名模組最重要的部分就是使用者反饋模組。使用者反饋模組主要通過分析使用者之前和推薦結果的互動日誌,**使用者會對什麼樣的推薦結果比較感興趣。

本章提出的推薦系統架構基本上是從基於物品的推薦演算法衍生出來的,因此本章的架構並不適合用來解決社會化推薦問題。

推薦系統架構 推薦系統(1) 業界推薦系統架構

1.1業界主流推薦系統架構 業界推薦系統通用架構 1.2使用者本身資料 1.3物品本身資料 1.4使用者行為資料 2.1基於離線訓練的推薦系統架構設計 常用演算法 邏輯回歸 logistics regression 梯度提公升決策樹 gbdt 和因式分解 fm 架構設計 2.2面向深度學習的推薦系統...

spark演算法推薦系統例項

首先,上傳u.data和u.item至 home data資料夾下,並啟動spark spark shell 1 匯入資料並檢視 val rawuserdata sc.textfile file home data u.data 2 檢視前五條資訊,以及userid,itemid,評分資訊 text...

推薦系統(1) 推薦系統概述

推薦系統是主動從大量資訊中找到使用者可能感興趣的資訊的工具。推薦系統的核心問題是如何實現推薦個性化 如何向使用者推薦匹配度高的產品 商品 或專案,本質是通過一定的方式將使用者和專案聯絡起來。自從xerox palo alto研究中心於1992年研發出了基於協同過濾的實驗系統tapestry以來 主要...