国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频

【NLP保姆級教程】手把手帶你CNN文本分類(附代碼)

共 13705字,需瀏覽 28分鐘

 ·

2021-09-30 02:13



分享一篇老文章,文本分類的原理和代碼詳解,非常適合NLP入門!

寫在前面

本文是對經(jīng)典論文《Convolutional Neural Networks for Sentence Classification[1]》的詳細(xì)復(fù)現(xiàn),(應(yīng)該是)基于TensorFlow 1.1以及python3.6。從數(shù)據(jù)預(yù)處理、模型搭建、模型訓(xùn)練預(yù)測以及可視化一條龍講解,旨在為剛接觸該領(lǐng)域不知道如何下手搭建網(wǎng)絡(luò)的同學(xué)提供一個參考。廢話不說直接進(jìn)入主題吧

NLP中的CNN

論文中是使用的CNN框架來實現(xiàn)對句子的分類,積極或者消極。當(dāng)然這里我們首先必須對CNN有個大概的了解,可以參考我之前的這篇【Deep learning】卷積神經(jīng)網(wǎng)絡(luò)CNN結(jié)構(gòu)。目前主流來看,CNN主要是應(yīng)用在computer vision領(lǐng)域,并且可以說由于CNN的出現(xiàn),使得CV的研究與應(yīng)用都有了質(zhì)的飛躍。

目前對NLP的研究分析應(yīng)用最多的就是RNN系列的框架,比如RNN,GRU,LSTM等等,再加上Attention,基本可以認(rèn)為是NLP的標(biāo)配套餐了。但是在文本分類問題上,相比于RNN,CNN的構(gòu)建和訓(xùn)練更為簡單和快速,并且效果也不差,所以仍然會有一些研究。

那么,CNN到底是怎么應(yīng)用到NLP上的呢?

不同于CV輸入的圖像像素,NLP的輸入是一個個句子或者文檔。句子或文檔在輸入時經(jīng)過embedding(word2vec或者Glove)會被表示成向量矩陣,其中每一行表示一個詞語,行的總數(shù)是句子的長度,列的總數(shù)就是維度。例如一個包含十個詞語的句子,使用了100維的embedding,最后我們就有一個輸入為10x100的矩陣。

在CV中,filters是以一個patch(任意長度x任意寬度)的形式滑過遍歷整個圖像,但是在NLP中,filters會覆蓋到所有的維度,也就是形狀為 [filter_size, embed_size]。更為具體地理解可以看下圖,輸入為一個7x5的矩陣,filters的高度分別為2,3,4,寬度和輸入矩陣一樣為5。每個filter對輸入矩陣進(jìn)行卷積操作得到中間特征,然后通過pooling提取最大值,最終得到一個包含6個值的特征向量。

弄清楚了CNN的結(jié)構(gòu),下面就可以開始實現(xiàn)文本分類任務(wù)了。

數(shù)據(jù)預(yù)處理

原論文中使用了好幾個數(shù)據(jù)集,這里我們只選擇其中的一個——Movie Review Data from Rotten Tomatoes[2]。該數(shù)據(jù)集包括了10662個評論,其中一半positive一半negative。

在數(shù)據(jù)處理階段,主要包括以下幾個部分:

1、load file

def load_data_and_labels(positive_file, negative_file):
#load data from files
positive_examples = list(open(positive_file, "r", encoding='utf-8').readlines())
positive_examples = [s.strip() for s in positive_examples]
negative_examples = list(open(negative_file, "r", encoding='utf-8').readlines())
negative_examples = [s.strip() for s in negative_examples]
# Split by words
x_text = positive_examples + negative_examples
x_text = [clean_str(sent) for sent in x_text]
# Generate labels
positive_labels = [[0, 1] for _ in positive_examples]
negative_labels = [[1, 0] for _ in negative_examples]
y = np.concatenate([positive_labels, negative_labels], 0)
return [x_text, y]

2、clean sentences

def clean_str(string):
string = re.sub(r"[^A-Za-z0-9(),!?\'\`]", " ", string)
string = re.sub(r"\'s", " \'s", string)
string = re.sub(r"\'ve", " \'ve", string)
string = re.sub(r"n\'t", " n\'t", string)
string = re.sub(r"\'re", " \'re", string)
string = re.sub(r"\'d", " \'d", string)
string = re.sub(r"\'ll", " \'ll", string)
string = re.sub(r",", " , ", string)
string = re.sub(r"!", " ! ", string)
string = re.sub(r"\(", " \( ", string)
string = re.sub(r"\)", " \) ", string)
string = re.sub(r"\?", " \? ", string)
string = re.sub(r"\s{2,}", " ", string)
return string.strip().lower()

模型實現(xiàn)

論文中使用的模型如下所示其中第一層為embedding layer,用于把單詞映射到一組向量表示。接下去是一層卷積層,使用了多個filters,這里有3,4,5個單詞一次遍歷。接著是一層max-pooling layer得到了一列長特征向量,然后在dropout 之后使用softmax得出每一類的概率。

在一個CNN類中實現(xiàn)上述模型

class TextCNN(object):
"""
A CNN class for sentence classification
With a embedding layer + a convolutional, max-pooling and softmax layer
"""

def __init__(self, sequence_length, num_classes, vocab_size,
embedding_size, filter_sizes, num_filters, l2_reg_lambda=0.0)
:

