久久精品国产精品国产精品污,男人扒开添女人下部免费视频,一级国产69式性姿势免费视频,夜鲁夜鲁很鲁在线视频 视频,欧美丰满少妇一区二区三区,国产偷国产偷亚洲高清人乐享,中文 在线 日韩 亚洲 欧美,熟妇人妻无乱码中文字幕真矢织江,一区二区三区人妻制服国产

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

清华大学王晨阳:轻量级Top-K推荐框架及相关论文介绍

發布時間:2024/10/8 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 清华大学王晨阳:轻量级Top-K推荐框架及相关论文介绍 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文內容整理自 PaperWeekly 和 biendata 在 B 站組織的直播回顧,點擊文末閱讀原文即可跳轉至 B 站收看本次分享完整視頻錄像,如需嘉賓課件,請在?PaperWeekly 公眾號回復關鍵詞課件下載獲取下載鏈接。

構建一個公平的推薦算法“合唱團”,這也是框架名稱 ReChorus 的由來 圖片出處:pixabay

作者簡介:王晨陽,清華大學計算機系人智所信息檢索課題組二年級博士生,研究方向為推薦系統中用戶的動態需求,主要包括序列推薦、引入知識及時間動態性的意圖理解等,在WWW、SIGIR等會議發表多篇論文。

推薦系統中基于深度學習的方法近幾年來層出不窮,然而不同工作之間實驗設定和實現細節的差異使得我們很難直接比較不同論文的相對效果。有論文針對推薦領域中實驗的可復現性提出了質疑,認為百花齊放的表象背后的實際情況是推薦系統領域長時間的停滯不前。

為此,我們基于最近發表在 SIGIR’20 工作的代碼,整理出了一個輕量級的 Top-K推薦框架 ReChorus,旨在分離模型間共同的實驗設定和不同的模型設計,使得各個模型能夠在一個公平的 benchmark 上進行對比。ReChorus 足夠簡單易上手,既適合初學者了解推薦領域的經典模型,也適合研究者快速實現自己的想法;同時 ReChorus 足夠靈活,可以輕松適配個性化的數據格式和評測流程。

本文還會介紹目前 ReChorus 中表現最好的模型——引入商品關系和時間動態性的商品表示。這個工作顯式建模了目標商品和近期交互商品之間的關系,以及不同關系所產生的影響如何隨時間變化。實驗表明該方法得到的商品表示可以靈活地應用于各種推薦算法并取得顯著的效果提升。

推薦系統領域的劣幣驅逐良幣


在開始介紹 ReChorus 前,讓我們先思考幾個問題。

第一個問題,如上圖所示,簡單回憶的話,推薦系統領域所用的 baseline 是不是往往就那么幾個?可能研究者們不再像過去那樣傾向于同某個領域或問題設定下最好的?baseline?做比較,轉而和比較流行的 baseline 做比較。只做到了比某個流行的baseline 表現好一點,研究者就宣稱自己達到了?state-of-the-art(SOTA) 的性能。如果你去找那些非常強的 SOTA?的模型做比較,提升就會相對變小,論文相對更難發,而這樣的狀況很可能導致劣幣驅逐良幣的趨勢。

近期就有這樣的一批論文發表,研究者們都自稱達到了 SOTA 的性能。可以預見的是后續的研究者撰寫新一批論文,選擇?baseline?進行比較時會更傾向于選這批論文中表現比較差的,由此對比出他們的論文算法有了比較大的提升。雖然這樣會讓整體的論文發表呈現百家爭鳴、百花齊放的表象。但是這樣的機制會使真正高質量?baseline?在浪潮中被淹沒。

在推薦領域,即使是比較資深的專家,也很難指出在某個任務設定下 SOTA 模型到底是哪一個。或許你會覺得這有什么難的,直接將新論文同一個 baseline 相對提升的幅度做比較不就可以了?

這就引出來了第二個問題,比較后會發現一個詭異的現象,同一組的?baseline?在不同的論文中相對的優劣是不一樣的。雖然有時候審稿人會指出這些問題,但是在很多已發表的論文中也能觀察到這樣的現象,雖然數據集在其中造成了一定的影響,但是我覺得很大程度上還是因為沒有把參數調好。

現在很多研發者不會下功夫對 baseline 做調整,調出一個差不多的結果后就做罷了。但這樣的后果是,如果想比較兩個自身達到了?SOTA?性能的模型,其相對提升就不會有特別明顯的可比性,可能其中一個 baseline?調的非常好,另外一個則沒有。這時就很難比較到底哪個模型在整個領域上達到了一個更優的效果。

那么,將在同一個數據集上進行過實驗的模型拿來比較效果不就行了嗎?這就引出了第三個問題:很多論文即使是在同一個數據集上,實驗結果也不太有可比性。其中的原因有很多,我們來看幾個比較有代表性的例子:

1. 推薦領域比較常見的數據預處理,是否去除了那些交互數量比較少的用戶item(常見去掉小于等于5的)?

2. 是否去掉了比較 popular 的 item ?

3. 在數據劃分時,直接用 leave-one-out 的方法把每個用戶的最后一個序列作為測試集,還是為了防止時間泄露,設置一個時間來做一刀切來做數據集?

4. 在負例選取上是直接選用戶沒有交互過的作為負例,還是選擇一個按照 item popular 的程度進行加權的負例采樣?

上述例子看起來都是一些細節的設定,可能并不會非常明確的在論文中體現,但它們對模型的效果卻有很大的影響。在同一個數據集上,兩篇論文的實驗結果可能會因為這些細節設定的差別存在跨數量級的差別。

最近?RecSys?的一篇論文 Are we really making much progress? A worrying analysis of recent neural recommendation approaches?也講了這個問題。在推薦系統中,實驗設定有很多具有分歧的地方,在這篇論文中就總結了多達8個分歧點,看起來不多,但假如說每一個分歧點至少有兩種選擇,2的8次方就是256種實驗組合。

雖然實際中可能并不會這么多,常見的情況可能接近10種。這依然意味著很難保證想比較的兩篇論文采取了完全一樣的實驗設定,也就導致即使兩篇在同一個數據集上進行實驗的論文,它們的結果也無法做比較科學的比較。

可能你會產生新的疑問,現在代碼不都開源嗎?我直接將代碼在我的實驗設定下跑一跑就可以了。我們來看看會發生什么:假設你準備下周一跟導師開組會匯報,你和導師說這周要把一個開源的?baseline?在自己的實驗設定下跑一跑結果。周二你下載了代碼,但發現把它改到能在自己的實驗設定下去跑是非常困難的。

這其實是現在比較常見的一個現象,按說代碼開源要滿足的最低要求是可以復現論文的結果,先不說有些開源代碼連這個最低的要求都沒有實現,即使是達到最低要求的代碼可能也很難匹配你的實驗設定。我遇到過一個最極端的例子,當時要去補充一個帶商品關系的 baseline(具體的名字就不說了)。

拿到代碼后首先發現這篇論文有兩個數據集,但奇怪的是代碼載入時好像只有一個數據集的相關的內容。再看模型就更奇怪了,這份商品關系的baseline帶有一個知識圖譜,其中所有關于商品關系的代碼,都按商品關系的數量去寫了多份,比如數據其實有兩種關系,就需要把同樣的代碼段寫兩份,把變量名做一個像X1、X2這樣的區分。

我當時非常震驚,第二個數據集怎么辦?果然有其他人問了論文作者同樣的問題,作者怎么回應呢?給了一個百度網盤的鏈接用來下載第二個數據集的代碼,我下載后發現第二個數據集有3種關系,類似第一個數據集,作者又把所有跟這種商品關系相關的代碼段寫了3遍,所有的變量用X1、X2、X3來替代,這讓我非常崩潰,我的數據集有十幾種關系,如果像他這樣寫,就要寫上一個幾千行且bug非常多的程序。

其實整個開源領域的代碼質量非常參差不齊。回到上文假設的場景,整整一周你都沒有把開源的?baseline 在自己的實驗設定下真正跑起來。但和跟老師匯報時,老師可能會質疑你這一周都干了啥?既然是開源代碼,為什么一周連一個實驗的結果都沒跑出來,你到底有沒有在做實驗?你只能一肚子的委屈。


上面的這些問題,也是一、兩年間我們在做推薦領域研究中觀察到的。上圖右邊,去年 RecSys 上的 best paper 也討論了這些問題,在推薦系統領域,我們是否在真正的 making progress ?作者選擇了18篇推薦領域的論文,但他只成功復現了其中的7篇,這7篇中效果能超過優質傳統模型的又少之又少。

在目前看來,推薦系統論文百花齊放的表象下,確實很有可能隱藏著一個長期的停滯不前,或至少是一個比較緩慢的前行實際情況。

ReChorus推薦框架介紹

2.1 ReChorus推薦框架介紹

如何改善這樣的狀況呢?我們認為關鍵點在于是提供一個比較公平的 benchmark 評測平臺,讓不同的模型在同樣的設定下進行評測。研究者可以直觀、清晰地看到不同的模型之間的優劣關系。好比看家用顯卡天梯圖一樣:我基于現在的預算,就知道我該選什么樣的顯卡。

類似的,有了評測平臺提供的模型天梯圖,研究者就能知道基于自己的實驗設定,應該選擇哪個 baseline 去作為我對比的目標、超越的對象,同時也可以幫助初學者更快地了解常見推薦算法。

我們基于上述的想法,同時在整理這次 SIGIR 一篇論文的代碼時,就思考如何做成更通用的操作,可以推薦框架,促進領域中的模型來做公平的對比,從而構建一個真正的推薦算法“合唱團”,這也是框架名稱 ReChorus 的由來。

在設計框架時,最主要的核心思想是如何分離模型間共同的實驗設定到共享的類中,突出不同的模型的細節,從而讓不同的模型可以在完全相同的實驗設定下進行對比。另外我們希望框架具有以下四個特點:

  • 輕量:易上手,代碼self-contain;

  • 高效:盡可能加速通用的訓練和評測過程;

  • 靈活:適配不同的數據輸入格式和實驗設定;

  • 專注:實現新模型時只需要關注一個文件。

針對第4點再補充說明幾句,為什么很多開源出來不是特別好的代碼,都是一個文件把一個模型寫完?因為這樣的好處非常明顯,使得研究者在調試時非常方便,只關注這一個文件,哪里有問題直接翻到那去找。

而一些框架會分很多很多類,非常面向對象。研究者可能寫一個模型代碼,在數據準備時要翻到前面去,看看所用的類如何適配自己的模型,這需要翻很多其他的文件,甚至還要對文件做改動,牽一發而動全身,研究者又要顧及改動會不會影響自己構建的其他模型,構建模型的思路就會被打亂。

我們希望實現把模型間不同的部分盡可能都集中到統一文件中去。

上圖顯示了已有的模型?目前實現的模型主要是基于 SIGIR 那篇論文的 baseline ,添加了一些常見的模型,還在繼續擴充當中,上圖的右面的二維碼指向GitHub的鏈接,歡迎查看。

可以看到目前實現的模型包括從2009年比較經典的BPR,到后續的2016年、2017年、2018年、2019年、2020年的算法,既包括傳統的模型,也有序列的模型,同時結合知識圖譜、結合時間信息的也有了一些實踐,性能的對比、各自的特點和運行時間列在了上圖右側。后文還會再講這個結果,這里先不做詳細分析。

2.2?框架主體

如上圖,首先把框架分成了兩個類型的類,核心的模型類和幫助類。核心的模型類以 model 結尾,主要用來定義模型的細節,也就是體現模型之間差異化的內容,以及如何構建輸入的batch,這些都放在同一個文件里面,而且并不長。

幫助類分reader 和 runner 。reader 從硬盤中讀取文件、數據集放到內存里,然后進行統一的預處理。runner 控制模型訓練和評測的過程,會和所用到的深度學習框架訓練和評測的代碼有關,這里是基于pytorch的一個實現。

從上圖可以看出,模型可以共享幫助類。雖然目前幫助類只實現了兩個(base reader 和 base runner),如果我們的實驗有變化,比如數據集的格式有變化,我們可以實現新的 reader,也可以用其他的 runner 來實現不同的評測的機制。這些 reader 和 runner 幫助類都是可以指定給每個模型,有點像 OOP 里面的設計模式,這些就像它的“廚師”,可以把它指定給每一個模型,實現靈活的適配。

接下來帶大家從代碼的層面梳理一遍 ReChorus 框架。

文件夾層面大概分data、log和src,log包含輸出的log文件,src包含主要的模型代碼。下面快速看一下data中的內容,數據集大概長什么樣。

上面的代碼非常簡單,包含四個文件,其中train、test和dev 這三個文件比較重要,關鍵數值是user ID、item ID,還有每個的時間戳。

對于測試集和驗證集來說,測試的時候我們一般會 sample 一些負例,和正例組成 candidate set,然后把正例和負例一起做排序,看正例到底排在第幾位,所以train、test和dev這三個文件是必須的。后面選擇性的提供 item 的、特征知識圖譜的一些信息。r_complement 部分代表第一個item跟這一類item有互補的關系。

r_complement 部分代表第一個item跟這一類item有互補的關系。到這個 src 中的代碼層面。主要分為三部分,一個是前文說的幫助類,實現了 base reader 和 base runner,第二部分 models 層面除了 base model 是一個基本的類以外,可以理解為一個抽象類,后面對于每個模型實現一個類,繼承這個 base model 來實現它具體的功能。第三部分 util 層面是一些工具性的函數。函數主要入口在main,從main開始來看一下完整的框架。

# -*- coding: UTF-8 -*-import os import sys import pickle import logging import argparse import numpy as np import torchfrom models import * from helpers import * from utils import utilsdef parse_global_args(parser):parser.add_argument('--gpu', type=str, default='0',help='Set CUDA_VISIBLE_DEVICES')parser.add_argument('--verbose', type=int, default=logging.INFO,help='Logging Level, 0, 10, ..., 50')parser.add_argument('--log_file', type=str, default='',help='Logging file path')parser.add_argument('--random_seed', type=int, default=2019,help='Random seed of numpy and pytorch.')parser.add_argument('--load', type=int, default=0,help='Whether load model and continue to train')parser.add_argument('--train', type=int, default=1,help='To train the model or not.')parser.add_argument('--regenerate', type=int, default=0,help='Whether to regenerate intermediate files.')return parserdef main():logging.info('-' * 45 + ' BEGIN: ' + utils.get_time() + ' ' + '-' * 45)exclude = ['check_epoch', 'log_file', 'model_path', 'path', 'pin_memory','regenerate', 'sep', 'train', 'verbose']logging.info(utils.format_arg_str(args, exclude_lst=exclude))# Random seednp.random.seed(args.random_seed)torch.manual_seed(args.random_seed)torch.cuda.manual_seed(args.random_seed)# GPUos.environ["CUDA_VISIBLE_DEVICES"] = args.gpulogging.info("# cuda devices: {}".format(torch.cuda.device_count()))# Read datacorpus_path = os.path.join(args.path, args.dataset, model_name.reader + '.pkl')if not args.regenerate and os.path.exists(corpus_path):logging.info('Load corpus from {}'.format(corpus_path))corpus = pickle.load(open(corpus_path, 'rb'))else:corpus = reader_name(args)logging.info('Save corpus to {}'.format(corpus_path))pickle.dump(corpus, open(corpus_path, 'wb'))# Define modelmodel = model_name(args, corpus)logging.info(model)model = model.double()model.apply(model.init_weights)model.actions_before_train()if torch.cuda.device_count() > 0:model = model.cuda()# Run modeldata_dict = dict()for phase in ['train', 'dev', 'test']:data_dict[phase] = model_name.Dataset(model, corpus, phase)runner = runner_name(args)logging.info('Test Before Training: ' + runner.print_res(model, data_dict['test']))if args.load > 0:model.load_model()if args.train > 0:runner.train(model, data_dict)logging.info(os.linesep + 'Test After Training: ' + runner.print_res(model, data_dict['test']))model.actions_after_train()logging.info(os.linesep + '-' * 45 + ' END: ' + utils.get_time() + ' ' + '-' * 45)

