推薦系統(十九):優勢特征蒸餾(Privileged Features Distillation)在商品推薦中的應用(二)

在上一篇文章《推薦系統(十八):優勢特征蒸餾(Privileged Features Distillation)在商品推薦中的應用》中,筆者實現了一個基于 PFD 思想的 Demo。其中,Teacher 模型和 Student 模型都是簡單的單任務(CTR)模型,在本節,筆者將基于 PFD 思想實現一個多任務模型:其中,Teacher 模型采用 Wide&Deep 模型,而 Student 模型則采用 ESMM 模型。

1.知識蒸餾實現

1.1模擬數據構造

"""
Part-1:模擬數據構造本部分模擬真實場景,人工構造用戶數據、商品數據、用戶-商品交互數據(點擊、轉化),并進行必要的預處
"""
# 設置隨機種子保證可復現性
np.random.seed(42)
tf.random.set_seed(42)# 生成用戶、商品和交互數據
num_users = 100
num_items = 200
num_interactions = 1000# 用戶特征
user_data = {'user_id': np.arange(1, num_users + 1),'user_age': np.random.randint(18, 65, size=num_users),'user_gender': np.random.choice(['male', 'female'], size=num_users),'user_occupation': np.random.choice(['student', 'worker', 'teacher'], size=num_users),'city_code': np.random.randint(1, 2856, size=num_users),'device_type': np.random.randint(0, 5, size=num_users)
}# 商品特征
item_data = {'item_id': np.arange(1, num_items + 1),'item_category': np.random.choice(['electronics', 'books', 'clothing'], size=num_items),'item_brand': np.random.choice(['brandA', 'brandB', 'brandC'], size=num_items),'item_price': np.random.randint(1, 199, size=num_items)
}# 交互數據
# 包括:點擊和轉化(購買)數據
interactions = []
for _ in range(num_interactions):user_id = np.random.randint(1, num_users + 1)item_id = np.random.randint(1, num_items + 1)# 點擊標簽。0: 未點擊, 1: 點擊。在真實場景中可通過客戶端埋點上報獲得用戶的點擊行為數據click_label = np.random.randint(0, 2)# 轉化標簽。由于轉化的前提是點擊,因此點擊和轉化之間是一個漏斗關系——轉化顯著低于點擊conversion_label = 0if click_label == 1:conversion_label = np.random.binomial(1, 0.3) # 假設點擊后30%轉化率interactions.append([user_id, item_id, click_label, conversion_label])# 合并用戶特征、商品特征和交互數據
interaction_df = pd.DataFrame(interactions, columns=['user_id', 'item_id', 'click_label', 'conversion_label'])
user_df = pd.DataFrame(user_data)
item_df = pd.DataFrame(item_data)
df = interaction_df.merge(user_df, on='user_id').merge(item_df, on='item_id')
df['ctcvr_label'] = df['click_label'] * df['conversion_label']# 劃分數據集
labels = df[['click_label', 'conversion_label', 'ctcvr_label']]
features = df.drop(['click_label', 'conversion_label', 'ctcvr_label'], axis=1)
train_features, test_features, train_labels, test_labels = train_test_split(features, labels, test_size=0.2,random_state=42)

1.2 特征工程

