成人性生交大片免费看视频r_亚洲综合极品香蕉久久网_在线视频免费观看一区_亚洲精品亚洲人成人网在线播放_国产精品毛片av_久久久久国产精品www_亚洲国产一区二区三区在线播_日韩一区二区三区四区区区_亚洲精品国产无套在线观_国产免费www

主頁 > 知識庫 > torchtext入門教程必看,帶你輕松玩轉(zhuǎn)文本數(shù)據(jù)處理

torchtext入門教程必看,帶你輕松玩轉(zhuǎn)文本數(shù)據(jù)處理

熱門標(biāo)簽:哈爾濱ai外呼系統(tǒng)定制 騰訊外呼線路 公司電話機(jī)器人 激戰(zhàn)2地圖標(biāo)注 廣告地圖標(biāo)注app 唐山智能外呼系統(tǒng)一般多少錢 陜西金融外呼系統(tǒng) 海南400電話如何申請 白銀外呼系統(tǒng)

用深度學(xué)習(xí)做nlp也有一段時(shí)間了,熟悉這塊內(nèi)容的同學(xué)都知道,實(shí)踐算法的時(shí)候,寫模型是個(gè)簡單的事,最麻煩的是數(shù)據(jù)處理,數(shù)據(jù)處理不僅會浪費(fèi)我們大部分時(shí)間,而且會消耗很大的計(jì)算資源,浪費(fèi)人力物力。

今年開始接觸pytorch,簡潔的API,動(dòng)態(tài)圖,更加靈活的編寫模式,諸多優(yōu)點(diǎn)不用多說。

最近嘗試使用torchtext工具,這里想先說明的是,torchtext并不是pytorch所獨(dú)有的,使用其它深度學(xué)習(xí)框架,torchtext仍然可以使用。

但是比較麻煩的是,并沒有很好很全面的torchtext教程,給同學(xué)們?nèi)腴T造成了一定麻煩,這也是我寫這篇文章的目的。

首先整體介紹一下torchtext的組件

torchtext包含以下組件:

Field :主要包含以下數(shù)據(jù)預(yù)處理的配置信息,比如指定分詞方法,是否轉(zhuǎn)成小寫,起始字符,結(jié)束字符,補(bǔ)全字符以及詞典等等

Dataset :繼承自pytorch的Dataset,用于加載數(shù)據(jù),提供了TabularDataset可以指點(diǎn)路徑,格式,F(xiàn)ield信息就可以方便的完成數(shù)據(jù)加載。同時(shí)torchtext還提供預(yù)先構(gòu)建的常用數(shù)據(jù)集的Dataset對象,可以直接加載使用,splits方法可以同時(shí)加載訓(xùn)練集,驗(yàn)證集和測試集。

Iterator : 主要是數(shù)據(jù)輸出的模型的迭代器,可以支持batch定制

1. Field

Field 包含一寫文本處理的通用參數(shù)的設(shè)置,同時(shí)還包含一個(gè)詞典對象,可以把文本數(shù)據(jù)表示成數(shù)字類型,進(jìn)而可以把文本表示成需要的tensor類型

以下是Field對象包含的參數(shù):

sequential: 是否把數(shù)據(jù)表示成序列,如果是False, 不能使用分詞 默認(rèn)值: True.

use_vocab: 是否使用詞典對象. 如果是False 數(shù)據(jù)的類型必須已經(jīng)是數(shù)值類型. 默認(rèn)值: True.

init_token: 每一條數(shù)據(jù)的起始字符 默認(rèn)值: None.

eos_token: 每條數(shù)據(jù)的結(jié)尾字符 默認(rèn)值: None.

fix_length: 修改每條數(shù)據(jù)的長度為該值,不夠的用pad_token補(bǔ)全. 默認(rèn)值: None.

tensor_type: 把數(shù)據(jù)轉(zhuǎn)換成的tensor類型 默認(rèn)值: torch.LongTensor.

preprocessing:在分詞之后和數(shù)值化之前使用的管道 默認(rèn)值: None.

postprocessing: 數(shù)值化之后和轉(zhuǎn)化成tensor之前使用的管道默認(rèn)值: None.

lower: 是否把數(shù)據(jù)轉(zhuǎn)化為小寫 默認(rèn)值: False.