"""

:param sequence_length: The length of our sentences
:param num_classes: Number of classes in the output layer(pos and neg)
:param vocab_size: The size of our vocabulary
:param embedding_size: The dimensionality of our embeddings.
:param filter_sizes: The number of words we want our convolutional filters to cover
:param num_filters: The number of filters per filter size
:param l2_reg_lambda: optional

這里再注釋一下filter_sizes和num_filters。filters_sizes是指filter每次處理幾個單詞,num_filters是指每個尺寸的處理包含幾個filter。

1. Input placeholder

tf.placeholder是tensorflow的一種占位符,與feeed_dict同時使用。在訓(xùn)練或者測試模型階段,我們可以通過feed_dict來喂入輸入變量。

# set placeholders for variables
self.input_x = tf.placeholder(tf.int32, [None, sequence_length], name='input_x')
self.input_y = tf.placeholder(tf.float32, [None, num_classes], name='input_y')
self.dropout_keep_prob = tf.placeholder(tf.float32, name='dropout_keep_prob')

tf.placeholder函數(shù)第一個參數(shù)是變量類型,第二個參數(shù)是變量shape,其中None表示sample的個數(shù),第三個name參數(shù)用于指定名字。

dropout_keep_prob變量是在dropout階段使用的,我們在訓(xùn)練的時候選取50%的dropout,在測試時不使用dropout。

2. Embedding layer

我們需要定義的第一個層是embedding layer,用于將詞語轉(zhuǎn)變成為一組向量表示。

 # embedding layer
with tf.name_scope('embedding'):
self.W = tf.Variable(tf.random_uniform([vocab_size, embedding_size], -1.0, 1.0), name='weight')
self.embedded_chars = tf.nn.embedding_lookup(self.W, self.input_x)
# TensorFlow’s convolutional conv2d operation expects a 4-dimensional tensor
# with dimensions corresponding to batch, width, height and channel.
self.embedded_chars_expanded = tf.expand_dims(self.embedded_chars, -1)

W 是在訓(xùn)練過程中學(xué)習(xí)到的參數(shù)矩陣,然后通過tf.nn.embedding_lookup來查找到與input_x相對應(yīng)的向量表示。tf.nn.embedding_lookup返回的結(jié)果是一個三維向量,[None, sequence_length, embedding_size]。但是后一層的卷積層要求輸入為四維向量(batch, width,height,channel)。所以我們要將結(jié)果擴(kuò)展一個維度,才能符合下一層的輸入。

3. Convolution and Max-Pooling Layers

在卷積層中最重要的就是filter?;仡櫛疚牡牡谝粡垐D,我們一共有三種類型的filter,每種類型有兩個。我們需要迭代每個filter去處理輸入矩陣,將最終得到的所有結(jié)果合并為一個大的特征向量。

# conv + max-pooling for each filter
pooled_outputs = []
for i, filter_size in enumerate(filter_sizes):
with tf.name_scope('conv-maxpool-%s' % filter_size):
# conv layer
filter_shape = [filter_size, embedding_size, 1, num_filters]
W = tf.Variable(tf.truncated_normal(filter_shape, stddev=0.1), name='W')
b = tf.Variable(tf.constant(0.1, shape=[num_filters]), name='b')
conv = tf.nn.conv2d(self.embedded_chars_expanded, W, strides=[1,1,1,1],
padding='VALID', name='conv')
# activation
h = tf.nn.relu(tf.nn.bias_add(conv, b), name='relu')
# max pooling
pooled = tf.nn.max_pool(h, ksize=[1, sequence_length-filter_size + 1, 1, 1],
strides=[1,1,1,1], padding='VALID', name='pool')
pooled_outputs.append(pooled)


# combine all the pooled fratures
num_filters_total = num_filters * len(filter_sizes)
self.h_pool = tf.concat(pooled_outputs, 3) # why 3?
self.h_pool_flat = tf.reshape(self.h_pool, [-1, num_filters_total])

這里W 就是filter矩陣, tf.nn.conv2d是tensorflow的卷積操作函數(shù),其中幾個參數(shù)包括

  • strides表示每一次filter滑動的距離,它總是一個四維向量,而且首位和末尾必定要是1,[1, width, height, 1]
  • padding有兩種取值:VALID和SAME。
    • VALID是指不在輸入矩陣周圍填充0,最后得到的output的尺寸小于input;
    • SAME是指在輸入矩陣周圍填充0,最后得到output的尺寸和input一樣;

這里我們使用的是‘VALID’,所以output的尺寸為[1, sequence_length - filter_size + 1, 1, 1]

接下去是一層max-pooling,pooling比較好理解,就是選出其中最大的一個。經(jīng)過這一層的output尺寸為 [batch_size, 1, 1, num_filters]。

4. Dropout layer

這個比較好理解,就是為了防止模型的過擬合,設(shè)置了一個神經(jīng)元激活的概率。每次在dropout層設(shè)置一定概率使部分神經(jīng)元失效, 每次失效的神經(jīng)元都不一樣,所以也可以認(rèn)為是一種bagging的效果。

# dropout
with tf.name_scope('dropout'):
self.h_drop = tf.nn.dropout(self.h_pool_flat, self.dropout_keep_prob)

5. Scores and Predictions

我們可以通過對上述得到的特征進(jìn)行運算得到每個分類的分?jǐn)?shù)score,并且可以通過softmax將score轉(zhuǎn)化成概率分布,選取其中概率最大的一個作為最后的prediction

#score and prediction
with tf.name_scope("output"):
W = tf.get_variable('W', shape=[num_filters_total, num_classes],
initializer = tf.contrib.layers.xavier_initializer())
b = tf.Variable(tf.constant(0.1, shape=[num_classes]), name='b')
l2_loss += tf.nn.l2_loss(W)
l2_loss += tf.nn.l2_loss(b)
self.score = tf.nn.xw_plus_b(self.h_drop, W, b, name='scores')
self.prediction = tf.argmax(self.score, 1, name='prediction')

6. Loss and Accuracy

通過score我們可以計算得出模型的loss,而我們訓(xùn)練的目的就是最小化這個loss。對于分類問題,最常用的損失函數(shù)是cross-entropy 損失

 # mean cross-entropy loss
with tf.name_scope('loss'):
losses = tf.nn.softmax_cross_entropy_with_logits(logits=self.score, labels=self.input_y)
self.loss = tf.reduce_mean(losses) + l2_reg_lambda * l2_loss

為了在訓(xùn)練過程中實時觀測訓(xùn)練情況,我們可以定義一個準(zhǔn)確率

# accuracy
with tf.name_scope('accuracy'):
correct_predictions = tf.equal(self.prediction, tf.argmax(self.input_y, 1))
self.accuracy = tf.reduce_mean(tf.cast(correct_predictions, 'float'), name='accuracy')

到目前為止,我們的模型框架已經(jīng)搭建完成,可以使用Tensorboardd來瞧一瞧到底是個啥樣

模型訓(xùn)練

接下去我們就要開始使用影評數(shù)據(jù)來訓(xùn)練網(wǎng)絡(luò)啦。

創(chuàng)建圖和session

對于Tensorflow有兩個重要的概念:Graph和Session。

  • Session會話可以理解為一個計算的環(huán)境,所有的operation只有在session中才能返回結(jié)果;
  • Graph圖就可以理解為上面那個圖片,在圖里面包含了所有要用到的操作operations和張量tensors。

PS:在一個項目中可以使用多個graph,不過我們一般習(xí)慣只用一個就行。同時,在一個graph中可以有多個session,但是在一個session中不能有多個graph。

with tf.Graph().as_default():
session_conf = tf.ConfigProto(
# allows TensorFlow to fall back on a device with a certain operation implemented
allow_soft_placement= FLAGS.allow_soft_placement,
# allows TensorFlow log on which devices (CPU or GPU) it places operations
log_device_placement=FLAGS.log_device_placement
)
sess = tf.Session(config=session_conf)

Initialize CNN

cnn = TextCNN(sequence_length=x_train.shape[1],
num_classes=y_train.shape[1],
vocab_size= len(vocab_processor.vocabulary_),
embedding_size=FLAGS.embedding_dim,
filter_sizes= list(map(int, FLAGS.filter_sizes.split(','))),
num_filters= FLAGS.num_filters,
l2_reg_lambda= FLAGS.l2_reg_lambda)
global_step = tf.Variable(0, name='global_step', trainable=False)
optimizer = tf.train.AdamOptimizer(1e-3)
grads_and_vars = optimizer.compute_gradients(cnn.loss)
train_op = optimizer.apply_gradients(grads_and_vars, global_step=global_step)

這里train_op的作用就是更新參數(shù),每運行一次train_op,global_step都會增加1。

Summaries

Tensorflow有一個特別實用的操作,summary,它可以記錄訓(xùn)練時參數(shù)或者其他變量的變化情況并可視化到tensorboard。使用tf.summary.FileWriter()函數(shù)可以將summaries寫入到硬盤保存到本地。

# visualise gradient
grad_summaries = []
for g, v in grads_and_vars:
if g is not None:
grad_hist_summary = tf.summary.histogram('{}/grad/hist'.format(v.name),g)
sparsity_summary = tf.summary.scalar('{}/grad/sparsity'.format(v.name), tf.nn.zero_fraction(g))
grad_summaries.append(grad_hist_summary)
grad_summaries.append(sparsity_summary)
grad_summaries_merged = tf.summary.merge(grad_summaries)

# output dir for models and summaries
timestamp = str(time.time())
out_dir = os.path.abspath(os.path.join(os.path.curdir, 'run', timestamp))
print('Writing to {} \n'.format(out_dir))

# summaries for loss and accuracy
loss_summary = tf.summary.scalar('loss', cnn.loss)
accuracy_summary = tf.summary.scalar('accuracy', cnn.accuracy)

# train summaries
train_summary_op = tf.summary.merge([loss_summary, accuracy_summary])
train_summary_dir = os.path.join(out_dir, 'summaries', 'train')
train_summary_writer = tf.summary.FileWriter(train_summary_dir, sess.graph)

# dev summaries
dev_summary_op = tf.summary.merge([loss_summary, accuracy_summary])
dev_summary_dir = os.path.join(out_dir, 'summaries', 'dev')
dev_summary_writer = tf.summary.FileWriter(dev_summary_dir, sess.graph)

Checkpointing

checkpointing的作用就是可以保存每個階段訓(xùn)練模型的參數(shù),然后我們可以根據(jù)準(zhǔn)確率來選取最好的一組參數(shù)。

checkpoint_dir = os.path.abspath(os.path.join(out_dir, 'checkpoints'))
checkpoint_prefix = os.path.join(checkpoint_dir, 'model')
if not os.path.exists(checkpoint_dir):
os.makedirs(checkpoint_dir)
saver = tf.train.Saver(tf.global_variables(), max_to_keep=FLAGS.num_checkpoints)

Initializing the variables

在開始訓(xùn)練之前,我們通常會需要初始化所有的變量。一般使用 tf.global_variables_initializer()就可以了。

Defining a single training step

我們可以定義一個單步訓(xùn)練的函數(shù),使用一個batch的數(shù)據(jù)來更新模型的參數(shù)

def train_step(x_batch, y_batch):
"""
A single training step
:param x_batch:
:param y_batch:
:return:
"""

feed_dict = {
cnn.input_x: x_batch,
cnn.input_y: y_batch,
cnn.dropout_keep_prob: FLAGS.dropout_keep_prob
}
_, step, summaries, loss, accuracy = sess.run(
[train_op, global_step, train_summary_op, cnn.loss, cnn.accuracy],
feed_dict=feed_dict
)
time_str = datetime.datetime.now().isoformat()
print("{}: step {}, loss {:g}, acc {:g}".format(time_str, step, loss, accuracy))
train_summary_writer.add_summary(summaries, step)

這里的feed_dict就是我們前面提到的同placeholder一起使用的。必須在feed_dict中給出所有placeholder節(jié)點的值,否則程序就會報錯。

接著使用sess.run()運行前面定義的操作,最終可以得到每一步的損失、準(zhǔn)確率這些信息。

類似地我們定義一個函數(shù)在驗證集數(shù)據(jù)上看看模型的準(zhǔn)確率等

def dev_step(x_batch, y_batch, writer=None):
"""
Evaluate model on a dev set
Disable dropout
:param x_batch:
:param y_batch:
:param writer:
:return:
"""

feed_dict = {
cnn.input_x: x_batch,
cnn.input_y: y_batch,
cnn.dropout_keep_prob: 1.0
}
step, summaries, loss, accuracy = sess.run(
[global_step, dev_summary_op, cnn.loss, cnn.accuracy],
feed_dict=feed_dict
)
time_str = datetime.datetime.now().isoformat()
print("{}: step {}, loss {:g}, acc {:g}".format(time_str, step, loss, accuracy))
if writer:
writer.add_summary(summaries, step)

Training loop

前面都定義好了以后就可以開始我們的訓(xùn)練了。我們每次調(diào)用train_step函數(shù)批量的訓(xùn)練數(shù)據(jù)并保存:

# generate batches
batches = data_process.batch_iter(list(zip(x_train, y_train)), FLAGS.batch_size, FLAGS.num_epochs)
# training loop
for batch in batches:
x_batch, y_batch = zip(*batch)
train_step(x_batch, y_batch)
current_step = tf.train.global_step(sess, global_step)
if current_step % FLAGS.evaluate_every == 0:
print('\n Evaluation:')
dev_step(x_dev, y_dev, writer=dev_summary_writer)
print('')
if current_step % FLAGS.checkpoint_every == 0:
path = saver.save(sess, checkpoint_prefix, global_step=current_step)
print('Save model checkpoint to {} \n'.format(path))

最后輸出的效果大概是這樣的

Visualizing Results

我們可以在代碼目錄下打開終端輸入以下代碼來啟動瀏覽器的tensorboard:

tensorboard --logdir /runs/xxxxxx/summaries

小結(jié)

當(dāng)然這只是一個利用CNN進(jìn)行NLP分類任務(wù)(文本分類,情感分析等)的baseline,可以看出準(zhǔn)確率并不是很高,后續(xù)還有很多可以優(yōu)化的地方,包括使用pre-trained的Word2vec向量、加上L2正則化等等。

完整代碼可以在公眾號后臺回復(fù)"CNN2014"獲取。

一起交流

想和你一起學(xué)習(xí)進(jìn)步!『NewBeeNLP』目前已經(jīng)建立了多個不同方向交流群(機(jī)器學(xué)習(xí) / 深度學(xué)習(xí) / 自然語言處理 / 搜索推薦 / 圖網(wǎng)絡(luò) / 面試交流 / 等),名額有限,趕緊添加下方微信加入一起討論交流吧?。ㄗ⒁庖欢ㄒ?strong>備注信息才能通過)

本文參考資料

[1]

Convolutional Neural Networks for Sentence Classification: https://arxiv.org/abs/1408.5882

[2]

Movie Review Data from Rotten Tomatoes: http://www.cs.cornell.edu/people/pabo/movie-review-data/

- END -

頭條+騰訊 NLP 面經(jīng)

2021-09-21

Sampled Softmax,你真的會用了嗎?

2021-08-23

周志華教授:如何做研究與寫論文?

2021-08-15

YYDS!一個針對中文的預(yù)訓(xùn)練模型

2021-08-06





瀏覽 37
點贊
評論
收藏
分享

手機(jī)掃一掃分享

分享
舉報
評論
圖片
表情
推薦
點贊
評論
收藏
分享

手機(jī)掃一掃分享

分享
舉報

感谢您访问我们的网站,您可能还对以下资源感兴趣:

国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频 国产欧美日韩成人| 四虎午夜福利| 六月婷婷深爱| 无码网址| 日韩中文字幕无码| 日逼免费视频| 99热5| www俺来也com| 天堂va欧美ⅴa亚洲va一夜| 北条麻妃A片在线播放| 无码av观看| 黄色毛片网站| www操逼| 日韩中文字幕不卡| 中文乱伦视频| 无码伊人| 蜜桃av秘无码一区三| 欧美日韩久久久| 精品国产精品三级精品AV网址| 亚洲va欧美va天堂v国产综合| 久久久久久精品国产三级| 中文字幕无码av| 日日干日日| 六月丁香网| 麻豆三级片在线观看| 一级特黄妇女高潮AA片免费播放| 人人操超碰在线观看| 人人爽人人操人人爱| 日本成人免费电影| 亚洲乱论| 亚洲夜夜爱| 天天操天天操免费视频| 国产无码一区二区| 超碰精品| 日韩一级一级| 熟女网址| 臭小子啊轻点灬太粗太长了的视频 | 强奸乱伦五月天| a级片在线观看| 国产精品囯产三级囯产AV野外| 五月天婷婷在线观看视频| 人妻丝袜蕾丝高跟双飞| 中文字幕乱码视频32| mm131亚洲国产精品久久| 你懂的视频| 国产乱妇无码毛片A片在线看下载 日韩电影免费在线观看中文字幕 欧美性爱中文字幕 | 日韩三级毛片| 国产青青草| 深夜无码| 青青草成人在线| 大香蕉手机在线视频| 九九福利视频| 六月丁香视频| 91人妻人人澡人人澡人人精品| 久久国产高清| 亚州中文字幕| 亚州一区| 三个黑人猛躁我一晚上| 俺去也在线视频| 一级黄影| 欧美丁香五月| 69亚洲精品| 天堂色色| 99天天操| 国产精品无码在线播放| 五月天精品视频| 操逼网五月天| 一区二区成人视频| 逼逼影院| 欧性猛交ⅩXXX乱大交| 精品777| 色人天堂| av无码精品一区| 久久久久久久伊人| va婷婷在线免费观看| 蜜桃91在线观看| 成人精品一区日本无码网站suv| 国产亚洲精品午夜福利巨大软件| 成人小说亚洲一区二区三区| 中文字幕天堂在线| 免费成人在线看片黄| 多啪啪免费视频| 亚洲在线a| 国产精品无码激情| 日韩AV无码成人精品| 永久久久久久久| 欧美日韩精品一区二区三区视频播放 | 一级黄色毛片视频| av在线观看中文字幕| 一道本高清无码视频| 91免费在线看| 亚洲日韩影院| 日韩艹| 高清无码免费观看| 大香蕉久久草| 99久久久| 一区二区三区久久| 亚洲成人少妇老妇a视频在线 | aV一区二区三区| 日韩在线91| 久久AA| 色色五月天网站| 色婷婷影视| 97超级碰| 成人大香蕉网站精品免费| 日韩中文字码无砖| 精品一二三| 91美女网站| 大香蕉伊人综合| 日韩乱伦小说| 一区二区三区四区无码| 色吧综合网| 天天摸天天添| 精品多人P群无码视频| 天天做天天日| 久久看片| 精品人伦一区二区三区| 中国无码视频| 黄色片一级| 成人视频一区二区| 手机免费av| 91人人操| 人人看人人搞人人摸| 婷婷五月18永久免费视频| 水果派解说AV无码一区| 欧美成人A片AAA片在线播放| 69国产精品视频免费观看| 大伊香蕉在线| 俺去草| 一本色道久久综合无码欧美| 欧美日在线| 欧美精品一区二区三区成人片在线| 东京热久久综合色五月老师| 中文无码日本高潮喷水| 热久久久久久| аⅴ资源新版在线天堂| AV2014天堂网| 69成人无码| 91啪啪视频| 免费看欧美成人A片无码| 日韩成人无码一区二区视频| 激情aaa| 中文字幕一级片| 黄色片成人| 国产精品福利导航| 亚洲日本黄色视频| 亚洲三级在线播放| 日韩人妻精品中文字幕| 日本成人中文字幕在线观看| 日本成人不卡| 晚上碰视频| 久久精品成人导航| 一级在线| 成人网站在线免费| 国精久久久久| 欧洲AV片| 777大香蕉| 激情丁香婷婷| 做爱网站免费| 一区二区三区久久久| 国产成人片色情AAAA片| 中文字幕成人免费视频| 成人一区视频| 国产伊人影院| 国产高清一区二区| 一区二区高清无码| va色婷婷亚洲在线| 少婦揉BBBB揉BBBB揉| 日韩欧美成人在线观看| 亚洲av| 国产综合第一页| 色秘乱码一区二区三区| 五月色婷婷综合| 天天天日天天天天天天天日歌词| 安微妇搡BBBB搡BBBB| 水密桃网站| 国产综合久久| 波多野结衣高清av久久直播免| 久久五月天综合| 内射熟妇| 久久久成人免费电影| 欧美日本在线| 国产一级a毛一级a做免费的视频l| 亚洲日日夜夜| 久久免费视频,久久免费视频| 三级片网站视频| 一级免费黄色片| 午夜性爽视频男人的天堂| 在线日韩一区二区| 奇米无码| AV网站免费观看| 日韩一二区| 男人天堂无码av| 无码波多野结衣| 亚洲激情图| 成人三级AV| 亚洲免费无码| 全国最大成人网站| 国产精品欧美综合在线| 香蕉国产在线| 久久另类TS人妖一区二区| 麻豆A∨在线| 亚洲中文字幕在线观看视频| 日韩色图在线观看| av中文无码| 国产精品自拍小视频| 97伊人| 俺也去色色| 日韩五码在线| 欧美日韩在线免费| 欧美激情网站| 国产精品7777| 天堂资源中文在线| 日韩午夜成人| 水多多成人网站A片| www.re99| 黄色a视频| 亚洲无码免费在线观看| 亚洲成人无码片| 日本黄色视频在线免费观看| 国产激情视频在线播放| 一本道无码在线| 永久免费黄色视频网站| 人人做人人做人人做,人人做全句下一| 美女网站在线观看| 青草网| 亚洲中文字幕成人| 国产成人精品久久久| 国产一区二区无码| 影音先锋AV成人| 日韩专区在线观看| 日中国老太太B| 不卡日本| 亚洲视频在线视频| 伊人久久大香| 亚洲欧美婷婷五月色综合| 艹逼网站| 黑人操白人| 囯产精品久久久久久久久久久久久久| 国产黄片一区二区三区| 免费无码婬片AAAA片直播| 欧美一区二区三区婷婷五月| 国产又粗又大又爽| 欧美日韩毛片| 无码成人AV在线看免费| 青娱乐亚洲视频在线| 欧美成人毛片一级A片| 无码一区二区三区免费| 国产特黄视频| 亚洲国产精品午夜福利| 大香蕉国产在线| 国产看色免费| 日本无码在线视频| 看毛片网站| 91大神在线免费观看| 三级av无码| 欧美操逼图| 麻豆熟妇乱妇熟色A片在线看| 男人的天堂社区| 伊人网视频在线观看| 69性影院| 亚洲无码色| 午夜黄色视频| 香蕉视频成人在线观看| 亚洲你懂的| 亚洲日本三级片| 在线观看免费黄网站| a视频免费在线观看| 国产精品后入| 国产精品美女毛片j酒店| 欧美性爱视频免费看| AV天堂小说网| 91av免费在线观看| 国产九色91回来了| 中文资源在线a| 黄色片一级| 亚洲三级网站在线观看| 亚洲成人无码精品| 久久婷婷秘精品日产538| 久久草视频在线播放| 中文字幕福利视频| 国产精品的电影| 色色综合热| 成人特级毛片全部免费播放 | 国产一区二区成人久久919色| 久色视频福利| 人人超碰在线| 日韩一级黄| 18禁成人A∨片| 国产嫩草精品A88AV| 在线无码视频| 一级黄色生活片| 香蕉伊人在线| 9l蝌蚪PORNY中文| 亚洲黄色影视| 秋霞久久日| 欧洲AV在线| 九色91视频| 国产69视频在线观看| A级片在线观看| 影音先锋色站| 中文在线资源| 久久精品99久久久久久久久| 免费国产成人看片在线| 日韩AV毛片| 黄色不卡视频| 狠狠干干| 亚洲AV综合色区无码国产播放| 欧美日日干| 另类老妇奶性BBWBBw| 九九热这里有精品| 国产久久这里只有精品视频| 在线视频播放| 国产女人18毛片精品18水| 亚洲精品在| 91麻豆香蕉| 四川少妇BBB凸凸凸BBB安慰我 | 欧美不卡在线视频| 五月天婷婷色色| 91干穴穴在线观看| 日韩日韩日韩日韩| 黄色在线网站| 91免费网站在线观看| 久久思思热| 中文字幕亚洲专区| 狠狠干免费视频| 91AV天天在线观看| 欧美日韩网站| 天堂成人AV| 日韩黄色电影网址| 国产高清无码免费视频| 97精品人人妻人人| 国产精品一级二级三级| 亚洲天堂在线观看免费| 无套内射在线免费观看| 国产麻豆精品成人毛片| 一区二区在线不卡| 国产三级片在线观看视频| 胖老板办公室沙发无套爆秘书 | 亚洲一区AV| 色九月婷婷| 国内自拍一区| 久久精品三级视频| 亚洲无码黄片| 亚洲欧美视频| 操小骚逼视频| 超碰人人搞| 日韩精品成人无码| 亚洲黄色小电影| 操操影视| 色播国产成人AV| 成人网站视频在线观看| 国产精品九九九九九九| 91高清视频| AV第一福利大全导航| 亚洲高清无码在线| 亚洲黄色在线看| 超碰97免费| 2025最新国产成人精品| jizz国产| 亚洲激情欧美| 日逼99| 国产V视频| 9191久久| 337p大胆色噜噜噜噜噜| 亚洲一级一级黄色| 日韩午夜精品| 国产xxxx视频| 草逼com| 亚洲欧洲日韩综合| 最新va在线观看| 日韩精品久久久| 天干夜操| 欧美不卡一区二区三区| 色五月亚洲| 狼友视频在线播放| 性免费网站| 成人三区| 人人操超碰在线| 中国免费视频高清观看| 老湿机福利视频| 日本熟妇HD| 最新中文字幕在线视频| 国产黄片在线播放| 色综合99| 青青在线免费视频| 国产精品乱码毛片在线人与| www.狠狠干| 欧美日韩中文在线观看| 欧美一级A| 无码乱| 蜜桃91精品秘入口| 九九热re99re6在线精品| 人人草超碰| 色哟哟国产| 欧美MV日韩MV国产网站| 日韩人妻精品中文字幕| 亚洲秘av无码一区二区| 999久久精品| 一本色道久久综合亚洲精品小说| 热re99久久精品国产99热| 国产熟妇婬乱一区二区| 蝌蚪久久| 大香焦草久| 中文字幕精品在线观看| av東熱激情东京热| 91婷婷| 精品少妇一区| 91新婚人妻偷拍| www.黄色视频| 成人精品秘免费波多野结衣| 日本少妇黄色视频| 亚洲三级视频在线观看| 亚洲第一色播| 人人色人人操| 欧美成人免费电影| 成人中文字幕在线视频| 91九九| 在线国产中文字幕| 欧美在线看片| 五月天丁香| 日日摸夜夜| 乱子伦一区二区三区视频在线观看 | 日韩无码不卡| 亚洲中文字幕在线看| aa在线| 丁香五月在线视频| 丁香婷婷激情| 午夜激情福利| 女人的天堂AV| 日韩视频区| 欧美在线日韩在线| 国产高清精品软件丝瓜软件| 国产操逼图| 亚洲美女视频在线| 欧美另类视频| 99久热在线精品视频| 正在播放ADN156松下纱荣子| 日韩欧美爱爱| 成人毛片18女人毛片真水| 亚洲欧美日韩性爱| 99免费在线观看| 粉嫩小泬BBBBBB免费看| 久久草草热国产精| 日韩中文字幕AV| 麻豆激情视频| 亚洲欧美日韩在线| 麻豆AV96熟妇人妻| 日本老熟妇| 日韩AV手机在线观看| 国产一区二区精品| 久草新视频| 久久视频99| 成人视频18| 国产成人无码区亚洲A片356p | 麻豆一区在线| 成人小视频十八禁免费观看| 一级a一级a免费观看视频Al明星 | 国产一级a爱做片免费☆观看| 91西安站街老熟女露脸| 天天色区| 四川少妇BBB| 91av久久| 免费看黄视频| 久久精品亚洲| 欧美动态视频| 91成人小视频| 国产免看一级a一片成人aⅴ| 免费无码国产在线观看| 国产一级黄| 亚洲中字幕| 亚洲国产精品自在自线| 成人在线精品| 一区二区三区四区五区无码 | aaa国产| 中文字幕在线视频无码| 成人av黄色三级片在线观看| 毛片91| 荫蒂添的高潮免费视频| 国产欧美日韩综合| 丰满的人妻一区二区三区果冻 | 91美女被操| 欧美在线观看视频一区| 8050网午夜| 色噜噜AV| AV天堂中文字幕| 亚洲国产成人自拍| 黄色成人网站在线免费观看| 人人看人人摸人人搞| 亚洲成人黄色视频| 亚洲视频中文字母| 国产高清无码自拍| 97爱爱爱| 久久久久久少妇| 久草视频在线资源| 成人黄片网站| 亚洲狼人天堂| 人人干视频| 人妖黃色一級A片| 91热| 麻豆免费成人视频| 国产人妻精品一二三区| 国产精品毛片VA一区二区三区| 久艹| 日本精品国产| A片黄色电影网站| 免费在线观看亚洲| 免费V片在线观看| 精品国产乱子伦一区二区三区最新章| 午夜天堂网| 天堂网av2025| 16一17女人毛片| 阿宾MD0165麻豆沈娜娜| 中文天堂网| 国产AV日韩AV| 大香蕉午夜视频| 亚洲av综合在线| 99精品在线| 国产91白丝在一线播放| 69婷婷国产精品| 91无码人妻精品1国产四虎 | 亚洲免费a| 久久久久久亚洲AV黄床| 青青草资源站| 亚洲综合中文| 激情视频国产| 免费欧美性爱| 经典三级在线视频| 日韩啪啪片| 国产福利在线| 強姧伦一区二区三区在线播放 | 四虎成人精品在永久免费| 91视频在线观看免费大全| 任你爽在线视频| 影音先锋成人资源| 亚洲中文字幕2025| 国产黄色一级| 黄色a级毛片| 成年人AV| 日本黄A级A片国产免费| 欧美成人黄色电影| 国产XXXXX| 婷婷成人综合| www久久99| yjizz国产| 免费AV黄色| 欧美成人A片| 精品乱子伦一区二区三区| 欧美精产国品一区二区区别| 天天爽天天爽夜夜爽毛片| 国产精品视频在线播放| 啊啊啊啊国产| 国产欧美一区二区三区视频| 精品中文字幕在线观看| 中文日韩字幕| 久久国产高清| 日韩色情在线| 国产精品一区二区在线播放| 国产黄色a片| 视色视频在线观看| 久热免费视频| 中文天堂网| 五月丁香婷婷在线| AV网站在线免费观看| 免费观看一级毛一片| 欧美老女人的逼| 日韩欧美国产黄色电影| 丁月婷婷五香天日五月天| 亚洲性爱在线观看| 久久悠悠| 国产亚洲一区二区三区| 国产精品久久久999| 自慰影院| 日韩欧美天堂| 操B视频在线| 败火老熟女ThePorn视频| 神马午夜精品95| 中文字字幕在线中文乱码电影 | 精品人妻一区二区免费蜜桃| 亚洲日韩在线视频观看| 亚洲国产区| 日本最新免费二区| 亚洲秘无码一区二区三区欧美| 婷婷五月激情网| 黑人操白人| 伊人成人大香蕉| 国产口爆在线| 日韩91在线| 久久肉| 九一国产在线| 自拍三级| 亚洲国产精品成人综合色在线婷婷| 人人操人人超碰| 中文字幕高清免费看| 日韩A片| 天天爽日日澡AAAA片| 激情乱伦五月天| 啪啪视频免费观看| 69网站| 色呦呦在线| 懂色AV一区二区三区国产中文在线| 少妇无码在线| 好吊妞在线观看| 4388亚洲最大| 亚洲日本中文字幕在线观看| 一区二区中文字幕| 亚洲人妻性爱| 肥臀AV在线| 美女一级变态毛片| 欧美日韩在线免费观看| 午夜天堂精品久久久久| 国产人成一区二区三区影院| 中国字幕在线观看韩国电影| 超碰在线国产| 日韩一级无码特黄AAA片| 9797色色| 亚洲字幕在线观看| 国产av地址| 四虎成人电影| 69国产精品无码免费| 免费无码毛片一区二区A片| 精品a片| 伊人大香蕉网站| 少妇人妻在线| 国产又粗又大又爽| 午夜精品一区二区三区在线成人| 一道本激情视频| 一区二区三区四区日韩| 久久国产偷拍| 男女啪啪啪| 豆花视频成人网站入口| 激情五月色五月| 亚洲乱论| 狠狠操狠狠色| 久久久www成人免费毛片| 亚洲人妻免费视频| 黄色免费在线观看网站| 思思热思思操免费视频| 人妻无码一区二区三区免费| 永久免费看A人片无码精| 中国免费看片| 免费一级片视频| 久久久精品电影91| 久久人妻无码| 国产欧美激情| 青青青青操| 亚洲精品字幕久久久久| 人妻丝袜蕾丝高跟双飞| 亚洲高清福利| 中文字幕日韩欧美在线| 人妻熟女视频| 国产成人tv| 老女人操屄| 中文字幕成人在线播放| 五月天婷婷小说| 欧美足交视频| 欧美+日韩+国产+成人+在线| 91视频在线观看免费大全| 秋霞欧美在线| 中文无码高清视频| 蜜桃视频日韩| 91九色TS另类国产人妖| 开心激情婷婷| 久久国产精品免费视频| 欧美特大黄| 99Re66精品免费视频| 国产乱子伦精品免费,| 五月丁香999| 波多野结衣东京热| 四川女人毛多水多A片| 成人乱无码AV在线观看| 亚洲午夜视频在线观看| 精品国产无码怀孕| 国产一区二区三区四区视频| 亚洲人妻av| 中文字幕无码视频| 污污的网站18| 欧美精品18videosex性欧美| 99A片| 伊人大香蕉在线网| 狠狠操免费| 亚洲成人在线免费| 黄色电影大香蕉| 五月婷婷激情五月| 婷婷精品国产一区二区三区日韩 | 1024大香蕉| 日本中文字幕在线观看视频| 亚洲黄色在线看| 国内自拍偷拍视频| 高清无码视频18| 黄色A片一级| 99热99在线| 日韩人妻无码一区二区| 亚洲精品99| 毛片一区| av操逼网| 亚洲视频在线观看播放| 天天逼网| 中文无码一区二区三区四区| 久久精品一二三| 国产黄色视频网站在线观看| 一级片成人| 色婷婷免费视频| 自拍偷拍无码| 嫩BBB槡BBBB槡BBB3i| 无码操逼| 欧美成人aaa| 无码日韩电影| 香蕉在线观看| 青青草乱伦视频| 18禁无码永久免费网站大全| jk在线观看| 亚洲男人天堂av| 北条麻妃无码在线播放| 97一区二区| 欧美人妻视频在线| 天天撸天天色| 亚洲Av秘无码一区二区| 国产口爆视频| 亚洲视频在线免费看| 无卡无码| 小處女末发育嫩苞AV| 国产精品电影| 韩国中文字幕HD久久| 久久久精品国产视频| 国产一区二区不卡视频| 99久久国产热无码精品免费| 日韩精品免费无码视频| 一区二区三区无码免费| 91成人视频在线播放| 青青草超碰| 777免费观看成人电影视频| 亚洲精品国产精品乱码不卡√香蕉| 精品无人区无码乱码毛片国产| 100国产精品人妻无码| 天堂va欧美va亚洲va在线| 亚洲黄色小视频| 欧美三级片网址| 久久国产V一级毛多内射| 在线观看免费黄| 三级日韩视频| 国产午夜精品一区二区三区牛牛 | 99热网站| mm131亚洲国产精品久久| 欧洲黄网| 在线免费观看成人视频| 国产av资源网| 躁BBB躁BBB躁BBBBB乃| 欧美美穴| 一级操逼视频| 中文亚洲精品字幕电影| 亚洲AV无码乱码国产| 制服无码| 91人妻人人澡人人| 免费无码成人片在线观看在线 | AV网站免费观看| 操逼视频在线免费观看| 中文字幕乱伦性爱| 大香蕉九九| 色五月婷婷激情| 国产福利免费| 东北嫖老熟女一区二区视频网站| 国产精品久久久久久久久久| 精品无码在线观看视频| 国精产品一二三区| 国产做受91一片二片老头| 丁香婷婷一区二区三区| 水蜜桃视频在线观看| 日韩中文字幕一区二区三区| 欧美成人综合色| 欧美黄色片网站| 四虎欧美| 久热免费视频| 中文无码日本高潮喷水| 国产秘精品区二区三区日本| 97国产精品人人爽人人做| 成人肏逼视频| 国产精品激情| 怡红院在线观看| 狠狠色噜噜狠狠狠7777| 日韩中文一区| 成人无码中文字幕| 青青娱乐亚洲无| 精品人妻一区二区三区蜜桃| 欧美在线无码| 无码AV在线观看| 狠狠操狠狠操| 国产欧美一区二区三区特黄手机版| 成熟的国模冰莲[2]| 牛牛影视av老牛影视av| 四川少妇搡BBBB搡BBB视频网 | 国产成人综合网| 一区二区不卡| 蝌蚪窝免费在线视频| 五月天婷婷影院影院| 91人人在线| 久久久久久亚洲| 91白丝在线观看| 久久国产精品99久久人人澡| 能看的av| 加勒比久久综合| 天天摸天天添| 手机看片亚洲| 爱操逼网| 国产三级毛片| 9l视频自拍蝌蚪9l视频成人| 美女免费AV| 啪啪视频免费观看| 中文字幕无码视频| 国产精品无| 国产精品免费观看久久久久久久久| 色婷婷狠狠| 肉片无遮挡一区二区三区免费观看视频 | 久久免费视频精品| 亚洲午夜视频| 大香蕉久在线| 初尝人妻滑进去了莹莹视频| 日韩综合精品中文字幕66| 欧美人妻视频在线| 青青综合网| 男人天堂色| 日韩精品视频在线| 性欧美丰满熟妇XXXX性久久久 | 一级片在线观看视频| 国产天堂视频| 中文字幕av免费在线观看| www.日韩欧美| 在线无码视频| 亚洲永久天堂| 国产AV影片| av天天干| 小黄片在线免费观看| 亚欧洲精品在线视频| 成人网站免费在线观看| 黄色视频在线免费观看高清视频 | 黄色av免费观看| 一区二区不卡视频| 日本黄色大全| 不卡在线| AA无码| 欧美成人中文字幕| a√免费看| 天堂中文网| 在线免费小黄片| 在线观看视频国产| 国产黄色在线播放| 长腿女神打扫偷懒被主人猛操惩罚 | 亚洲中文综合| 99久久久| 特黄视频在线观看| 内射欧美| 少妇大战黑人46厘米| 中文字幕综合在线| 亚洲性爱在线播放| 婷婷五月亚洲| 69性影院| 中国免费一级无码成人片| 色天堂影院| 91一级A片在线观看| 色色热热| 国产精品操逼| 先锋AV资源站| 毛片18| 操逼视频免费看| 国产三级性爱视频| 俺也去啦WWW色官网| 2025四虎在线视频观看| 日本人妻在线观看| 亚洲精品成a人在线观看| 久久嫩草精品久久久久精| 亚洲精品女人| 免费一级黄色| 人人爽亚洲AV人人爽AV人人片| 日本理论片一道本| 免费观看av| 先锋影音亚洲无码av| 亚洲码无| 人妻无码中文字幕免费视频蜜桃| xxxx日韩| 另类老太婆性BBWBBw| 久久精品亚洲| 伊人大香蕉视频在线观看| 黄色小网站在线观看| 亚洲aV影院| 搡老熟女-91Porn| h网站在线观看| 无码欧美人XXXXX日本无码| 天堂在线www| h片在线观看| 成人在线H| 国产理论片| 色图插插插| 爽妇综合网| 9I看片成人免费视频| 福利导航视频| 午夜成人在线观看| 操大逼视频免费国产| 亚州天堂网| 亚洲日韩在线播放| 人妻无码人妻|