首先定義了一些global的參數,主要控制整體的,比如 manual_seed的問題。主函數部分還包含一些比較通用的設置,像隨機數參數(隨機數的種子)、具體用哪一個GPU。我調用 reade r這個類去進行 corpus 的構建。

有一些預處理會比較花費時間,所以默認把讀入數據進行存儲,也可以修改比如 regenerate 這樣的參數,讓它實現每一次都進行一個重復的預處理。還可以定義 model,根據所定義的model的內容,來做初始化參數的操作以及決定是否輸入到顯卡中。

之后調用 runner 類對模型進行評測和訓練。還定義了每個的 dataset ,也就是pytorch 面內置的 dataset 一個集成的類,可以看到我把 dataset 寫到了 model 中作為一個內部類。

為什么不把準備batch寫到reader里面去?基于前文說過的設計框架指導原則,就是要把模型間不同的地方都集中到一個文件里,其實準備batch不同模型往往非常不一樣,所以我就把它集成到了模型這類里面去。runner 通過 runner.train 這行代碼控制整個訓練的過程,看一下訓練結果這部分就結束了。以上,main主要就是把所有的部分串聯起來。

class BaseReader(object):@staticmethoddef parse_data_args(parser):parser.add_argument('--path', type=str, default='../data/',help='Input data dir.')parser.add_argument('--dataset', type=str, default='Grocery_and_Gourmet_Food',help='Choose a dataset.')parser.add_argument('--sep', type=str, default='\t',help='sep of csv file.')parser.add_argument('--history_max', type=int, default=20,help='Maximum length of history.')return parserdef __init__(self, args):self.sep = args.sepself.prefix = args.pathself.dataset = args.datasetself.history_max = args.history_maxt0 = time.time()self._read_data()self._append_info()logging.info('Done! [{:<.2f} s]'.format(time.time() - t0) + os.linesep)def _read_data(self):logging.info('Reading data from \"{}\", dataset = \"{}\" '.format(self.prefix, self.dataset))self.data_df, self.item_meta_df = dict(), pd.DataFrame()self._read_preprocessed_df()logging.info('Formating data type...')for df in list(self.data_df.values()) + [self.item_meta_df]:for col in df.columns:df[col] = df[col].apply(lambda x: eval(str(x)))logging.info('Constructing relation triplets...')self.triplet_set = set()relation_types = [r for r in self.item_meta_df.columns if r.startswith('r_')]heads, relations, tails = [], [], []for idx in range(len(self.item_meta_df)):head_item = self.item_meta_df['item_id'][idx]for r_idx, r in enumerate(relation_types):for tail_item in self.item_meta_df[r][idx]:heads.append(head_item)relations.append(r_idx + 1)tails.append(tail_item)self.triplet_set.add((head_item, r_idx + 1, tail_item))self.relation_df = pd.DataFrame()self.relation_df['head'] = headsself.relation_df['relation'] = relationsself.relation_df['tail'] = tailslogging.info('Counting dataset statistics...')self.all_df = pd.concat([self.data_df[key][['user_id', 'item_id', 'time']] for key in ['train', 'dev', 'test']])self.n_users, self.n_items = self.all_df['user_id'].max() + 1, self.all_df['item_id'].max() + 1self.n_relations = self.relation_df['relation'].max() + 1logging.info('"# user": {}, "# item": {}, "# entry": {}'.format(self.n_users, self.n_items, len(self.all_df)))logging.info('"# relation": {}, "# triplet": {}'.format(self.n_relations, len(self.relation_df)))def _append_info(self):"""Add history info to data_df: item_his, time_his, his_length! Need data_df to be sorted by time in ascending order:return:"""logging.info('Adding history info...')user_his_dict = dict() # store the already seen sequence of each userfor key in ['train', 'dev', 'test']:df = self.data_df[key]i_history, t_history = [], []for uid, iid, t in zip(df['user_id'], df['item_id'], df['time']):if uid not in user_his_dict:user_his_dict[uid] = []i_history.append([x[0] for x in user_his_dict[uid]])t_history.append([x[1] for x in user_his_dict[uid]])user_his_dict[uid].append((iid, t))df['item_his'] = i_historydf['time_his'] = t_historyif self.history_max > 0:df['item_his'] = df['item_his'].apply(lambda x: x[-self.history_max:])df['time_his'] = df['time_his'].apply(lambda x: x[-self.history_max:])df['his_length'] = df['item_his'].apply(lambda x: len(x))self.user_clicked_set = dict()for uid in user_his_dict:self.user_clicked_set[uid] = set([x[0] for x in user_his_dict[uid]])def _read_preprocessed_df(self):for key in ['train', 'dev', 'test']:self.data_df[key] = pd.read_csv(os.path.join(self.prefix, self.dataset, key + '.csv'), sep=self.sep)item_meta_path = os.path.join(self.prefix, self.dataset, 'item_meta.csv')if os.path.exists(item_meta_path):self.item_meta_df = pd.read_csv(item_meta_path, sep=self.sep)if __name__ == '__main__':logging.basicConfig(level=logging.INFO)parser = argparse.ArgumentParser()parser = BaseReader.parse_data_args(parser)args, extras = parser.parse_known_args()args.path = '../../data/'corpus = BaseReader(args)corpus_path = os.path.join(args.path, args.dataset, 'Corpus.pkl')logging.info('Save corpus to {}'.format(corpus_path))pickle.dump(corpus, open(corpus_path, 'wb'))

接著看上面 base reader 的代碼,先看如何把數據集加載到內存里,其中兩個函數 read_data 和 append_info。read_data 把數據讀到內存中,轉成 dataframe 的形式,可能會去根據 item_meta_data 構建三元組的形式,也會做整個數據集的統計特征。

appen_info 主要做統一的、之后模型可能都會用到的預處理。具體工作主要包括把item交互的歷史拼到對應的dataframe里面去,tradeoff 整個的訓練過程非常快,不過可能比較占內存,對于更大一點數據集可以考慮把它放到 dataset 里面在多線程準備的時動態的找對應的這個歷史。

補充一點說明,需要把數據一次性讀到內存里面去嗎?確實是,推薦領域中,至少在研究中很少很少像 CV 領域,可能因為圖片都比較大,無法一次全部裝載到內存里。在推薦領域,如上文展示的那種數據集的格式,主要是 ID 和一些特征,直接講 CSV 裝載到內存還是比較方便的。

如果整個數據集比較大,無法預先的把歷史和一些特征先準備好的話,可以之后寫在 batch 里做動態的準備,犧牲一點時間來減少內存的使用。?

總結base reader 這部分就是講數據讀到 dataframe 里,做一個統一的預處理。

class BaseRunner(object):@staticmethoddef parse_runner_args(parser):parser.add_argument('--epoch', type=int, default=100,help='Number of epochs.')parser.add_argument('--check_epoch', type=int, default=1,help='Check some tensors every check_epoch.')parser.add_argument('--early_stop', type=int, default=5,help='The number of epochs when dev results drop continuously.')parser.add_argument('--lr', type=float, default=1e-3,help='Learning rate.')parser.add_argument('--l2', type=float, default=0,help='Weight decay in optimizer.')parser.add_argument('--batch_size', type=int, default=256,help='Batch size during training.')parser.add_argument('--eval_batch_size', type=int, default=256,help='Batch size during testing.')parser.add_argument('--optimizer', type=str, default='Adam',help='optimizer: GD, Adam, Adagrad, Adadelta')parser.add_argument('--num_workers', type=int, default=5,help='Number of processors when prepare batches in DataLoader')parser.add_argument('--pin_memory', type=int, default=1,help='pin_memory in DataLoader')parser.add_argument('--topk', type=str, default='[5,10]',help='The number of items recommended to each user.')parser.add_argument('--metric', type=str, default='["NDCG","HR"]',help='metrics: NDCG, HR')return parserdef __init__(self, args):self.epoch = args.epochself.check_epoch = args.check_epochself.early_stop = args.early_stopself.learning_rate = args.lrself.batch_size = args.batch_sizeself.eval_batch_size = args.eval_batch_sizeself.l2 = args.l2self.optimizer_name = args.optimizerself.num_workers = args.num_workersself.pin_memory = args.pin_memoryself.topk = eval(args.topk)self.metrics = [m.strip().upper() for m in eval(args.metric)]self.main_metric = '{}@{}'.format(self.metrics[0], self.topk[0]) # early stop based on main_metricself.time = None # will store [start_time, last_step_time]def _check_time(self, start=False):if self.time is None or start:self.time = [time()] * 2return self.time[0]tmp_time = self.time[1]self.time[1] = time()return self.time[1] - tmp_timedef _build_optimizer(self, model):optimizer_name = self.optimizer_name.lower()if optimizer_name == 'gd':logging.info("Optimizer: GD")optimizer = torch.optim.SGD(model.customize_parameters(), lr=self.learning_rate, weight_decay=self.l2)elif optimizer_name == 'adagrad':logging.info("Optimizer: Adagrad")optimizer = torch.optim.Adagrad(model.customize_parameters(), lr=self.learning_rate, weight_decay=self.l2)elif optimizer_name == 'adadelta':logging.info("Optimizer: Adadelta")optimizer = torch.optim.Adadelta(model.customize_parameters(), lr=self.learning_rate, weight_decay=self.l2)elif optimizer_name == 'adam':logging.info("Optimizer: Adam")optimizer = torch.optim.Adam(model.customize_parameters(), lr=self.learning_rate, weight_decay=self.l2)else:raise ValueError("Unknown Optimizer: " + self.optimizer_name)return optimizerdef train(self, model, data_dict):main_metric_results, dev_results, test_results = list(), list(), list()self._check_time(start=True)try:for epoch in range(self.epoch):# Fitself._check_time()loss = self.fit(model, data_dict['train'], epoch=epoch + 1)training_time = self._check_time()# Observe selected tensorsif len(model.check_list) > 0 and self.check_epoch > 0 and epoch % self.check_epoch == 0:utils.check(model.check_list)# Record dev and test resultsdev_result = self.evaluate(model, data_dict['dev'], self.topk[:1], self.metrics)test_result = self.evaluate(model, data_dict['test'], self.topk[:1], self.metrics)testing_time = self._check_time()dev_results.append(dev_result)test_results.append(test_result)main_metric_results.append(dev_result[self.main_metric])logging.info("Epoch {:<5} loss={:<.4f} [{:<.1f} s]\t dev=({}) test=({}) [{:<.1f} s] ".format(epoch + 1, loss, training_time, utils.format_metric(dev_result),utils.format_metric(test_result), testing_time))# Save model and early stopif max(main_metric_results) == main_metric_results[-1] or \(hasattr(model, 'stage') and model.stage == 1):model.save_model()if self.early_stop and self.eval_termination(main_metric_results):logging.info("Early stop at %d based on dev result." % (epoch + 1))breakexcept KeyboardInterrupt:logging.info("Early stop manually")exit_here = input("Exit completely without evaluation? (y/n) (default n):")if exit_here.lower().startswith('y'):logging.info(os.linesep + '-' * 45 + ' END: ' + utils.get_time() + ' ' + '-' * 45)exit(1)# Find the best dev result across iterationsbest_epoch = main_metric_results.index(max(main_metric_results))logging.info(os.linesep + "Best Iter(dev)={:>5}\t dev=({}) test=({}) [{:<.1f} s] ".format(best_epoch + 1, utils.format_metric(dev_results[best_epoch]),utils.format_metric(test_results[best_epoch]), self.time[1] - self.time[0]))model.load_model()def fit(self, model, data, epoch=-1):gc.collect()torch.cuda.empty_cache()if model.optimizer is None:model.optimizer = self._build_optimizer(model)data.negative_sampling() # must sample before multi thread startmodel.train()loss_lst = list()dl = DataLoader(data, batch_size=self.batch_size, shuffle=True, num_workers=self.num_workers,collate_fn=data.collate_batch, pin_memory=self.pin_memory)for batch in tqdm(dl, leave=False, desc='Epoch {:<3}'.format(epoch), ncols=100, mininterval=1):batch = utils.batch_to_gpu(batch)model.optimizer.zero_grad()prediction = model(batch)loss = model.loss(prediction)loss.backward()model.optimizer.step()loss_lst.append(loss.detach().cpu().data.numpy())return np.mean(loss_lst)def eval_termination(self, criterion):if len(criterion) > 20 and utils.non_increasing(criterion[-self.early_stop:]):return Trueelif len(criterion) - criterion.index(max(criterion)) > 20:return Truereturn Falsedef evaluate(self, model, data, topks, metrics):"""Evaluate the results for an input dataset.:return: result dict (key: metric@k)"""predictions = self.predict(model, data)return utils.evaluate_method(predictions, topks, metrics)def predict(self, model, data):"""The returned prediction is a 2D-array, each row corresponds to all the candidates,and the ground-truth item poses the first.Example: ground-truth items: [1, 2], 2 negative items for each instance: [[3,4], [5,6]]predictions order: [[1,3,4], [2,5,6]]"""model.eval()predictions = list()dl = DataLoader(data, batch_size=self.eval_batch_size, shuffle=False, num_workers=self.num_workers,collate_fn=data.collate_batch, pin_memory=self.pin_memory)for batch in tqdm(dl, leave=False, ncols=100, mininterval=1, desc='Predict'):prediction = model(utils.batch_to_gpu(batch))predictions.extend(prediction.cpu().data.numpy())return np.array(predictions)def print_res(self, model, data):"""Construct the final result string before/after training:return: test result string"""result_dict = self.evaluate(model, data, self.topk, self.metrics)res_str = '(' + utils.format_metric(result_dict) + ')'return res_str

上面是是 base runner 部分,主要控制整個訓練的流程和評測。通過設置參數控制整個訓練的流程,如check time是一些工具性的函數,通過build_optimizer 去構建具體的優化器。