tokenize: 分詞函數(shù). 默認(rèn)值: str.split.

include_lengths: 是否返回一個(gè)已經(jīng)補(bǔ)全的最小batch的元組和和一個(gè)包含每條數(shù)據(jù)長度的列表 . 默認(rèn)值: False.

batch_first: Whether to produce tensors with the batch dimension first. 默認(rèn)值: False.

pad_token: 用于補(bǔ)全的字符. 默認(rèn)值: "pad>".

unk_token: 不存在詞典里的字符. 默認(rèn)值: "unk>".

pad_first: 是否補(bǔ)全第一個(gè)字符. 默認(rèn)值: False.

重要的幾個(gè)方法:

pad(minibatch): 在一個(gè)batch對齊每條數(shù)據(jù)

build_vocab(): 建立詞典

numericalize(): 把文本數(shù)據(jù)數(shù)值化,返回tensor

簡單的栗子如下,建一個(gè)Field對象

TEXT = data.Field(tokenize=data.get_tokenizer('spacy'), 
                  init_token='SOS>', eos_token='EOS>',lower=True)

2.Dataset

torchtext的Dataset是繼承自pytorch的Dataset,提供了一個(gè)可以下載壓縮數(shù)據(jù)并解壓的方法(支持.zip, .gz, .tgz)

splits方法可以同時(shí)讀取訓(xùn)練集,驗(yàn)證集,測試集

TabularDataset可以很方便的讀取CSV, TSV, or JSON格式的文件,例子如下:

train, val, test = data.TabularDataset.splits(
        path='./data/', train='train.tsv',
        validation='val.tsv', test='test.tsv', format='tsv',
        fields=[('Text', TEXT), ('Label', LABEL)])

加載數(shù)據(jù)后可以建立詞典,建立詞典的時(shí)候可以使用與訓(xùn)練的word vector

TEXT.build_vocab(train, vectors="glove.6B.100d")

3. Iterator

Iterator是torchtext到模型的輸出,它提供了我們對數(shù)據(jù)的一般處理方式,比如打亂,排序,等等,可以動(dòng)態(tài)修改batch大小,這里也有splits方法 可以同時(shí)輸出訓(xùn)練集,驗(yàn)證集,測試集

參數(shù)如下:

dataset: 加載的數(shù)據(jù)集

batch_size: Batch 大小.

batch_size_fn: 產(chǎn)生動(dòng)態(tài)的batch大小 的函數(shù)

sort_key: 排序的key

train: 是否是一個(gè)訓(xùn)練集

repeat: 是否在不同epoch中重復(fù)迭代

shuffle: 是否打亂數(shù)據(jù)

sort: 是否對數(shù)據(jù)進(jìn)行排序

sort_within_batch: batch內(nèi)部是否排序

device: 建立batch的設(shè)備 -1:CPU ;0,1 ...:對應(yīng)的GPU

使用方式如下:

train_iter, val_iter, test_iter = data.Iterator.splits(
        (train, val, test), sort_key=lambda x: len(x.Text),
        batch_sizes=(32, 256, 256), device=-1)

4.其他

torchtext提供常用文本數(shù)據(jù)集,并可以直接加載使用:

train,val,test = datasets.WikiText2.splits(text_field=TEXT)

現(xiàn)在包含的數(shù)據(jù)集包括:

Sentiment analysis: SST and IMDb
Question classification: TREC
Entailment: SNLI
Language modeling: WikiText-2
Machine translation: Multi30k, IWSLT, WMT14

完整例子如下,短短幾行就把詞典和數(shù)據(jù)batch做好了。

import spacy
import torch
from torchtext import data, datasets
spacy_en = spacy.load('en')
def tokenizer(text): # create a tokenizer function
    return [tok.text for tok in spacy_en.tokenizer(text)]
TEXT = data.Field(sequential=True, tokenize=tokenizer, lower=True, fix_length=150)
LABEL = data.Field(sequential=False, use_vocab=False)
train, val, test = data.TabularDataset.splits(
        path='./data/', train='train.tsv',
        validation='val.tsv', test='test.tsv', format='tsv',
        fields=[('Text', TEXT), ('Label', LABEL)])
