訓練寬和深層推薦
本文說明如何使用 Azure 機器學習 設計工具中的訓練 Wide 和 Deep Recommender 元件來定型建議模型。 此元件是以Google提出的Wide和深度學習為基礎。
訓練 Wide 和 Deep Recommender 元件會讀取使用者項目評等三倍的數據集,並選擇性地讀取一些使用者和專案功能。 它會傳回訓練的Wide和Deep推薦程式。 然後,您可以使用定型的模型,透過 評分寬和深度推薦 元件來產生評等預測或建議。
深入了解建議模型和 Wide 和 Deep 推薦
建議系統的主要目標是建議一或多個 專案 給 系統的使用者 。 專案的範例可能是電影、餐廳、書籍或歌曲。 用戶可以是具有專案喜好設定的人員、人員群組或其他實體。
建議系統有兩種主要方法。
- 第一個 是以內容為基礎的 方法,會針對用戶和專案使用功能。 使用者可以依年齡和性別等屬性來描述,而專案可由作者和製造商等屬性描述。 您可以在社交配對網站上找到以內容為基礎的建議系統的典型範例。
- 第二種方法是 共同作業篩選,它只會使用使用者和專案的標識碼,並從使用者提供給專案的評分矩陣中取得這些實體的隱含資訊。 我們可以從他們已評等的專案,以及已對相同項目進行評等的其他使用者,了解使用者。
Wide 和 Deep 建議工具會結合這些方法,使用共同作業篩選與以內容為基礎的方法。 因此,它被視為 混合式推薦工具。
運作方式:當使用者對系統而言相對較新時,藉由利用使用者的功能資訊來改善預測,從而解決已知的「冷啟動」問題。 不過,一旦您從特定使用者收集足夠的評等數目之後,就可以根據特定評等,而不是單獨根據其功能,為其進行完整個人化的預測。 因此,從內容型建議順暢地轉換到根據共同作業篩選的建議。 即使使用者或專案功能無法使用,Wide 和 Deep 建議工具仍會在其共同作業篩選模式中運作。
如需Wide和Deep recommender和基礎概率演算法的詳細資訊,請參閱相關研究論文: Wide and Deep Learning for Recommender Systems。
如何設定訓練寬和深度推薦
準備資料
嘗試使用元件之前,請確定您的數據是建議模型的預期格式。 需要使用者項目評等三重的定型數據集,但您也可以在個別數據集中包含使用者功能和專案功能(如果有的話)。
用戶專案評等的必要數據集
用於定型的輸入資料必須包含正確格式的資料類型:
- 第一個數據行必須包含使用者標識碼。
- 第二個數據行必須包含專案標識碼。
- 第三個數據行包含用戶專案組的評等。 評等值必須是數值類型。
例如,一組典型的用戶項目評等可能如下所示:
UserId | MovieId | Rating |
---|---|---|
1 | 68646 | 10 |
223 | 31381 | 10 |
使用者特徵資料集(選擇性)
使用者功能的數據集必須包含使用者的標識碼,並使用使用者專案評等數據集第一個數據行中提供的相同標識符。 其餘數據行可以包含描述使用者的任何數目功能。
例如,一組典型的使用者功能看起來可能像這樣:
UserId | 年齡 | 性別 | 關注項目 | Location |
---|---|---|---|---|
1 | 25 | male | 劇情 | 歐洲 |
223 | 40 | 女性 | Romance | 亞洲 |
專案特徵資料集(選擇性)
專案功能的數據集必須在其第一個數據行中包含專案標識碼。 其餘數據行可以包含專案的任何數目描述性功能。
例如,一組典型的專案功能看起來可能像這樣:
MovieId | 標題 | 原始語言 | 流派 | Year |
---|---|---|---|---|
68646 | 教父 | 英語 | 劇情 | 1,972 |
31381 | 亂世佳人 | 英語 | 歷史 | 下午 07:39 |
訓練模型
將訓練 寬和深度推薦 元件新增至設計工具中的實驗,並將其聯機至定型數據集。
如果您有個別的使用者功能和/或專案功能數據集,請將它們連線到 訓練寬和深度推薦 元件。
- 使用者特徵數據集:將描述用戶的數據集連接到第二個輸入。
- 專案特徵數據集:將描述項目的數據集連接到第三個輸入。
Epochs:指出演演算法應該處理整個定型數據的次數。
這個數位越高,定型越充分:不過,訓練會花費更多時間,而且可能會導致過度學習。
批次大小:輸入一個定型步驟中所使用的定型範例數目。
此超參數可能會影響定型速度。 較高的批次大小會導致時間成本降低,但可能會增加聚合時間。 如果批次太大而無法符合 GPU/CPU,可能會引發記憶體錯誤。
寬部分優化器:選取一個優化器,將漸層套用至模型的寬部分。
寬優化器學習速率:輸入介於 0.0 和 2.0 之間的數位,以定義寬部分優化工具的學習速率。
此超參數會決定每個定型步驟中的步驟大小,同時向最小損失函式移動。 大型學習率可能會導致學習跳過最小,而學習率太小可能會導致聚合問題。
交叉特徵維度:輸入所需的使用者標識碼和專案標識碼功能,以輸入維度。
Wide 和 Deep 建議工具預設會對使用者識別碼和專案識別碼功能執行跨產品轉換。 交叉結果會根據這個數字進行哈希,以確保維度。
深層部分優化器:選取一個優化器,將漸層套用至模型的深層部分。
深入優化器學習速率:輸入定義深度元件優化器學習速率的0.0到2.0之間的數位。
用戶內嵌維度:輸入整數以指定使用者標識碼內嵌的維度。
Wide 和 Deep 建議工具會建立共用的使用者識別碼內嵌和專案識別碼內嵌,用於寬部分和深層部分。
專案內嵌維度:輸入整數以指定專案標識碼內嵌的維度。
類別特徵內嵌維度:輸入整數以指定類別特徵內嵌的維度。
在Wide和Deep推薦的深層元件中,會針對每個類別特徵學習內嵌向量。 這些內嵌向量會共用相同的維度。
隱藏單位:輸入深層元件的隱藏節點數目。 每個圖層中的節點編號會以逗號分隔。 例如,根據類型 “1000,500,100”,您可以指定深度元件有三個層,而第一層到最後一層分別有 1000 個節點、500 個節點和 100 個節點。
啟用函式:選取套用至每一層的一個啟用函式,預設值為 ReLU。
卸除:輸入介於 0.0 和 1.0 之間的數位,以判斷輸出在定型期間將會在每個圖層中捨棄的機率。
Dropout 是防止神經網路過度學習的正規化方法。 此值的其中一個常見決策是從 0.5 開始,這似乎與各種網路和工作都接近最佳狀態。
批次正規化:選取此選項,即可在深層元件中的每個隱藏層之後使用批次正規化。
批次正規化是一種在網路定型期間對抗內部共變數轉移問題的技術。 一般而言,它有助於改善網路的速度、效能和穩定性。
執行管線。
技術注意事項
Wide 和 Deep 會聯合訓練寬線性模型和深度神經網路,以結合記憶和一般化的優點。 寬元件接受一組原始特徵和特徵轉換,以記住特徵互動。 使用較少的特徵工程時,深度元件會透過低維度密集特徵內嵌來一般化為看不見的特徵組合。
在Wide和Deep建議的實作中,元件會使用預設模型結構。 寬元件會採用使用者內嵌、專案內嵌,以及使用者標識元和專案標識碼的交叉乘積轉換作為輸入。 針對模型的深層部分,會針對每個類別特徵學習內嵌向量。 與其他數值特徵向量一起,這些向量接著會饋送至深度饋送向前神經網路。 廣泛部分和深度部分是結合其最終輸出記錄賠率作為預測,最終進入聯合訓練的一個常見損失函式。