99精品久久精品一区二区-亚洲熟妇无码?v在线播放-日本国产精品无码字幕在线观看-久久久亚洲永夜AV-亚洲一级无码一区二区一-免费国产成高清人在线视频-中文字幕乱码免费观看-国产毛片精品妇女久久久

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營(yíng)的一線實(shí)戰(zhàn)洞察。

PyTorch協(xié)同過(guò)濾實(shí)戰(zhàn):MovieLens評(píng)分預(yù)測(cè)與Embedding實(shí)現(xiàn)

PyTorch協(xié)同過(guò)濾實(shí)戰(zhàn):MovieLens評(píng)分預(yù)測(cè)與Embedding實(shí)現(xiàn) 簡(jiǎn)介一份面向推薦系統(tǒng)初學(xué)者與PyTorch使用者的實(shí)戰(zhàn)型PDF文檔以MovieLens公開數(shù)據(jù)集為載體系統(tǒng)講解協(xié)同過(guò)濾算法的完整實(shí)現(xiàn)流程。文檔共29頁(yè)壓縮包內(nèi)僅含1個(gè)PDF文件約2.02MB輕量便攜。內(nèi)容從推薦系統(tǒng)基礎(chǔ)與常見類型切入依次介紹基于用戶和基于物品的協(xié)同過(guò)濾原理并結(jié)合PyTorch動(dòng)態(tài)計(jì)算圖特點(diǎn)給出張量操作、自動(dòng)求導(dǎo)、模型定義、損失函數(shù)與優(yōu)化器選擇、訓(xùn)練循環(huán)及RMSE、MAE等評(píng)估指標(biāo)的詳細(xì)實(shí)現(xiàn)步驟。全文支持目錄跳轉(zhuǎn)和左側(cè)大綱定位便于按章節(jié)反復(fù)查閱也可作為課程設(shè)計(jì)或入門實(shí)踐參考。目前已有70人學(xué)習(xí)下載對(duì)希望快速上手推薦系統(tǒng)項(xiàng)目并理解算法細(xì)節(jié)的讀者來(lái)說(shuō)是一份結(jié)構(gòu)清晰、可直接對(duì)照練習(xí)的實(shí)用資料。1. 協(xié)同過(guò)濾算法在MovieLens上的PyTorch實(shí)現(xiàn)為什么要自己寫一遍在推薦系統(tǒng)面試和課程設(shè)計(jì)里標(biāo)題這個(gè)組合幾乎是標(biāo)配任務(wù)把 MovieLens 的評(píng)分表拆開用 PyTorch 寫一個(gè)協(xié)同過(guò)濾模型讓用戶向量和物品向量的內(nèi)積去擬合真實(shí)評(píng)分。它把推薦系統(tǒng)最核心的五個(gè)環(huán)節(jié)——數(shù)據(jù)、模型、訓(xùn)練、評(píng)估、調(diào)參——壓縮到一個(gè) CPU 筆記本就能跑完的最小閉環(huán)里。適合剛學(xué)完 PyTorch 教程卻不知道做什么項(xiàng)目的人也適合手推過(guò)矩陣分解公式、但沒(méi)寫過(guò)完整訓(xùn)練循環(huán)的候選人和學(xué)生。跑通這個(gè)項(xiàng)目你會(huì)發(fā)現(xiàn)Embedding、隱因子和評(píng)分預(yù)測(cè)是同一件事所謂協(xié)同過(guò)濾就是把用戶和物品各學(xué)一條向量讓它們的內(nèi)積盡量逼近真實(shí)評(píng)分同時(shí)用戶偏置和物品偏置解釋掉大家打分手松手緊的問(wèn)題。這個(gè)認(rèn)知比背公式有用得多。2. 準(zhǔn)備MovieLens數(shù)據(jù)和PyTorch環(huán)境從原始評(píng)分表到可訓(xùn)練的DataLoader在這個(gè)實(shí)現(xiàn)鏈路上數(shù)據(jù)集和環(huán)境準(zhǔn)備往往被教程一筆帶過(guò)但實(shí)際返工大多出在這一步索引對(duì)不上、測(cè)試集里出現(xiàn)訓(xùn)練集沒(méi)見過(guò)的用戶、環(huán)境版本不對(duì)導(dǎo)致裝了 GPU 版卻跑不起來(lái)。我一般先把數(shù)據(jù)看清楚再搭環(huán)境最后寫 Dataset順序反了容易越改越亂。2.1 MovieLens 100K到底有哪些文件先搞懂u.data和u.itemMovieLens 100K 是 GroupLens 發(fā)布的公開學(xué)術(shù)數(shù)據(jù)集解壓后是一個(gè) ml-100k 目錄。最核心的文件是u.data里面是制表符分隔的評(píng)分記錄四列分別是用戶 ID、電影 ID、1 到 5 的整數(shù)評(píng)分、UNIX 時(shí)間戳。整個(gè)數(shù)據(jù)集包含 943 個(gè)用戶對(duì) 1682 部電影的 10 萬(wàn)條評(píng)分稀疏度接近 93.7%。也就是說(shuō)絕大多數(shù)用戶和電影之間沒(méi)有記錄協(xié)同過(guò)濾要解決的就是從這里挑出用戶可能會(huì)看的電影。同目錄下的u.item負(fù)責(zé)電影信息映射比如電影 ID 對(duì)應(yīng)什么標(biāo)題、屬于什么類型u.user是用戶人口屬性。如果只是復(fù)現(xiàn)評(píng)分預(yù)測(cè)這兩個(gè)文件不是必需但做冷啟動(dòng)分析和結(jié)果解釋時(shí)會(huì)用到。另外ua.base和ua.test是官方切分好的訓(xùn)練測(cè)試集訓(xùn)練集 8 萬(wàn)、測(cè)試集 2 萬(wàn)新手直接用這兩個(gè)文件能省掉自己切分帶來(lái)的偏差問(wèn)題。需要強(qiáng)調(diào)一點(diǎn)這個(gè)數(shù)據(jù)集的標(biāo)簽是顯式評(píng)分評(píng)分缺省不代表用戶討厭只是沒(méi)看過(guò)。不要把沒(méi)評(píng)分的條目當(dāng)負(fù)樣本填 0 去訓(xùn)練這個(gè)認(rèn)知會(huì)直接影響后面 loss 函數(shù)的選擇。2.2 用Anaconda配置PyTorch環(huán)境CPU版就能跑不必要為了這個(gè)題上GPU很多人在 PyTorch 安裝這一步糾結(jié)半天實(shí)際上標(biāo)題里這個(gè)項(xiàng)目 CPU 完全能跑。我常用的方式是先用 Anaconda 或 Miniconda 建一個(gè)獨(dú)立的 Python 3.10 環(huán)境再按 PyTorch 官網(wǎng)生成的命令安裝對(duì)應(yīng)版本。官網(wǎng)會(huì)提供 Python 和 PyTorch 版本的對(duì)應(yīng)關(guān)系不用手動(dòng)去記conda 會(huì)幫你解析依賴。conda create -n rec python3.10 -y conda activate rec pip install torch torchvision --index-url https://download.pytorch.org/whl/cpu這段命令的第三行裝的是 CPU 版 PyTorch不需要 NVIDIA 驅(qū)動(dòng)也不需要 CUDA。如果你已經(jīng)裝過(guò) CUDA 版 PyTorch那就正常用如果手頭是 AMD 顯卡、人在 WSL 里想折騰 7900XTX那需要的是 ROCm 版 PyTorch配置成本遠(yuǎn)高于這個(gè)項(xiàng)目的收益。所以我的建議一直是用 Anaconda 先把 CPU 版跑通確認(rèn)數(shù)據(jù)、模型、評(píng)估鏈路都沒(méi)問(wèn)題再考慮是否值得上 GPU。安裝 PyTorch 不是必須配有 GPU這個(gè)體量的數(shù)據(jù)用 CPU 訓(xùn)練反而省心。裝好之后用幾行代碼驗(yàn)證環(huán)境import torch print(torch.__version__) a torch.randn(100, 32) b torch.randn(32, 50) print((a b).shape)這段代碼的邏輯很簡(jiǎn)單能打印出版本號(hào)、矩陣乘能正常出 shape說(shuō)明 PyTorch 基礎(chǔ)框架安裝成功。CPU 版在 100K 數(shù)據(jù)上訓(xùn)練一個(gè) epoch 一般是秒級(jí)到十幾秒瓶頸不在算力而在你寫的索引轉(zhuǎn)換和數(shù)據(jù)加載是否合理。2.3 定義RatingDataset把評(píng)分表映射成Embedding能吃的索引寫模型之前必須先做一件事把u.data里的用戶 ID 和電影 ID 重新編碼成從 0 開始的連續(xù)整數(shù)。原因在于nn.Embedding的輸入索引必須在[0, size)區(qū)間內(nèi)。MovieLens 100K 的用戶 ID 恰好是 1 到 943 連續(xù)物品是 1 到 1682 連續(xù)直接減 1 也能用但一旦換數(shù)據(jù)集ID 往往不連續(xù)或有缺失所以統(tǒng)一用 pandas 的 category 編碼最保險(xiǎn)import pandas as pd df pd.read_csv(ml-100k/u.data, sep\t, names[uid, iid, rating, ts]) df[uid_idx] df[uid].astype(category).cat.codes df[iid_idx] df[iid].astype(category).cat.codes num_users df[uid_idx].nunique() num_items df[iid_idx].nunique()這里有個(gè)順序上的坑先對(duì)全量數(shù)據(jù)做 category 編碼再做訓(xùn)練測(cè)試切分。如果先切分再編碼測(cè)試集里可能遇到訓(xùn)練集沒(méi)有的用戶 ID那部分樣本在 predict 時(shí)根本查不到 Embedding 行程序要么報(bào)錯(cuò)要么悄悄出錯(cuò)。接著定義一個(gè)標(biāo)準(zhǔn) PyTorch Dataset把每一行評(píng)分變成三元組import torch from torch.utils.data import Dataset, DataLoader class RatingDataset(Dataset): def __init__(self, df): self.users torch.tensor(df[uid_idx].values, dtypetorch.long) self.items torch.tensor(df[iid_idx].values, dtypetorch.long) self.ratings torch.tensor(df[rating].values, dtypetorch.float32) def __len__(self): return len(self.users) def __getitem__(self, idx): return self.users[idx], self.items[idx], self.ratings[idx]這個(gè)類的關(guān)鍵點(diǎn)在于 dtype。用戶索引和物品索引必須用 long因?yàn)閚n.Embedding只接受torch.long類型評(píng)分用 float32因?yàn)楹罄m(xù) MSE 損失要求預(yù)測(cè)和標(biāo)簽同類型。DataLoader 在取數(shù)據(jù)時(shí)默認(rèn)會(huì)做 stack把一組三元組拼成 batch所以模型看到的是三個(gè)張量用戶 ID 批、物品 ID 批、評(píng)分批。切分和裝載我一般這樣寫from sklearn.model_selection import train_test_split train_df, test_df train_test_split( df, test_size0.2, random_state42 ) train_ds RatingDataset(train_df) test_ds RatingDataset(test_df) train_loader DataLoader(train_ds, batch_size256, shuffleTrue) test_loader DataLoader(test_ds, batch_size1024, shuffleFalse)這樣得到的數(shù)據(jù)流是(users: (256,), items: (256,), ratings: (256,))batch_size256 在 CPU 上訓(xùn)練效率很高。random_state 固定成 42保證每次重跑結(jié)果一致這是后面調(diào)參對(duì)比的前提。如果你希望更接近官方協(xié)議直接用ua.base和ua.test零切分代碼也能避免自己切分帶來(lái)的評(píng)估糾紛。提示如果訓(xùn)練數(shù)據(jù)量變大比如換到 ml-1m記得給 DataLoader 加num_workers4和pin_memoryTrue否則數(shù)據(jù)加載會(huì)拖慢訓(xùn)練。3. 用PyTorch實(shí)現(xiàn)協(xié)同過(guò)濾模型從Embedding點(diǎn)積到帶偏置的MF模型這一章是標(biāo)題的核心。協(xié)同過(guò)濾在這個(gè)標(biāo)題里指的就是矩陣分解MF把用戶-物品評(píng)分矩陣近似分解成用戶隱因子矩陣和物品隱因子矩陣的乘積。PyTorch 里實(shí)現(xiàn)起來(lái)非常直白nn.Embedding本身就是一張可學(xué)習(xí)的查找表行號(hào)就是索引。3.1 最小可行模型兩個(gè)nn.Embedding求內(nèi)積先寫一個(gè)不摻任何額外花活的版本把框架立起來(lái)import torch.nn as nn class MatrixFactorization(nn.Module): def __init__(self, num_users, num_items, emb_dim32): super().__init__() self.user_emb nn.Embedding(num_users, emb_dim) self.item_emb nn.Embedding(num_items, emb_dim) def forward(self, users, items): u_vec self.user_emb(users) # (batch, emb_dim) i_vec self.item_emb(items) # (batch, emb_dim) return (u_vec * i_vec).sum(dim1) # (batch,)forward 里做的事對(duì)應(yīng)公式R_pred P_u · Q_i^T。u_vec和i_vec是同一個(gè) batch 里每個(gè)用戶的隱向量和每個(gè)物品的隱向量逐元素相乘再求和得到的就是預(yù)測(cè)評(píng)分。embedding 維度 emb_dim 是隱因子個(gè)數(shù)通常取 16 到 64MovieLens 100K 這種整理過(guò)的評(píng)分矩陣32 作為起點(diǎn)最穩(wěn)妥。矩陣分解怎么理解每個(gè)用戶被壓成一個(gè) 32 維向量每個(gè)物品也是 32 維。向量的每一維不像動(dòng)作片得分那樣有顯式含義而是模型自己學(xué)出來(lái)的潛語(yǔ)義。兩個(gè)向量方向越一致內(nèi)積越大預(yù)測(cè)評(píng)分越高。這就是協(xié)同過(guò)濾里最核心的隱語(yǔ)義模型思想也是面試官最愛問(wèn)的SVD 和 MF 的區(qū)別的落腳點(diǎn)。3.2 加入用戶偏置、物品偏置和全局偏置評(píng)分預(yù)測(cè)更貼合現(xiàn)實(shí)最小模型有個(gè)明顯短板它假設(shè)評(píng)分只由用戶和物品的向量交互決定但人打分習(xí)慣差異很大有人給啥都是 4 星有人給啥都是 2 星。用向量去擬合這種習(xí)慣性偏差既浪費(fèi)表達(dá)力又容易把向量學(xué)歪。所以工程上的 MF 幾乎都會(huì)加三項(xiàng)偏置全局平均分、用戶偏置、物品偏置。用戶偏置回答這個(gè)用戶比全局平均多打了幾分物品偏置回答這部電影比全局平均高幾分剩下解釋不了的部分才交給隱向量交互。帶偏置的模型代碼class BiasMF(nn.Module): def __init__(self, num_users, num_items, emb_dim32): super().__init__() self.user_emb nn.Embedding(num_users, emb_dim) self.item_emb nn.Embedding(num_items, emb_dim) self.user_bias nn.Embedding(num_users, 1) self.item_bias nn.Embedding(num_items, 1) self.global_bias nn.Parameter(torch.zeros(1)) def forward(self, users, items): u_vec self.user_emb(users) i_vec self.item_emb(items) pred (u_vec * i_vec).sum(dim1) pred pred self.user_bias(users).squeeze(1) pred pred self.item_bias(items).squeeze(1) pred pred self.global_bias return predsqueeze(1)是把形狀為(batch, 1)的偏置壓成(batch,)方便與 pred 直接相加。global_bias是一個(gè)長(zhǎng)度為 1 的可學(xué)習(xí)參數(shù)初始化成 0訓(xùn)練中會(huì)自動(dòng)逼近訓(xùn)練集的評(píng)分均值。注意返回的 pred 是(batch,)而不是(batch, 1)后面 MSE 損失對(duì)這兩種形狀都能處理但建議保持和 rating 張量完全一致排查問(wèn)題時(shí)少一個(gè)維度隱患。加了偏置之后RMSE 通常比純點(diǎn)積模型好 0.05 到 0.1而且某個(gè)用戶普遍打高分這類規(guī)律不再占用隱向量容量。這也是為什么工業(yè)界基礎(chǔ) MF 實(shí)現(xiàn)幾乎都帶偏置不帶反而會(huì)讓模型把簡(jiǎn)單規(guī)律和復(fù)雜偏好混在一個(gè)空間里學(xué)。3.3 Embedding的初始化和正則化默認(rèn)參數(shù)會(huì)讓loss一開始就飛直接用nn.Embedding不加任何處理模型能跑但 loss 曲線會(huì)很難看。nn.Embedding默認(rèn)按標(biāo)準(zhǔn)正態(tài)分布 N(0,1) 初始化當(dāng) emb_dim32 時(shí)兩個(gè)隨機(jī)向量的內(nèi)積期望能達(dá)到幾十而評(píng)分范圍只有 1 到 5。內(nèi)積初始就比目標(biāo)大一個(gè)數(shù)量級(jí)早期梯度會(huì)拉得很猛表現(xiàn)為 train_loss 忽高忽低。解決辦法是手動(dòng)把 Embedding 的初始化方差壓小比如 std0.1同時(shí)配合 weight_decay 做 L2 正則def init_embedding(m): if isinstance(m, nn.Embedding): nn.init.normal_(m.weight, mean0.0, std0.1) model BiasMF(num_users, num_items, emb_dim32) model.apply(init_embedding) optimizer torch.optim.Adam( model.parameters(), lr0.01, weight_decay1e-5 )std0.1 意味著兩個(gè)初始向量?jī)?nèi)積的期望大概在 0.1 左右落在評(píng)分區(qū)間附近訓(xùn)練一開始 loss 不會(huì)爆炸。weight_decay1e-5 讓 Embedding 權(quán)重向 0 收縮避免模型把個(gè)別用戶的一兩個(gè)評(píng)分背下來(lái)。對(duì) 100K 數(shù)據(jù)集、約 8.4 萬(wàn)參數(shù)量的模型來(lái)說(shuō)這個(gè)正則強(qiáng)度足夠如果觀察到驗(yàn)證 loss 反彈可以把 weight_decay 提到 1e-4。embedding 維度本身也是正則手段維度越小容量越小。我調(diào)參時(shí)習(xí)慣從 8 到 64 逐檔試每次只動(dòng)維度記錄 train 和 test 的 RMSE而不是同時(shí)改學(xué)習(xí)率和 batch size。手動(dòng)初始化 std 這個(gè)細(xì)節(jié)很多人忽略但它對(duì)訓(xùn)練穩(wěn)定性影響很大尤其是你換用更大 emb_dim 時(shí)std 不跟著降loss 大概率飄。提示model.apply(init_embedding)會(huì)把三個(gè) Embedding 表都初始化。如果你介意偏置表也從正態(tài)分布起跳可以在 apply 之后單獨(dú)把user_bias.item_bias再置零實(shí)際影響很小。4. 訓(xùn)練與評(píng)估把MSE、RMSE和Top-K召回分別算清楚模型寫好后訓(xùn)練循環(huán)和評(píng)估方式?jīng)Q定了你看到的結(jié)果是否有說(shuō)服力。很多教程只貼一個(gè) train 函數(shù)然后說(shuō)loss 降了但推薦系統(tǒng)光看 loss 不夠線上真正關(guān)心的是推薦頭部有沒(méi)有命中用戶真實(shí)想看的物品。這一章把訓(xùn)練循環(huán)和最常用的兩類評(píng)估指標(biāo)都說(shuō)清楚。4.1 訓(xùn)練循環(huán)的固定寫法MSELoss配合Adam監(jiān)控驗(yàn)證集訓(xùn)練循環(huán)是推薦系統(tǒng)項(xiàng)目里最模板化的代碼差異只在數(shù)據(jù)加載和模型 forward。我通常把單 epoch 訓(xùn)練寫成獨(dú)立函數(shù)方便多次調(diào)用def train_one_epoch(model, loader, optimizer, criterion): model.train() total_loss 0.0 for users, items, ratings in loader: optimizer.zero_grad() pred model(users, items) loss criterion(pred, ratings) loss.backward() optimizer.step() total_loss loss.item() * len(ratings) return total_loss / len(loader.dataset) model BiasMF(num_users, num_items, emb_dim32) init_embedding(model) criterion nn.MSELoss() optimizer torch.optim.Adam(model.parameters(), lr0.01, weight_decay1e-5) for epoch in range(20): train_loss train_one_epoch(model, train_loader, optimizer, criterion) print(fepoch{epoch:02d} train_loss{train_loss:.4f})為什么用 MSELoss評(píng)分預(yù)測(cè)是回歸任務(wù)MSE 對(duì)預(yù)測(cè)偏差做平方懲罰大偏差被放大梯度更平穩(wěn)。使用 Adam 時(shí)lr0.01 在 100K 規(guī)模上是合適的起點(diǎn)如果訓(xùn)練 loss 來(lái)回抖動(dòng)降到 0.005如果一直不降查數(shù)據(jù)編碼或 Embedding 初始化是否生效。這里有個(gè)容易忽略的細(xì)節(jié)total_loss loss.item() * len(ratings)。loss.item()是當(dāng)前 batch 的平均損失乘上 batch 里樣本數(shù)再累加最后除以整個(gè)數(shù)據(jù)集樣本數(shù)才得到 epoch 級(jí)別的平均 loss。如果直接對(duì)每個(gè) batch 的 loss.item() 做算術(shù)平均結(jié)果會(huì)被小 batch 的權(quán)重拉偏。訓(xùn)練中真正要盯的不是 train_loss而是驗(yàn)證集上的 RMSE。我習(xí)慣每?jī)蓚€(gè) epoch 在test_loader上跑一次評(píng)估連續(xù)三輪驗(yàn)證 RMSE 不降或者回升就保存當(dāng)前模型或直接停止。這是最簡(jiǎn)單有效的防過(guò)擬合手段比任何花哨的正則都實(shí)用。4.2 評(píng)估指標(biāo)RMSE之外按用戶算Top-K命中率模型訓(xùn)練完之后不同指標(biāo)回答的問(wèn)題不同。RMSE 衡量預(yù)測(cè)分?jǐn)?shù)和真實(shí)分?jǐn)?shù)的平均偏差MAE 是同樣的偏差但不用平方大誤差懲罰小一些。而 Top-K 召回或命中率看的是用戶真實(shí)看過(guò)的物品有多少出現(xiàn)在模型給出的前 K 個(gè)推薦里更貼近業(yè)務(wù)目標(biāo)。如果只報(bào) RMSE你要知道它與排序質(zhì)量并不完全一致一個(gè) RMSE 更低的模型不一定在 Top-K 推薦里表現(xiàn)更好。因?yàn)?Top-K 只關(guān)心頭部順序?qū)︻A(yù)測(cè)絕對(duì)誤差不那么敏感。在 MovieLens 100K 上一個(gè)常見且可復(fù)現(xiàn)的 Top-K 評(píng)估是對(duì)每個(gè)測(cè)試用戶把所有未與該用戶交互過(guò)的物品打一遍分取分?jǐn)?shù)最高的 K 個(gè)看里面命中了多少測(cè)試集里該用戶真正看過(guò)的物品。代碼實(shí)現(xiàn)如下import numpy as np def evaluate_hit(model, train_df, test_df, item_ids, k10): model.eval() hits, total 0, 0 item_ids_np item_ids.cpu().numpy() with torch.no_grad(): for uid, group in test_df.groupby(uid_idx): seen set(train_df[train_df[uid_idx] uid][iid_idx].values) candidates [i for i in item_ids_np if i not in seen] if not candidates: continue uid_tensor torch.full((len(candidates),), uid, dtypetorch.long) cand_tensor torch.tensor(candidates, dtypetorch.long) scores model(uid_tensor, cand_tensor).cpu().numpy() top_k candidates[np.argsort(scores)[::-1][:k]] hits len(set(top_k) set(group[iid_idx].values)) total 1 return hits / max(total, 1)調(diào)用前需要準(zhǔn)備好全量物品 ID 張量item_ids torch.tensor(df[iid_idx].unique(), dtypetorch.long) hit_rate evaluate_hit(model, train_df, test_df, item_ids, k10)這段評(píng)估代碼有幾個(gè)關(guān)鍵點(diǎn)。seen是訓(xùn)練集中該用戶交互過(guò)的物品候選集里必須排除不然模型記住了訓(xùn)練集里已經(jīng)看過(guò)的電影Top-K 命中會(huì)虛高。total是參與評(píng)估的測(cè)試用戶數(shù)返回值是平均每個(gè)用戶前 10 個(gè)推薦里有多少個(gè)真實(shí)物品。它不要求你預(yù)測(cè)出用戶看過(guò)的所有物品只關(guān)心推薦頭部有沒(méi)有撞上真實(shí)行為。在 100K 規(guī)模下943 個(gè)用戶、每個(gè)用戶給 1682 個(gè)物品打分一次全量評(píng)估只要幾秒到十幾秒。如果日后換到 ml-1m這個(gè)寫法會(huì)太慢屆時(shí)的常見做法是負(fù)采樣給每個(gè)用戶隨機(jī)抽 100 到 150 個(gè)未交互物品加上真實(shí)測(cè)試物品組成候選集打分速度和內(nèi)存都能接受。4.3 一組能復(fù)現(xiàn)的默認(rèn)參數(shù)和結(jié)果參考以下是我在這個(gè)項(xiàng)目上常用的起始配置按這個(gè)跑能穩(wěn)定出一個(gè)合理基線參數(shù)建議值調(diào)參方向emb_dim328-64 逐檔試lr0.01抖動(dòng)時(shí)降到 0.005batch_size256太大收斂慢太小噪聲大weight_decay1e-5過(guò)擬合時(shí)提高到 1e-4epochs20-40配合早停損失函數(shù)MSELoss預(yù)測(cè)評(píng)分用 MSE用 BiasMF 在 100K 隨機(jī)切分 20% 測(cè)試集上驗(yàn)證 RMSE 大約在 0.95 到 1.05 之間MAE 在 0.74 到 0.78 左右。如果只預(yù)測(cè)全局均值RMSE 約 1.13 上下所以 0.95-1.0 的 RMSE 說(shuō)明模型學(xué)到了明顯信號(hào)但離完美還很遠(yuǎn)。網(wǎng)上有人曬 0.85 的 RMSE多半用了更復(fù)雜的 SVD 變體、更長(zhǎng)的訓(xùn)練周期或者按用戶切分的評(píng)估方式數(shù)字之間不一定能直接橫向?qū)Ρ?。到這里你已經(jīng)有了數(shù)據(jù)、模型、訓(xùn)練和評(píng)估的完整鏈路。下一章是更值錢的哪些細(xì)節(jié)會(huì)讓模型悄悄翻車。5. PyTorch協(xié)同過(guò)濾避坑指南五個(gè)常見的翻車細(xì)節(jié)這一章把復(fù)現(xiàn)類似項(xiàng)目時(shí)最常見的問(wèn)題整理成五條每條按現(xiàn)象、原因、解決來(lái)寫。踩過(guò)這些坑之后再去調(diào)參、展示結(jié)果會(huì)從容很多。5.1 索引錯(cuò)位DataFrame里的ID不等于Embedding的索引現(xiàn)象訓(xùn)練時(shí)偶爾報(bào) IndexError或者模型評(píng)估結(jié)果完全反常。原因u.data里的用戶 ID 從 1 開始物品 ID 也是從 1 開始而nn.Embedding的輸入索引要從 0 開始。如果你直接拿原始 ID 喂給模型num_users943合法索引是 0 到 942用戶 ID 等于 943 的那條樣本就會(huì)越界。換到別的數(shù)據(jù)集更可能出現(xiàn)物品 ID 不連續(xù)、最大 ID 超過(guò) Embedding size 的情況。解決在讀取數(shù)據(jù)后用astype(category).cat.codes把原始 ID 重編碼成 0 到 N-1 的整數(shù)而且要在全量數(shù)據(jù)上先編碼再切分。模型里所有 Embedding 的num_users和num_items都取編碼后的nunique()。這條做對(duì)了能避免一半以上的報(bào)錯(cuò)。5.2 隨機(jī)切分造成的光環(huán)你的RMSE可能虛低現(xiàn)象同一份代碼隨機(jī)切分測(cè)試集下 RMSE 很漂亮換成官方ua.base/ua.test后 RMSE 漲了不少。原因隨機(jī)切分允許同一個(gè)用戶、同一部電影的評(píng)分同時(shí)出現(xiàn)在訓(xùn)練集和測(cè)試集模型在 train 階段見過(guò)這個(gè)用戶和這部電影的偏置預(yù)測(cè)自然占便宜。現(xiàn)實(shí)中你要推薦的是用戶沒(méi)看過(guò)的電影所以隨機(jī)切分會(huì)把測(cè)試難度做小也讓不同實(shí)現(xiàn)之間的對(duì)比失去公平性。解決用官方切分或者至少按用戶劃分整個(gè)用戶的所有評(píng)分要么在訓(xùn)練集要么在測(cè)試集。如果是跟時(shí)間排序有關(guān)的場(chǎng)景按ts時(shí)間戳劃分更貼近真實(shí)線上。作為課程項(xiàng)目隨機(jī)切分也夠用但匯報(bào)結(jié)果時(shí)務(wù)必說(shuō)明切分方式否則你的 RMSE 和別人的不具可比性。5.3 過(guò)擬合訓(xùn)練loss一直降驗(yàn)證loss卻開始反彈現(xiàn)象訓(xùn)練集 RMSE 降到 0.7 以下驗(yàn)證 RMSE 先降到 0.96 又開始往 1.05 走。原因模型參數(shù)主要來(lái)自 Embedding 表數(shù)十萬(wàn)級(jí)參數(shù)面對(duì) 8 萬(wàn)級(jí)訓(xùn)練樣本完全有能力記住個(gè)別評(píng)分的噪聲。一開始 train_loss 下降得快因?yàn)槟P驮跀M合訓(xùn)練分布隨后驗(yàn)證集不再受益因?yàn)槟P烷_始背題目。解決第一優(yōu)先加 weight_decay從 1e-5 調(diào)到 1e-4第二使用早停每?jī)蓚€(gè) epoch 檢查驗(yàn)證 RMSE連續(xù)三輪沒(méi)有改善就停止第三降低 emb_dim讓隱因子從 32 降到 16減少容量。推薦做法是三個(gè)手段都留一點(diǎn)不要靠一個(gè)參數(shù)硬扛。5.4 把評(píng)分缺省當(dāng)負(fù)樣本這是顯式反饋任務(wù)的典型錯(cuò)位現(xiàn)象為了提高 Top-K 指標(biāo)把用戶沒(méi)評(píng)分的物品全部當(dāng)作負(fù)樣本用 0 標(biāo)簽或 Binary Cross Entropy 訓(xùn)練結(jié)果 RMSE 和 MAE 完全沒(méi)法看。原因MovieLens 的缺省值不代表用戶討厭。用戶沒(méi)看過(guò)這部電影和用戶看了不喜歡是兩個(gè)完全不同的信號(hào)。顯式評(píng)分任務(wù)應(yīng)該回歸 1 到 5 的評(píng)分把它當(dāng)成隱式反饋任務(wù)需要額外設(shè)計(jì)負(fù)采樣策略并且不能只用 RMSE 作為主要評(píng)估方式。解決在這個(gè)標(biāo)題的鏈路里直接用 MSE 回歸評(píng)分即可不需要負(fù)樣本。除非后續(xù)做隱式反饋方向比如預(yù)測(cè)用戶是否會(huì)點(diǎn)擊那才需要采樣真實(shí)負(fù)樣本一般每個(gè)正樣本配 1 到 4 個(gè)負(fù)樣本避免全量負(fù)樣本導(dǎo)致訓(xùn)練太慢、分布太偏。5.5 不要迷信GPU100K數(shù)據(jù)上CPU反而更高效現(xiàn)象在只有 CPU 的環(huán)境上訓(xùn)練又快又穩(wěn)把同一份代碼搬到 GPU每個(gè) epoch 反而慢了或者顯存占用高得離譜。原因模型太小、數(shù)據(jù)量太小GPU 的 kernel launch 開銷占比過(guò)大加上 WSL 或 AMD ROCm 環(huán)境還需額外配置收益為負(fù)。很多人一開始被深度學(xué)習(xí)必須 GPU帶偏其實(shí)本任務(wù) CPU 完全夠用安裝 PyTorch 不是必須裝有 GPU。解決先把 CUDA 的念頭放一邊用 CPU 版 PyTorch 跑通整個(gè)項(xiàng)目。如果確實(shí)在 WSL 里配了 GPU 環(huán)境確認(rèn) PyTorch 版本能否被torch.cuda.is_available()或 ROCm 對(duì)應(yīng)接口識(shí)別能識(shí)別就正常用不能識(shí)別就老實(shí)回 CPU 跑。像 7900XTX 這種 AMD 卡在 WSL 里折騰 ROCm 的時(shí)間足夠這個(gè)項(xiàng)目?jī)?yōu)化十輪了。6. 進(jìn)階把評(píng)估換得更真實(shí)Embedding可視化才更有說(shuō)服力能走到這一步說(shuō)明你已經(jīng)有了穩(wěn)定跑的基線和評(píng)估函數(shù)。剩下值得花時(shí)間的不是無(wú)限調(diào)參而是把評(píng)估口徑和可視化做扎實(shí)。6.1 按時(shí)間切分模擬預(yù)測(cè)未來(lái)的離線評(píng)估隨機(jī)切分適合快速實(shí)驗(yàn)但對(duì)推薦系統(tǒng)的真實(shí)部署場(chǎng)景說(shuō)服力有限。更真實(shí)的做法是按時(shí)間戳切分用前 80% 時(shí)間段的數(shù)據(jù)訓(xùn)練用后 20% 的數(shù)據(jù)測(cè)試。代碼非常簡(jiǎn)單cutoff df[ts].quantile(0.8) train_df df[df[ts] cutoff] test_df df[df[ts] cutoff]這樣做之后模型只能從歷史交互里學(xué)規(guī)律再去預(yù)測(cè)之后發(fā)生的評(píng)分和線上場(chǎng)景基本一致。你可能會(huì)發(fā)現(xiàn) RMSE 比隨機(jī)切分略差這很正常時(shí)間靠后的樣本里有大量新電影和活躍用戶本來(lái)就更難預(yù)測(cè)。6.2 把Item Embedding用PCA投影出來(lái)訓(xùn)練完的item_emb是(num_items, 32)的矩陣每一行是一部電影在潛語(yǔ)義空間里的坐標(biāo)。用 PCA 降到二維再按電影類型上色可以直觀驗(yàn)證向量是否學(xué)到了語(yǔ)義from sklearn.decomposition import PCA item_emb model.item_emb.weight.detach().numpy() pca PCA(n_components2).fit_transform(item_emb)觀察結(jié)論比想象中常見動(dòng)作片和科幻片往往聚在一起經(jīng)典老片也可能形成一個(gè)團(tuán)。如果 cluster 完全看不出類別不一定代表訓(xùn)練失敗也可能是 embedding 維度太短、epoch 太少或者評(píng)分偏好本身與電影類型維度不完全一致。把 PCA 散點(diǎn)圖放進(jìn)報(bào)告里比只貼一張 loss 下降圖更有說(shuō)服力。6.3 固定種子、單變量調(diào)參結(jié)果才有積累價(jià)值回看這個(gè)標(biāo)題的整個(gè)鏈路最后要養(yǎng)成的習(xí)慣是每次實(shí)驗(yàn)固定 seed、固定切分、固定評(píng)估函數(shù)只改一個(gè)超參。我第一次跑通這個(gè)項(xiàng)目時(shí)最狼狽的一次調(diào)參是同時(shí)動(dòng)了 embedding 維度、學(xué)習(xí)率和測(cè)試集切分跑了一晚上最后根本分不清是哪個(gè)調(diào)整讓結(jié)果變好。從那以后每次改參只動(dòng)一個(gè)變量復(fù)制一條實(shí)驗(yàn)記錄seed、embedding 維度、lr、weight_decay、train RMSE、test RMSE、Top-K 命中率??窟@套笨辦法后續(xù)每次實(shí)驗(yàn)都是對(duì)之前結(jié)果的小步改進(jìn)而不是推倒重來(lái)。希望幫到你。本文還有配套的精品資源點(diǎn)擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
99国产小视频2013| 五月激情偷拍| 91色综合| 色综合久久天天综合网| 任你日热视频| 综合天堂AV久久久久久久| www.婷婷五月天| 日本视频欧美观看免费| 久久久久久激情| 91久久色| 91chinese在线| 丁香五月天网站| 激情六月天婷婷| 国产三级片91| 亚洲操逼网| 日韩三级片一区二区| 伊人婷婷五月天| 国产噜一噜天天噜| 国产免费一区二区在线A片视频| 亚洲旡码| 99热精品在线观看| 丁香五月激情视频在线| 狠狠操狠狠色| 成人丁香五月天Av| 97精品综合久久| 亚洲最大在线| 午夜九九电影| 亚洲第一av| 精品久久99码| 亚洲区,视频区,视频区免费| 大香蕉啪啪网| 丁香五月色五月| 婷婷精品性视频| 久久五月婷综合网| 超碰成人电影| 国产又黄又爽又激情不遮挡视频在线观看| 超碰永久在线| 99热手机在线精品| 亚洲综合五月天婷婷| 99成人精品| 99在线视频操999| 激情五月,婷婷五月,丁香五月| 人人搡人人| www.91九色| 五月婷婷综合网| 九九热精品| www.人人操人人看人人想人人摸 人人人人操,COM | 色色色成人网| 草草视频91| 久久激情网| 国产99美少妇| 婷婷WWW久久| 伊久久婷婷| 高潮毛片遮挡费高一百度| 日本人妻伦在线中文字幕| 中文字幕日韩无码制服诱或| 婷婷色在线视频| 天天爽夜爽| 五月婷丁香久久久| 99狠狠色| 20253AV| 婷婷八月丁香激情综合| 天天干-天天日| 五月天色站| 色噜噜狠狠色综合日日| 九九色综合九九色| 亚洲色情一区二区三区四区| 久久久久久激情| 精品国产乱码久久久久久免费| 97色色综合| 欧美日韩成人在线| 第四色五月婷婷| 少妇大叫太大太粗太爽了A片| 色五月丁香伊人五月| 美女黄频aⅴ视频| 亚洲精品字幕| 丁香五月天综合| 五月丁香婷婷激情澎湃四射| 婷婷五月综合婷婷| 国产AV不卡福利| 色九月| 伊人五月综合网| 婷婷激情丁香五月婷婷激情丁香五月婷婷 | 高清无码 一区 二区 三区| 激情综合视频| 99久re热视频精品98| 国产ava| 久久婷婷综合网| 婷婷六月天| 激情内射p| 日本99视频| 26uuu成人网| www999日韩精品| 我爱婷婷五月天综合88| 狠色综合网| 久久婷婷综合色丁香| 99九九精品| 99九九在线视频| 天天射天天射一道本日本社区 | 岛国AV网| 五月丁香六月欧美| 2025最新亚洲激情在线| 五月天丁香六月综合| 大色鬼综合| 97操操| 丁香婷婷婷五月| 日韩亚洲视频| 亚洲成人AV在线观看| 久久久亚洲成人无码A片| 亚洲激情另类| 天天日天天摸| 99精品在线观看| 精品久久人妻| 国产精品久久久海的味道| 日在线V视频在线播放| 97人妻碰碰碰久| 丁香婷婷婷婷十二月在线观看视频| 丁香九月婷| 色婷婷亚洲六月婷婷中文字幕| 欧美97p| WWW.五月天9999| 六月丁香大香蕉| 婷婷色五月天色| 91/九色黑人| 97夫妻超碰| 色狠狠综合| 伦乱天堂| www.minyis.com【JT】实力收量可预付QQ2101460746 | 婷婷五月天a| 激情综合网之激情五月| 天天色一道本综合婷婷| 成人片久久网站| 97操在线视频| 欧美 日韩 成人 在线| 五月丁香久久丝袜啪啪| 亚洲AV第二区国产精品| 丁香五月影视| 久久色婷婷| www.色婷婷.com| 久久五月婷综合网| 97婷婷在线| www久久久久久| 久久婷鲁| 久久免费丁香| 120分钟婬片免费看| 久热亚洲| 国产激情视频在线观看| 精品在线| 婷婷深爱色五月| 超碰av在线| 中文字幕成人| 丁香五月天婷婷久久| 99热 免费| 久久综合网免费视频| 99热这里只有精品268| 五月天婷婷综合久久| WWW,五月天| wWwCom夜操wwW| 五月色综合| 快乐激情五月色婷婷| 任你日视频| 99久久婷婷国产综合精品草原| 高清不卡一区| 色。 日日日| www.人人操人人看人人想人人摸 人人人人操,COM | 91九色国产| 丁香五月天婷婷中文字幕| 激情五月婷黄版| 久久最新色| 96精品久久久久久久久| 色5月婷婷| 色色99| 婷婷五月天小说| 在线只有精品| 精品视频网| 国产欧美精品AAAAAA片| 五月丁香| 亚洲色99综合天堂| 久久开心五月婷婷| 成人 在线 日韩| 久久综合丁香| 97色色视频| ..真实国产乱子伦对白在线_欧| 九月丁香久久网| 玖色色综合| 日韩精品成人在线| 婷婷五月 丁香六月| 亚洲av成人在线| 情情五月天色| 五月花综合视频| 99色视频在线| 五月天婷婷丁香| 婷婷五月天激情网| 精品99在线观看| 久久新地址| 思思99精品视频在线观看| 久久机只有这里精品| 色五月婷婷激情| 五月婷婷av| 伊人婷婷五月天| 亚洲精品国产A久久久久久| 先锋男人91资源| 女性自慰系列第五页| 五月综合精品| 色狠狠综合| 九九在线91| 噜噜干日本| 精品福利911| 五月综合激情视频在线| 99久久九九| 激情五月狠狠喔| 超碰91在线| 99热青青草原| 99性视频| 婷婷爱五月| 婷婷日在线观看| 色五月丁香伊人五月| 婷婷午夜激情| 超碰在线免费观看日韩| 婷婷丁香五月天哟啪| www.sezonghe| 婷婷五月天综合在线| 婷婷五月综合社区在线| 五月天六月丁香| 激情婷婷网| 久热这里只有精品99re| 激情综合色婷婷啪啪六月天| www狠狠| 97热视频| 啪精品| 丁香狠狠| 久久XX| 欧美一黄一色一乱一伦| 操人妻90p| 无码区婷婷五月花开| 色婷婷六月| 9|在线观看视频| 婷婷伊人无码| 综合色情网| HD久久精品视频| 丁香婷婷射| 色婷婷综合网| AV五月丁香| 5月丁香婷婷激情网| 日本一级黄色片。| http://www.lingjunshare.com/| 免费视频无码| 久久久婷婷| 色婷六月| 五月婷婷色综图片| 综合狠狠干| 六月婷婷最新网址| 五月天亚洲综合网| 五月天婷婷亚洲| 亚洲色综久久五月| 曰本久久女| 天天插天天很| 日本欧美成人片AAAA| 色丁香五月婷婷婷| 成人国产欧美大片一区| tingting五月天亚洲| 五月丁香啪啪啪| 97色干| 成片免费观看视频大全| 色婷婷黄色网络| 91啪啪视频| 丁香五月在线自慰| 日本一级一级一级一级| 亭亭五月丁香综合欧美| 97人人射| 丁香五月亚洲婷婷| 超碰无码老师| www.99热| 99精品自拍| 超碰在线观看99| 夜夜 操无码| 亚洲AV综合在线观看| 色色色区| 一夜福利不卡| 欧美人与性动交CCOO| 超碰三级秋霞| 天天躁日日躁狠狠躁日日躁2022年5月9日 | 日本色色网| 欧洲亚洲免费视频9| 123草逼网| 五月天丁香久久| 91九色视频在线观看| 六月婷婷香蕉| www五月| 99热日韩这里只有精品| 天堂伊人干| 热99热9| 丁香五月瑟瑟| 91干在线| 婷婷综合激情五月中文字幕| 610018岁成人视频| 亚洲另类视频| 九九AV| 99精品在线| 九九爱看亚洲| 久久婷婷五月激情综合| 操人无码| 五六月丁香激情视频| 婷婷综合中文| 99热官网| 久久丁香婷婷五月天| 99精品无码| 快色t v在线入口| 五月婷婷丁香日韩在线| 亚洲婷婷丁香五月视频| 婷婷欧美综合| 婷婷五月天最新综合你懂的 | 婷婷导航| 狠狠操狠狠狠| 超碰不卡在线| 久草热久草在线视频| 五月丁香狠狠地噜噜噜噜| 久久色午夜在线导航| 任你爽精品免费视频6| 久久99免费视屏| 色五月激情五月| 色欲久久久久| 成人av免费观看| 国产古装妇女野外A片| 婷婷开心六月| 五月丁香久久| 婷婷黄色| 男女啪啪做爰高潮无遮挡| 丁香五月婷婷欧美成人色图| www.91色| 久久久久视剧HD| 久久色天堂| 婷婷在线五月天观看| 婷婷色综合中心站| 96丁香六月婷婷蜜桃综合久久| Www.婷婷五月| 99啪啪| 婷婷五月丁香综合网| 丁香五月激情综合| 五月综合777| 亚洲色婷婷五月天| 黄色中文字目| 超碰在线看| 婷婷涩五月天综合| 激情综合五月婷| 婷婷五月天成人视频| 91碰| 99热在线观看亚洲区| 五月婷精品| 婷婷六月天国产综合| 涩综合网| 亚洲视色| 99re思思精品在线观看| 另类激情五月天。| 九月激情综合| 九九99偷拍视频| 丁香六月婷婷久久综合| 99热精品观看| 亚洲精品午夜国产va久久成人| 色五月丁香六月资源站| 亚洲成人网站在线| 色五月婷婷丁香凹凸| 日本狠狠色| 九九热免费视频| 综合性视频99| 99热国产在| 欧美 日韩 成人在线| 黄色av网站在线免费播放| 亚洲操逼网| 天天干狠狠| 激情婷婷五月黑人| 亚洲第一色色色| 伊人久久大香线蕉av一区| 久99婷婷色综合| 性爱视频久久| 色色国产| 丁香五月Av| 激情五月天啪啪| 这里只有精品视频免费在线观看| 六月五月久久丁香| 亚洲综合激情五月久久| 欧美伊人9| 97超级碰人人| 91妻人人爽人人看片| 四色五月婷婷| 久久a热| 久久精品4| 性色天| 日本操逼九九九九58日本操逼| 狠狠色丁婷婷日日,伊人激情综合网| 亚洲在线操| 99热一本久道| 无码A片一区二区免费| www。五月,com| 久久99久久99精品,久国产,久久精品免费,99久在线,久久久久国产精品免费网站,9 | 99热这里只有精品50| 五月天色婷婷激情综合| 亚洲五月婷| 91精品91久久久中77777久久玖玖九九 | 日逼AV影音先锋男人资源站| 这里只有精品视频| 色色99| 五月色综合| 日本一级一级一级一级| 欧美电影在线播放| 亚洲综合网在线| 无码成人AAAAA毛片AI换脸| 欧美日韩成人| 亚洲 在线 另类| 少妇高潮呻吟A片免费看软件| 无码日本精品XXXXXXXXX | 欧美在线视频99| 婷婷综合| 激情小说色五月| 三级毛片视频| 婷婷五月天渟渟| 碰人人97| 成人五月天丁香婷| 日韩色色网| 五月色丁香综合| 五月天激情网图片 - 百度| 国产jd1024基地手机看国产| 久久五月天丁香| 青青草网武则天| 91热久| 婷婷终合色图| 九九成人精品免费视频| 激情五月天无码| 天天日,夜夜爽| 丁香五月,激情五月,深爱五月| 久久这里只有欧美| 97色色网| 秋霞性爱AV| 五月天停停成人网| 色爱亚洲| w婷婷五月婷婷w| 综合久久综合| 免费精品99| 五月激情偷拍| 五月天婷婷一起草| 玖月婷婷爱丁香| 婷婷五月天伦理| 亚州性爱99| 婷婷九月丁香| 97人人射| 久久se 综合网| 久久九九99.www| 99热天堂| 欧美丁香婷婷天天操| 97自拍视频网| 六月婷婷视频| www一区二区三区| 丁香婷婷成人网| 色婷婷9| 五月天精品| 激情AV网| 色人久夂| 最新激情五月天| 亚洲欧美另类在线23p| 日日夜夜天天| 无码人妻少妇色欲AV一区二区| 91色综合久久| 色五月婷婷久久| 九九草热在线观看| 婷婷六月天| 91狠狠综合久久| 九九99偷拍视频| 久久99精品视频| 天天开心AV色综合婷婷五月天| 丁香婷婷五月| 专区无日本视频高清8| 欧美三级视频下载| 99爱在线| 日本狠狠干| 99精品国产在热久久| 婷婷五月天首页激情| 色,激情五月天| 丁香美女主播视频在线观看| 99熟女| 九久久九精品视频| 久久丁香| 激情九色| 六月婷欧美丁香综合| 99久在线精品99re8热| 97韩国久久电影院| 久草五月| 91热在线| 欧美婷婷综合| 91久久日日| 激情久久五月天| 精品人妻久久久久| 风流少妇A片一区二区蜜桃| 欧美日韩国产伦精品日韩人妻一| 五月欧美色色五月| 久草热在线视频| 玖玖婷婷视频| 久久性爱视频这里只有精品 | 久久婷综| 日韩一区二区在线播放| 97干欧美| 欧美操逼天堂| 五月丁香婷爱在线| 牛牛热这里只有jingpin| 啪啪婷婷五月天激情| 五月丁香花开综合网| 色五月综合| 欧洲一区二区| 五月丁香六月玩女人| 日本色色影片| 这里只有精品视频国产| 亚洲激情综合| 日韩AV片| 97婷婷狠狠| 国精产品一区二区三区| 一级操逼内射在线视频| www九九免费视频| 亚洲 25P| 欧美99| 国产激情综合| 级情九色| 五月婷婷狠狠干| 思思久久99| 99操不停| 色五月丁香六月欧美综合| 99热在线观看| 亚洲综合色丁香五月天| 大地资源色婷婷视频在线| 99色在线观看免费| 99久视频| 五月天天天综合| 人妻内射视频| 秋霞电影一级黄| 亚洲激情四射| 天天综合情| www.狠狠| 丁香五月天导航| 婷婷性爱| 五月丁香六月婷婷,婷| 色优久久| 最新日本A片| 可以免费观看的AV| 777.色色| 乱乱av| 超碰97在线观看免费| 色亚洲婷婷| 国产黄色在线| 婷婷五月天六点丁香五月| 色婷婷中文| 五月丁香六月综合激情网| 97精品人人A片免费看| WwW天天干| 欧美三级巜人妻互换| www.伊人天堂偷偷婷婷| 丁香五月婷婷天激情| 五月婷婷花| 九色综合五月天婷五月| 色播五月婷婷| 中文字幕九九九九| 五月婷婷开心网| 亚洲激情无码久久| 91 影音先锋| 99热在线观看免费| 天天干,天天操,天天射| 色婷视频| 婷婷丁香五月视频| 一起操最新网址| 99精品视频免费| 五月天婷婷爱| 亚洲成人免费在线| 天天爽夜夜爽夜爽精品| 伊人久久综合| 亚州操人在线视频| 人妻videos人妻高清| 久热99视频在线观看| 开心色五月天久久久久久久| 中文字幕97超级碰| 亚洲综合激情五月久久| 欧美日本一区二区三区| 国产精品国产| 337p大胆噜噜噜噜噜91Av| 五月天激情婷婷五月天久久| 激情丁香久久| 人妻少妇色综合| 成年人99热| 婷婷九月丁香天堂丁香天堂| 色色丁香| 99er久久| 综合色五月天| 丁香久久在线| 另类专区在线| 丁香五月激情性色郤| 欧美啪啪五月天| 99热久| 99热在线观看免费| 色色色99| 97婷婷五月丁香| 日韩亚洲视频| 色99欧洲色19| 五月婷婷激情综合在线| 狠狠色婷婷丁香五月| 婷婷综合久久| 天天综合网亚洲网站| 九九re精品视频在线观看| 欧美色图天堂网| 色优久久| 9色免费网| 亚洲操B| 热99AV网站| 久久天天天| 天天综合网色欲香| 专区无日本视频高清8| 久狠狠| 五月丁香六月激情综合啪啪| 久久婷婷丁香| 亚洲精品无码A片一区二区| 五月婷婷综合激情网| 丁香五月激情视频在线| 日韩九九视频| 啪精品| 9国产在线视频| 99热老司机| 丁香五月开心婷婷| 亚州激情在线视频| 庭庭久久内射| 月丁香久久久| 97超碰免费超级在线观看| 伊人狠狠丁香婷婷综合尤物| 五月深爱网| 日韩三级片一区二区| 小色小蛇伊人婷婷色香五月| 日B日潘金莲BB| 久久婷婷五月天| 婷婷久久五月天| 国产精品-第3页-91JQ就要激情网91JQ5.JQJQ926.XYZ | 97色在线观看视频| 五月停停大香蕉| 人人爱人人草| 天天日夜夜帕| 99re视频在线播放| 超碰99在线| 欧美在线视频免费播放| 这里只有精品99视频| 色婷网| 九九家庭影院| 丁香五月天之婷婷影院| 国产肥白大熟妇BBBB视频| 五月婷婷之综合激情在线| 五月丁香啪啪网| 一起草无码| 久久这里有精品视频在线免费观看| 久久色五月| 国产熟女大叫受不了| 亚洲无AV在线中文字幕| 久久激情五月| 婷婷五月电影院| 思思久热6| 热的国产,热的综合,热的有码| 婷婷久热| 九洲一级A片| jiujiujiuwuyuetian| 琪琪狠狠干| 激情四射亚洲| 丰满少妇乱A片无码| 狠狠干综合| 色综合色色| 涩五月婷婷| 色色色色色色网| 66精品成人免费网站在线观看| 9久热这里只有精品视频| 国产欧美婷婷| WWW丁香五月| 日木狠狠干| 人人97碰| www.婷婷五月天| 亚洲AV无码成人精品电影| 亲子乱av一区二区三区的| 丁香五月开心七月| 久久91久久精品久久| 内射人妻视频国内| 精品怡红九九九| 五月丁香激情五月天| 99乱视频| 任你爽视频| 六月丁香啪啪| 玖玖伦理电影| 亚洲综合色网站| 就爱射中文字幕资源网| 玖玖99福利| 激情五月丁香婷婷夜夜操| 久久er这里只有精品| 99热最新| 天天肏屄夜夜爽| 亚洲 精品 综合 精品| 狠狠久久婷五月综合色| 综合AV在线| 色私五月婷婷| 综合另类视频| 天天色月| 袁子仪视频观看| 免费久久这里只有精品99| 五月社区丁香| 狠婷婷五月| 五月婷婷在线免费观看| 99色 | 人妻VideOssS人妻高清| 欧美这里只有精品| 欧洲一区二区| www.色综合| 中国女人做爰A片| 蜜桃婷婷丁香综合久久开心亚洲| 99热最新国内| 日本9区视频| 五月丁香黄色| 婷婷五月天丁香| 丁香六月视频| 六月丁香色婷婷| 亚洲婷婷激情综合激情999精品| 大香蕉久久久久| 九九热免费视频| 激情性爱五月天网页| 五月婷婷日本| 国产免费一区二区在线A片视频| site:minyis.com| 人妻VideOssS人妻| 色色色在线观看| 色狠狠综合| 色色色九九九五月婷婷| 五月天丁香成人社| 色五月丁香总合网| 五月六月伦理| 97人人草| 天天狠天天叉| 免费观看亚洲AV片| 欧美顶级少妇做爰HD| 日韩欧美性爱| 丁香五月网站| 丁香五月婷婷色播艳门照| 亚洲中文字幕AV| 大地9中文在线观看免费高清| 热99热久| 99色色热热| 五月婷婷手机在线| 狠狠干婷婷| 丁香五月综合狠狠| 六月婷婷天天操夜夜爽视频| 久久机热思思热| 99人人干| 久久九久久| 91操人视频| 久久久久人无码人妻| 青青草原亚洲天堂| 五月开心播播网| 99大香蕉| 色婷婷丁香女女| a网站免费观看| 五月综合激情久久| 天天久久人人| 五月天婷婷视频| 天天干天天拍| 激情文学第四色婷婷丁香五月| 五月丁综合在线观看| 激情亚洲婷婷| 亚洲精品字幕| 五月天天堂久久| 九九九九九九九热| 五月婷婷色| 国产4P视频精品五区| 五月丁香久久综合精品| 色婷婷伊人| 亚洲天堂AV综合网| 77799热| 婷婷综合色| 久久丁香综合精品综合| 六月色婷婷欧美| 欧美色九| www久久久久久| 中文字幕簧片| 色综合色色色| 4399高清无码视频| 婷婷丁香色情五月天| 情五月亚洲婷婷| 另类图片激情五月天| 婷婷色情网| 日韩在线看AV| 99成人网一区| 九九综合色综合| 爱操天堂| 99热只有国产在线精品| 亚洲第一第二网站| 五月丁香激情婷婷| 久久精热| 日本44久久在线| 九九热这里精品| 99热国产这里只有精品| 九月色婷婷综合| 大香蕉av在线| 97在线精品| 五月婷婷9| 色偷偷五月天| www五月婷婷88导航| 激情五月天综合网站网站网站| 婷婷五月天在线观看| 99在线小视频| 99热在线观看这里只有精品| 国产看真人毛片爱做A片| www.xtbsty.cn.com蜜乳AV| 在线99热| 人人干99| 97人人搞| 成人在线视频一区| 婷婷深爱五月天| 日韩啪啪自拍| 综合色五月| av操B网站| 丁香亚洲婷婷五月| 婷婷五月天成人| 色之综合网| 人人摸人人| 五月天婷基地| 99热66| 色五月婷婷 成人| 丁香六月五月天| 《诡秘之主》在线观看| 九九热在线视频观看| 丁香五月亚洲AV| 婷婷色网| 五月天色婷好好| 99自拍视频在线| 五月天婷亚洲综合在线嫩草网| 网站免费一站二站| 亚洲 精品 综合 精品| 97精品综合久久| 五月婷婷另类| 国产精品18久久久| 六月丁香射婷婷欧美色图片 | 亭亭五月天成人| 国产精自产拍久久久久久蜜 | 五月丁香婷婷在线综合蜜桃| 成人五月天婷婷| 99热这里只有精品8| 91操操| 五月婷婷综合在线| 丁香六月婷婷综合激情欧美| 色色色色色网| 26UUU成人网| 色爽干| 青草激情在线| 欧美婷婷精品激| 五月丁香激| 六月99天天婷婷激情综合| 国产精品色色| 99re热视频| 丁香九月激情在线视频| 天天干,天天日| 久久激情五月天| 婷婷五月天色色| 天天日,夜夜爽| 超碰啪啪网| 天天干天天爽| 九九熱最新視頻| 大地资源色婷婷视频在线 | 日日夜夜干| 精品久热| 亚洲最大成人综合网720P| 丁香六月婷婷激情| 日韩黄色网络| 五月丁香啪啪啪| 激情五月视频| 久9热视频| 性综合网| 激情五月天色婷婷| 婷婷激情六月综合| 亚洲精品无码一区二区| 99热在线观看免费| 99热这里都是精品| 久久久这里有精品| 久久思思热视频| www.91九色| 操操碰| 婷婷婷婷色| 亚洲成人AV在线观看| 欧美性色A片免费免费观看的 | www.五月婷婷久久.com| 久久五月婷综合网| 草草影院爱爱| 狠狠爱综合| 99思思| 亚洲精品成人| www,setingting| 日本久久婷婷| 日本在线噜噜| 熟女网站久久| 色五月天婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷 | 538在线精品| 99热费观看| 婷婷丁香六月五月天| 婷婷5月久久综合网站| 久色网址| 激情综合色| 午夜丁香| 91久久国产自产拍夜夜91久久精品文字>91麻豆精品国产 | 欧美三级A做爰在线观看| 99色色视频| 久9热视频在线观看| 久久性爱网| 色婷婷电影| 99亚洲色色| 五月天激情偷拍| av第一二区| 久久人妻超碰一区| www.精品99| 五月情婷婷| www,8050,午夜三级| 五月天AV大香蕉| 九九综合九九| 丁香激情综合| 激情婷婷五六月天| 99精品人人| 四季日韩AV无码综合| 色五月av| 182TV大香蕉| 26UUU精品一区二区Com| 那里有AV网址| 欧美日韩五月婷婷| 久99久视频精品| 久久99网站| 欧美99视频| 色婷婷成人五月| 色。 婷婷婷| 99精品在线播放| 激情av网| 亚洲综合色成丁香五月色| 久久婷婷五月综合| 日本九九视频| 色色日本| www激情网| 色色色视频免费无码| www.色婷婷.com| 色婷婷综合在线| 4399啪啪视频| 青青青在线视频国产| 亚洲久热| 操97免费超级视频| 丁香色综合| 丁香婷婷五月天色播| 色色综合无码| 欧美婷婷日本| 97黑人精品区| 青柠影视免费高清电视剧| site:pnnrt.com| 9999三级片| 欧美色色色色色| 五月天激情视频网站| 六月丁香婷婷网| 丁香五月花| 五月丁香啪啪网| 激情综合久久| 99热老网站| 超碰在线综合| 99色| 婷婷久久色| 26uuu最新地址| 亚洲丁香五月在线观看| 亚洲综合婷婷五月天| AⅤ色区| 九九热再线九九视频免费在线观看| 九九色中文| 丁香五月激情棕合| 久久五月婷| 操人妻视频91| 深爱激情综合网| 国产精品VA在线| 天天爱夜夜爽| 色色性爱视频| 日日爱激情| 亚洲激情五月天| 欧美五月婷婷| 色香欲综合| 婷婷激情六月视频| 久久天天| 综激情网| 久久99网站| 久久综合99| 五月色亚洲| 婷婷五月天综合网| 成人做爰A片免费看视频| 国产成人+综合亚洲+天堂| 亚洲va综合va国产va中文| 熟女少妇内射日韩亚洲| 精品成人无码A片观看香草视频| 人妻内射一区二区在线视频| 国产午夜成人AV在线播放| 六月五月天婷婷涩播在线| 丁香八月综合激情| 9 1大香蕉| 啪啪六月婷婷| 97操碰在线视频| 狠狠色噜噜狠狠狠狠综合| 激情四射五月天| 婷婷五月激情的图片| 亚洲舔观看| 婷婷五月天激情视频| www.开心激情| 婷婷成人五月天| 五月丁香操婷逼| 婷婷五月天av| 人与禽A片啪啪| 日韩久久日| 狠狠色97| 五月丁香六月在线欧美| 伊人六月无码视频| 影音先锋人妻出差| 婷婷五月天美女21p| 99热99色| 五月丁香六月| 色色图五月天| 九九干视频| 99er精品| 九九综合久久| 激情综合色婷婷啪啪六月天| 99色网站| 国产乱妇乱子在线播视频播放网站| 玖玖九九9999在线观看视频精品| 玖玖激情五月天| 丁香五月婷婷狠狠色| 五月丁香色婷婷基地| 999热在线视频| 婷婷亚洲综合| 成人无码髙潮喷水A片| 九九99偷拍视频| 丁香激情网| 五月婷婷狠天天色综合| ji'qi'luan'ren'lun| www.超碰| 99热在线播放| 丰满少妇猛烈A片免费看观看| 99久久超级| 久久久性爱视频| 五月激情啪啪啪| 另类小说婷婷色| 99热99美国在线观看| 激情婷婷六月天| 五月天久久小说| 99视频自拍| 色五月五月丁香| 激情四射婷婷| 夜精品无码A片一区二区蜜桃| 五月丁香久久激情综合| 亚洲无码另类| 人人做人人看人人摸| 4399在线日本A片| 99在线精品免费视频| 99热热热国产超碰| 婷婷久久五月天亚洲欧美国产日韩在线观看 | 99久在线精品99re8| 婷婷五月丁香久久| 狠狠CAO日日穞夜夜穞AV | 天天爽天天日| 97婷婷色| 午夜婷婷久久| 操国产人妻| www.久久99热地址发布| 97超碰婷婷五月天| 久久婷婷内射| 五月天婷婷五月| 大香蕉久| 久久丁香婷| 天天做综合| 色七七色九九| 青草青草视频2免费观看| 99热精品观看| 色综合久久天天综合网 | 婷婷六月激情啪啪| 操九色| 九色视频九色九色91jiuseshipin| 99久久www| 色五月婷婷天天操夜夜操| 五月叮香啪| 在线综合91| 91操操操| 五月婷婷六月色| 97碰成超视频免费视频| 天天干天天干天天干天天干天天干天天| 五月激情综合美女久久| 超碰v| 五月婷色| 久久综合五月天| 久久婷婷丁香花综合网| 天天做综合| 91凹凸在线| 97自拍视频网| 这里只有九九精品| 天天做天天爱天天玩| 五月丁香婷婷综合| 亚洲亚洲人成综合网络| 亚洲区,视频区,视频区免费| 五月婷婷六月情| 婷婷丁香激情五月天色色色| 影音先锋xfplay资源男人网| 婷婷性福五月天| www.91AV.com| 思思热在线视频精品| 久久9精品视频| 久久激情五月| 包操45分钟网站| 伊人久久大香线蕉精品| 色久激情在线| 麻豆精品| 成人短视频在线| 丁香五月婷婷狠狠色| 亚洲经典三级| 国产六月婷婷| 久热精品免费视频4| 综合激情视频| 黄页免费一级视频懂色| 色综合九九色综合88| 久久精彩综合视频| 激情婷婷五月天| 青青草原99热| 黄网在线观看免费| 97超碰综合| 欧美激情丁香五月天久久婷婷一区| 我淫我色婷婷五月天激情四射| 五月婷婷久草在线视频综合| 天天综合久久| 激情五月丁香五月| 亚洲激情五月婷婷日日| 欧在线一区| 九九九九综合| 婷婷丁香五月天色播网站| 五月丁香六月合| 丁香六月狠狠干| 久热伊人| 五月丁香婷婷色啪| 丁香五月五婷| 91精品婷婷国产综合| 996热| 婷婷五月成年人| 欧美日韩成人h| 爱久综合| 五月天天天综合| 色婷婷久久9.com| 91久久久久久久久久久| 狠狠色狠狠鲁| 成人一区在线观看| 日日夜夜狠狠| 婷婷综合色五月天| 久久久宗合| AA片在线观看视频在线播放| 四月丁香五月婷婷久久| 二色av| 国产精品成人网址| 91在线日| 天天摸夜夜爽天天做| 99久操| 噼里啪啦完整版中文在线观看 | 婷婷字幕在线| 婷婷91| 噜噜噜噜在线| 97热这里精品在线视频| 少妇被下春药玩弄A片| 五月天婷婷7米| 琪琪理论片| 青青日韩| 色色色综合网| 九九热在线视频观看| 亚洲激情综合色站| 日本玖玖在线| www.夜夜操| 婷婷免费视频| 五月婷婷开心深| 亚洲人妻电影| 少妇出轨做爰高潮A片| av在线激情| 三十路磁力链接| 九九99免费视频| AV在线不卡网站| 五月婷婷婷| 色情五月综合婷婷| 视频免费精品免费精品免费精品免费精品免费精品免费精品免费99 | 久久视频在线视频| 久99久热| 亚洲人成人五月天| 香蕉久久国产AV一区二区| 91传媒无码人妻精| 99婷婷| WWW.桔色成人.COM| 五月四色婷婷| 久久五月丁香婷婷| 1024成人免费看| 五月丁香婷婷啪啪| 国产激情在线| 综合网五月天123| 99色色爰| 婷婷综合网性| 碰99在线| 五月婷视频| 激情爱爱网站| 婷婷 月 丁香| 91蜜桃婷婷狠狠久久综合9色| 九九色网| 日本熟妇乱妇熟色A片蜜桃| 99久久婷婷| 色色AV色色色东莞| 99视频精品8 | 精品AV无码超碰| 99爱爱| 五月婷婷丁香综合| 丁香六月情| hd五月婷婷在线| 欧美激情综合| 九九热re99re6在线精品| 丁香五月婷婷老师网站| 国产激情久久久| 天天看A片| 综合网啪| www.亭亭五月天| 91操操操| 欧美色色色色色色色色色色影视| 97干免费视频| av在线不卡播放| 猫咪伊人AV| 丰满少妇乱A片无码| 俺去也综合| 丁香五月婷婷超碰在线| 国产九九一区二区三区| 精品久久久人妻| 97色伦另类图片小说视频 | 婷婷 丁香 精品| 婷婷丁香五月综合激情视频| 婷婷丁香成人网址| 丁香五月婷婷六月婷| 国产亚洲色婷婷99精品| 五月丁香操婷逼| 国产婷婷综合| aaaa.黄| Www.se.久久| a级毛片一区二区免费视频| 99视频在线观看地址| 少妇AB又爽又紧无码网站| 99久在线精品99re8热| 丁香久久综合| 成人在线视频一区| 综合网激情| 五月天婷婷激情综合| 99热99热| 涩五月丁香| 色大综合| 五月天欧美激情| 五月天婷婷色播综合在线| 久热这里这里有精品| ri电影在线| 久久婷婷伊人| 色婷婷免费观看| 婷婷久久五月丁香| 久久五月激情| 久久亭亭电影| 国产伊人大香蕉| 97国产精品女人碰碰| 亚洲成人中文字幕| 日韩有码一区| 五月天激情日色在线| 九月av在线| 亚洲成人网站在线| 激情伊人网| 99精品在线观看视频|