TEXT.build_vocab(train, vectors="glove.6B.100d")
train_iter, val_iter, test_iter = data.Iterator.splits(
        (train, val, test), sort_key=lambda x: len(x.Text),
        batch_sizes=(32, 256, 256), device=-1)
vocab = TEXT.vocab

補(bǔ)充:使用TorchText處理我們自己的數(shù)據(jù)集

TorchText可以讀取三種數(shù)據(jù)格式:json, tsv (tab separated values 制表分隔值)和csv(comma separated values 逗號分隔值)。

處理JSON數(shù)據(jù)

從json開始,你的數(shù)據(jù)必須是json行格式,也就是說,它必須是這樣的:

{"name": "John", "location": "United Kingdom", "age": 42, "quote": ["i", "love", "the", "united kingdom"]}
{"name": "Mary", "location": "United States", "age": 36, "quote": ["i", "want", "more", "telescopes"]}

也就是說,每一行都是一個(gè)json對象。data/trian.json為例。

然后我們定義字段:

from torchtext import data
from torchtext import datasets
NAME = data.Field()
SAYING = data.Field()
PLACE = data.Field()

接下來,我們必須告訴TorchText哪個(gè)字段應(yīng)用于json對象的哪個(gè)元素。

對于json數(shù)據(jù),我們必須創(chuàng)建一個(gè)字典:

鍵與json對象的鍵匹配

值為元組,其中:

第一個(gè)元素成為batch對象的屬性名

第二個(gè)元素是字段的名稱

一些注意事項(xiàng):

fields字典中鍵的順序并不重要,只要它的鍵與json數(shù)據(jù)鍵匹配即可。

字段名不必與json對象中的鍵匹配,例如,我們使用PLACE來表示“l(fā)ocation”字段。

當(dāng)處理json數(shù)據(jù)時(shí),并不是所有的鍵都必須使用,例如,我們沒有使用“age”字段。

同樣,如果json字段的值是一個(gè)字符串,那么將應(yīng)用字段標(biāo)記化(默認(rèn)情況下是將字符串按空格分隔),然而,如果值是一個(gè)列表,則不應(yīng)用標(biāo)記化。通常情況下,將數(shù)據(jù)標(biāo)記為一個(gè)列表是一個(gè)好主意,這節(jié)省了時(shí)間,因?yàn)槟槐氐却齌orchText來做這件事。

json字段的值不必是相同的類型。有些例子的“引號”可以是字符串,有些則是列表。標(biāo)記化將只應(yīng)用于那些以“引號”表示字符串的字符串。

如果你正在使用一個(gè)json字段,每個(gè)例子必須有一個(gè)該字段的實(shí)例,例如在這個(gè)例子中所有的例子必須有一個(gè)name,location和quote。但是,由于我們沒有使用age字段,因此示例中沒有age字段也沒有關(guān)系。

fields = {'name': ('n', NAME), 'location': ('p', PLACE), 'quote': ('s', SAYING)}

現(xiàn)在,在訓(xùn)練循環(huán)中,我們可以通過數(shù)據(jù)迭代器進(jìn)行迭代并且通過batch.n訪問name,通過batch.p訪問location,通過batch.s訪問quote。

然后我們使用TabularDataset.splits函數(shù)創(chuàng)建我們的數(shù)據(jù)集(train_data和test_data)

path參數(shù)指定兩個(gè)數(shù)據(jù)集中共同的頂級文件夾,train和test參數(shù)指定每個(gè)數(shù)據(jù)集的文件名,例如,這里的train數(shù)據(jù)集位于data/train.json。

我們告訴函數(shù)我們正在使用json數(shù)據(jù),并將前面定義的fields字典傳遞給它。

train_data, test_data = data.TabularDataset.splits(
                            path = 'data',
                            train = 'train.json',
                            test = 'test.json',
                            format = 'json',
                            fields = fields
)

如果已經(jīng)有驗(yàn)證數(shù)據(jù)集,則可以將其路徑作為validation 參數(shù)傳遞。

train_data, valid_data, test_data = data.TabularDataset.splits(
                                        path = 'data',
                                        train = 'train.json',
                                        validation = 'valid.json',
                                        test = 'test.json',
                                        format = 'json',
                                        fields = fields
)