訓練方面,可以看到主要調用的是 train 函數,去調用后面的fit的函數,對訓練集做參數的更新,它主要解決驗證集上的結果,在測試集上的結果進行一個輸出,看是否在驗證集上達到最好。達到最好的話需要 save model,是否滿足 early_stop 的條件,如果滿足就 break ,這里其實也檢測了手動的 Ctrl C break ,可能訓練到中間的某一個輪次覺得這個明顯不會好,所以就先去掉。

去掉了之后,它會問你是否要真正退出,如果最后想要再評測一下看最后效果、最后的指標,可以不退出,如果連最后指標都不想看,可以完全退出。

最后訓練完,我會找到在驗證集上最優的一輪,去做模型的load ,方便后續進行測試。fit 這部分是剛才 train 中去調用的,代碼都是 pytorch 用戶非常熟悉的。

每一個 batch 參數的更新,前面是準備性工作,包括訓練的時候因為是 top_k 的訓練,應是一個 ranking loss ,會采樣一些負例。這里還會定義 dataloader,dataloader 是 pytorch 內置的類,是 dataset 相應的那個類,它會返回一個迭代器,當你每次去迭代它的時候,它會多線程從 data 中去準備相應的 batch。

這個 batch 具體是什么樣是要靠你在 dataset 類里面去設定的。它會根據參數的不同,是否 shuffle ,每次返回對應的batch,這就相當于是 for dataloader 得到對應的batch之后,讓model 得到 batch prediction 的結果,進行參數的更新,以上就是fit 這部分代碼所做的工作。

def eval_termination 開始這部分是之前調用的、判斷是否 early_stop 的標準,evaluate 這部分這些比較簡單,直接調用 prediction ,得到 predictions 之后,用到工具類中寫到的評測函數去進行評測。這個評測其實也針對目前的 topk 實驗設定進行了相應優化,會讓整個算 NDCG、算 HR 都會非常快。

predict 與 fit 比較像,不需要進行參數的更新,也是定義相應的 dataloader ,每一個 batch 得到預測的結果即可,最后規范輸出的 string 格式。

整個 baserunner 大概不到200行,整個核心框架不到800行,所以說這是一個非常容易上手的框架。上述很多是比較細節的信息,希望幫助新手能更快上手。

class BaseModel(torch.nn.Module):reader = 'BaseReader'runner = 'BaseRunner'extra_log_args = []@staticmethoddef parse_model_args(parser):parser.add_argument('--model_path', type=str, default='',help='Model save path.')parser.add_argument('--num_neg', type=int, default=1,help='The number of negative items during training.')parser.add_argument('--dropout', type=float, default=0.2,help='Dropout probability for each deep layer')parser.add_argument('--buffer', type=int, default=1,help='Whether to buffer feed dicts for dev/test')return parser@staticmethoddef init_weights(m):if 'Linear' in str(type(m)):torch.nn.init.normal_(m.weight, mean=0.0, std=0.01)if m.bias is not None:torch.nn.init.normal_(m.bias, mean=0.0, std=0.01)elif 'Embedding' in str(type(m)):torch.nn.init.normal_(m.weight, mean=0.0, std=0.01)def __init__(self, args, corpus):super(BaseModel, self).__init__()self.model_path = args.model_pathself.num_neg = args.num_negself.dropout = args.dropoutself.buffer = args.bufferself.item_num = corpus.n_itemsself.optimizer = Noneself.check_list = list() # observe tensors in check_list every check_epochself._define_params()self.total_parameters = self.count_variables()logging.info('#params: %d' % self.total_parameters)"""Methods must to override"""def _define_params(self):self.item_bias = torch.nn.Embedding(self.item_num, 1)def forward(self, feed_dict):""":param feed_dict: batch prepared in Dataset:return: prediction with shape [batch_size, n_candidates]"""i_ids = feed_dict['item_id']prediction = self.item_bias(i_ids)return prediction.view(feed_dict['batch_size'], -1)"""Methods optional to override"""def loss(self, predictions):"""BPR ranking loss with optimization on multiple negative samples@{Recurrent neural networks with top-k gains for session-based recommendations}:param predictions: [batch_size, -1], the first column for positive, the rest for negative:return:"""pos_pred, neg_pred = predictions[:, 0], predictions[:, 1:]neg_softmax = (neg_pred - neg_pred.max()).softmax(dim=1)neg_pred = (neg_pred * neg_softmax).sum(dim=1)loss = F.softplus(-(pos_pred - neg_pred)).mean()# ↑ For numerical stability, we use 'softplus(-x)' instead of '-log_sigmoid(x)'return lossdef customize_parameters(self):# customize optimizer settings for different parametersweight_p, bias_p = [], []for name, p in filter(lambda x: x[1].requires_grad, self.named_parameters()):if 'bias' in name:bias_p.append(p)else:weight_p.append(p)optimize_dict = [{'params': weight_p}, {'params': bias_p, 'weight_decay': 0}]return optimize_dict"""Auxiliary methods"""def save_model(self, model_path=None):if model_path is None:model_path = self.model_pathutils.check_dir(model_path)torch.save(self.state_dict(), model_path)logging.info('Save model to ' + model_path[:50] + '...')def load_model(self, model_path=None):if model_path is None:model_path = self.model_pathself.load_state_dict(torch.load(model_path))logging.info('Load model from ' + model_path)def count_variables(self):total_parameters = sum(p.numel() for p in self.parameters() if p.requires_grad)return total_parametersdef actions_before_train(self):passdef actions_after_train(self):pass"""Define dataset class for the model"""

再來看最關鍵basemodel,這涉及到模型具體是怎么實現的。首先用靜態變量的方式指定 reader 和 runner ,指定了它的幫助類是什么,具體用哪個 reader 去讀數據,用哪個 runner 去訓練和評測模型。

這里有一些通用的與模型相關的參數,可以增量的添加。前面是一些與模型相關的參數,包括定義模型里面具體有哪些可學習的參數,prediction 怎么去進行,loss 具體是什么,每個 customize parameters 應該是怎么樣去設置。

后面有一些工具類的函數,再往后是上文提到的把 dataset 的類寫成一個 model 的內部類,目的主要還是希望能在寫模型的過程中,在一個文件里既準備對應的? ?batch,同時定義模型具體在前面怎么forward的。

因為在構建模型時,特別在研究過程中,經常需要變換輸入的信息、輸入的格式,在 forward 中來做相應的這種變換,如果經常需要換文件,或者改動調試,是比較痛苦的,所以考慮把它以內部類的形式呈現。

代碼繼承的 basedataset 其實是 pytorch 中內置的傳給 dataloader 的 dataset ,只是把它改了一個名字,因為這個類本身也想要dataset。如果想用dataset,通過官方方式去使用它的話,一般需要去重寫兩個函數,一個是 len 函數,一個是 getitem 函數。len 函數完成的任務是獲得 basedataset 中存的數據一共有多少個?getitem 是根據給定的 index ,去獲得對應數據中的 index ,要輸入給模型的 batch 。

如何實現這兩個函數?這里面的data是什么?是basereader 讀進來的dataframe ,但是這里為了方便,準備了多線程 batch(dataframe 對于多線程訪問不太友好),所把它轉成一個dict。

class Dataset(BaseDataset):def __init__(self, model, corpus, phase):self.model = modelself.corpus = corpusself.phase = phaseself.data = utils.df_to_dict(corpus.data_df[phase])# ↑ DataFrame is not compatible with multi-thread operationsself.neg_items = None if phase == 'train' else self.data['neg_items']# ↑ Sample negative items before each epoch during trainingself.buffer_dict = dict()self.buffer = self.model.buffer and self.phase != 'train'self._prepare()def __len__(self):for key in self.data:return len(self.data[key])def __getitem__(self, index):return self.buffer_dict[index] if self.buffer else self._get_feed_dict(index)# Prepare model-specific variables and buffer feed dictsdef _prepare(self):if self.buffer:for i in tqdm(range(len(self)), leave=False, ncols=100, mininterval=1,desc=str('Prepare ' + self.phase)):self.buffer_dict[i] = self._get_feed_dict(i)# Key method to construct input data for a single instancedef _get_feed_dict(self, index):target_item = self.data['item_id'][index]neg_items = self.neg_items[index]item_ids = np.concatenate([[target_item], neg_items])feed_dict = {'item_id': item_ids}return feed_dict# Sample negative items for all the instances (called before each epoch)def negative_sampling(self):self.neg_items = np.random.randint(1, self.corpus.n_items, size=(len(self), self.model.num_neg))for i, u in enumerate(self.data['user_id']):user_clicked_set = self.corpus.user_clicked_set[u]for j in range(self.model.num_neg):while self.neg_items[i][j] in user_clicked_set:self.neg_items[i][j] = np.random.randint(1, self.corpus.n_items)# Collate a batch according to the list of feed dictsdef collate_batch(self, feed_dicts):feed_dict = dict()for key in feed_dicts[0]:stack_val = np.array([d[key] for d in feed_dicts])if stack_val.dtype == np.object: # inconsistent length (e.g. history)feed_dict[key] = pad_sequence([torch.from_numpy(x) for x in stack_val], batch_first=True)else:feed_dict[key] = torch.from_numpy(stack_val)feed_dict['batch_size'] = len(feed_dicts)feed_dict['phase'] = self.phasereturn feed_dict

上面的代碼是我主要的 data ,確定phase具體在哪個階段,是train 的階段還是在評測 validation 、test 階段。

len 部分直接獲得了data的長度,被很多人吐槽,把data變成了一個dict的形式,它本身是一個data frame,每一列的長度是一樣的,直接返回了第一列的長度。

getitem主要的功能放在 get_feed_dict 里面去完成。這是根據是否需要 buffer 去做選擇。在數據集比較小的時候,如果條件允許的話,對于驗證集跟測試集,完全可以把它所有的 batch 提前準備好放在內存里,這樣訓練、測試就會更快一些。如果不去 buffer 的話,每次現場做準備都要重復工作。

get_feed_dict 主要給index 返回對應的 predict ,也就是輸入到模型的 batch 。base model 本來可能是抽象的,但還是把它寫成可以運行的類。模型之后可以回返回來再看,根據給定的每一個 item ID ,去定義每個 item ID 對應的 bias ,然后直接把輸出的 bias 作為預測的值。所以在這要為它準備 item ID ,target_item ID可以直接從data中item ID的類直接取出即可。

我們會提前準備好負例。訓練集通過函數在每一輪之前進行采樣。可以通過這一步從成員變量中直接獲得對應的負例,并和target一起傳到模型里,相當于返回了每一個index 對應的 free_dict 。而要傳遞模型的一個 batch 相當于一個群組,好多index 組成一個 batch ,也相當于一個 free_dict 的list 來組成一個 batch ,等于把相同的 key 當中的 value 組合到了一起。

注意看代碼部分默認帶有函數,由于后面可能涉及到不同的歷史、長度,這里需要做動態的pad,這部分也重寫了一些。當然,如果檢測到序列的長度不一致,也會進行一個填充的操作,填充到同樣的長度。也可以去添加一些整體上的控制變量。

以上這部分這是 dataset 比較重要的一部分,控制了怎么去給模型輸入,包含了每個 batch 必須要有的內容。

可以再看看整體的模型, item_bias 部分對于我輸入的 item_ID ,可以直接取對應的 bias 作為 prediction ,進而返回對應的 prediction 結果。

到這一部分,其實整個框架已經完成了對使用者的幫助工作。全部的代碼量非常少,所以使用者可以很快上手。

2.3?實例演示

看完以上的引導,還是不知道怎么創建新模型怎么辦?下面繼續手把手教到底,通過一段視頻教大家怎么基于框架在 5 分鐘時間里實現一個 BPR。

看完快速上手視頻,我們對整個框架做完了比較細致的梳理,希望能夠幫助大家更好地上手、更好地使用它。

相關論文方法介紹

下面準備了一些相關具體算法的介紹,也是我們最近一項工作的介紹,可能比較偏模型、偏理論一些。

上圖是我們現在所實現的模型的性能對比,可以看到,基于深度模型的NCF,如果在調參調得不好的情況下,比 BPR 還要差很多。引入了時間信息的 Tensor ,效果會有明顯提升。對于序列的模型來說,因為有序列的信息效果是不錯的。

我們逐一簡單講一講:

1. SASRec 基于 self_attention,如果好好調參,效果確實會非常好。

2. TiSASRec是今年剛提出來的,把時間間隔用embedding的方式去融入到self_attention,也能取得稍微更好一點點的結果,但它的運行時間就會多很多。

3. CFKG 則是一個融入知識圖譜的推薦,效果也是很不錯的。

4. 最后兩個模型,是把知識圖譜、時間相關,還有序列的信息都用進來,也獲得非常好的結果。

接著介紹一下,這里面表現最好的模型,大概是一個什么樣的結構。

這是我們團隊在SIGIR的論文:Make It a Chorus:Knowledge-and Time-aware Item Modeling for Sequential Recommendation

首先是motivation,做這項工作的目的在于,我們感覺現在的推薦系統有很多問題。舉個例子,我剛買完手機,你認為我會很喜歡電子產品,所以就會推薦很多款手機,但其實我此時已經不需要了。

如果比較智能的算法,可能會去推薦Air Pods,作為配件而言,我對它的需求可能會提升。但是這樣的智能可能還是不夠,如果我已經在其他平臺上買過無線耳機,我現在也就不需要無線耳機,系統可能覺得我需要,但是我實際不需要。我剛開始可能覺得系統挺智能的,但是如果一直去推Air Pods,我會覺得很蠢。

不同的推薦應該會隨著時間有一定的衰減,所以這篇文章所提出來的主要想法,就是每一個item可能在不同的context下,在不同的時間下,扮演不同的角色。

還有一些具體的例子,如果我之前買的是iphone,它對于目標商品Air Pods有沒有互補的關系?它對我購買Air Pods影響應該短期內是正的,但會隨時間慢慢遞減的影響。而如果我之前買的商品是Air Pods同類商品,是替代品Powerbeats,那么短期內應該是有負向的影響,但是隨著時間的增長,可能到該換耳機的時候,反而會得到正向的影響,是分配時間和負向變化正向的這樣的一個過程。

具體怎么去設計這個模型?我們想讓模型在item扮演不同角色的時候,有不一樣的靜態表示,比如在context下扮演互補品、替代品的時候是怎樣的角色。然后根據序列的情況,把這些靜態的表示,與現在有沒有在扮演這個角色進行動態結合,包括之間間隔的時間,每一個扮演的角色有可能有正向、負向影響或者不起作用。例如給AirPods一個基本的表示,還有作為互補品的表示,作為替代品的表示,在不同context下就會都會起到更多的作用,下圖是具體的模型圖。


上圖左邊部分,進行了知識圖譜嵌入,但這其實并不是工作重點,所以我們用了一個比較常見的關系建模,對商品之間的關系進行向量的切入,這些向量也會作為每個商品的基本表示進行數據化。

上圖右半部分是第二個階段,基于左邊的表示,即對每個商品有很基本的表示,我們還希望得到它跟relation相關的表示,通過這樣的translation,在第一個階段里面使用的translation方式,去得到扮演不同角色時的靜態表示,這樣對于每一個商品,都有了基本表示和扮演不同角色時的表示。

