1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        少數(shù)派報(bào)告:談推薦場(chǎng)景下的對(duì)比學(xué)習(xí)

        共 7031字,需瀏覽 15分鐘

         ·

        2021-12-18 03:25

        前言

        最近對(duì)比學(xué)習(xí)(Contrastive Learning, CL)火得一塌糊涂,被Bengio 和 LeCun 這二位巨頭在 ICLR 2020 上點(diǎn)名是 AI 的未來(lái)。作為普通打工人,對(duì)比學(xué)習(xí)能否帶來(lái)AI質(zhì)的飛越,從而導(dǎo)致未來(lái)出現(xiàn)終結(jié)者,不是我們考慮的問(wèn)題。本文只聚焦于推薦領(lǐng)域,討論對(duì)比學(xué)習(xí)能否提升推薦性能,幫我們?cè)琰c(diǎn)完成OKR。

        本文并非Contrastive Learning Tutorial之類的科普文章,不會(huì)講述對(duì)比學(xué)習(xí)的發(fā)展沿革,也不會(huì)面面俱到每個(gè)技術(shù)細(xì)節(jié)。對(duì)這部分內(nèi)部感興趣的同學(xué),可以參考張俊林大佬的《對(duì)比學(xué)習(xí)(Contrastive Learning):研究進(jìn)展精要》一文,快速入門(mén)。

        接下來(lái),本文將從以下三個(gè)方面展開(kāi):

        1. 討論一下對(duì)比學(xué)習(xí)到底是什么。這一節(jié)的目的,并非為了吊書(shū)袋,我也不是什么考據(jù)狂。實(shí)在是對(duì)比學(xué)習(xí)和我們推薦常用的向量化召回,在很多底層技術(shù)上是通用的。而有一批水文,利用了這二者之間的相似性,將向量化召回算法用“對(duì)比學(xué)習(xí)”的概念重新包裝,掛羊頭賣狗肉,使很多同學(xué)覺(jué)得CL不過(guò)是新一波的概念炒作。
        1. 談?wù)剬?duì)比學(xué)習(xí)到底能給推薦系統(tǒng)帶來(lái)哪些幫助。同學(xué)們不要對(duì)新技術(shù)盲目跟風(fēng),看完這一節(jié),再來(lái)決定CL是否是解決你問(wèn)題的那根稻草。
        2. 分析“對(duì)比學(xué)習(xí)在推薦系統(tǒng)中應(yīng)用”的兩篇典型論文。正如前面提到的,這方面的好文章并不多。很多跟風(fēng)灌水之作,看標(biāo)題上寫(xiě)著“對(duì)比學(xué)習(xí)”和“推薦”,下載下來(lái)一看,才發(fā)現(xiàn)不過(guò)是講向量化召回的老生常談。

        到底什么是對(duì)比學(xué)習(xí)?怎么和向量化召回這么像?

        初識(shí)對(duì)比學(xué)習(xí),我也是不以為然的,覺(jué)得這不就是向量化召回嗎?我們推薦工程師玩爛的東西,怎么CV同行們還拿來(lái)當(dāng)個(gè)寶。

        要說(shuō)對(duì)比學(xué)習(xí)和向量化召回之間的相似性,看看我的另一篇文章《萬(wàn)變不?離其宗:用統(tǒng)一框架理解向量化召回》就能有所感受。我在文章中提出了NEFP框架來(lái)構(gòu)建向量化召回算法

        • N, Near, 正對(duì)應(yīng)CL中“要讓正樣本embedding在向量空間足夠近”的概念
        • F. Far, 正對(duì)應(yīng)CL中“要讓負(fù)樣本embedding在向量空間足夠遠(yuǎn)”的概念。
          • 至于“引入負(fù)樣本是為了讓模型uniformity, 防止模型坍塌”的論調(diào),其實(shí)對(duì)于搞推薦的同學(xué)都已經(jīng)不陌生了。負(fù)樣本對(duì)于召回算法的重要性已經(jīng)深入人心(我的《負(fù)樣本為王》一文也有小小貢獻(xiàn))。近年來(lái),各大廠在如何構(gòu)建easy negative, hard negative紛紛創(chuàng)新。相比之下,對(duì)比學(xué)習(xí)中的負(fù)樣本策略還略顯小兒科。
        • E, Embedding,對(duì)應(yīng)CL中的encoder部分。CV/NLP/Reco各領(lǐng)域有各自常用的encoder方案。
        • P, Pairwise Loss,就是對(duì)“足夠近,足夠遠(yuǎn)”用數(shù)學(xué)形式進(jìn)行量化。對(duì)比學(xué)習(xí)中常用的NCE Loss, Triplet Loss,對(duì)于搞推薦的同學(xué),也都算是老熟人了。

        看看我提出的NEFP與對(duì)比學(xué)習(xí)的關(guān)鍵概念是多么契合。當(dāng)初對(duì)比學(xué)習(xí)還沒(méi)現(xiàn)在這么火,否則肯定要好好蹭一波熱度,拿對(duì)比學(xué)習(xí)把我的文章好好包裝一下子。

        但是,隨著對(duì)CL的深入理解,我感覺(jué)是我淺薄了。對(duì)比學(xué)習(xí)與向量召回算法,只能算形似,也就是雙塔結(jié)構(gòu)、負(fù)采樣策略、Loss這些底層技術(shù)被二者所共享。但是對(duì)比學(xué)習(xí)與我們推薦常用的向量化召回有著完全不同的精神內(nèi)核。

        • 向量化召回,屬于Supervised Learning,無(wú)論是U2I, U2U, I2I, 哪兩個(gè)向量應(yīng)該是相似的(正例)是根據(jù)用戶反饋(標(biāo)注)得到的。
          • 因此,在召回算法中,正樣本從來(lái)就不是問(wèn)題。大家從來(lái)不為找不到正樣本而發(fā)愁,反而要考慮如何嚴(yán)格正樣本的定義,將一些用戶意愿較弱的信號(hào)(i.e., 噪聲)從正樣本中刪除出去,順便降低一下樣本量,節(jié)省訓(xùn)練時(shí)間。
          • 召回的主要研究目標(biāo)是負(fù)樣本,如何構(gòu)建easy/hard negative,降低Sample Selection Bias。
        • 對(duì)比學(xué)習(xí),屬于Self-Supervised Learning (SSL)的一種實(shí)現(xiàn)方式,產(chǎn)生的背景是為了解決"標(biāo)注少或無(wú)標(biāo)注"的問(wèn)題。
          • 我之前說(shuō)“召回是負(fù)樣本的藝術(shù)”,那么CL更注重的應(yīng)該是如何構(gòu)建正樣本。
          • Data Augmentation是CL的核心,研究如何將一條樣本經(jīng)過(guò)變化,構(gòu)建出與其相似的變體。
          • Data Augmentation在CV領(lǐng)域比較成熟了(翻轉(zhuǎn)、旋轉(zhuǎn)、縮放、裁剪、移位等)。而推薦場(chǎng)景下,數(shù)據(jù)由大量高維稀疏ID組成,特征之間又相互關(guān)聯(lián),如何變化才能構(gòu)建出合情合理的相似正樣本,仍然是一個(gè)值得研究的課題。

        正因如此,是否涉及Data Augmentation,在Data Augmentation上的創(chuàng)新如何,是我判斷一篇CL論文的價(jià)值的重要標(biāo)準(zhǔn)。沒(méi)有Data Augmentation,基于“user embedding與其點(diǎn)擊過(guò)的item的embedding具備相似性”,或者“被同一個(gè)user點(diǎn)擊過(guò)的item的embedding具備相似性”,構(gòu)建出來(lái)的所謂“對(duì)比學(xué)習(xí)”,在我眼里,都是耍流氓。因?yàn)檫@些相似性是由用戶反饋標(biāo)注的,根本就不符合CL解決“少標(biāo)準(zhǔn)或無(wú)標(biāo)注”的設(shè)計(jì)初衷。(當(dāng)然,要是有人要和我杠,偏說(shuō)U2I, I2I召回也算是Contrastive Learning,那我也沒(méi)辦法。就好比說(shuō)算盤(pán)是計(jì)算機(jī)的鼻祖一樣,你說(shuō)了,那就是你對(duì)。)

        除了Data Augmentation,至于如何構(gòu)建負(fù)樣本(沒(méi)準(zhǔn)CV研究得還沒(méi)Reco深)、如何構(gòu)建Encoder(CV/NLP里的結(jié)構(gòu),Reco也未必用得上)、如何建立Loss等方面,對(duì)于熟悉向量化召回的推薦打工人來(lái)說(shuō)了,都老生常談了,未必能看出什么新意思。

        另外一點(diǎn),CL在推薦場(chǎng)景下,一定是作為輔助訓(xùn)練任務(wù)出現(xiàn)的。道理很簡(jiǎn)單,User/Item之間的相似性(i.e.匹配性)才是推薦算法的重點(diǎn)關(guān)注。而CL關(guān)注的是"User與其變體"、"Item與其變體"之間的相似性,只在訓(xùn)練階段發(fā)揮輔助作用,是不會(huì)參與線上預(yù)測(cè)的。

        那么問(wèn)題來(lái)了,引入CL輔助任務(wù),能夠給我們的推薦主任務(wù)帶來(lái)怎么樣的提升?

        對(duì)比學(xué)習(xí)對(duì)于推薦系統(tǒng)有什么用?怎么用?

        初看CL,作為Self-Supervised Learning的一種,是為了應(yīng)對(duì)“少標(biāo)注或無(wú)標(biāo)注”的問(wèn)題而提出的,感覺(jué)在推薦場(chǎng)景下沒(méi)啥用武之地。因?yàn)榇髲S的推薦系統(tǒng),啥都缺,就是不缺標(biāo)注數(shù)據(jù)(用戶反饋)。每天我們都為如何在海量數(shù)據(jù)上快點(diǎn)跑模型而發(fā)愁,甚至不得不抽樣數(shù)據(jù)以降低輸入數(shù)據(jù)的規(guī)模?!皹?biāo)注樣本少”?不存在。

        但是后來(lái)再細(xì)想一下,推薦系統(tǒng)中的樣本豐富,也是個(gè)假象。就如何人間一樣,推薦系統(tǒng)有海量樣本不假,但是貧富差距也懸殊:

        • 82定律才是推薦系統(tǒng)逃不脫的真香定律,20%的熱門(mén)item占據(jù)了80%的曝光量,剩下80%的小眾、長(zhǎng)尾item撈不著多少曝光機(jī)會(huì),自然在訓(xùn)練樣本中也是少數(shù)、弱勢(shì)群體
        • 樣本中的用戶分布也有天壤之別。任何一個(gè)app都有其多數(shù)、優(yōu)勢(shì)人群,比如社交app中的年輕人,或者跨國(guó)app中某個(gè)先發(fā)地區(qū)的用戶。相比之下,也就有少數(shù)、劣勢(shì)人群在樣本中“人微言輕”。

        樣本分布中的貧富懸殊,會(huì)帶來(lái)什么危害?和人間一樣,帶來(lái)的是“不公平”,我們稱之為bias

        • 模型迎合多數(shù)人群,忽視少數(shù)人群,不利于用戶增長(zhǎng)。
        • 模型很少給小眾、長(zhǎng)尾的item曝光機(jī)會(huì),不利于建立良好的內(nèi)容生態(tài)。

        因此,在推薦系統(tǒng)中引入對(duì)比學(xué)習(xí),解決“少數(shù)人群+冷門(mén)物料,標(biāo)注樣本少”的問(wèn)題,其用武之地,就是推薦系統(tǒng)的debias

        • 在主任務(wù)之前預(yù)訓(xùn)練,或者,與主任務(wù)共同訓(xùn)練。
        • 讓Embedding/Encoder層,多多見(jiàn)識(shí)一些平常在log里面不常見(jiàn)的少數(shù)人群和小眾物料。讓平常聽(tīng)?wèi)T了“陽(yáng)春白雪”的模型,也多多感受一下“下里巴人”。
        • 因?yàn)樵谟?xùn)練階段與少數(shù)人群與小眾物料都“親密接觸”過(guò)了,這樣的模型線上預(yù)測(cè)時(shí),會(huì)少一份勢(shì)利,對(duì)少數(shù)人群與小眾物料友好一些。
        • 其實(shí)也算是一種對(duì)少數(shù)樣本的regularization。

        如果明確了對(duì)比學(xué)習(xí)的目標(biāo)是為了debias,那么有兩點(diǎn)是值得我們注意的

        • 參與對(duì)比學(xué)習(xí)的樣本,和參與主任務(wù)的樣本,必然來(lái)自不同的樣本空間
          • 主任務(wù),需要擬合U~I之間的真實(shí)互動(dòng),還是以log中的已經(jīng)曝光過(guò)的user/item為主。
          • 而對(duì)比學(xué)習(xí),既然是為了debias,必然要包含,而且是多多包含鮮有曝光機(jī)會(huì)的少數(shù)人群和小眾物料
        • 主任務(wù)與對(duì)比學(xué)習(xí)任務(wù)之間,一定存在Embedding或Encoder(某種程度)共享
          • 近年來(lái),給我的感覺(jué),參數(shù)共享、結(jié)構(gòu)共享在推薦算法中,越來(lái)越不受待見(jiàn)。比如,多任務(wù)的場(chǎng)景下,同一個(gè)特征(e.g. userId, itemId)對(duì)不同目標(biāo),需要有不同embedding;再比如,阿里的Co-Action Net通篇都在講參數(shù)獨(dú)立性,同一個(gè)特征與不同特征交叉時(shí),都要使用不同的embedding。
          • 但是,對(duì)于對(duì)比學(xué)習(xí),(某種程度)參數(shù)共享、結(jié)構(gòu)共享,是必須的。否則,主模型與CL輔助模型,各學(xué)各的,主模型中的bias依舊存在,CL學(xué)了個(gè)寂寞。

        對(duì)比學(xué)習(xí)在推薦場(chǎng)景下的正確姿勢(shì)

        正如前文所述,盡管對(duì)比學(xué)習(xí)當(dāng)下很火,但是在推薦系統(tǒng)中的應(yīng)用本來(lái)就不多,再刨除一些將向量化召回也包裝成對(duì)比學(xué)習(xí)的跟風(fēng)灌水文,有價(jià)值的好文章就更少了。今天我挑選兩篇對(duì)我?guī)椭浅4蟮膬善恼?,?jiǎn)單與大家分享。

        Google的《Self-supervised Learning for Large-scale Item Recommendations》

        講推薦場(chǎng)景下的對(duì)比學(xué)習(xí),我首推2021看Google的《Self-supervised Learning for Large-scale Item Recommendations》這一篇,正是此篇幫我樹(shù)立了對(duì)CL的正確認(rèn)識(shí)。這篇文章利用對(duì)比學(xué)習(xí)輔助訓(xùn)練雙塔召回模型,目的是讓item tower對(duì)冷門(mén)、小眾item也能夠?qū)W習(xí)出高質(zhì)量的embedding,從而改善內(nèi)容生態(tài)。

        正如前文所述,讀CL論文,重點(diǎn)是看其中的Data Augmentation部分。傳統(tǒng)上,針對(duì)item的data augmentation,是采用Random Feature Masking (RFM)的方法,如下圖所示。

        • 某個(gè)item , 隨機(jī)抽取一半的特征h,得到變體,再經(jīng)過(guò)Encoder H,得到向量;保留剩下的另一半特征g,得到變體,再經(jīng)過(guò)Encoder G,得到向量
        • 來(lái)自同一個(gè)item的兩種變體對(duì)應(yīng)的embedding ,兩者之間的相似度應(yīng)該越大越好。
        • 按照同樣的作法,另一個(gè)item ,用一半特征h得到變體,再經(jīng)過(guò)Encoder H得到;用另一半特征g,得到變體,再經(jīng)過(guò)Encoder G得到。
        • 來(lái)自不同item的變體對(duì)應(yīng)的embedding (或),兩者之間的相似度應(yīng)該越低越好。

        基于以上正負(fù)樣本,整個(gè)對(duì)比學(xué)習(xí)輔助loss采用了Batch Softmax的形式,其實(shí)對(duì)于搞召回算法的同學(xué)來(lái)說(shuō),就非常常規(guī)了。(是溫度系數(shù),N是batch size)

        后續(xù)會(huì)提到,實(shí)際上H和G就是同一套結(jié)構(gòu)與參數(shù),同時(shí)也與主任務(wù)“雙塔召回”中的item tower共享結(jié)構(gòu)與參數(shù)。

        但是,隨機(jī)mask特征的data augmentation方法,存在問(wèn)題。

        1. 這樣容易制造出一些“脫離現(xiàn)實(shí)”的樣本,比如一個(gè)變體中,我們保留了item作者的國(guó)籍是巴西,但是卻缺失作品的語(yǔ)言?盡管這樣的樣本不能算離譜,但是畢竟對(duì)于模型來(lái)說(shuō),營(yíng)養(yǎng)有限。
        2. 相互關(guān)聯(lián)的兩個(gè)特征,分別被拆分進(jìn)兩個(gè)變體中,比如“作者國(guó)籍”在h,“作品語(yǔ)言”在g。盡管看上去兩個(gè)變體都是殘缺的,但實(shí)際上所包含的信息(e.g., 作品受眾)依舊是完整的。這兩個(gè)變體的embedding太容易相似了,達(dá)不到鍛煉模型的目的。

        為了解決以上問(wèn)題,Google的論文里面提出了Correlated Feature Masking (CFM)

        1. 首先,將任意兩個(gè)特征之間的互信息,離線計(jì)算好。(比如,是作者國(guó)籍,是語(yǔ)言,是加拿大,是法語(yǔ))
        1. 在訓(xùn)練每個(gè)batch時(shí),隨機(jī)挑選出一個(gè)種子特征,再根據(jù)離線計(jì)算好的互信息,挑選出與關(guān)聯(lián)度最高的n個(gè)特征(n一般取總特征數(shù)的一半),組成要mask的特征集
        2. 接下來(lái)的步驟就和常規(guī)CL步驟相同了,保留特征h=構(gòu)建一個(gè)變體,再拿剩下的一半特征g,構(gòu)建另一個(gè)變體,兩變體embedding要足夠近。

        除了提出Correlated Feature Masking (CFM)提升了變體的質(zhì)量,Google的這篇論文還提出如下觀點(diǎn),值得我們注意并加以實(shí)踐

        • Google原文還是拿CL當(dāng)輔助任務(wù)與主任務(wù)(雙塔召回)共同訓(xùn)練,。但是作者也指出,在未來(lái)會(huì)嘗試“先用CL pre-train,再用主任務(wù) fine-tune”的訓(xùn)練模式。
        • 整個(gè)item tower是被user~item雙塔召回的主任務(wù)、對(duì)比學(xué)習(xí)輔助任務(wù)中的encoder H和G,這三者所共享的。這一點(diǎn)的原因前面也解釋過(guò)了,CL在推薦系統(tǒng)中的目的,就是為了減輕主模型對(duì)long-tail user/item的偏見(jiàn),如果各學(xué)各的,CL學(xué)了個(gè)寂寞,就變得毫無(wú)意義。
        • Google的論文里特別指出,召回主任務(wù)中的item主要還是來(lái)自曝光日志,因此還是偏頭部item。而為了達(dá)到debias的目的,CL輔助任務(wù)中的item必須采用與主任務(wù)完全不同的分布,"we sample items uniformly from the corpus for "。事實(shí)上,在我看過(guò)的CL in Reco多篇論文中,Google的這篇論文是唯一一篇明確指出了樣本分布對(duì)CL的重要性,"In practice, we find using the heterogeneous distributions for main and ssl tasks is critical for SSL to achieve superior performance"。

        阿里的《Disentangled Self-Supervision in Sequential Recommenders》

        上一篇文章介紹的是針對(duì)item的data augmentation,而對(duì)于user來(lái)說(shuō),最重要的特征就是用戶的交互歷史,因此針對(duì)用戶歷史的data augmentation,就是影響針對(duì)user對(duì)比學(xué)習(xí)成敗的重中之重。在我的《萬(wàn)變不離其宗:用統(tǒng)一框架理解向量化召回》一文中,就提到過(guò)一種利用孿生網(wǎng)絡(luò)來(lái)構(gòu)建U2U召回的方法:將用戶歷史序列,隨機(jī)劃分為兩個(gè)子序列,各自喂入雙塔的一邊,訓(xùn)練要求兩塔輸出的embedding越相似越好?,F(xiàn)在看來(lái),這種作法實(shí)際上就是在做對(duì)比學(xué)習(xí)。

        阿里的這篇文章針對(duì)的是sequentail recommender問(wèn)題,即輸入用戶歷史序列,預(yù)測(cè)下一個(gè)用戶可能交互的item,因此seq-2-item是預(yù)測(cè)的主任務(wù)。同時(shí),這篇論文里提出了類似“孿生網(wǎng)絡(luò)”的方法訓(xùn)練seq-2-seq輔助任務(wù),只不過(guò)有兩點(diǎn)改進(jìn):

        • 從用戶完整歷史中提取出兩個(gè)子序列,不再是隨機(jī)劃分,而是按照時(shí)序劃分。而且為了建模時(shí)序關(guān)系,后一個(gè)子序列,還使用了倒序。
        • 為了顯式建模用戶的多興趣,Encoder不再將用戶序列壓縮成一個(gè)向量,而是提取出K個(gè)向量。
          • 因此正例變成了,同一個(gè)用戶,從他的前一段歷史提取出的第k個(gè)興趣向量,與從他后一段歷史提取出的第k個(gè)興趣向量,距離相近
          • 負(fù)例擴(kuò)展成,除了不同用戶的興趣向量相互遠(yuǎn)離,同一個(gè)用戶的不同類別的興趣向量,距離也要足夠遠(yuǎn)。

        對(duì)比學(xué)習(xí)公式如下。代表用戶在t時(shí)刻之前的歷史,是t時(shí)刻之后用戶歷史;是負(fù)責(zé)從用戶歷史中提取第k個(gè)興趣向量的encoder。

        剩下的一些技術(shù)細(xì)節(jié),比如顯式地學(xué)出K個(gè)不同的興趣向量比壓縮成一個(gè)向量能提升多少、時(shí)序的分裂點(diǎn)t是隨機(jī)的還是固定成一半的位置、......,我覺(jué)得都不重要,在阿里場(chǎng)景下取得的收益是否能夠在你的場(chǎng)景下復(fù)現(xiàn),就留待GPU和AB平臺(tái)告訴我們答案了。

        總結(jié)

        本文也算是緊跟“對(duì)比學(xué)習(xí)”燎原之勢(shì)的跟風(fēng)應(yīng)景之作,但是自認(rèn)為還是有點(diǎn)干貨的,而并非僅是別人成就的綜述

        • 談了我對(duì)對(duì)比學(xué)習(xí)的理解,特別是厘清了與向量化召回算法的重要區(qū)別。盡管底層很多技術(shù)是通用的,但是對(duì)比學(xué)習(xí)與向量化召回,是形似神不似。對(duì)比學(xué)習(xí)作為Self-Supervised Learning的一種,畢竟針對(duì)的是“少標(biāo)注或無(wú)標(biāo)注”問(wèn)題,Data Augmentation是其核心,在推薦場(chǎng)景下往往作為輔助任務(wù)出現(xiàn)。有鑒于此,同學(xué)們?nèi)蘸笤倏吹侥脤?duì)比學(xué)習(xí)包裝向量化召回的水文,一定要擦亮眼睛。
        • 指出對(duì)比學(xué)習(xí)在推薦系統(tǒng)中的用武之地,就是debias讓平常聽(tīng)?wèi)T了主流人群&物料的“陽(yáng)春白雪”的模型,也多多感受一下非主流人群&物料的“下里巴人”。為了達(dá)到debias的目的,要求我們?cè)趯?shí)踐對(duì)比學(xué)習(xí)時(shí),從樣本分布、參數(shù)共享、訓(xùn)練模式等方面要多加注意。
        • CL in Reco領(lǐng)域的好文不多,我分析了Google和阿里的兩篇文章,感受一下正確姿勢(shì)。特別是Google那一篇,推薦每個(gè)有意在推薦系統(tǒng)實(shí)踐對(duì)比學(xué)習(xí)的同學(xué),都仔細(xì)閱讀一遍。
        - END -


        瀏覽 83
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            国产v在线 | 囯产精品一区二区三区线一牛影视1 | 伊人久久超碰 | 国内一级毛片 | 韩国三级乱伦 | 亚洲日韩一级精品片在线观看 | 亚洲国产精品一二三 | 91国际精品 | 婷婷五月天综合色 | 囯产精品久久久久久久久蜜桃精品 |