然后,我們可以查看一個(gè)示例,以確保它已經(jīng)正確地工作。

請注意字段名(n、p和s)是如何與fields字典中定義的內(nèi)容匹配的。

還請注意p中的單詞“United Kingdom”是如何被標(biāo)記化分開的,而s中的“United Kingdom”則沒有。這是由于前面提到的原因,TorchText假設(shè)任何作為列表的json字段都已經(jīng)被標(biāo)記化了,并且不再應(yīng)用進(jìn)一步的標(biāo)記化。

print(vars(train_data[0]))
{'n': ['John'], 'p': ['United', 'Kingdom'], 's': ['i', 'love', 'the', 'united kingdom']}

現(xiàn)在我們可以使用train_data、test_data和valid_data來構(gòu)建詞匯表并創(chuàng)建迭代器。我們可以使用batch.n, batch.p and batch.s訪問分別表示names、places和sayings的所有屬性。

處理CSV/TSV數(shù)據(jù)

csv和tsv非常相似,只是csv的元素用逗號分隔,而tsv用制表符分隔。

用上面的例子,我們的tsv數(shù)據(jù)將會是:

name    location    age quote
John    United Kingdom  42  i love the united kingdom
Mary    United States   36  i want more telescopes

也就是說,每一行的元素都由制表符分隔,每行有一個(gè)示例。第一行通常是標(biāo)題(即每個(gè)列的名稱),但你的數(shù)據(jù)也可能沒有標(biāo)題。

tsv或csv數(shù)據(jù)中不能有列表。

字段的定義方式與json稍有不同?,F(xiàn)在我們使用一個(gè)元組列表,其中每個(gè)元素也是一個(gè)元組。這些內(nèi)部元組的第一個(gè)元素將成為batch對象的屬性名,第二個(gè)元素是字段名。

與json數(shù)據(jù)不同,元組必須與tsv數(shù)據(jù)中的順序相同。因此,當(dāng)跳過一列數(shù)據(jù)時(shí),需要使用一個(gè)none元組,如果沒有,那么我們的SAYING字段將應(yīng)用到tsv數(shù)據(jù)的age列,而quote列將不會被使用。

但是,如果您只想使用name和age列,您可以只使用兩個(gè)元組,因?yàn)樗鼈兪乔皟蓚€(gè)列。

我們更改TabularDataset以讀取正確的.tsv文件,并將format參數(shù)更改為'tsv'。

如果你的數(shù)據(jù)有一個(gè)標(biāo)題頭,我們的數(shù)據(jù)就有,它必須通過傳遞skip_header = True來跳過。如果沒有,TorchText會認(rèn)為頭部是一個(gè)例子。默認(rèn)情況下,skip_header為False。

fields = [('n', NAME), ('p', PLACE), (None, None), ('s', SAYING)]
train_data, valid_data, test_data = data.TabularDataset.splits(
                                        path = 'data',
                                        train = 'train.tsv',
                                        validation = 'valid.tsv',
                                        test = 'test.tsv',
                                        format = 'tsv',
                                        fields = fields,
                                        skip_header = True
)
print(vars(train_data[0]))
{'n': ['John'], 'p': ['United', 'Kingdom'], 's': ['i', 'love', 'the', 'united', 'kingdom']}

最后,我們將討論csv文件。

這與tsv文件幾乎完全相同,只是格式參數(shù)設(shè)置為“csv”。

fields = [('n', NAME), ('p', PLACE), (None, None), ('s', SAYING)]
train_data, valid_data, test_data = data.TabularDataset.splits(
                                        path = 'data',
                                        train = 'train.csv',
                                        validation = 'valid.csv',
                                        test = 'test.csv',
                                        format = 'csv',
                                        fields = fields,
                                        skip_header = True
)
print(vars(train_data[0]))
{'n': ['John'], 'p': ['United', 'Kingdom'], 's': ['i', 'love', 'the', 'united', 'kingdom']}

為什么JSON好于CSV/TSV?