"""
Part-2:特征工程本部分對原始用戶數據、商品數據、用戶-商品交互數據進行分類處理,加工為模型訓練需要的特征1.數值型特征:如用戶年齡、價格,少數場景下可直接使用,但最好進行標準化,從而消除量綱差異2.類別型特征:需要進行 Embedding 處理3.交叉特征:由于維度高,需要哈希技巧處理高維組合特征
"""
# 用戶特征處理
user_id = feature_column.categorical_column_with_identity('user_id', num_buckets=num_users + 1)
user_id_emb = feature_column.embedding_column(user_id, dimension=8)scaler_age = StandardScaler()
df['user_age'] = scaler_age.fit_transform(df[['user_age']])
user_age = feature_column.numeric_column('user_age')user_gender = feature_column.categorical_column_with_vocabulary_list('user_gender', ['male', 'female'])
user_gender_emb = feature_column.embedding_column(user_gender, dimension=2)user_occupation = feature_column.categorical_column_with_vocabulary_list('user_occupation',['student', 'worker', 'teacher'])
user_occupation_emb = feature_column.embedding_column(user_occupation, dimension=2)city_code_column = feature_column.categorical_column_with_identity(key='city_code', num_buckets=2856)
city_code_emb = feature_column.embedding_column(city_code_column, dimension=8)device_types_column = feature_column.categorical_column_with_identity(key='device_type', num_buckets=5)
device_types_emb = feature_column.embedding_column(device_types_column, dimension=8)# 商品特征處理
item_id = feature_column.categorical_column_with_identity('item_id', num_buckets=num_items + 1)
item_id_emb = feature_column.embedding_column(item_id, dimension=8)scaler_price = StandardScaler()
df['item_price'] = scaler_price.fit_transform(df[['item_price']])
item_price = feature_column.numeric_column('item_price')item_category = feature_column.categorical_column_with_vocabulary_list('item_category',['electronics', 'books', 'clothing'])
item_category_emb = feature_column.embedding_column(item_category, dimension=2)item_brand = feature_column.categorical_column_with_vocabulary_list('item_brand', ['brandA', 'brandB', 'brandC'])
item_brand_emb = feature_column.embedding_column(item_brand, dimension=2)""" 
交叉特征預處理 
"""
# 使用TensorFlow的交叉特征(crossed_column)定義了Wide部分的特征列,主要用于捕捉用戶與商品特征之間的組合效應
# 將用戶ID(user_id)和商品ID(item_id)組合成一個新特征,捕捉**“特定用戶對特定商品的偏好”**
# 用戶ID和商品ID的組合總數可能非常大(num_users * num_items),直接編碼會導致維度爆炸。
# hash_bucket_size=10000:使用哈希函數將組合映射到固定數量的桶(10,000個),控制內存和計算開銷,適用于稀疏高維特征(如用戶-商品對)
user_id_x_item_id = feature_column.crossed_column([user_id, item_id], hash_bucket_size=10000)
user_id_x_item_id = feature_column.indicator_column(user_id_x_item_id)
user_gender_x_item_category = feature_column.crossed_column([user_gender, item_category], hash_bucket_size=1000)
user_gender_x_item_category = feature_column.indicator_column(user_gender_x_item_category)
user_occupation_x_item_brand = feature_column.crossed_column([user_occupation, item_brand], hash_bucket_size=1000)
user_occupation_x_item_brand = feature_column.indicator_column(user_occupation_x_item_brand)""" 
特征列定義 
"""
# ESMM 模型相關特征列定義
user_tower_columns = [user_id_emb, user_age, user_gender_emb, user_occupation_emb, city_code_emb, device_types_emb]
item_tower_columns = [item_id_emb, item_category_emb, item_brand_emb, item_price]# Wide&Deep 模型相關特征列定義
deep_feature_columns = [user_id_emb,user_age,user_gender_emb,user_occupation_emb,item_id_emb,item_category_emb,item_brand_emb,item_price
]wide_feature_columns = [user_id_x_item_id,user_gender_x_item_category,user_occupation_x_item_brand
]

1.3 模型架構設計

  • Teacher 模型:Wide&Deep 模型,多任務(CTR,CTCVR);
  • Student 模型:ESMM 模型,多任務(CTR,CTCVR);