這時候,就需要根據 context 去對它們做動態加和,用到叫做 time_aware integration weight 的方法,它是怎么設計的呢?就是去挑選歷史里面跟目標商品有關系的歷史交互,看它們對我的影響到底是什么,這個具體的影響有一個稱為temporal kernel function 設計的函數去控制,是一個疊加的效應。

temporal kernel function 的方式怎么設計?其實會根據先驗知識,或者是希望這個系統展現出來一個什么樣的效果去設計,比如對于互補品設計成遞減,對于替代品則是從負向到正向的變化,這樣能控制扮演不同角色時的靜態 embedding 在整個動態的結合過程中所做的貢獻。

基于這樣動態表示,就等于得到了一個目標商品在目前context下的動態表示,這個表示可以用到很多基于embedding模型里面,比如像BPR、GMF最后會統一去ranking loss。

上圖是大概數據的信息,和剛才所提到的兩種關系。

上圖是實驗結果,大致情況是我們的模型能夠比之前所提到的引入知識、引入時間動態性的模型有比較明顯的提升。

上圖是 relation 的分析,圖中的\R跟\T分別是去掉第一階段的 knowledge graph 和第二階段的 temporal kernel function ,不考慮時間動態變化的影響。可以看到,影響最大的還是商品關系所帶來的,但是有時候商品關系可能處理得不好,這個時候動態結果就起到很大作用,如果不對不同的關系做時間動態變化的結合,\T會帶來非常嚴重的損失,所以時間在所有數據上也有比較一致的提升。

最后,有趣的是,我們看了不同類型商品所求出的 temporal kernel function 方式長什么樣?是否反映該類商品的一些特征?

上圖左邊是互補品求出來的 temporal kernel function ,它相較于可替代商品,下降曲線會更緩一些。這說明什么?說明可能用戶過了一段時間之后,還會對這種可替代商品,比如替換的電池和之前老的智能手機還有興趣,有可能過很長時間才會換。

而對于頭戴式耳機來說,interest 下降就會非常快。就像上文提到的,有可能這個耳機我就不需要了,所以這個分數很快降下來,而不會過多打擾到用戶。

上圖右邊是替代品的 temporal kernel function 方式寫出來的結果。對于像手機殼這一類商品,它的負向影響基本上被削平了,主要是正向的影響,使得它的峰值會不太一樣。這說明了,之前購買手機殼的行為對于購買下一個手機殼,其實沒有很多負向影響。用戶可能因為很多原因去換手機殼,比如摔壞了一個角,或者只是看到外觀就換了,所以負向影響非常少。

而對于充電器、手機,它的負向影響和正向影響都非常明顯。比較奇妙的是,兩者峰值大概都處于一個位置,這其實也說明它倆是有一定依賴關系,因為可能不同的類型的手機配不同類型的充電頭,反映了商品內部的這種關聯。

這個模型在我們現在的框架中表現也是比較突出的。總結來說,這種模型主要提出了對于目標商品的動態表示,能夠比較方便運用到各種基于 embedding 的方法中,并且進一步提升模型的性能等。

總結

最后做個總結,我們介紹 ReChorus 這種 top k 推薦框架,它目前會比較適合兩類人群:作為初學者,可能想要了解一些經典推薦系統相關的算法,可以通過它去快速了解經典算法具體是怎么實現的;對于研究者來說,也可用它來測試一些新的idea,比較模型的性能。

但現在我覺得 ReChorus 還有很多的問題,包括只有一個內置數據集去比較,可能某些實驗設定上還需要進一步提煉,比如最近一篇 ACL best paper 提出的思路,用類似軟工的形式進行NLP的全面評測。不知道之后推薦系統方向是否會有相應的內容。

ReChorus 未來存在很多可以改善的空間,也非常歡迎廣大同行研究者們提交 issue 來完善這個框架,共同構建真正的推薦算法的“合唱團”,不僅僅實現表面上的百花齊放(大量論文的涌現),也去真正推動這個領域一步一個腳印、實打實地進步。

關于數據實戰派

數據實戰派希望用真實數據和行業實戰案例,幫助讀者提升業務能力,共建有趣的大數據社區。

更多閱讀

#投 稿?通 道#

?讓你的論文被更多人看到?

如何才能讓更多的優質內容以更短路徑到達讀者群體,縮短讀者尋找優質內容的成本呢?答案就是:你不認識的人。

總有一些你不認識的人,知道你想知道的東西。PaperWeekly 或許可以成為一座橋梁,促使不同背景、不同方向的學者和學術靈感相互碰撞,迸發出更多的可能性。?

PaperWeekly 鼓勵高校實驗室或個人,在我們的平臺上分享各類優質內容,可以是最新論文解讀,也可以是學習心得技術干貨。我們的目的只有一個,讓知識真正流動起來。

?????來稿標準:

? 稿件確系個人原創作品,來稿需注明作者個人信息(姓名+學校/工作單位+學歷/職位+研究方向)?

? 如果文章并非首發,請在投稿時提醒并附上所有已發布鏈接?

? PaperWeekly 默認每篇文章都是首發,均會添加“原創”標志

?????投稿郵箱:

? 投稿郵箱:hr@paperweekly.site?

? 所有文章配圖,請單獨在附件中發送?

? 請留下即時聯系方式(微信或手機),以便我們在編輯發布時和作者溝通

????

現在,在「知乎」也能找到我們了

進入知乎首頁搜索「PaperWeekly」

點擊「關注」訂閱我們的專欄吧

關于PaperWeekly

PaperWeekly 是一個推薦、解讀、討論、報道人工智能前沿論文成果的學術平臺。如果你研究或從事 AI 領域,歡迎在公眾號后臺點擊「交流群」,小助手將把你帶入 PaperWeekly 的交流群里。

總結

以上是生活随笔為你收集整理的清华大学王晨阳:轻量级Top-K推荐框架及相关论文介绍的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