csv或tsv數(shù)據(jù)無法存儲列表。這意味著數(shù)據(jù)不能被標(biāo)記化,因此每次運(yùn)行通過TorchText讀取數(shù)據(jù)的Python腳本時(shí),數(shù)據(jù)都必須被標(biāo)記化。使用高級的標(biāo)記器,如spaCy標(biāo)記器,需要不可忽略的大量時(shí)間。因此,最好是對數(shù)據(jù)集進(jìn)行標(biāo)記并以json行格式存儲它們。

如果tsv數(shù)據(jù)中出現(xiàn)制表符,或csv數(shù)據(jù)中出現(xiàn)逗號,TorchText會認(rèn)為它們是列之間的分隔符。這將導(dǎo)致數(shù)據(jù)被錯(cuò)誤地解析。最糟糕的是,TorchText不會提醒你這一點(diǎn),因?yàn)樗鼰o法分辨字段中的制表符/逗號和作為分隔符的制表符/逗號之間的區(qū)別。由于json數(shù)據(jù)本質(zhì)上是一個(gè)字典,您可以通過它的鍵訪問字段中的數(shù)據(jù),所以不必?fù)?dān)心“surprise”分隔符。

迭代器

使用上面的任何數(shù)據(jù)集,我們就可以構(gòu)建詞匯表并創(chuàng)建迭代器。

NAME.build_vocab(train_data)
SAYING.build_vocab(train_data)
PLACE.build_vocab(train_data)

然后,我們可以在定義批處理大小和設(shè)備后,創(chuàng)建迭代器。

默認(rèn)情況下,訓(xùn)練數(shù)據(jù)在每個(gè)epoch進(jìn)行洗牌,但驗(yàn)證/測試數(shù)據(jù)是排序的。然而,TorchText不知道該用什么來排序我們的數(shù)據(jù),如果我們不告訴它,它就會拋出錯(cuò)誤。

有兩種方法來處理這個(gè)問題,你可以通過傳遞sort = False來告訴迭代器不要對驗(yàn)證/測試數(shù)據(jù)進(jìn)行排序,或者你可以通過傳遞sort_key來告訴迭代器如何對數(shù)據(jù)進(jìn)行排序。sort key是一個(gè)函數(shù),它返回一個(gè)用于對數(shù)據(jù)進(jìn)行排序的鍵。例如,lambda x: x.s將根據(jù)它們的s屬性(即它們的quote)對示例進(jìn)行排序。理想情況下,您希望使用sort key,因?yàn)锽ucketIterator將能夠?qū)κ纠M(jìn)行排序,然后最小化每個(gè)批處理中的填充量。

然后,我們可以遍歷迭代器來獲得批量數(shù)據(jù)。注意,默認(rèn)情況下TorchText的批處理維度是在第二維。

import torch
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
BATCH_SIZE = 1
train_iterator, valid_iterator, test_iterator = data.BucketIterator.splits(
    (train_data, valid_data, test_data),
    sort = False, #don't sort test/validation data
    batch_size=BATCH_SIZE,
    device=device)
train_iterator, valid_iterator, test_iterator = data.BucketIterator.splits(
    (train_data, valid_data, test_data),
    sort_key = lambda x: x.s, #sort by s attribute (quote)
    batch_size=BATCH_SIZE,
    device=device)
print('Train:')
for batch in train_iterator:
    print(batch)
    
print('Valid:')
for batch in valid_iterator:
    print(batch)
    
print('Test:')
for batch in test_iterator:
    print(batch)
Train:
[torchtext.data.batch.Batch of size 1]
	[.n]:[torch.cuda.LongTensor of size 1x1 (GPU 0)]
	[.p]:[torch.cuda.LongTensor of size 2x1 (GPU 0)]
	[.s]:[torch.cuda.LongTensor of size 5x1 (GPU 0)]
[torchtext.data.batch.Batch of size 1]
	[.n]:[torch.cuda.LongTensor of size 1x1 (GPU 0)]
	[.p]:[torch.cuda.LongTensor of size 2x1 (GPU 0)]
	[.s]:[torch.cuda.LongTensor of size 4x1 (GPU 0)]
Valid:
[torchtext.data.batch.Batch of size 1]
	[.n]:[torch.cuda.LongTensor of size 1x1 (GPU 0)]
	[.p]:[torch.cuda.LongTensor of size 1x1 (GPU 0)]
	[.s]:[torch.cuda.LongTensor of size 2x1 (GPU 0)]