"""
Part-3:模型架構設計
"""
# 教師模型:采用 Wide&Deep 模型
class WideDeepModel(tf.keras.Model):"""Wide部分:線性模型,擅長記憶(Memorization),通過交叉特征捕捉明確的特征組合模式(如用戶A常點擊商品B)。Deep部分:深度神經網絡,擅長泛化(Generalization),通過嵌入向量學習特征的潛在關系(如女性用戶與服裝品類的關聯)。結合優勢:同時處理稀疏特征(如用戶ID、商品ID)和密集特征(如價格、年齡),平衡記憶與泛化能力"""def __init__(self, wide_feature_columns, deep_feature_columns):super(WideDeepModel, self).__init__()# Wide部分(線性模型)self.linear_features = tf.keras.layers.DenseFeatures(wide_feature_columns)self.wide_out = tf.keras.layers.Dense(1, activation='sigmoid')# Deep部分(深度神經網絡)self.dnn_features = tf.keras.layers.DenseFeatures(deep_feature_columns)self.dnn_layer = tf.keras.Sequential([tf.keras.layers.Dense(64, activation='relu'),tf.keras.layers.Dense(32, activation='relu')])self.deep_out = tf.keras.layers.Dense(1, activation='sigmoid')def call(self, inputs):# Wide部分:預測CTRlinear_features = self.linear_features(inputs)ctr_wide_logits = self.wide_out(linear_features)# Deep部分:預測CTR和CTCVRdnn_features = self.dnn_features(inputs)dnn_layer = self.dnn_layer(dnn_features)ctr_deep_logits = self.deep_out(dnn_layer)# 在共享的Deep網絡基礎上,通過單獨的Dense(1)層生成CTCVR logits,再通過Sigmoid輸出轉化概率ctcvr_logits = self.deep_out(dnn_layer)# 將Wide和Deep的logits相加,通過Sigmoid輸出點擊概率ctr_logits = ctr_wide_logits + ctr_deep_logitsctr_logits = tf.sigmoid(ctr_logits)# 返回帶名稱的雙輸出return {'ctr_logits': ctr_logits, 'ctcvr_logits': ctcvr_logits}# 學生模型:采用 ESMM 模型
class ESMMStudent(tf.keras.Model):"""ESMM 通過引入全樣本空間建模解決CVR樣本稀疏問題,核心包含兩個子任務:1.CTR任務:預測點擊率(全量樣本參與訓練)2.CTCVR任務:預測點擊后轉化率(CTR * CVR,全量樣本參與訓練)通過CTCVR任務間接訓練CVR模型,使得CVR模型能利用全量曝光樣本而非僅點擊樣本"""def __init__(self

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/73985.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/73985.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/73985.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

深度學習之卷積

從全連接到卷積 MLP的缺陷,假設有如下的場景: 分類貓和狗的圖片 使用一個還不錯的相機采集圖片(12M像素)RGB圖片有 36M元素使用100大小的單隱藏層MLP,模型有 3.6B元素 遠多于世界上所有貓和狗總數(900M狗,600M貓) …

目標識別與雙目測距(1)環境搭建:Ubuntu+yolov5+pcl庫

環境情況 ubuntu 18.04 → 20.04(最終) 安裝Ubuntu1804虛擬機系統 Anaconda:可參考我的另一篇文章 Python 3.6.13 → 3.8(最終)Anaconda3-2021.05 目標識別:YOLOv5相關 1、安裝git sudo apt install gi…

LinuxTCP/UDP基礎概念

TCP(傳輸控制協議) TCP 是一種面向連接的、可靠的、基于字節流的傳輸層通信協議。它的主要特點包括: 面向連接:在傳輸數據之前,需要通過“三次握手”建立連接;傳輸結束后,通過“四次揮手”斷開…

MP3、WAV、RM、PNG格式

MP3、WAV、RM、PNG格式 MP3 是一種音頻壓縮格式,采用了 MPEG-1 Audio Layer 3 或 MPEG-2 Audio Layer 3 編碼標準.MP3 格式能夠以較小的文件大小存儲高質量的音頻,可在多種設備如手機、MP3 播放器、電腦上播放,是目前應用最廣泛的音頻格式之一. MPEG-1 是MPEG(Moving Pictu…

力扣hot100:滑動窗口——找到字符串中所有字母異位詞

題目鏈接:找到字符串中所有字母異位詞 考慮用滑動窗口,窗口大小固定為字符串p的長度,用一個for循環控制子串的結束位置。 怎么判斷是字母異位詞? 1、排序:字符串中所有符合條件的字母異位詞與目標串p在經過排序后是…

人工智能通識速覽一(神經網絡)(編輯中)

上篇:人工智能通識速覽一(機器學習) 人工智能通識速覽一(機器學習)(編輯中)-CSDN博客https://blog.csdn.net/siper12138/article/details/146512068?sharetypeblogdetail&sharerId1465120…

【數據標準】數據標準化框架體系-基礎類數據標準

導讀:數據標準化的四大基礎類標準(業務術語、業務規則、命名規范、代碼標準)是企業數據治理的核心支柱。主要作用體現在?消除業務與技術間的語義鴻溝?(通過統一術語與命名規范),?保障數據全生命周期的質…

可發1區的超級創新思路(python\matlab實現):MPTS+Lconv+注意力集成機制的Transformer時間序列模型

首先聲明,該模型為原創!原創!原創!且該思路還未有成果發表,感興趣的小伙伴可以借鑒! 應用場景 該模型主要用于時間序列數據預測問題,包含功率預測、電池壽命預測、電機故障檢測等等。 一、模型整體架構(本文以光伏功率預測為例) 本模型由多尺度特征提取模塊(MPTS)…

深入解析C#中的解釋器模式:原理與應用

解釋器模式(Interpreter Pattern)是一種行為型設計模式,旨在為特定的語言提供解釋和執行的能力。該模式將語言的文法規則封裝在類中,使得能夠靈活、動態地對這些規則進行解釋。在實際開發中,尤其是處理一些定制的表達式…

LeetCode知識點整理

1、Scanner 輸入: import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner new Scanner(System.in);// 讀取整數int num scanner.nextInt();// 讀取一行字符串String line scanner.nextLine();scanner.close();…

紅寶書第二十一講:詳解JavaScript的模塊化(CommonJS與ES Modules)

紅寶書第二十一講:詳解JavaScript的模塊化(CommonJS與ES Modules) 資料取自《JavaScript高級程序設計(第5版)》。 查看總目錄:紅寶書學習大綱 一、模塊化的意義:分而治之 模塊化解決代碼依賴混…

Android Product Flavors 深度解析與最佳實踐:構建多版本應用的全方位指南

1. 高效配置模板 1.1 現代化多維度配置 (Kotlin DSL) android {flavorDimensions listOf("version", "market", "environment")productFlavors {register("free") {dimension "version"applicationIdSuffix ".free…

QListView開發入門

1. QListView 基礎介紹 QListView 是 Qt 框架中用于顯示項目列表的控件,屬于模型/視圖架構的一部分。它提供了一種靈活的方式來顯示和操作項目列表。 主要特點: 基于模型/視圖架構 支持多種視圖模式(列表、圖標) 內置選擇、編…

Cookie可以存哪些指?

Cookie是一種小型文本文件,通常由服務器生成并發送到用戶瀏覽器中保存。它可以用于存儲一些簡單但非常有用的信息,以便于后續請求時自動附帶回服務器使用。下面是Cookie能夠存儲的一些典型內容類別及用途說明: 會話標識符(Session ID) 這是最…

非手性分子發光有妙招:借液晶之力,實現高不對稱圓偏振發光

*本文只做閱讀筆記分享* 一、圓偏振發光研究背景與挑戰 圓偏振發光(CPL)材料在3D顯示、光電器件等領域大有用處,衡量它的一個重要指標是不對稱發光因子(glum)。早期CPL材料的glum值低,限制了實際應用。為…

CSS中的em,rem,vm,vh詳解

一:em 和 rem 是兩種相對單位,它們常用于 CSS 中來設置尺寸、字體大小、間距等,主要用于更靈活和響應式的布局設計。它們與像素(px)不同,不是固定的,而是相對于其他元素的尺寸來計算的。 1. em …

《非暴力溝通》第十二章 “重獲生活的熱情” 總結

《非暴力溝通》第十二章 “重獲生活的熱情” 的核心總結: 本章將非暴力溝通的核心理念延伸至生命意義的探索,提出通過覺察與滿足內心深處的需要,打破“義務性生存”的桎梏,讓生活回歸由衷的喜悅與創造。作者強調,當行動…

MySQL數據庫精研之旅第五期:CRUD的趣味探索(上)

專欄:MySQL數據庫成長記 個人主頁:手握風云 目錄 一、CRUD簡介 二、Create新增 2.1. 語法 2.2. 示例 三、Retrieve檢索 3.1. 語法 3.2. 示例 一、CRUD簡介 CURD是對數據庫中的記錄進行基本的增刪改查操作:Create(創建)、Retrieve(檢索…

【銀河麒麟系統常識】需求:安裝.NET SDK

前提 網絡狀態正常(非離線安裝); 終端命令如下所示 根據不同系統的版本,自行選擇,逐行執行即可; # 基于 Ubuntu/Debian 的銀河麒麟系統 wget https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb -O…

行業智能體大爆發,分布式智能云有解

Manus的一夜爆紅,在全球范圍內引爆關于AI智能體的討論。 與過去一般的AI助手不同,智能體(AI Agent)并非只是被動響應,而是主動感知、決策并執行的應用。Gartner預測,到2028年,15%的日常工作決策…