欧美黑人乱大交 | 少妇被粗大的猛进出69影院 | 日本乱偷人妻中文字幕 | 久久综合九色综合97网 | 大地资源中文第3页 | 日本欧美一区二区三区乱码 | 中文字幕人妻无码一区二区三区 | 黄网在线观看免费网站 | 精品人妻中文字幕有码在线 | 久久人人爽人人爽人人片ⅴ | 六月丁香婷婷色狠狠久久 | 欧美激情内射喷水高潮 | 国产成人人人97超碰超爽8 | 日韩精品无码一本二本三本色 | 日日鲁鲁鲁夜夜爽爽狠狠 | 久久久久久久人妻无码中文字幕爆 | 国产亚洲精品精品国产亚洲综合 | 国产精品美女久久久久av爽李琼 | 国产色精品久久人妻 | 欧美大屁股xxxxhd黑色 | aa片在线观看视频在线播放 | 久久亚洲精品中文字幕无男同 | 天堂久久天堂av色综合 | 少妇无码av无码专区在线观看 | 亚洲区欧美区综合区自拍区 | 久久久久亚洲精品男人的天堂 | 无套内谢老熟女 | 亚洲日韩av一区二区三区四区 | 国产极品美女高潮无套在线观看 | 国产精品人人妻人人爽 | 欧美丰满熟妇xxxx性ppx人交 | 国产精品第一区揄拍无码 | 亚洲午夜福利在线观看 | 国产成人无码区免费内射一片色欲 | 国产在热线精品视频 | 精品人妻中文字幕有码在线 | 波多野结衣av一区二区全免费观看 | 婷婷丁香五月天综合东京热 | 成人三级无码视频在线观看 | 国产精品人妻一区二区三区四 | 国产精品久久久久久久影院 | 亚洲综合在线一区二区三区 | 色一情一乱一伦一区二区三欧美 | 久久99精品久久久久久动态图 | 欧美野外疯狂做受xxxx高潮 | 狠狠色欧美亚洲狠狠色www | 日日摸日日碰夜夜爽av | 人妻与老人中文字幕 | 国产成人午夜福利在线播放 | 性啪啪chinese东北女人 | 无码国内精品人妻少妇 | 奇米影视7777久久精品人人爽 | 蜜臀av在线观看 在线欧美精品一区二区三区 | 99久久精品日本一区二区免费 | 在线观看国产一区二区三区 | 国产午夜亚洲精品不卡下载 | 四虎4hu永久免费 | 西西人体www44rt大胆高清 | 97无码免费人妻超级碰碰夜夜 | 亚洲欧美中文字幕5发布 | 一个人看的www免费视频在线观看 | 又粗又大又硬毛片免费看 | 精品久久久久久人妻无码中文字幕 | 亚洲s色大片在线观看 | 国产人成高清在线视频99最全资源 | 亚洲精品综合一区二区三区在线 | 亚洲人成网站在线播放942 | 国产亚洲人成a在线v网站 | 亚洲自偷精品视频自拍 | 奇米影视888欧美在线观看 | 久久精品一区二区三区四区 | 日韩 欧美 动漫 国产 制服 | 小泽玛莉亚一区二区视频在线 | 久久久无码中文字幕久... | 色五月五月丁香亚洲综合网 | 精品无码国产一区二区三区av | 久久久精品成人免费观看 | 中文字幕av无码一区二区三区电影 | 99久久99久久免费精品蜜桃 | 粗大的内捧猛烈进出视频 | 天堂在线观看www | 国产精品鲁鲁鲁 | 日日天干夜夜狠狠爱 | 国产精品亚洲专区无码不卡 | 一本久道久久综合婷婷五月 | 亚洲国产成人a精品不卡在线 | 国内精品久久毛片一区二区 | 色综合视频一区二区三区 | 中文毛片无遮挡高清免费 | 国产片av国语在线观看 | 999久久久国产精品消防器材 | 亚洲呦女专区 | 丝袜美腿亚洲一区二区 | 好男人www社区 | 天天av天天av天天透 | 夜夜高潮次次欢爽av女 | 欧美性猛交内射兽交老熟妇 | 日韩 欧美 动漫 国产 制服 | 亚洲精品国偷拍自产在线麻豆 | 欧美丰满熟妇xxxx | 激情内射亚州一区二区三区爱妻 | 久久久亚洲欧洲日产国码αv | 兔费看少妇性l交大片免费 | 青草青草久热国产精品 | 久久久久久久久888 | 性欧美熟妇videofreesex | 亚洲 激情 小说 另类 欧美 | 国产在线无码精品电影网 | 国产免费观看黄av片 | 精品久久久久久亚洲精品 | 老头边吃奶边弄进去呻吟 | 亚洲综合无码一区二区三区 | 国产精品美女久久久久av爽李琼 | 人妻夜夜爽天天爽三区 | 国产亚av手机在线观看 | 国产成人一区二区三区在线观看 | 国产福利视频一区二区 | 中文字幕无码免费久久9一区9 | 亚洲大尺度无码无码专区 | 亚洲精品一区二区三区大桥未久 | 中文字幕 人妻熟女 | 丰满肥臀大屁股熟妇激情视频 | 精品国产一区二区三区四区 | 亚洲国产综合无码一区 | 蜜桃无码一区二区三区 | 日日噜噜噜噜夜夜爽亚洲精品 | 久久久久99精品国产片 | 麻豆国产人妻欲求不满谁演的 | 中文无码精品a∨在线观看不卡 | 人妻互换免费中文字幕 | 午夜福利试看120秒体验区 | 亚洲精品美女久久久久久久 | 乱码av麻豆丝袜熟女系列 | 中文字幕无码免费久久99 | 日本爽爽爽爽爽爽在线观看免 | 亚洲日韩一区二区三区 | 国产女主播喷水视频在线观看 | 四虎4hu永久免费 | 午夜熟女插插xx免费视频 | 2020久久超碰国产精品最新 | 亚洲中文字幕成人无码 | 红桃av一区二区三区在线无码av | 狠狠噜狠狠狠狠丁香五月 | 欧美日韩色另类综合 | 久久综合九色综合欧美狠狠 | 国产成人无码av一区二区 | 精品欧美一区二区三区久久久 | 蜜桃臀无码内射一区二区三区 | 亚无码乱人伦一区二区 | 亚洲成a人片在线观看无码3d | 人妻插b视频一区二区三区 | 红桃av一区二区三区在线无码av | 亚洲色大成网站www | 亚洲日韩中文字幕在线播放 | 波多野结衣 黑人 | 青草视频在线播放 | 乱人伦中文视频在线观看 | 欧美丰满老熟妇xxxxx性 | 国产在线一区二区三区四区五区 | 亚洲熟妇色xxxxx欧美老妇y | 无码人妻精品一区二区三区下载 | 免费看少妇作爱视频 | 中文字幕色婷婷在线视频 | 扒开双腿疯狂进出爽爽爽视频 | 国产精品成人av在线观看 | 台湾无码一区二区 | 国精产品一区二区三区 | 日韩少妇内射免费播放 | 人妻有码中文字幕在线 | 性生交片免费无码看人 | 初尝人妻少妇中文字幕 | 久久精品视频在线看15 | 久久精品人人做人人综合 | 国产精品香蕉在线观看 | 亚洲 欧美 激情 小说 另类 | 亚洲欧美综合区丁香五月小说 | 欧美黑人乱大交 | 中文无码成人免费视频在线观看 | 麻豆果冻传媒2021精品传媒一区下载 | 狠狠色噜噜狠狠狠狠7777米奇 | 国产真人无遮挡作爱免费视频 | 亚洲人成网站在线播放942 | 300部国产真实乱 | 中文字幕无码人妻少妇免费 | 国产午夜视频在线观看 | 人妻有码中文字幕在线 | 帮老师解开蕾丝奶罩吸乳网站 | 欧美阿v高清资源不卡在线播放 | 国产两女互慰高潮视频在线观看 | 少妇无套内谢久久久久 | 大地资源中文第3页 | 最近中文2019字幕第二页 | 精品成人av一区二区三区 | 乌克兰少妇性做爰 | 亚洲精品一区三区三区在线观看 | 亚洲国产午夜精品理论片 | 国产精品香蕉在线观看 | 中文字幕 人妻熟女 | 色五月丁香五月综合五月 | 99国产精品白浆在线观看免费 | 东京一本一道一二三区 | 熟女少妇人妻中文字幕 | 欧美人与禽zoz0性伦交 | 无码福利日韩神码福利片 | 国产精品久久久一区二区三区 | 亚洲阿v天堂在线 | 久久综合给久久狠狠97色 | 国产午夜精品一区二区三区嫩草 | 国产成人人人97超碰超爽8 | 国色天香社区在线视频 | 国产片av国语在线观看 | av香港经典三级级 在线 | 亚洲日韩av一区二区三区中文 | 亚洲国产成人a精品不卡在线 | 永久免费精品精品永久-夜色 | 亚洲午夜福利在线观看 | 久久 国产 尿 小便 嘘嘘 | 国产凸凹视频一区二区 | 亚欧洲精品在线视频免费观看 | 亚洲区小说区激情区图片区 | 人妻互换免费中文字幕 | 欧美变态另类xxxx | 强伦人妻一区二区三区视频18 | 美女扒开屁股让男人桶 | 久久久久亚洲精品中文字幕 | 日日噜噜噜噜夜夜爽亚洲精品 | 色窝窝无码一区二区三区色欲 | 国产一区二区三区四区五区加勒比 | 99麻豆久久久国产精品免费 | 麻豆精品国产精华精华液好用吗 | 亚洲中文字幕va福利 | 久久午夜无码鲁丝片 | 欧美zoozzooz性欧美 | 国产香蕉尹人综合在线观看 | 亚洲一区二区三区在线观看网站 | 国产一区二区三区精品视频 | 国产在线aaa片一区二区99 | 国产亚洲视频中文字幕97精品 | 波多野结衣乳巨码无在线观看 | 99久久人妻精品免费一区 | 午夜无码区在线观看 | 欧美亚洲国产一区二区三区 | 樱花草在线播放免费中文 | 亚洲日韩av一区二区三区四区 | 久久精品国产大片免费观看 | 色婷婷综合中文久久一本 | 波多野结衣av一区二区全免费观看 | 国产三级精品三级男人的天堂 | 日韩av无码一区二区三区不卡 | 色欲久久久天天天综合网精品 | 国产精品高潮呻吟av久久 | 亚洲娇小与黑人巨大交 | 午夜免费福利小电影 | 久9re热视频这里只有精品 | 中文字幕av无码一区二区三区电影 | 中文字幕人妻无码一区二区三区 | √天堂资源地址中文在线 | 一本久久伊人热热精品中文字幕 | 在线天堂新版最新版在线8 | 内射爽无广熟女亚洲 | 一本久道久久综合狠狠爱 | 亚洲 日韩 欧美 成人 在线观看 | 亚洲区小说区激情区图片区 | 麻豆国产人妻欲求不满谁演的 | 最新版天堂资源中文官网 | 欧美亚洲国产一区二区三区 | 麻豆人妻少妇精品无码专区 | 国产午夜精品一区二区三区嫩草 | 亚洲国产欧美日韩精品一区二区三区 | 131美女爱做视频 | 少妇激情av一区二区 | 国产精品久久精品三级 | 扒开双腿吃奶呻吟做受视频 | 久久午夜无码鲁丝片 | 久久亚洲日韩精品一区二区三区 | 欧美肥老太牲交大战 | 国产人妻精品午夜福利免费 | 精品人妻中文字幕有码在线 | 四虎国产精品免费久久 | 性欧美疯狂xxxxbbbb | 少妇被黑人到高潮喷出白浆 | 高中生自慰www网站 | 久久精品一区二区三区四区 | 88国产精品欧美一区二区三区 | 永久免费精品精品永久-夜色 | 东京热一精品无码av | 国产乱码精品一品二品 | 亚洲成a人片在线观看无码 | 亚洲男女内射在线播放 | 亚洲无人区午夜福利码高清完整版 | 午夜无码人妻av大片色欲 | 亚洲日本一区二区三区在线 | 秋霞特色aa大片 | 国产精品久久久久无码av色戒 | 日韩精品a片一区二区三区妖精 | 亚洲一区二区三区 | 中文字幕亚洲情99在线 | 国产av一区二区三区最新精品 | 亚洲午夜久久久影院 | 亚洲一区二区三区无码久久 | 午夜精品久久久内射近拍高清 | 成人aaa片一区国产精品 | 国产人妖乱国产精品人妖 | 台湾无码一区二区 | 日日碰狠狠躁久久躁蜜桃 | 亚洲人成人无码网www国产 | 午夜精品久久久久久久久 | 国产精品va在线观看无码 | 牲交欧美兽交欧美 | 人妻少妇精品久久 | 亚洲va欧美va天堂v国产综合 | 内射爽无广熟女亚洲 | 波多野结衣高清一区二区三区 | 欧美变态另类xxxx | 99精品国产综合久久久久五月天 | 国产av久久久久精东av | 1000部啪啪未满十八勿入下载 | 国产美女精品一区二区三区 | 大肉大捧一进一出视频出来呀 | 少妇性l交大片欧洲热妇乱xxx | 真人与拘做受免费视频 | 国产乱人伦app精品久久 国产在线无码精品电影网 国产国产精品人在线视 | 欧洲美熟女乱又伦 | 久久视频在线观看精品 | 牲欲强的熟妇农村老妇女视频 | 国产xxx69麻豆国语对白 | 综合网日日天干夜夜久久 | 亚洲精品久久久久中文第一幕 | 成人综合网亚洲伊人 | 中文字幕无线码 | 麻豆国产丝袜白领秘书在线观看 | 久久精品99久久香蕉国产色戒 | 77777熟女视频在线观看 а天堂中文在线官网 | 久久伊人色av天堂九九小黄鸭 | 国产午夜无码视频在线观看 | 99久久无码一区人妻 | 美女张开腿让人桶 | 在线播放免费人成毛片乱码 | 撕开奶罩揉吮奶头视频 | 一本久道久久综合狠狠爱 | 色欲久久久天天天综合网精品 | 久久精品女人天堂av免费观看 | 国产午夜无码精品免费看 | 一本精品99久久精品77 | 欧美怡红院免费全部视频 | 欧美丰满少妇xxxx性 | 东京一本一道一二三区 | 四虎永久在线精品免费网址 | 成人片黄网站色大片免费观看 | 日韩视频 中文字幕 视频一区 | 亚洲成熟女人毛毛耸耸多 | 97夜夜澡人人双人人人喊 | 88国产精品欧美一区二区三区 | 人妻天天爽夜夜爽一区二区 | 国产精品永久免费视频 | 老子影院午夜精品无码 | 日韩av无码一区二区三区 | 国产成人精品视频ⅴa片软件竹菊 | 亚洲天堂2017无码中文 | 亚洲一区二区三区无码久久 | 日韩 欧美 动漫 国产 制服 | 久久精品国产大片免费观看 | 国产精品资源一区二区 | 亚洲gv猛男gv无码男同 | 亚无码乱人伦一区二区 | 国产精品久免费的黄网站 | 中文字幕色婷婷在线视频 | 国产肉丝袜在线观看 | 帮老师解开蕾丝奶罩吸乳网站 | 欧美变态另类xxxx | 无码国产激情在线观看 | 思思久久99热只有频精品66 | 欧美真人作爱免费视频 | 中文字幕无码热在线视频 | 精品人妻人人做人人爽 | 亚洲狠狠婷婷综合久久 | 中文字幕日产无线码一区 | 国产超级va在线观看视频 | 精品夜夜澡人妻无码av蜜桃 | 台湾无码一区二区 | 免费看少妇作爱视频 | 欧洲vodafone精品性 | 成熟人妻av无码专区 | 国产乡下妇女做爰 | 亚洲熟妇色xxxxx欧美老妇y | 中文字幕av伊人av无码av | 久久久亚洲欧洲日产国码αv | 成人综合网亚洲伊人 | 色窝窝无码一区二区三区色欲 | 高清不卡一区二区三区 | 无码人妻丰满熟妇区毛片18 | 老熟女重囗味hdxx69 | 精品国产一区二区三区av 性色 | 澳门永久av免费网站 | 99久久久无码国产aaa精品 | 亚拍精品一区二区三区探花 | 国产无遮挡又黄又爽免费视频 | 在线观看欧美一区二区三区 | 国产超碰人人爽人人做人人添 | 人人妻人人澡人人爽人人精品浪潮 | 欧美日韩色另类综合 | 国内精品久久毛片一区二区 | 极品尤物被啪到呻吟喷水 | 伊人久久大香线蕉亚洲 | 久久久国产精品无码免费专区 | 中文字幕乱码人妻二区三区 | 久久亚洲精品中文字幕无男同 | ass日本丰满熟妇pics | 精品无码成人片一区二区98 | 爱做久久久久久 | 色窝窝无码一区二区三区色欲 | 日韩 欧美 动漫 国产 制服 | 老熟妇乱子伦牲交视频 | 中文字幕久久久久人妻 | 欧美日本精品一区二区三区 | 少妇高潮一区二区三区99 | 天天av天天av天天透 | 熟妇女人妻丰满少妇中文字幕 | 国产特级毛片aaaaaa高潮流水 | 久久国产劲爆∧v内射 | 国产一区二区三区精品视频 | 99精品国产综合久久久久五月天 | 男女爱爱好爽视频免费看 | 国产办公室秘书无码精品99 | 狠狠cao日日穞夜夜穞av | 久久亚洲国产成人精品性色 | 精品国产青草久久久久福利 | 欧美国产日韩亚洲中文 | 午夜精品久久久久久久 | 夫妻免费无码v看片 | 人妻无码久久精品人妻 | 玩弄中年熟妇正在播放 | 成人欧美一区二区三区 | 日日橹狠狠爱欧美视频 | 无码吃奶揉捏奶头高潮视频 | 久久国产精品精品国产色婷婷 | 成人精品视频一区二区三区尤物 | 黑人粗大猛烈进出高潮视频 | 九九久久精品国产免费看小说 | 国产真人无遮挡作爱免费视频 | 欧美一区二区三区 | 六十路熟妇乱子伦 | 色综合久久中文娱乐网 | 粉嫩少妇内射浓精videos | 国产手机在线αⅴ片无码观看 | 精品人妻人人做人人爽夜夜爽 | 欧美成人免费全部网站 | 欧美乱妇无乱码大黄a片 | 东京一本一道一二三区 | 人人超人人超碰超国产 | 亚洲熟妇色xxxxx亚洲 | 18无码粉嫩小泬无套在线观看 | 亚洲色欲色欲欲www在线 | 亚欧洲精品在线视频免费观看 | 久久久久久久女国产乱让韩 | 精品久久久无码人妻字幂 | 少妇无码av无码专区在线观看 | 97精品人妻一区二区三区香蕉 | 国产情侣作爱视频免费观看 | 性生交片免费无码看人 | 亚洲精品国产精品乱码不卡 | 中文字幕无线码免费人妻 | 国产高清av在线播放 | 亚洲综合精品香蕉久久网 | 日本精品人妻无码免费大全 | 无码人妻出轨黑人中文字幕 | 亚洲成av人综合在线观看 | 国产一区二区三区四区五区加勒比 | 国产亚洲精品久久久久久久 | 人人爽人人爽人人片av亚洲 | 99久久精品午夜一区二区 | 黑人大群体交免费视频 | 国产精品久久久久7777 | 亚洲欧洲日本无在线码 | 国产9 9在线 | 中文 | 乌克兰少妇性做爰 | 欧美黑人巨大xxxxx | 国产人妻人伦精品 | 一个人看的视频www在线 | 久久这里只有精品视频9 | 亚洲精品综合五月久久小说 | 国产精品亚洲综合色区韩国 | 妺妺窝人体色www婷婷 | 鲁鲁鲁爽爽爽在线视频观看 | 亚洲精品久久久久avwww潮水 | 国产精品多人p群无码 | 婷婷丁香五月天综合东京热 | 麻豆精品国产精华精华液好用吗 | 亚洲精品久久久久avwww潮水 | 午夜精品久久久久久久 | 日韩欧美成人免费观看 | 亚洲欧洲无卡二区视頻 | 性生交片免费无码看人 | 国产成人一区二区三区在线观看 | 久久99精品久久久久婷婷 | a在线观看免费网站大全 | 亚洲毛片av日韩av无码 | 亚洲中文字幕无码一久久区 | 福利一区二区三区视频在线观看 | 最新版天堂资源中文官网 | 亚洲日韩av片在线观看 | 亚洲性无码av中文字幕 | 黑人玩弄人妻中文在线 | 天天摸天天透天天添 | 免费看少妇作爱视频 | 人人妻人人澡人人爽欧美一区 | 亚洲国产精品久久人人爱 | 一二三四社区在线中文视频 | 无码人妻久久一区二区三区不卡 | 嫩b人妻精品一区二区三区 | 国精品人妻无码一区二区三区蜜柚 | 男女超爽视频免费播放 | 国产精品人妻一区二区三区四 | 国产特级毛片aaaaaaa高清 | 国产美女极度色诱视频www | 国产农村妇女aaaaa视频 撕开奶罩揉吮奶头视频 | 7777奇米四色成人眼影 | 久久婷婷五月综合色国产香蕉 | 亚洲欧美精品aaaaaa片 | 野外少妇愉情中文字幕 | 无码国产色欲xxxxx视频 | 亚洲无人区午夜福利码高清完整版 | 亚洲综合无码久久精品综合 | 成 人影片 免费观看 | 乱人伦人妻中文字幕无码久久网 | 精品久久久久久亚洲精品 | 搡女人真爽免费视频大全 | 日日摸夜夜摸狠狠摸婷婷 | 亚洲男人av天堂午夜在 | 久久婷婷五月综合色国产香蕉 | 亚洲乱码日产精品bd | aⅴ亚洲 日韩 色 图网站 播放 | 少妇性l交大片欧洲热妇乱xxx | 久久婷婷五月综合色国产香蕉 | 国产精品无码成人午夜电影 | 捆绑白丝粉色jk震动捧喷白浆 | 99麻豆久久久国产精品免费 | 图片小说视频一区二区 | 疯狂三人交性欧美 | 樱花草在线播放免费中文 | 欧美性色19p | 成人综合网亚洲伊人 | 老熟妇仑乱视频一区二区 | 7777奇米四色成人眼影 | 一本久久伊人热热精品中文字幕 | 欧美阿v高清资源不卡在线播放 | 亚洲成熟女人毛毛耸耸多 | 亚洲中文字幕av在天堂 | 亚洲日韩av一区二区三区中文 | 国内精品人妻无码久久久影院蜜桃 | 午夜精品一区二区三区在线观看 | 久久午夜无码鲁丝片午夜精品 | 伊人久久大香线蕉av一区二区 | 久久久精品成人免费观看 | 久久精品中文字幕大胸 | 久久精品一区二区三区四区 | 中文字幕无码人妻少妇免费 | 日本一区二区三区免费播放 | 76少妇精品导航 | 老子影院午夜伦不卡 | 人妻人人添人妻人人爱 | 最新国产乱人伦偷精品免费网站 | a国产一区二区免费入口 | 欧美性色19p | 国产精品理论片在线观看 | 国色天香社区在线视频 | 久久久av男人的天堂 | 无码精品人妻一区二区三区av | 天天拍夜夜添久久精品大 | 国产明星裸体无码xxxx视频 | 爆乳一区二区三区无码 | 极品尤物被啪到呻吟喷水 | 粗大的内捧猛烈进出视频 | 暴力强奷在线播放无码 | 野外少妇愉情中文字幕 | 福利一区二区三区视频在线观看 | 人人澡人摸人人添 | 无码国模国产在线观看 | 亚洲精品欧美二区三区中文字幕 | 日韩在线不卡免费视频一区 | 色情久久久av熟女人妻网站 | 日本一本二本三区免费 | 国产精品鲁鲁鲁 | 亚洲成色www久久网站 | 亚洲日韩av片在线观看 | 亚洲人成网站免费播放 | 国产网红无码精品视频 | 日本一区二区更新不卡 | 久久99国产综合精品 | 亚洲成av人片天堂网无码】 | 亚洲成色在线综合网站 | 高潮毛片无遮挡高清免费视频 | 午夜福利不卡在线视频 | 思思久久99热只有频精品66 | 亚洲精品综合五月久久小说 | aⅴ亚洲 日韩 色 图网站 播放 | 色综合久久88色综合天天 | 国产在线精品一区二区高清不卡 | 性色欲网站人妻丰满中文久久不卡 | 国产小呦泬泬99精品 | 东京一本一道一二三区 | 亚洲男人av香蕉爽爽爽爽 | 久久精品国产99久久6动漫 | 人人爽人人澡人人高潮 | 影音先锋中文字幕无码 | 97夜夜澡人人双人人人喊 | 国产av一区二区三区最新精品 | 波多野结衣aⅴ在线 | 国产精品无码一区二区桃花视频 | 99久久久国产精品无码免费 | 久久久久久久人妻无码中文字幕爆 | 网友自拍区视频精品 | 亚洲成色在线综合网站 | 宝宝好涨水快流出来免费视频 | 亚洲国产综合无码一区 | 欧美日本日韩 | 精品人人妻人人澡人人爽人人 | 在线播放免费人成毛片乱码 | 亚洲热妇无码av在线播放 | 久久久久久av无码免费看大片 | 欧美日韩视频无码一区二区三 | 中文字幕人妻无码一区二区三区 | 亚洲中文字幕av在天堂 | 一本色道婷婷久久欧美 | 亚洲色偷偷偷综合网 | 亚洲男人av香蕉爽爽爽爽 | 国语精品一区二区三区 | 少妇性l交大片 | 免费乱码人妻系列无码专区 | 日本精品高清一区二区 | 无码播放一区二区三区 | 免费乱码人妻系列无码专区 | 久久精品国产亚洲精品 | 国产艳妇av在线观看果冻传媒 | 国产片av国语在线观看 | 六月丁香婷婷色狠狠久久 | 色一情一乱一伦一区二区三欧美 | 国产一区二区三区精品视频 | 精品久久久中文字幕人妻 | 久久精品一区二区三区四区 | 少妇邻居内射在线 | 无码国产乱人伦偷精品视频 | 爽爽影院免费观看 | 强开小婷嫩苞又嫩又紧视频 | 伊人久久大香线蕉av一区二区 | 亚洲精品一区二区三区大桥未久 | 熟女俱乐部五十路六十路av | 日本乱人伦片中文三区 | 日本一区二区更新不卡 | 狠狠色噜噜狠狠狠7777奇米 | 欧美乱妇无乱码大黄a片 | 亚洲国产日韩a在线播放 | 亚洲色大成网站www | 人人爽人人澡人人人妻 | 水蜜桃亚洲一二三四在线 | 国产成人综合在线女婷五月99播放 | 丰满岳乱妇在线观看中字无码 | 初尝人妻少妇中文字幕 | 成 人影片 免费观看 | 最近免费中文字幕中文高清百度 | 日日摸夜夜摸狠狠摸婷婷 | 国产精品亚洲а∨无码播放麻豆 | 亚洲欧洲日本无在线码 | 大地资源中文第3页 | 天天做天天爱天天爽综合网 | 国产人妻久久精品二区三区老狼 | 欧美真人作爱免费视频 | 日韩av激情在线观看 | 久久久久免费看成人影片 | 成人无码视频在线观看网站 | 无遮无挡爽爽免费视频 | 亚洲无人区一区二区三区 | 精品亚洲成av人在线观看 | 国产麻豆精品一区二区三区v视界 | 天堂亚洲2017在线观看 | 免费中文字幕日韩欧美 | 国内精品人妻无码久久久影院蜜桃 | 欧美老妇交乱视频在线观看 | 亚洲国产精品无码久久久久高潮 | 久久午夜无码鲁丝片秋霞 | 免费乱码人妻系列无码专区 | 少妇激情av一区二区 | 影音先锋中文字幕无码 | 亚洲欧美国产精品久久 | 学生妹亚洲一区二区 | 久久久久久国产精品无码下载 | 国产精品久免费的黄网站 | 午夜福利一区二区三区在线观看 | 1000部夫妻午夜免费 | 在线看片无码永久免费视频 | 国产熟妇另类久久久久 | 国产三级精品三级男人的天堂 | 亚洲中文字幕av在天堂 | 水蜜桃色314在线观看 | 久久久中文字幕日本无吗 | 中文字幕无码人妻少妇免费 | 人人爽人人澡人人人妻 | 日本肉体xxxx裸交 | 秋霞成人午夜鲁丝一区二区三区 | 国产人妻人伦精品 | 99久久婷婷国产综合精品青草免费 | 小sao货水好多真紧h无码视频 | 国产内射爽爽大片视频社区在线 | 国产精品亚洲а∨无码播放麻豆 | 久久亚洲国产成人精品性色 | 四十如虎的丰满熟妇啪啪 | 兔费看少妇性l交大片免费 | 国产色视频一区二区三区 | 免费人成在线观看网站 | 国产成人综合在线女婷五月99播放 | 国产又粗又硬又大爽黄老大爷视 | 激情国产av做激情国产爱 | 国产三级精品三级男人的天堂 | 鲁鲁鲁爽爽爽在线视频观看 | 狠狠噜狠狠狠狠丁香五月 | 一个人免费观看的www视频 | 亚洲精品国偷拍自产在线麻豆 | 麻豆国产人妻欲求不满谁演的 | 国产香蕉尹人综合在线观看 | 亚洲一区二区三区四区 | 欧美xxxxx精品 | 水蜜桃av无码 | 久久精品无码一区二区三区 | 人妻无码αv中文字幕久久琪琪布 | 久久www免费人成人片 | 亚洲欧美中文字幕5发布 | 在线观看国产一区二区三区 | 国产绳艺sm调教室论坛 | 日本精品高清一区二区 | 亚洲人成影院在线无码按摩店 | 日本一区二区更新不卡 | 精品国产一区av天美传媒 | 日韩人妻无码一区二区三区久久99 | 国产成人人人97超碰超爽8 | 婷婷六月久久综合丁香 | 亚洲精品一区二区三区四区五区 | 98国产精品综合一区二区三区 | 无码国产色欲xxxxx视频 | 黄网在线观看免费网站 | 中文字幕无码av波多野吉衣 | 国产乱人伦app精品久久 国产在线无码精品电影网 国产国产精品人在线视 | 性欧美熟妇videofreesex | 亚洲大尺度无码无码专区 | 九九在线中文字幕无码 | 人妻中文无码久热丝袜 | 亚洲一区av无码专区在线观看 | 又大又紧又粉嫩18p少妇 | 天天躁日日躁狠狠躁免费麻豆 | 中文字幕无码日韩专区 | 欧美黑人巨大xxxxx | 伊人色综合久久天天小片 | 日本一卡2卡3卡4卡无卡免费网站 国产一区二区三区影院 | 在线亚洲高清揄拍自拍一品区 | 久久zyz资源站无码中文动漫 | 精品欧美一区二区三区久久久 | 99久久无码一区人妻 | 国产suv精品一区二区五 | 欧美大屁股xxxxhd黑色 | 国产无套粉嫩白浆在线 | 亚洲色欲久久久综合网东京热 | 国产午夜福利亚洲第一 | 久久久久成人精品免费播放动漫 | 亚洲精品国偷拍自产在线麻豆 | 玩弄人妻少妇500系列视频 | 国产午夜精品一区二区三区嫩草 | 精品久久久久久亚洲精品 | 色综合久久88色综合天天 | 强伦人妻一区二区三区视频18 | 国产香蕉尹人综合在线观看 | 西西人体www44rt大胆高清 | 亚洲欧洲中文日韩av乱码 | 在线精品国产一区二区三区 | 国产在线精品一区二区三区直播 | 中国女人内谢69xxxxxa片 | 最近免费中文字幕中文高清百度 | 欧美性生交活xxxxxdddd | 国产精品久久久av久久久 | 丰满肥臀大屁股熟妇激情视频 | 亚洲精品国产品国语在线观看 | 国产xxx69麻豆国语对白 | 扒开双腿疯狂进出爽爽爽视频 | 桃花色综合影院 | 国产精品自产拍在线观看 | 久久精品中文字幕大胸 | 国产97人人超碰caoprom | 亚洲国产欧美在线成人 | 日本高清一区免费中文视频 | 午夜熟女插插xx免费视频 | 99久久精品午夜一区二区 | 无码免费一区二区三区 | 日日碰狠狠丁香久燥 | 国产成人综合在线女婷五月99播放 | 2019nv天堂香蕉在线观看 | 久久国产精品偷任你爽任你 | 又紧又大又爽精品一区二区 | 亚洲天堂2017无码中文 | 免费国产黄网站在线观看 | 欧美亚洲日韩国产人成在线播放 | 日韩精品乱码av一区二区 | 少妇无套内谢久久久久 | 少妇太爽了在线观看 | 51国偷自产一区二区三区 | 综合网日日天干夜夜久久 | 国产香蕉97碰碰久久人人 | 国产精品怡红院永久免费 | 国产福利视频一区二区 | 日本一本二本三区免费 | 国产精品内射视频免费 | 老司机亚洲精品影院无码 | 鲁一鲁av2019在线 | 日本www一道久久久免费榴莲 | 午夜理论片yy44880影院 | 中文字幕 亚洲精品 第1页 | 久久久久成人精品免费播放动漫 | 人妻aⅴ无码一区二区三区 | 免费无码的av片在线观看 | 精品无人国产偷自产在线 | 日韩人妻系列无码专区 | 无码国内精品人妻少妇 | 精品无码国产自产拍在线观看蜜 | 国产精品久久国产三级国 | 3d动漫精品啪啪一区二区中 | 女人被男人爽到呻吟的视频 | 久久精品丝袜高跟鞋 | 夜精品a片一区二区三区无码白浆 | 日韩少妇白浆无码系列 | 久久久精品人妻久久影视 | 性欧美videos高清精品 | 亚洲精品一区二区三区大桥未久 | 一本久久a久久精品vr综合 | 国产精品久久久 | 国产成人无码a区在线观看视频app | 亚洲精品综合五月久久小说 | 99久久久无码国产aaa精品 | 自拍偷自拍亚洲精品10p | 久久久久亚洲精品男人的天堂 | 久久伊人色av天堂九九小黄鸭 | 美女扒开屁股让男人桶 | 亚洲国产精品毛片av不卡在线 | 日本高清一区免费中文视频 | 99精品无人区乱码1区2区3区 | 免费人成网站视频在线观看 | 国产成人无码午夜视频在线观看 | 欧美日韩久久久精品a片 | 九九在线中文字幕无码 | 成人免费视频视频在线观看 免费 | 性色欲情网站iwww九文堂 | 国产精品手机免费 | 亚洲色偷偷男人的天堂 | 暴力强奷在线播放无码 | 国产国语老龄妇女a片 | 男人的天堂av网站 | 精品日本一区二区三区在线观看 | 色一情一乱一伦一区二区三欧美 | 欧美人妻一区二区三区 | 日日鲁鲁鲁夜夜爽爽狠狠 | 国产精品国产三级国产专播 | 国产精品福利视频导航 | 欧美精品一区二区精品久久 | 亚洲精品美女久久久久久久 | 曰本女人与公拘交酡免费视频 | 久在线观看福利视频 | 98国产精品综合一区二区三区 | 久久精品女人天堂av免费观看 | 高中生自慰www网站 | 精品无人区无码乱码毛片国产 | 无码免费一区二区三区 | 精品人妻人人做人人爽 | 亚洲另类伦春色综合小说 | 黑森林福利视频导航 | 日韩欧美群交p片內射中文 | 久久精品人人做人人综合 | 国产一区二区三区四区五区加勒比 | 欧美丰满熟妇xxxx性ppx人交 | 四虎国产精品免费久久 | 精品亚洲韩国一区二区三区 | 风流少妇按摩来高潮 | 又粗又大又硬毛片免费看 | 色综合久久88色综合天天 | 国产精品久久久久9999小说 | 性色欲网站人妻丰满中文久久不卡 | aⅴ在线视频男人的天堂 | 丰满少妇高潮惨叫视频 | 无码一区二区三区在线观看 | 激情五月综合色婷婷一区二区 | 成人动漫在线观看 | 性欧美牲交xxxxx视频 | 久久国产劲爆∧v内射 | 成人女人看片免费视频放人 | 国内少妇偷人精品视频免费 | 日日夜夜撸啊撸 | 国产人成高清在线视频99最全资源 | 97久久精品无码一区二区 | 国产精品久久久久无码av色戒 | 亚洲中文字幕无码中字 | 久久精品国产一区二区三区肥胖 | 国产成人无码午夜视频在线观看 | 99久久亚洲精品无码毛片 | 国产高清av在线播放 | 麻豆国产丝袜白领秘书在线观看 | 国产无遮挡又黄又爽又色 | 久久精品国产一区二区三区 | 男人扒开女人内裤强吻桶进去 | 欧美三级不卡在线观看 | 欧美老人巨大xxxx做受 | 国产香蕉尹人综合在线观看 | 男女猛烈xx00免费视频试看 | 在教室伦流澡到高潮hnp视频 | 少妇被粗大的猛进出69影院 | 精品久久久久久亚洲精品 | 精品久久8x国产免费观看 | 精品亚洲韩国一区二区三区 | 国产精品久免费的黄网站 | 中文字幕久久久久人妻 | 性欧美大战久久久久久久 | 日本又色又爽又黄的a片18禁 | 成人亚洲精品久久久久 | 无码帝国www无码专区色综合 | 日本又色又爽又黄的a片18禁 | 女人被男人躁得好爽免费视频 | 成人亚洲精品久久久久软件 | 一区二区三区高清视频一 | 国内精品久久毛片一区二区 | 亚洲人成影院在线观看 | 无码av免费一区二区三区试看 | 狠狠色噜噜狠狠狠7777奇米 | 亚洲一区二区三区四区 | 国产精品香蕉在线观看 | 亚洲精品一区国产 | 55夜色66夜色国产精品视频 | 在线看片无码永久免费视频 | 性欧美大战久久久久久久 | 蜜桃av蜜臀av色欲av麻 999久久久国产精品消防器材 | 亚洲精品国偷拍自产在线麻豆 | 中文字幕乱码人妻无码久久 | 日本成熟视频免费视频 | 国产成人一区二区三区在线观看 | 自拍偷自拍亚洲精品被多人伦好爽 | 亚洲国产av美女网站 | v一区无码内射国产 | 国产精品二区一区二区aⅴ污介绍 | 午夜理论片yy44880影院 | 人人爽人人爽人人片av亚洲 | 18禁止看的免费污网站 | 小泽玛莉亚一区二区视频在线 | 亚洲成a人一区二区三区 | 男女猛烈xx00免费视频试看 | 夜夜高潮次次欢爽av女 | 日韩无码专区 | 精品欧美一区二区三区久久久 | 国产精品久久久久久亚洲影视内衣 | 亚洲精品欧美二区三区中文字幕 | 亚洲日本一区二区三区在线 | 成人无码影片精品久久久 | 久久97精品久久久久久久不卡 | 人妻与老人中文字幕 | 国产亚洲欧美日韩亚洲中文色 | 奇米影视888欧美在线观看 | 色爱情人网站 | 中文字幕乱妇无码av在线 | 麻豆国产人妻欲求不满 | 色婷婷综合中文久久一本 | 亚洲色偷偷男人的天堂 | 丝袜 中出 制服 人妻 美腿 | 亚洲精品午夜国产va久久成人 | 人人妻人人澡人人爽人人精品 | 亚洲自偷自偷在线制服 | 色综合视频一区二区三区 | 噜噜噜亚洲色成人网站 | 又大又硬又爽免费视频 | 国产无套内射久久久国产 | 欧美一区二区三区视频在线观看 | 精品国产乱码久久久久乱码 | 亚洲自偷自偷在线制服 | 鲁一鲁av2019在线 | 国产无遮挡又黄又爽又色 | 国产精品久久久av久久久 | 国产一区二区三区精品视频 | 亚洲精品成a人在线观看 | 99久久无码一区人妻 | 1000部夫妻午夜免费 | 色婷婷香蕉在线一区二区 | 亚洲日韩av一区二区三区四区 | 亚洲国产精品一区二区第一页 | 99国产欧美久久久精品 | 精品国偷自产在线视频 | 亚洲精品一区国产 | 丰满妇女强制高潮18xxxx | 亚洲日本在线电影 | 亚洲精品久久久久中文第一幕 | 内射欧美老妇wbb | 国产明星裸体无码xxxx视频 | 免费乱码人妻系列无码专区 | 亚洲国产午夜精品理论片 | 国产乱人偷精品人妻a片 | 成人无码视频在线观看网站 | 国产69精品久久久久app下载 | 欧美自拍另类欧美综合图片区 | 色偷偷av老熟女 久久精品人妻少妇一区二区三区 | 风流少妇按摩来高潮 | 精品国精品国产自在久国产87 | 亚洲综合另类小说色区 | 亚洲男人av天堂午夜在 | 色噜噜亚洲男人的天堂 | 男人和女人高潮免费网站 | 亚洲国产av美女网站 | 蜜臀av在线播放 久久综合激激的五月天 | 老子影院午夜精品无码 | 国产亚洲视频中文字幕97精品 | 免费看男女做好爽好硬视频 | 麻豆国产人妻欲求不满谁演的 | 特级做a爰片毛片免费69 | 强伦人妻一区二区三区视频18 | 国产精品毛多多水多 | 乱人伦中文视频在线观看 | 桃花色综合影院 | 夫妻免费无码v看片 | 风流少妇按摩来高潮 | 国产成人亚洲综合无码 | 免费男性肉肉影院 | 精品亚洲成av人在线观看 | 亚洲日本va午夜在线电影 | 大乳丰满人妻中文字幕日本 | 成人精品视频一区二区 | 中文字幕久久久久人妻 | 3d动漫精品啪啪一区二区中 | 国产特级毛片aaaaaa高潮流水 | 国产口爆吞精在线视频 | 无码国内精品人妻少妇 | 国产免费无码一区二区视频 | 99久久婷婷国产综合精品青草免费 | 日日天干夜夜狠狠爱 | 色五月丁香五月综合五月 | 日本一卡2卡3卡4卡无卡免费网站 国产一区二区三区影院 | 粉嫩少妇内射浓精videos | 兔费看少妇性l交大片免费 | 自拍偷自拍亚洲精品10p | 国产精品va在线播放 | 免费无码肉片在线观看 | 人人澡人人妻人人爽人人蜜桃 | 久久综合色之久久综合 | 野狼第一精品社区 | 亚洲成av人片在线观看无码不卡 | 久久无码人妻影院 | 日本一卡2卡3卡4卡无卡免费网站 国产一区二区三区影院 | 国产亚洲tv在线观看 | 精品无人国产偷自产在线 | 九月婷婷人人澡人人添人人爽 | 乱码av麻豆丝袜熟女系列 | 国产精品亚洲一区二区三区喷水 | 中文无码成人免费视频在线观看 | 伊人久久大香线蕉亚洲 | 乱码午夜-极国产极内射 | 免费无码av一区二区 | 人人妻人人澡人人爽精品欧美 | 国产熟女一区二区三区四区五区 | 无码人妻出轨黑人中文字幕 | 老熟女重囗味hdxx69 | 亚洲精品一区二区三区婷婷月 | 人妻尝试又大又粗久久 | 欧美人与动性行为视频 | 少妇久久久久久人妻无码 | 中文字幕 人妻熟女 | 国产又爽又黄又刺激的视频 | 国产精品鲁鲁鲁 | www国产亚洲精品久久网站 | 激情人妻另类人妻伦 | 国产97人人超碰caoprom | 亚洲精品www久久久 | 人人妻人人澡人人爽欧美精品 | 熟女少妇人妻中文字幕 | 亚洲娇小与黑人巨大交 | 男人和女人高潮免费网站 | 狠狠色丁香久久婷婷综合五月 | 亚洲精品鲁一鲁一区二区三区 | 亚洲日韩av片在线观看 | 欧美成人免费全部网站 | 纯爱无遮挡h肉动漫在线播放 | 中文字幕乱妇无码av在线 | 国产av无码专区亚洲a∨毛片 | 少妇性l交大片欧洲热妇乱xxx | 中文字幕乱码人妻二区三区 | 国产乱人伦av在线无码 | 日本www一道久久久免费榴莲 | 亚洲日韩乱码中文无码蜜桃臀网站 | 综合人妻久久一区二区精品 | 国产热a欧美热a在线视频 | 国产情侣作爱视频免费观看 | 欧美激情综合亚洲一二区 | 性色欲情网站iwww九文堂 | 日产精品高潮呻吟av久久 | 色老头在线一区二区三区 | 国产乱人偷精品人妻a片 | 日韩av无码一区二区三区不卡 | 纯爱无遮挡h肉动漫在线播放 | 天堂一区人妻无码 | 久久久国产一区二区三区 | 中文字幕无码免费久久99 | 亚洲 日韩 欧美 成人 在线观看 | 色欲av亚洲一区无码少妇 | 乱人伦人妻中文字幕无码久久网 | 国内精品久久毛片一区二区 | 亚洲gv猛男gv无码男同 | 亚洲人成人无码网www国产 | 天天av天天av天天透 | 少妇一晚三次一区二区三区 | 亚洲s色大片在线观看 | 图片区 小说区 区 亚洲五月 | 人人妻人人澡人人爽欧美精品 | 麻豆精品国产精华精华液好用吗 | 性啪啪chinese东北女人 | 天天躁日日躁狠狠躁免费麻豆 | 日韩精品无码一本二本三本色 | 一本色道婷婷久久欧美 | 国产亚洲日韩欧美另类第八页 | 在教室伦流澡到高潮hnp视频 | 久久www免费人成人片 | 欧美日韩一区二区综合 | 日韩人妻系列无码专区 | 日产精品99久久久久久 | 99精品久久毛片a片 | 国产成人精品久久亚洲高清不卡 | 永久免费观看美女裸体的网站 | 亚洲国产av美女网站 | 中文字幕人妻无码一区二区三区 | 久久99精品久久久久婷婷 | 国产真实伦对白全集 | 亚洲成熟女人毛毛耸耸多 | 无码乱肉视频免费大全合集 | 国产综合久久久久鬼色 | 少妇人妻大乳在线视频 | a国产一区二区免费入口 | 55夜色66夜色国产精品视频 | 学生妹亚洲一区二区 | 国产精品99爱免费视频 | 久久精品视频在线看15 | 日日碰狠狠躁久久躁蜜桃 | 成人aaa片一区国产精品 | 欧美熟妇另类久久久久久不卡 | 久久天天躁狠狠躁夜夜免费观看 | 国产又爽又猛又粗的视频a片 | 强伦人妻一区二区三区视频18 | 日韩精品乱码av一区二区 | 免费中文字幕日韩欧美 | 狠狠噜狠狠狠狠丁香五月 | 又色又爽又黄的美女裸体网站 | 亚洲а∨天堂久久精品2021 | 日日天日日夜日日摸 | 国产精品久久久久久久9999 | 亚洲国产欧美国产综合一区 | 无码人妻精品一区二区三区下载 | 国产精品高潮呻吟av久久 | 娇妻被黑人粗大高潮白浆 | 国产免费无码一区二区视频 | 欧美第一黄网免费网站 | 精品亚洲韩国一区二区三区 | 日日摸日日碰夜夜爽av | 日韩精品a片一区二区三区妖精 | 两性色午夜免费视频 | 国产精品美女久久久久av爽李琼 | 成人综合网亚洲伊人 | 亚洲区小说区激情区图片区 | 2019午夜福利不卡片在线 | 国产绳艺sm调教室论坛 | 亚洲aⅴ无码成人网站国产app | 色欲av亚洲一区无码少妇 | 亚洲s色大片在线观看 | 奇米影视7777久久精品人人爽 | 亚洲人亚洲人成电影网站色 | 日本一区二区三区免费高清 | 无码国产乱人伦偷精品视频 | 999久久久国产精品消防器材 | 嫩b人妻精品一区二区三区 | 夜夜夜高潮夜夜爽夜夜爰爰 | 久久无码中文字幕免费影院蜜桃 | 国产成人精品必看 | 无码中文字幕色专区 | 国产色精品久久人妻 | 国内老熟妇对白xxxxhd | 强奷人妻日本中文字幕 | 少妇性l交大片欧洲热妇乱xxx | 亚洲乱码日产精品bd | 日韩精品a片一区二区三区妖精 | 狠狠色欧美亚洲狠狠色www | 成在人线av无码免费 | 欧美精品无码一区二区三区 | 2019nv天堂香蕉在线观看 | 成年女人永久免费看片 | 国产精品久久久久影院嫩草 | 国产精品久免费的黄网站 | 中文字幕亚洲情99在线 | 亚洲一区二区三区偷拍女厕 | 国产乱人伦av在线无码 | 亚洲gv猛男gv无码男同 | 国产精品久久久久久无码 | 亚洲一区二区三区香蕉 | 亚洲中文无码av永久不收费 | 97色伦图片97综合影院 | 狠狠综合久久久久综合网 | 亚洲gv猛男gv无码男同 | 夜精品a片一区二区三区无码白浆 | 东京一本一道一二三区 | 国产亚洲精品久久久久久大师 | 人妻少妇被猛烈进入中文字幕 | 国产午夜无码视频在线观看 | 日日摸日日碰夜夜爽av | 国产莉萝无码av在线播放 | 成人免费无码大片a毛片 | 2019nv天堂香蕉在线观看 | 亚洲成a人片在线观看无码3d | 亚洲人亚洲人成电影网站色 | 日日躁夜夜躁狠狠躁 | 国产成人无码区免费内射一片色欲 | 亲嘴扒胸摸屁股激烈网站 | 内射爽无广熟女亚洲 | 呦交小u女精品视频 | 特级做a爰片毛片免费69 | 东京热无码av男人的天堂 | 国产精品永久免费视频 | 久久精品一区二区三区四区 | 国产av一区二区三区最新精品 | 亚洲理论电影在线观看 | 国产又粗又硬又大爽黄老大爷视 | 国精产品一区二区三区 | 日本熟妇人妻xxxxx人hd | 中文字幕av日韩精品一区二区 | 色婷婷综合中文久久一本 | av无码不卡在线观看免费 | 学生妹亚洲一区二区 | 国产后入清纯学生妹 | 在线亚洲高清揄拍自拍一品区 | 理论片87福利理论电影 | 婷婷五月综合缴情在线视频 | 亚洲国产精品久久人人爱 | 亚洲一区二区三区在线观看网站 | 天天综合网天天综合色 | 国产成人精品必看 | 久久久国产精品无码免费专区 | 国内少妇偷人精品视频 | 色婷婷香蕉在线一区二区 | 国产xxx69麻豆国语对白 | 国产三级精品三级男人的天堂 | 国产精品嫩草久久久久 | 欧美肥老太牲交大战 | 九九久久精品国产免费看小说 | 精品欧美一区二区三区久久久 | 久久久无码中文字幕久... | 亚洲国产成人av在线观看 | 女人被男人躁得好爽免费视频 | 97无码免费人妻超级碰碰夜夜 | 久久99精品久久久久久动态图 | 亚洲国产精品成人久久蜜臀 | 东京一本一道一二三区 | 乱人伦人妻中文字幕无码久久网 | 国产97人人超碰caoprom | av无码电影一区二区三区 | 国产精品久久久久久亚洲影视内衣 | 免费无码肉片在线观看 | 久久精品无码一区二区三区 | 麻豆国产人妻欲求不满 | 最新版天堂资源中文官网 | 国产做国产爱免费视频 | 性生交片免费无码看人 | 熟女俱乐部五十路六十路av | 欧美亚洲国产一区二区三区 | 99久久精品无码一区二区毛片 | 色五月五月丁香亚洲综合网 | 精品国产成人一区二区三区 | 日日鲁鲁鲁夜夜爽爽狠狠 | 精品久久久中文字幕人妻 | 国产精华av午夜在线观看 | 精品国产乱码久久久久乱码 | 国产区女主播在线观看 | 性生交大片免费看l | 久久99国产综合精品 | 夜夜影院未满十八勿进 | 亚洲一区二区三区含羞草 | 色情久久久av熟女人妻网站 | 狠狠综合久久久久综合网 | √天堂中文官网8在线 | 水蜜桃av无码 | 午夜精品一区二区三区在线观看 | 欧美刺激性大交 | 亚洲啪av永久无码精品放毛片 | 久久久久av无码免费网 | 无遮挡国产高潮视频免费观看 | 乱人伦人妻中文字幕无码 | 国产精品.xx视频.xxtv | 国产成人精品视频ⅴa片软件竹菊 | 久久精品中文闷骚内射 | 青草视频在线播放 | 蜜臀av无码人妻精品 | 中文字幕无码日韩专区 | 欧洲熟妇精品视频 | 无码福利日韩神码福利片 | 性做久久久久久久免费看 | 欧美人与禽猛交狂配 | 精品一区二区不卡无码av | 亚洲精品中文字幕乱码 | 精品人妻中文字幕有码在线 | 久久久久久九九精品久 | 成人精品视频一区二区 | 一本精品99久久精品77 | 好爽又高潮了毛片免费下载 | av无码不卡在线观看免费 | 久久亚洲精品成人无码 | 无码人妻黑人中文字幕 | 亚洲国产精华液网站w | 国内丰满熟女出轨videos | 无码人妻丰满熟妇区五十路百度 | 激情亚洲一区国产精品 | 亚洲精品午夜无码电影网 | а√天堂www在线天堂小说 | 激情内射亚州一区二区三区爱妻 | 国产成人综合色在线观看网站 | 亚洲熟女一区二区三区 | 午夜性刺激在线视频免费 | 亚洲色欲久久久综合网东京热 | 亚洲午夜福利在线观看 | 国产成人午夜福利在线播放 | 久久亚洲日韩精品一区二区三区 | 人人妻人人澡人人爽人人精品浪潮 | 国产免费观看黄av片 | 无码吃奶揉捏奶头高潮视频 | 欧美自拍另类欧美综合图片区 | 久久综合给久久狠狠97色 | 男女下面进入的视频免费午夜 | 综合激情五月综合激情五月激情1 | 久久综合网欧美色妞网 | 国产高清av在线播放 | 欧美成人午夜精品久久久 | 亚洲人成影院在线无码按摩店 | 好男人www社区 | 帮老师解开蕾丝奶罩吸乳网站 | 丝袜 中出 制服 人妻 美腿 | 免费网站看v片在线18禁无码 | 欧美激情综合亚洲一二区 | 国产成人无码av一区二区 | 亚洲日韩一区二区 | 久久99精品久久久久久动态图 | 内射白嫩少妇超碰 | 国产人妻人伦精品1国产丝袜 | 精品 日韩 国产 欧美 视频 | 日韩无码专区 | 男女猛烈xx00免费视频试看 | 中文毛片无遮挡高清免费 | 国产人妖乱国产精品人妖 | 日日天日日夜日日摸 | 噜噜噜亚洲色成人网站 | 精品水蜜桃久久久久久久 | 一本无码人妻在中文字幕免费 | 精品国产乱码久久久久乱码 | 中文字幕无码免费久久99 | 蜜桃臀无码内射一区二区三区 | 亚洲精品国偷拍自产在线麻豆 | 日韩精品无码一区二区中文字幕 | 欧美35页视频在线观看 | 久久精品无码一区二区三区 | 中文久久乱码一区二区 | 免费无码肉片在线观看 | 天堂无码人妻精品一区二区三区 | 国产黄在线观看免费观看不卡 | 少妇激情av一区二区 | 亚洲成av人片天堂网无码】 | 国产精品自产拍在线观看 | 久久99精品国产麻豆 | 无码一区二区三区在线 | 美女毛片一区二区三区四区 | 国产一区二区不卡老阿姨 | 免费观看黄网站 | 久久久久久九九精品久 | 呦交小u女精品视频 | 国产在线aaa片一区二区99 | 亚洲国产精品无码一区二区三区 | 亚洲精品久久久久中文第一幕 | 两性色午夜免费视频 | 国色天香社区在线视频 | 麻豆av传媒蜜桃天美传媒 | ass日本丰满熟妇pics | 在线观看欧美一区二区三区 | 牛和人交xxxx欧美 | 国产精品无套呻吟在线 | 99久久久无码国产aaa精品 | 学生妹亚洲一区二区 | 国产网红无码精品视频 | 1000部夫妻午夜免费 | 国产色在线 | 国产 | 日本一卡2卡3卡4卡无卡免费网站 国产一区二区三区影院 | 久久久久亚洲精品男人的天堂 | 波多野结衣av一区二区全免费观看 | 99久久精品午夜一区二区 | 久久久久免费精品国产 | 色综合久久88色综合天天 | 国产69精品久久久久app下载 | 精品国产麻豆免费人成网站 | 捆绑白丝粉色jk震动捧喷白浆 | 欧美午夜特黄aaaaaa片 | 牲欲强的熟妇农村老妇女视频 | 欧美人妻一区二区三区 | 夜精品a片一区二区三区无码白浆 | 亚洲一区av无码专区在线观看 | 乱人伦中文视频在线观看 | 国产成人无码一二三区视频 | 未满小14洗澡无码视频网站 | 国精产品一区二区三区 | 无码福利日韩神码福利片 | 三上悠亚人妻中文字幕在线 | 国产在热线精品视频 | 九九综合va免费看 | 色一情一乱一伦一视频免费看 | 精品偷拍一区二区三区在线看 | 成人性做爰aaa片免费看 | 狠狠色噜噜狠狠狠狠7777米奇 | 欧美兽交xxxx×视频 | 国产区女主播在线观看 | 天天躁日日躁狠狠躁免费麻豆 | 丁香花在线影院观看在线播放 | 夫妻免费无码v看片 | 2020久久香蕉国产线看观看 | 成在人线av无码免费 | 久久综合网欧美色妞网 | 西西人体www44rt大胆高清 | 无码国内精品人妻少妇 | 国产精品高潮呻吟av久久4虎 | 天天躁日日躁狠狠躁免费麻豆 | 自拍偷自拍亚洲精品被多人伦好爽 | 久久国语露脸国产精品电影 | 亚洲精品鲁一鲁一区二区三区 | 99国产精品白浆在线观看免费 | 亚洲成色www久久网站 | 亚洲成a人片在线观看日本 | 国产精品亚洲综合色区韩国 | 婷婷五月综合激情中文字幕 | 亚洲一区二区三区香蕉 | 色五月五月丁香亚洲综合网 | 伊人久久大香线蕉亚洲 | 亚洲无人区午夜福利码高清完整版 | www成人国产高清内射 | 中文无码伦av中文字幕 | 国产电影无码午夜在线播放 | 亚洲日韩av一区二区三区中文 | 亚洲人成无码网www | 亚洲国产精品毛片av不卡在线 | 国产免费久久精品国产传媒 | 久久亚洲国产成人精品性色 | 日韩精品无码免费一区二区三区 | 国产真实伦对白全集 | 免费网站看v片在线18禁无码 | 欧美一区二区三区 | 一本久久a久久精品vr综合 | 欧美熟妇另类久久久久久多毛 | 国产av人人夜夜澡人人爽麻豆 | 内射爽无广熟女亚洲 | 亚洲一区二区三区播放 | 国产又爽又猛又粗的视频a片 | 日日噜噜噜噜夜夜爽亚洲精品 | 亚洲人成网站色7799 | 亚洲综合色区中文字幕 | 无遮挡国产高潮视频免费观看 | 成人片黄网站色大片免费观看 | 国产99久久精品一区二区 | 乱中年女人伦av三区 | 大肉大捧一进一出视频出来呀 | 国产精品第一区揄拍无码 | 狠狠噜狠狠狠狠丁香五月 | 国产成人无码a区在线观看视频app | 国产性生大片免费观看性 | 久久午夜无码鲁丝片秋霞 | 欧美 丝袜 自拍 制服 另类 | 一本色道婷婷久久欧美 | 欧美人与物videos另类 | 亚洲精品午夜国产va久久成人 | 扒开双腿吃奶呻吟做受视频 | 亚洲一区二区三区四区 | 国产成人精品三级麻豆 | 精品国产乱码久久久久乱码 | 亚洲人成网站免费播放 | 无码人妻av免费一区二区三区 | 婷婷色婷婷开心五月四房播播 | 人妻中文无码久热丝袜 | 国内老熟妇对白xxxxhd | 久久国产精品二国产精品 | 亚洲成熟女人毛毛耸耸多 | 狠狠色噜噜狠狠狠7777奇米 | 久久亚洲精品中文字幕无男同 | 国产精品成人av在线观看 | 久久久久亚洲精品中文字幕 | 国产成人精品一区二区在线小狼 | 国产麻豆精品一区二区三区v视界 | 亚洲熟妇色xxxxx欧美老妇y | 高潮毛片无遮挡高清免费视频 | 国产亚洲美女精品久久久2020 | 国产精品对白交换视频 | 荡女精品导航 | 成人精品视频一区二区三区尤物 | 成人影院yy111111在线观看 | 在教室伦流澡到高潮hnp视频 | 久久久久久av无码免费看大片 | 亚洲一区二区三区在线观看网站 | 波多野结衣av一区二区全免费观看 | 免费无码的av片在线观看 | 99久久婷婷国产综合精品青草免费 | 97精品国产97久久久久久免费 | 亚洲中文字幕乱码av波多ji | 露脸叫床粗话东北少妇 | 性色欲情网站iwww九文堂 | 中文字幕中文有码在线 | а天堂中文在线官网 | 国产精品美女久久久久av爽李琼 | 亚洲综合久久一区二区 | 亚洲娇小与黑人巨大交 | 国产av无码专区亚洲a∨毛片 | 人人妻人人澡人人爽人人精品浪潮 | 久久人人爽人人爽人人片ⅴ | 国产精品成人av在线观看 | 台湾无码一区二区 | 欧美熟妇另类久久久久久不卡 | 亚洲精品鲁一鲁一区二区三区 | 精品无码成人片一区二区98 | 亚洲欧美色中文字幕在线 | 麻豆蜜桃av蜜臀av色欲av | 亚洲中文字幕无码中文字在线 | 国产熟妇高潮叫床视频播放 | 女人被爽到呻吟gif动态图视看 | 国产av无码专区亚洲a∨毛片 | 久久精品人妻少妇一区二区三区 | 精品偷自拍另类在线观看 | 蜜桃av蜜臀av色欲av麻 999久久久国产精品消防器材 | 蜜臀av无码人妻精品 | 亚洲国产精品一区二区美利坚 | 天堂无码人妻精品一区二区三区 | 欧美精品一区二区精品久久 | 日韩av无码一区二区三区 | 婷婷六月久久综合丁香 | 嫩b人妻精品一区二区三区 | 无人区乱码一区二区三区 | 欧美激情综合亚洲一二区 | 中文字幕精品av一区二区五区 | 久久精品中文字幕一区 | 精品无码国产自产拍在线观看蜜 | 亚洲 激情 小说 另类 欧美 | 成人无码精品1区2区3区免费看 | 国产亚洲视频中文字幕97精品 | 撕开奶罩揉吮奶头视频 | 国产va免费精品观看 | 又紧又大又爽精品一区二区 | 少女韩国电视剧在线观看完整 | 天天躁日日躁狠狠躁免费麻豆 | 十八禁真人啪啪免费网站 | 牲交欧美兽交欧美 | 伊在人天堂亚洲香蕉精品区 | 亚洲自偷精品视频自拍 | 人人爽人人澡人人高潮 | 国产成人无码a区在线观看视频app | 婷婷六月久久综合丁香 | 久久精品中文字幕一区 | 亚洲无人区午夜福利码高清完整版 | 久久伊人色av天堂九九小黄鸭 | 久久久国产一区二区三区 | 日韩成人一区二区三区在线观看 | 精品久久8x国产免费观看 | 俺去俺来也www色官网 | av香港经典三级级 在线 | 麻豆蜜桃av蜜臀av色欲av | 国产精品嫩草久久久久 | 国产亚洲视频中文字幕97精品 | 成人无码视频免费播放 | 色欲人妻aaaaaaa无码 | 牛和人交xxxx欧美 | 成年美女黄网站色大免费视频 | 午夜性刺激在线视频免费 | 午夜福利试看120秒体验区 | 色综合久久久无码网中文 | 强开小婷嫩苞又嫩又紧视频 | 无码播放一区二区三区 | 老熟妇乱子伦牲交视频 | 国产精品手机免费 | 国产精品无码久久av | 国产一区二区三区精品视频 | 人人妻人人澡人人爽人人精品浪潮 | 伊人久久大香线焦av综合影院 | 国色天香社区在线视频 | 国产成人精品无码播放 | 亚洲色成人中文字幕网站 | 精品一二三区久久aaa片 | 十八禁视频网站在线观看 | 久久精品人人做人人综合 | 色偷偷人人澡人人爽人人模 | 我要看www免费看插插视频 | aⅴ亚洲 日韩 色 图网站 播放 | 色婷婷欧美在线播放内射 | 国产日产欧产精品精品app | 俄罗斯老熟妇色xxxx | 中文字幕久久久久人妻 | 亚洲中文字幕在线无码一区二区 | 国产精品亚洲一区二区三区喷水 | 日韩精品久久久肉伦网站 | 欧美丰满熟妇xxxx性ppx人交 | 欧美老妇与禽交 | 波多野结衣 黑人 | 无码吃奶揉捏奶头高潮视频 | 久久久精品欧美一区二区免费 | 亚洲一区av无码专区在线观看 | 曰韩少妇内射免费播放 | 亚洲精品国产精品乱码不卡 | 久久久久久九九精品久 | 国精产品一品二品国精品69xx | 精品无码国产一区二区三区av | aⅴ亚洲 日韩 色 图网站 播放 | 中文字幕人妻无码一区二区三区 | 丰满人妻精品国产99aⅴ | 偷窥日本少妇撒尿chinese | 麻豆果冻传媒2021精品传媒一区下载 | 欧美野外疯狂做受xxxx高潮 | 图片小说视频一区二区 | 中文字幕精品av一区二区五区 | 少妇久久久久久人妻无码 | 强辱丰满人妻hd中文字幕 | 精品无码av一区二区三区 | 丰满少妇人妻久久久久久 | 97夜夜澡人人双人人人喊 | 亚洲国产精品无码久久久久高潮 | 97资源共享在线视频 | 婷婷丁香五月天综合东京热 | 少女韩国电视剧在线观看完整 | 欧美精品无码一区二区三区 | 国产日产欧产精品精品app | 中文字幕无码人妻少妇免费 | 中文字幕无码日韩欧毛 | 亚洲国产精品久久人人爱 | 日韩av无码中文无码电影 | 亚洲 激情 小说 另类 欧美 | 夜夜夜高潮夜夜爽夜夜爰爰 | 亚洲日韩av一区二区三区四区 | 国产午夜手机精彩视频 | 老太婆性杂交欧美肥老太 | 国产色视频一区二区三区 | 久久午夜夜伦鲁鲁片无码免费 | 人妻互换免费中文字幕 | 人人超人人超碰超国产 | 国产熟女一区二区三区四区五区 | 免费人成网站视频在线观看 | 国产成人综合美国十次 | 欧美一区二区三区视频在线观看 | 亚洲国产精品久久人人爱 | 中文字幕精品av一区二区五区 | 中文字幕人成乱码熟女app | 国产精品毛片一区二区 | 香港三级日本三级妇三级 | 精品久久久无码中文字幕 | 四虎影视成人永久免费观看视频 | 日韩亚洲欧美精品综合 | 99国产欧美久久久精品 | 国产精品亚洲综合色区韩国 | 国产午夜福利亚洲第一 | 亚洲热妇无码av在线播放 | 呦交小u女精品视频 | 亚洲欧美中文字幕5发布 | 黄网在线观看免费网站 | 蜜桃视频插满18在线观看 | 久精品国产欧美亚洲色aⅴ大片 | 大地资源网第二页免费观看 | 天堂在线观看www | 国产精品成人av在线观看 | √天堂中文官网8在线 | 国产艳妇av在线观看果冻传媒 | 欧美国产亚洲日韩在线二区 | 久久人人97超碰a片精品 | 色噜噜亚洲男人的天堂 | 国产猛烈高潮尖叫视频免费 | 亚洲精品一区二区三区大桥未久 | 青青青手机频在线观看 | 中文字幕色婷婷在线视频 | 最新国产麻豆aⅴ精品无码 | 日日摸天天摸爽爽狠狠97 | 久久午夜无码鲁丝片午夜精品 |