[torchtext.data.batch.Batch of size 1]
	[.n]:[torch.cuda.LongTensor of size 1x1 (GPU 0)]
	[.p]:[torch.cuda.LongTensor of size 1x1 (GPU 0)]
	[.s]:[torch.cuda.LongTensor of size 4x1 (GPU 0)]
Test:
[torchtext.data.batch.Batch of size 1]
	[.n]:[torch.cuda.LongTensor of size 1x1 (GPU 0)]
	[.p]:[torch.cuda.LongTensor of size 1x1 (GPU 0)]
	[.s]:[torch.cuda.LongTensor of size 3x1 (GPU 0)]
[torchtext.data.batch.Batch of size 1]
	[.n]:[torch.cuda.LongTensor of size 1x1 (GPU 0)]
	[.p]:[torch.cuda.LongTensor of size 2x1 (GPU 0)]
	[.s]:[torch.cuda.LongTensor of size 3x1 (GPU 0)]

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

您可能感興趣的文章:
  • 使用pytorch和torchtext進(jìn)行文本分類的實(shí)例
  • pytorch 數(shù)據(jù)處理:定義自己的數(shù)據(jù)集合實(shí)例
  • PyTorch加載自己的數(shù)據(jù)集實(shí)例詳解
  • pytorch實(shí)現(xiàn)建立自己的數(shù)據(jù)集(以mnist為例)
  • pytorch加載自己的圖像數(shù)據(jù)集實(shí)例

