色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

手把手教你搭建NLP經典模型

深度學習自然語言處理 ? 來源:語雀 ? 作者:云不見 ? 2021-02-04 16:49 ? 次閱讀

上一篇我們講到了最簡單的詞向量表示方法——共現矩陣(沒有看的朋友可以點擊這里 小白跟學系列之手把手搭建NLP經典模型(含代碼) 回顧一下!)

共現矩陣簡單是簡單,但是有很嚴重的問題。

作者強調,自己動手的經驗、花時間思考的經驗,都是無法復制的。(所以,聽話,要自己嘗試敲1?敲代碼噢!

addc1862-603f-11eb-8b86-12bb97331649.jpg

目錄

共現矩陣存在的問題:無意義詞干擾

余弦相似度:表示兩個詞向量的相似度

基于計數統計的方法改進

PMI矩陣(排除無意義詞干擾)

PPMI矩陣(排除負數)

SVD降維(解決維度爆炸和矩陣稀疏)

總結(用計數統計的方法表示詞向量的步驟)

共現矩陣存在的問題

!很多常用的無意義詞(比如“the car”)在文中出現次數太多的話,共現矩陣會認為“the”和“car”強相關,這是不合理的!

那怎么表示兩個向量之間的相似度呢?

余弦相似度

設有x = (x1,x2,x3,。..,xn)和y = (y1,y2,y3,。..,yn) 兩個向量,它們之間的余弦相似度如下式所示。

b11aa778-603f-11eb-8b86-12bb97331649.png

分子為內積,分母為L2范數。(范數表示向量的大小,L2 范數即向量各個元素的平方和的平方根。)

式 (2.1) 的要點是先對向量進行正規化,再求它們的內積。

余弦相似度:兩個向量在多大程度上指向同一方向。也就是說,余弦相似度越靠近1,兩個詞越相似;余弦相似度越靠近0,兩個詞越沒什么關系;

現在,我們來代碼實現余弦相似度。

def cos_similarity(x, y): # x 和 y 是 NumPy 數組 nx = x / np.sqrt(np.sum(x**2)) # x的正規化 ny = y / np.sqrt(np.sum(y**2)) # y的正規化 return np.dot(nx, ny)

為了防止除數為0(比如0向量),所以要給分母加個微小值eps=10^-8

修改后的余弦相似度的實現如下所示(common/util.py)。

def cos_similarity(x, y, eps=1e-8): nx = x / (np.sqrt(np.sum(x ** 2)) + eps) ny = y / (np.sqrt(np.sum(y ** 2)) + eps) return np.dot(nx, ny)

在絕大多數情況下,加上eps不會對最終的計算結果造成影響,因為根據浮點數的舍入誤差,這個微小值會被向量的范數“吸收”掉。而當向量的范數為 0 時,這個微小值可以防止“除數為 0”的錯誤。

利用這個cos_similarity函數,可以求得單詞向量間的相似度。我們嘗試求you 和I的相似度(ch02/similarity.py)。

import syssys.path.append(‘。.’)from common.util import preprocess, create_co_matrix, cos_similarity# 引入文本預處理,創建共現矩陣和計算余弦相似度的函數 text = ‘You say goodbye and I say hello.’corpus, word_to_id, id_to_word = preprocess(text) # 文本預處理vocab_size = len(word_to_id)C = create_co_matrix(corpus, vocab_size) # 創建共現矩陣 c0 = C[word_to_id[‘you’]] # you的詞向量c1 = C[word_to_id[‘i’]] # i的詞向量print(cos_similarity(c0, c1)) # 計算余弦相似度# 0.7071067691154799

從上面的結果可知,you 和 i 的余弦相似度是 0.70 。 . 。,接近1,即存在相似性。

說完單詞向量之間的相似度可以余弦相似度表示,用共現矩陣的元素表示兩個單詞同時出現的次數。而很多常用的無意義詞(比如“the car”)在文中出現次數太多的話,共現矩陣會認為“the”和“car”強相關,這是不合理的!

所以共現矩陣中無意義詞的干擾怎么解決呢?

基于計數的方法改進

接下來將對共現矩陣進行改進,并使用更實用的語料庫,獲得單詞“真實的”分布式表示。

點互信息

引入點互信息(Pointwise Mutual Information,PMI)這一指標。即考慮單詞單獨出現的次數。無意義詞(“the”)單獨出現次數肯定多,這點要考慮進去。

對于隨機變量 x 和 y,它們的 PMI 定義如下:

b7e5d302-603f-11eb-8b86-12bb97331649.png

P(x) 表示 x 發生的概率,

P(y) 表示 y 發生的概率,

P(x, y) 表示 x 和 y 同時發生的概率。

PMI 的值越高,表明相關性越強。

例如設X = “the”,Y = “car”

P(“the”) = “the”出現的次數

P(“car”) = “car”出現的次數

P(“the car”) = “the car”共同出現的次數

“the”單獨出現的次數多,所以P(“the”)分母也就大,也就抵消掉了the的作用啦。

怎么表示概率呢?簡單的方式就是用共現矩陣來表示概率,因此也能表示出PMI。也就是用單詞出現的次數表示概率。

bb80439e-603f-11eb-8b86-12bb97331649.png

N:語料單詞總數;

C(X):X出現的次數 ;

C(X,Y):X,Y共現的次數;

舉個栗子:

這里假設有一個文本語料庫。單詞總數量(N)為 10 000,the 出現 100 次,car 出現 20 次,drive 出現 10 次,the 和 car 共現 10 次,car 和 drive 共現 5 次。 這時,如果從共現次數的角度來看,the 和 car 的相關性更強。 而如果從 PMI 的角度來看,結果是怎樣的呢?

bc151866-603f-11eb-8b86-12bb97331649.png

結果表明,在使用 PMI 的情況下,drive 和 car 具有更強的相關性。這是我們想要的結果。之所以出現這個結果,是因為我們考慮了單詞單獨出現的次數。因為 the 本身出現得多,所以 PMI的得分被拉低了。

但也存在一個問題。

當兩個單詞的共現次數為 0 時,log20 = ?∞。為了解決這個問題,實際上我們會使用正的點互信息(Positive PMI,PPMI)。

解決辦法

用PPMI (Positive PMI,正的點互信息)來表示詞之間的相關性

正的點互信息

PPMI(x,y) = max(0, PMI(x,y)) ,即當PMI為負數的時候,視作0。

所以,PPMI構建的矩陣要優于共現矩陣(因為排除了像the等無意義詞的干擾呀)。所以PPMI是更好的詞向量。

實現將共現矩陣轉化為PPMI 矩陣的函數為 ppmi(C, verbose=False, eps=1e-8)。這里不再贅述,我們只需要調用,需要看源代碼的去(common/util.py)

如何調用使用它呢?可以像下面這樣進行實現(ch02/ppmi.py)。

import syssys.path.append(‘。.’)import numpy as npfrom common.util import preprocess, create_co_matrix, cos_similarity,ppmi text = ‘You say goodbye and I say hello.’corpus, word_to_id, id_to_word = preprocess(text) # 文本預處理vocab_size = len(word_to_id)C = create_co_matrix(corpus, vocab_size) # 創建共現矩陣W = ppmi(C) # 將共現矩陣 ——》 PPMI 矩陣np.set_printoptions(precision=3) # 設置有效位數為3位print(‘covariance matrix’)print(C)print(‘-’*50)print(‘PPMI’)print(W)

運行該文件,可以得到:

covariance matrix[[0 1 0 0 0 0 0] [1 0 1 0 1 1 0] [0 1 0 1 0 0 0] [0 0 1 0 1 0 0] [0 1 0 1 0 0 0] [0 1 0 0 0 0 1] [0 0 0 0 0 1 0]]--------------------------------------------------PPMI[[ 0. 1.807 0. 0. 0. 0. 0. ] [ 1.807 0. 0.807 0. 0.807 0.807 0. ] [ 0. 0.807 0. 1.807 0. 0. 0. ] [ 0. 0. 1.807 0. 1.807 0. 0. ] [ 0. 0.807 0. 1.807 0. 0. 0. ] [ 0. 0.807 0. 0. 0. 0. 2.807] [ 0. 0. 0. 0. 0. 2.807 0. ]]

這樣一來,我們就成功的將共現矩陣轉化為了 PPMI 矩陣啦,也獲取了一個更好的單詞向量!

但是PPMI矩陣也存在很明顯的問題

維度爆炸

矩陣稀疏

如果語料庫的詞匯量達到10 萬,則詞向量的維數也同樣達到 10 萬。處理 10 萬維向量是不現實的。

另外,我們可以看得出該矩陣很多元素都是 0。這表明向量中的絕大多數元素并不重要,也就是說,每個元素擁有的“重要性”很低。這樣的向量也容易受到噪聲影響,穩健性差。

對于這些問題,一個常見的方法是向量降維。

解決辦法:降維

降維:減少向量維度(盡量保留重要信息)。發現重要的軸/分布廣的軸,將二維數據變一維數據。

目的:從稀疏矩陣中找到重要的軸,用更少的維度去表示詞向量。

bd2a02b6-603f-11eb-8b86-12bb97331649.png

降維的方法有很多,這里我們使用奇異值分解(Singular Value Decomposition,SVD),如下式所示:

bdd95cf2-603f-11eb-8b86-12bb97331649.png

SVD 將任意的矩陣 X 分解為 U、S、V 這 3 個矩陣的乘積,其中 U 和 V 是列向量彼此正交的正交矩陣,S 是除了對角線元素以外其余元素均為 0 的對角矩陣。

be4dc39e-603f-11eb-8b86-12bb97331649.png

在式 (2.7) 中,U 是正交矩陣。這個正交矩陣構成了一些空間中的基軸(基向量),我們可以將矩陣 U 作為“單詞空間”。

S 是對角矩陣,奇異值在對角線上降序排列。

簡單地說,我們可以將奇異值視為“對應的基軸”的重要性。這樣一來,如圖 2-10 所示,減少非重要元素就成為可能。

bee17328-603f-11eb-8b86-12bb97331649.png

如圖 2-10 所示,矩陣 S 的奇異值小,對應的基軸的重要性低,因此,可以通過去除矩陣 U 中的多余的列向量來近似原始矩陣。用我們正在處理的“單詞的 PPMI 矩陣”來說明的話,矩陣 X 的各行包含對應的單詞 ID的單詞向量,這些單詞向量使用降維后的矩陣 U‘表示。

想從數學角度仔細理解SVD的讀者,請參考文獻[20] 等。

接下來將用代碼實現 SVD ,這里可以使用 NumPy 的linalg模塊中的 svd 方法。linalg 是 linear algebra(線性代數)的簡稱。下面,我們創建一個共現矩陣,將其轉化為 PPMI 矩陣,然后對其進行 SVD降維(h02/count_method_small.py)。

import syssys.path.append(’。.‘)import numpy as npimport matplotlib.pyplot as pltfrom common.util import preprocess, create_co_matrix, ppmi text = ’You say goodbye and I say hello.‘corpus, word_to_id, id_to_word = preprocess(text)vocab_size = len(id_to_word)C = create_co_matrix(corpus, vocab_size, window_size=1)W = ppmi(C) # SVDU, S, V = np.linalg.svd(W) # 變量U已成為密集向量

SVD 執行完畢。上面的變量 U 包含經過 SVD 轉化的密集向量表示(稀疏的反義詞,就是沒那么多0啦)。現在,我們來看一下它的內容。單詞 ID 為 0 的單詞向量you如下。

print(C[0]) # 共現矩陣(簡單的用次數來表示)# [0 1 0 0 0 0 0] print(W[0]) # PPMI矩陣(用PPMI指標(概率)表示)# [ 0. 1.807 0. 0. 0. 0. 0. ] print(U[0]) # 做了SVD降維# [ 3.409e-01 -1.110e-16 -1.205e-01 -4.441e-16 0.000e+00 -9.323e-01# 2.226e-16]

如上所示,原先的稀疏向量 W[0] 經過 SVD 被轉化成了密集向量 U[0]。

但SVD同樣也有缺點:速度太慢

加快方法:采用Truncated SVD(截去奇異值較小的部分,實現高速化)

如果矩陣大小是 N,SVD 的計算的復雜度將達到 O(N3)。這意味著 SVD 需要與 N 的立方成比例的計算量。現實中這樣的計算量是做不到的,所以往往會使用 Truncated SVD等更快的方法。

Truncated SVD 通過截去(truncated)奇異值較小的部分,從而實現高速化。下面,我們將使用 sklearn庫的 Truncated SVD。

以上都是用的一句話語料來舉的例子,接下來要來“真的”了!

使用真的更大的語料庫:Penn Treebank(PTB數據集)

PTB數據集

這個 PTB 語料庫是以文本文件的形式提供的,與原始的 PTB 的文章相比,多了若干預處理,包括將稀有單詞替換成特殊字符 《unk》( unknown 的簡稱),將具體的數字替換成“N”等。

作為參考,圖 2-12 給出了 PTB 語料庫的部分內容。一行保存一個句子。

bf7f7226-603f-11eb-8b86-12bb97331649.png

這里,我們還要將所有句子連接起來,在每個句子的結尾處插入一個特殊字符 《eos》(end of sentence 的簡稱)。

接下來我們將代碼實現如何使用PTB數據集。

import syssys.path.append(’。.‘)from dataset import ptb corpus, word_to_id, id_to_word = ptb.load_data(’train‘) # 訓練用數據 print(’corpus size:‘, len(corpus))print(’corpus[:30]:‘, corpus[:30])print()print(’id_to_word[0]:‘, id_to_word[0])print(’id_to_word[1]:‘, id_to_word[1])print(’id_to_word[2]:‘, id_to_word[2])print()print(“word_to_id[’car‘]:”, word_to_id[’car‘])print(“word_to_id[’happy‘]:”, word_to_id[’happy‘])print(“word_to_id[’lexus‘]:”, word_to_id[’lexus‘])

結果如下所示:

corpus size: 929589 # 數據集中詞總數corpus[:30]: [ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 1819 20 21 22 23 24 25 26 27 28 29] id_to_word[0]: aerid_to_word[1]: banknoteid_to_word[2]: berlitz word_to_id[’car‘]: 3856word_to_id[’happy‘]: 4428word_to_id[’lexus‘]: 7426

和之前一樣,corpus 中保存了單詞 ID 列表,id_to_word 是將單詞 ID 轉化為單詞的字典,word_to_id 是將單詞轉化為單詞 ID 的字典。

如上面的代碼所示,使用 ptb.load_data() 加載數據。此時,指定參數 ’train‘、’test‘ 和 ’valid‘ 中的一個,它們分別對應訓練用數據、測試用數據和驗證用數據中的一個。以上就是 ptb.py 文件的使用方法。

加載PTB數據集的代碼 :dataset/ptb.py

使用PTB數據集的例子:ch2/show_ptb.py

基于計數(統計)的方法利用PTB數據集的代碼:ch02/count_method_big.py

總結

詞向量表示總共介紹了:

基于同義詞詞典的方法

基于計數統計的方法

同義詞詞典需要人工定義詞之間的相關性,很費力;

使用計數統計的方法可以自動的獲取詞向量表示。

用計數統計的方法表示詞向量的步驟:

使用語料庫(使用語料庫對單詞進行向量化是主流方法)

計算上下文單詞共同出現的次數(共現矩陣)

轉化為PPMI矩陣(為了減少無意義詞的干擾)

基于SVD降維(解決維度爆炸和矩陣稀疏問題,以提高穩健性)

從而獲得了每個單詞的分布式表示,也就是詞向量表示,每個單詞表示為固定長度的密集向量。(單詞的分布式表示=詞向量表示)

在單詞的向量空間中,含義上接近的單詞距離上也更接近。

使用語料庫對單詞進行向量化是主流方法。

其實在海量數據的今天,基于計數統計的方法難以處理大規模的數據集,統計方法是需要一次性統計整個語料庫,需要一次性處理全部的數據,而SVD降維的復雜度又太大,于是將推出——基于推理的方法,也就是基于神經網絡的方法。

神經網絡一次只需要處理一個mini-batch的數據進行學習,并且反復更新網絡權重。

基于推理(神經網絡)的方法,最著名的就是Word2Vec。下一次我們會詳細的介紹它的優點缺點以及使用方法噢!

原文標題:小白跟學系列之手把手搭建NLP經典模型-2(含代碼)

文章出處:【微信公眾號:深度學習自然語言處理】歡迎添加關注!文章轉載請注明出處。

責任編輯:haq

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 神經網絡
    +關注

    關注

    42

    文章

    4772

    瀏覽量

    100857
  • nlp
    nlp
    +關注

    關注

    1

    文章

    489

    瀏覽量

    22052

原文標題:小白跟學系列之手把手搭建NLP經典模型-2(含代碼)

文章出處:【微信號:zenRRan,微信公眾號:深度學習自然語言處理】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    源碼開放 智能監測電源管理教程寶典!

    源碼開放,今天我們學習的是電源管理系統的核心功能模塊,手把手教你如何通過不同的技術手段實現有效的電源管理。
    的頭像 發表于 12-11 09:26 ?280次閱讀
    源碼開放  智能監測電源管理教程寶典!

    Air780E模組LuatOS開發實戰 —— 手把手教你搞定數據打包解包

    本文要說的是低功耗4G模組Air780E的LuatOS開發實戰,我將手把手教你搞定數據打包解包。
    的頭像 發表于 12-03 11:17 ?199次閱讀
    Air780E模組LuatOS開發實戰 —— <b class='flag-5'>手把手</b><b class='flag-5'>教你</b>搞定數據打包解包

    第14章-藍牙遙控小車 藍牙串口通訊講解藍牙APP遙控小車 藍牙串口通訊講解

    第14章-藍牙遙控小車 手把手做藍牙APP遙控小車 藍牙串口通訊講解
    的頭像 發表于 08-21 16:24 ?783次閱讀
    第14章-藍牙遙控小車 藍牙串口通訊講解藍牙APP遙控小車 藍牙串口通訊講解

    手把手教你通過宏集物聯網工控屏&amp;網關進行協議轉換,將底層PLC/傳感器的數據轉換為TCP協議并傳輸到用戶

    手把手教你通過宏集物聯網工控屏&網關進行協議轉換,將底層PLC/傳感器的數據轉換為TCP協議并傳輸到用戶終端
    的頭像 發表于 08-15 13:29 ?531次閱讀
    <b class='flag-5'>手把手</b><b class='flag-5'>教你</b>通過宏集物聯網工控屏&amp;網關進行協議轉換,將底層PLC/傳感器的數據轉換為TCP協議并傳輸到用戶

    nlp邏輯層次模型的特點

    NLP(自然語言處理)邏輯層次模型是一種用于理解和生成自然語言文本的計算模型。它將自然語言文本分解為不同的層次,以便于計算機更好地處理和理解。以下是對NLP邏輯層次
    的頭像 發表于 07-09 10:39 ?407次閱讀

    nlp自然語言處理模型怎么做

    的進展。本文將詳細介紹NLP模型的構建過程,包括數據預處理、模型選擇、訓練與優化等方面。 數據預處理 數據預處理是NLP模型構建的第一步,其
    的頭像 發表于 07-05 09:59 ?654次閱讀

    使用PyTorch搭建Transformer模型

    Transformer模型自其問世以來,在自然語言處理(NLP)領域取得了巨大的成功,并成為了許多先進模型(如BERT、GPT等)的基礎。本文將深入解讀如何使用PyTorch框架搭建T
    的頭像 發表于 07-02 11:41 ?1666次閱讀

    手把手教你在orcad中設置CIS元器件數據庫,提高工作效率

    元器件數據庫,就是實現上述查找元件、放置元件時所需要調用的數據庫。本文將手把手教你如何在orcad中配置CIS元器件數據庫。
    的頭像 發表于 06-15 17:27 ?6299次閱讀
    <b class='flag-5'>手把手</b><b class='flag-5'>教你</b>在orcad中設置CIS元器件數據庫,提高工作效率

    手把手教你使用物模型連接DDSU電表

    模型其實就是云平臺對產品功能的數字化描述。以“燈”為例,最簡單的“燈”具有“開”和“關”屬性,只需要在平臺定義一個布爾量的數據點位,有些高級的“燈”還具有“亮度”、“色溫”、“顏色”等屬性,可以
    的頭像 發表于 06-14 08:21 ?448次閱讀
    <b class='flag-5'>手把手</b><b class='flag-5'>教你</b>使用物<b class='flag-5'>模型</b>連接DDSU電表

    手把手教你排序算法怎么寫

    今天以直接插入排序算法,給大家分享一下排序算法的實現思路,主要包含以下部分內容:插入排序介紹插入排序算法實現手把手教你排序算法怎么寫在添加新的記錄時,使用順序查找的方式找到其要插入的位置,然后將
    的頭像 發表于 06-04 08:03 ?709次閱讀
    <b class='flag-5'>手把手</b><b class='flag-5'>教你</b>排序算法怎么寫

    手把手帶你移植HAL庫函數

    開發者更高效地進行嵌入式開發。手把手帶你移植HAL庫函數HAL庫提供了一套抽象接口,使開發者無需直接操作底層硬件寄存器,就能實現對硬件的控制。這種抽象使得代碼能夠更
    的頭像 發表于 05-18 08:04 ?1960次閱讀
    <b class='flag-5'>手把手</b>帶你移植HAL庫函數

    無刷電機無感FOC控制培訓系列課程

    | 本工作室推出電機控制無感foc電機控制系列培訓課程本課程主要讓想進階的算法工程師,和剛參加工作的工程師或者在校學生能夠進一步提高自己的技能,1.從企業用人角度手把手教你做電機控制,提高你的個人
    發表于 03-10 13:52

    【飛騰派4G版免費試用】4.手把手玩轉QT界面設計

    完成了使用Qt Designer進行界面設計的全部流程!是不是覺得像魔法一樣神奇呢?趕緊試試吧! 接上三篇: 【飛騰派4G版免費試用】1.實戰交叉編譯環境搭建手把手uboot編譯 【飛騰派4G版免費
    發表于 01-27 12:49

    使用DPort-ECT搭建EtherCAT從站step by step

    為了讓客戶更好地使用ZLG致遠電子的集成式EtherCAT從站模塊DPort-ECT,本文手把手教你如何使用DPort-ECT模塊和EPC6450-DP評估板快速搭建一個的EtherCAT從站。設備
    的頭像 發表于 01-26 08:25 ?860次閱讀
    使用DPort-ECT<b class='flag-5'>搭建</b>EtherCAT從站step by step

    工程送樣!手把手教你用好廣和通RedCap模組FG131&amp;amp;FG132系列

    工程送樣!手把手教你用好廣和通RedCap模組FG131&FG132系列
    的頭像 發表于 01-11 18:22 ?708次閱讀
    工程送樣!<b class='flag-5'>手把手</b><b class='flag-5'>教你</b>用好廣和通RedCap模組FG131&amp;amp;FG132系列
    主站蜘蛛池模板: 久久这里只有精品国产99| 99精品在线免费| 51精品少妇人妻AV一区二区| 高跟丝袜岳第一次| 久久精品国产免费播高清无卡| 日本久久不射| 一二三四视频免费社区5| 法国剧丝袜情版h级在线电影| 久久精品亚洲国产AV涩情| 桃花在线视频观看免费| 7756短视频| 黄色直接观看| 视频成人app永久在线观看| 999久久久国产| 精品福利一区| 窝窝影院午夜看片毛片| caoporn超碰| 久久综合中文字幕无码| 亚洲AV色香蕉一区二区9255| 成人免费网址在线| 免费毛片在线播放| 伊人久久大香线蕉观看| 国产欧美一区二区三区在线看| 国产成人免费网站在线观看| 毛片手机在线| 少女free大陆| chinese东北老年tv视频| 恋夜影视列表免费安卓手机版| 亚洲qingse中文字幕久久| 丰满少妇发泄14p| 人人干人人看| 99久久夜色精品国产亚洲AV卜| 久久综合九色综合国产| 亚洲精品在线观看视频| 国产精品18久久久久网站| 久久99国产精品蜜臀AV| 西施打开双腿下面好紧| 贵妃高h荡肉呻吟np杨玉环| 日本久久和电影| a视频免费在线观看| 男女XX00上下抽搐动态图|