標(biāo)簽:惠州 上海 常德 益陽 四川 黔西 鷹潭 黑龍江

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《torchtext入門教程必看,帶你輕松玩轉(zhuǎn)文本數(shù)據(jù)處理》,本文關(guān)鍵詞  torchtext,入門教程,必看,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《torchtext入門教程必看,帶你輕松玩轉(zhuǎn)文本數(shù)據(jù)處理》相關(guān)的同類信息!
  • 本頁收集關(guān)于torchtext入門教程必看,帶你輕松玩轉(zhuǎn)文本數(shù)據(jù)處理的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    欧美午夜精品久久久| 九九久久久久午夜精选| 国产精品久久三| 免费欧美一级视频| 26uuu国产日韩综合| 男女人搞j网站| 99久久婷婷国产综合精品电影| 午夜精品中文字幕| 日韩电影免费观看中文字幕| jlzzjlzz国产精品久久| 亚洲日本高清| jizzjizzjizz亚洲女| 午夜精品三级视频福利| 国产一区二区三区四区尤物| 欧美一区二区视频在线观看2020| 精品夜夜嗨av一区二区三区| 欧美日韩一区三区四区| 色妞www精品视频| 5858p先锋影音资源网| 久久9精品区-无套内射无码| 可以免费看污视频的网站| 欧美视频三区| 亚洲AV无码成人片在线观看| xxxx日本少妇| 午夜伦理精品一区| 秋霞精品一区二区三区| 久久久久久久久99精品| 国产午夜福利精品| 粉嫩小泬无遮挡久久久久久| 欧美日韩成人在线| 污香蕉视频在线观看| 国产一区二区三区不卡在线观看| 99久久精品免费看国产交换| 爱情岛论坛亚洲首页入口章节| 久青青在线观看视频国产| 国产精品国产福利国产秒拍| 免费日本视频一区| 小水嫩精品福利视频导航| 欧美三级三级三级| 看**视频a级毛片| 中文字幕欧美国内| 乳奴隷乳フ辱julia在线观看| 日本黄色电影网站| 黄色网址免费| 欧美在线一二三| 一区二区三区四区不卡视频| 欧美另类极品videosbest最新版本| 欧美啪啪精品| 国产精品扒开做爽爽爽的视频| 九九视频九九热| 精品999日本| 侵犯稚嫩小箩莉h文系列小说| 99久久国产综合色|国产精品| 国产69精品久久久久9999apgf| 哺乳一区二区三区中文视频| 99色在线视频| 成av人片在线观看www| 牛牛电影国产一区二区| 国产免费一区二区| 综合激情五月婷婷| 伊人午夜电影| 精品无人乱码一区二区三区的优势| 5566成人精品视频免费| 欧美专区福利免费| 69国产成人精品视频软件| 午夜在线一区| 伊人影院在线视频| 宅男宅女性影片资源在线1| 免费福利视频一区| 国产一级在线观看视频| 日本高清久久天堂| 日韩精品视频久久| 免费在线观看的毛片| 激情网站在线观看| 老司机午夜激情| 97色在线视频| 欧美三级伦理在线| 亚洲视频在线一区观看| 午夜久久久久久久久久久| 91久久精品国产91性色69| 不卡一二三区| 欧美三级网色| 国模无码视频一区| 污网站视频在线观看| av片在线观看永久免费| 国产网站一区二区三区| 中文在线а√天堂官网| 97国产一区二区精品久久呦| 欧美高清性xxxxhd| 国产精品久久免费观看| 黑人巨大精品欧美一区二区| 亚洲精华国产精华| 一区两区小视频| 久久午夜鲁丝片| 水蜜桃免费高清视频在线播放| 伊人久久大香| 91精品秘密在线观看| 日本不卡二区| 国产福利91精品| 少妇精品久久久久久久久久| 日产精品99久久久久久| 成人黄色在线播放| 91中文在线| 黄色国产网站在线播放| 日韩一二在线观看| 先锋av资源网| 永久免费网站在线| 白丝女仆被免费网站| 久久国产精彩视频| 欧美成人se01短视频在线看| 无码人妻丰满熟妇区五十路| 亚洲美女91| 久久av老司机精品网站导航| 美女在线视频一区| 欧美久久在线观看| 成人在线网站| 一区二区精品| 色爱综合av| 欧美乱人伦中文字幕在线| 老牛国内精品亚洲成av人片| 337p粉嫩大胆噜噜噜鲁| 亚洲精品成人久久| 久久99久久久久久久久久久| 一区二区蜜桃| 欧美日韩高清影院| xxav国产精品美女主播| 免费在线观看黄色小视频| av大大超碰在线| 黑人精品欧美一区二区蜜桃| 中文字幕在线视频免费观看| 日韩精品视频在线观看一区二区三区| 中文字幕中文字幕精品| 精品国产鲁一鲁一区二区张丽| 亚洲天堂网站在线| 日韩精品在线观看av| 色婷婷综合久久久久久| 销魂美女一区二区三区视频在线| 国产在线拍揄自揄拍无码| 欧美日本高清一区| 五月婷婷亚洲| 成人午夜私人影院| 亚洲男女毛片无遮挡| 美美哒免费高清在线观看视频一区二区| gogo大尺度成人免费视频| 欧美激情一区二区三区高清视频| 中文字幕永久在线不卡| 在线视频cao| 欧美午夜精品一区二区三区| 国产精品永久在线| 一本色道久久综合狠狠躁篇怎么玩| 黄色片免费大全| 日本一区高清在线视频| 成人免费网视频| 亚洲熟妇无码一区二区三区导航| 欧美成人亚洲成人日韩成人| 国产在线精品一区二区中文| 999精品视频一区二区三区| 永久免费看mv网站入口亚洲| 99re这里只有| 精品一区二区久久| 一区两区小视频| 久久国产精品99久久人人澡| 国产曰肥老太婆无遮挡| 日本黄色免费网址| 亚洲第一免费播放区| 欧美日韩精品久久| 久久99久久99精品免观看软件| 亚洲免费一级片| 国产精品成人一区二区| 9999精品免费视频| 欧美性猛交xxxx乱大交丰满| 正在播放精油久久| 国产精品乱子久久久久| 性久久久久久久久| 欧美成人精品h版在线观看| 久久免费视频3| 日韩欧美精品综合| 在线观看欧美| xxxx18hd亚洲hd捆绑| 九色视频网站| 国产毛片视频| 国产精品对白| 黄色小视频免费在线观看| 99国产精品无码| 亚洲欧美另类在线观看| 精品国产sm最大网站免费看| 91网站最新网址| 色综合色狠狠天天综合色| 久久久另类综合| 思思久久精品视频| 国产精品久久久久久久久久白浆| 久久国产精品色av免费看| 中文字幕理伦片免费看| 亚洲一区视频在线| 国产精品久久久久av福利动漫| 国产精品资源在线观看| 久久美女艺术照精彩视频福利播放| 催眠调教后宫乱淫校园| 噜噜噜噜噜在线视频| 99精品网站| 一区二区三区观看| 久久久久久久久久久国产| 青青影院一区二区三区四区| 黄色免费电影网站| 色天天综合久久久久综合片| 国产精品一香蕉国产线看观看| 欧美偷拍一区二区| 香蕉伊大人中文在线观看| 欧美经典一区二区三区| 精品国免费一区二区三区| 欧美性www| 欧美精品一区二区在线播放| 偷偷要 色偷偷| aaa亚洲精品| 无码人妻一区二区三区免费n鬼沢| 精品福利二区三区| 国产一区二区三区免费在线观看| 在线日韩国产网站| 91麻豆国产自产在线观看亚洲| 成人伊人222| 日本三级欧美三级| 激情亚洲综合网| 女人色偷偷aa久久天堂| 日韩免费毛片视频| 成人黄色国产精品网站大全在线免费观看| 最近中文字幕免费mv| 理论片在线观看理伦片| 日韩成人免费| 美女被到爽高潮视频| www.国产黄色| 性视频在线播放| 男人天堂亚洲| 黄在线免费观看| 亚洲 欧美综合在线网络| 中文字幕一区二区三三| 懂色av蜜臀av粉嫩av分享吧| 国产美女一区视频| 999久久久精品视频| 日本视频一区二区| 欧美片第一页| 久久精品国产在热久久| 欧美中文字幕亚洲一区二区va在线| 狠狠一区二区三区| 91美女视频网站| 一本大道久久加勒比香蕉| 在线国产精品视频| 午夜精品视频在线观看一区二区| 91视频免费看| 亚洲激情自拍| 久热爱精品视频线路一| 国产又粗又黄又爽| 色呦呦视频在线| 欧美一级视频在线| 一区二区成人在线观看| 日韩一区亚洲二区| 野外性满足hd| 首播影院在线观看免费观看电视| 久久久久香蕉视频| 国产亚洲色婷婷久久99精品| 精品国产乱码一区二区| 国产91av视频| 亚洲美女搞黄| 欧美黄色一级生活片| 亚洲1卡2卡3卡4卡乱码精品| 国产裸体免费无遮挡| 日韩精品电影网站| 午夜精品免费在线观看| 国产精彩视频一区二区| 中文字幕欧美激情| 日韩欧美中文字幕一区| 91美女福利视频高清| 久热精品在线观看视频| 欧美xxbbb1手交| 中国老太性bbbxxxx| 国外成人在线视频| 日韩欧美在线视频日韩欧美在线视频| 成人91免费视频| 中文字幕av专区| 亚洲美女毛片| 91av视频在线免费观看| 狠狠干狠狠插| av日韩久久| av毛片在线| 亚洲第一视频在线| 在线视频不卡一区二区三区| 福利写真视频网站在线| 91麻豆免费看片| www成人免费| 国产精品福利av| 欧美精品久久久久久久久久| 久久精品二区三区| 色综合天天天天做夜夜夜夜做| 国产免费福利视频| 亚洲日韩成人| 日本福利一区二区| 国精品人妻无码一区二区三区喝尿| av毛片午夜不卡高**水| 日韩欧美在线免费观看视频| 玖草视频在线| 曰本三级在线| 亚洲精品乱码电影在线观看| 极品色av影院| 欧美一区二区三区白人| 国产精品久久久久久久久鸭| 久久久久久夜| 在线色欧美三级视频| 久久久久久久穴| 波多野结衣高清视频| 国产免费成人av| 国产高清精品网站| 亚洲国产日韩a在线播放性色| 国产一区二区在线视频聊天| 91最新在线观看| 久久久国产欧美| 国产系列电影在线播放网址| 亚洲 欧美 综合 另类 中字| 精品入口蜜桃| 999这里有精品| 欧美福利专区| 亚洲精品中文字幕在线播放| 美女福利精品视频| 国产成人福利夜色影视| 日日碰狠狠丁香久燥| 在线观看黄色av| 一区二区日韩在线观看| 欧美肥妇bbwbbw| 一区二区三区日本久久久| 国内在线高清免费视频|