日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

机器学习算法实现解析——word2vec源码解析

發(fā)布時(shí)間:2024/1/1 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 机器学习算法实现解析——word2vec源码解析 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

在wrod2vec工具中,有如下的幾個(gè)比較重要的概念:

  • CBOW
  • Skip-Gram
  • Hierarchical Softmax
  • Negative Sampling

其中CBOW和Skip-Gram是word2vec工具中使用到的兩種不同的語言模型,而Hierarchical Softmax和Negative Sampling是對(duì)以上的兩種模型的具體的優(yōu)化方法。

在word2vec工具中,主要的工作包括:

  • 預(yù)處理。即變量的聲明,全局變量的定義等;
  • 構(gòu)建詞庫。即包含文本的處理,以及是否需要有指定詞庫等;
  • 初始化網(wǎng)絡(luò)結(jié)構(gòu)。即包含CBOW模型和Skip-Gram模型的參數(shù)初始化,Huffman編碼的生成等;
  • 多線程模型訓(xùn)練。即利用Hierarchical Softmax或者Negative Sampling方法對(duì)網(wǎng)絡(luò)中的參數(shù)進(jìn)行求解;
  • 最終結(jié)果的處理。即是否保存和以何種形式保存。

對(duì)于以上的過程,可以由下圖表示:

在接下來的內(nèi)容中,將針對(duì)以上的五個(gè)部分,詳細(xì)分析下在源代碼中的實(shí)現(xiàn)技巧,以及簡單介紹我在讀代碼的過程中對(duì)部分代碼的一些思考。

1. 預(yù)處理

在預(yù)處理部分,對(duì)word2vec需要使用的參數(shù)進(jìn)行初始化,在word2vec中是利用傳入的方式對(duì)參數(shù)進(jìn)行初始化的。
在預(yù)處理部分,實(shí)現(xiàn)了sigmoid函數(shù)值的近似計(jì)算。在利用神經(jīng)網(wǎng)絡(luò)模型對(duì)樣本進(jìn)行預(yù)測的過程中,需要對(duì)其進(jìn)行預(yù)測,此時(shí),需要使用到sigmoid函數(shù),sigmoid函數(shù)的具體形式為:

σ(x)=11+e?x=ex1+ex\sigma \left ( x \right )=\frac{1}{1+e^{-x}}=\frac{e^x}{1+e^x}σ(x)=1+e?x1?=1+exex?

如果每一次都請(qǐng)求計(jì)算sigmoid值,對(duì)性能將會(huì)有一定的影響,當(dāng)sigmoid的值對(duì)精度的要求并不是非常嚴(yán)格時(shí),可以采用近似計(jì)算。在word2vec中,將區(qū)間[?6,6]\left [ -6,6 \right ][?6,6](設(shè)置的參數(shù)MAX_EXP為6)等距離劃分成EXP_TABLE_SIZE等份,并將每個(gè)區(qū)間中的sigmoid值計(jì)算好存入到數(shù)組expTable中,需要使用時(shí),直接從數(shù)組中查找。計(jì)算sigmoid值的代碼如下所示:

expTable = (real *)malloc((EXP_TABLE_SIZE + 1) * sizeof(real));// 申請(qǐng)EXP_TABLE_SIZE+1個(gè)空間// 計(jì)算sigmoid值 for (i = 0; i < EXP_TABLE_SIZE; i++) {expTable[i] = exp((i / (real)EXP_TABLE_SIZE * 2 - 1) * MAX_EXP); // Precompute the exp() tableexpTable[i] = expTable[i] / (expTable[i] + 1); // Precompute f(x) = x / (x + 1) }

注意:在上述代碼中,作者使用的是小于EXP_TABLE_SIZE,實(shí)際的區(qū)間是[?6,6)\left [ -6,6 \right )[?6,6)

2. 構(gòu)建詞庫

在word2vec源碼中,提供了兩種構(gòu)建詞庫的方法,分別為:

  • 指定詞庫:ReadVocab()方法
  • 從詞的文本構(gòu)建詞庫:LearnVocabFromTrainFile()方法

2.1. 構(gòu)建詞庫的過程

在這里,我們以從詞的文本構(gòu)建詞庫為例。構(gòu)建詞庫的過程如下所示:

在這部分中,最主要的工作是對(duì)文本進(jìn)行處理,包括低頻詞的處理,hash表的處理等等。首先,會(huì)在詞庫中增加一個(gè)“< /s>”的詞,同時(shí),在讀取文本的過程中,將換行符“\n”也表示成該該詞,如:

if (ch == '\n') {strcpy(word, (char *)"</s>");// 換行符用</s>表示return; }

在循環(huán)的過程中,不斷去讀取文件中的每一個(gè)詞,并在詞庫中進(jìn)行查找,若存在該詞,則該詞的詞頻+1,否則,在詞庫中增加該詞。在詞庫中,是通過哈希表的形式存儲(chǔ)的。最終,會(huì)過濾掉一些低頻詞。

在得到最終的詞庫之前,還需根據(jù)詞庫中的詞頻對(duì)詞庫中的詞進(jìn)行排序。

2.2. 對(duì)詞的哈希處理

在存儲(chǔ)詞的過程中,同時(shí)保留這兩個(gè)數(shù)組:

  • 存儲(chǔ)詞的vocab
  • 存儲(chǔ)詞的hash的vocab_hash

其中,在vocab中,存儲(chǔ)的是詞對(duì)應(yīng)的結(jié)構(gòu)體:

// 詞的結(jié)構(gòu)體 struct vocab_word {long long cn; // 出現(xiàn)的次數(shù)int *point; // 從根結(jié)點(diǎn)到葉子節(jié)點(diǎn)的路徑char *word, *code, codelen;// 分別對(duì)應(yīng)著詞,Huffman編碼,編碼長度 };

在vocab_hash中存儲(chǔ)的是詞在詞庫中的Index。

在對(duì)詞的處理過程中,主要包括:

  • 計(jì)算詞的hash值:
// 取詞的hash值 int GetWordHash(char *word) {unsigned long long a, hash = 0;for (a = 0; a < strlen(word); a++) hash = hash * 257 + word[a];hash = hash % vocab_hash_size;return hash; }
  • 檢索詞是否存在。如不存在則返回-1,否則,返回該詞在詞庫中的索引:
while (1) {if (vocab_hash[hash] == -1) return -1;// 不存在該詞if (!strcmp(word, vocab[vocab_hash[hash]].word)) return vocab_hash[hash];// 返回索引值hash = (hash + 1) % vocab_hash_size;// 處理沖突 } return -1;// 不存在該詞

在這個(gè)過程中,使用到了線性探測的開放定址法處理沖突,開放定址法就是一旦發(fā)生沖突,就去尋找下一個(gè)空的散列地址。

  • 不存在,則插入新詞。

在這個(gè)過程中,除了需要將詞增加到詞庫中,好需要計(jì)算該詞的hash值,并將vocab_hash數(shù)組中的值標(biāo)記為索引。

2.3. 對(duì)低頻詞的處理

在循環(huán)讀取每一個(gè)詞的過程中,當(dāng)出現(xiàn)“vocab_size > vocab_hash_size * 0.7”時(shí),需要對(duì)低頻詞進(jìn)行處理。其中,vocab_size表示的是目前詞庫中詞的個(gè)數(shù),vocab_hash_size表示的是初始設(shè)定的hash表的大小。

在處理低頻詞的過程中,通過參數(shù)“min_reduce”來控制,若詞出現(xiàn)的次數(shù)小于等于該值時(shí),則從詞庫中刪除該詞。

在刪除了低頻詞后,需要重新對(duì)詞庫中的詞進(jìn)行hash值的計(jì)算。

2.4. 根據(jù)詞頻對(duì)詞庫中的詞排序

基于以上的過程,程序已經(jīng)將詞從文件中提取出來,并存入到指定的詞庫中(vocab數(shù)組),接下來,需要根據(jù)每一個(gè)詞的詞頻對(duì)詞庫中的詞按照詞頻從大到小排序,其基本過程在函數(shù)SortVocab中,排序過程為:

qsort(&vocab[1], vocab_size - 1, sizeof(struct vocab_word), VocabCompare);

保持字符“< \s>”在最開始的位置。排序后,根據(jù)“min_count”對(duì)低頻詞進(jìn)行處理,與上述一樣,再對(duì)剩下的詞重新計(jì)算hash值。

至此,整個(gè)對(duì)詞的處理過程就已經(jīng)結(jié)束了。加下來,將是對(duì)網(wǎng)絡(luò)結(jié)構(gòu)的處理和詞向量的訓(xùn)練。

3. 初始化網(wǎng)絡(luò)結(jié)構(gòu)

有了以上的對(duì)詞的處理,就已經(jīng)處理好了所有的訓(xùn)練樣本,此時(shí),便可以開始網(wǎng)絡(luò)結(jié)構(gòu)的初始化和接下來的網(wǎng)絡(luò)訓(xùn)練。網(wǎng)絡(luò)的初始化的過程在InitNet()函數(shù)中完成。

3.1. 初始化網(wǎng)絡(luò)參數(shù)

在初始化的過程中,主要的參數(shù)包括詞向量的初始化和映射層到輸出層的權(quán)重的初始化,如下圖所示:

在初始化的過程中,映射層到輸出層的權(quán)重都初始化為000,而對(duì)于每一個(gè)詞向量的初始化,作者的初始化方法如下代碼所示:

for (a = 0; a < vocab_size; a++) for (b = 0; b < layer1_size; b++) {next_random = next_random * (unsigned long long)25214903917 + 11;// 1、與:相當(dāng)于將數(shù)控制在一定范圍內(nèi)// 2、0xFFFF:65536// 3、/65536:[0,1]之間syn0[a * layer1_size + b] = (((next_random & 0xFFFF) / (real)65536) - 0.5) / layer1_size;// 初始化詞向量 }

首先,生成一個(gè)很大的next_random的數(shù),通過與“0xFFFF”進(jìn)行與運(yùn)算截?cái)?#xff0c;再除以65536得到[0,1]\left [ 0,1 \right ][0,1]之間的數(shù),最終,得到的初始化的向量的范圍為:[?0.5m,0.5m]\left [ -\frac{0.5}{m},\frac{0.5}{m}\right ][?m0.5?,m0.5?],其中,mmm為詞向量的長度。

3.2. Huffman樹的構(gòu)建

在層次Softmax中需要使用到Huffman樹以及Huffman編碼,因此,在網(wǎng)絡(luò)結(jié)構(gòu)的初始化過程中,也需要初始化Huffman樹。在生成Huffman樹的過程中,首先定義了333個(gè)長度為vocab_size*2+1的數(shù)組:

long long *count = (long long *)calloc(vocab_size * 2 + 1, sizeof(long long)); long long *binary = (long long *)calloc(vocab_size * 2 + 1, sizeof(long long)); long long *parent_node = (long long *)calloc(vocab_size * 2 + 1, sizeof(long long));

其中,count數(shù)組中前vocab_size存儲(chǔ)的是每一個(gè)詞的對(duì)應(yīng)的詞頻,后面初始化的是很大的數(shù),已知詞庫中的詞是按照降序排列的,因此,構(gòu)建Huffman樹的過程如下所示(對(duì)于Huffman樹的原理,可以參見博文“數(shù)據(jù)結(jié)構(gòu)和算法——Huffman樹和Huffman編碼”):

首先,設(shè)置兩個(gè)指針pos1和pos2,分別指向最后一個(gè)詞和最后一個(gè)詞的后一位,從兩個(gè)指針?biāo)傅臄?shù)中選擇出最小的值,記為min1i,如pos1所指的值最小,此時(shí),將pos1左移,再比較pos1和pos2所指的數(shù),選擇出最小的值,記為min2i,將他們的和存儲(chǔ)到pos2所指的位置。并將此時(shí)pos2所指的位置設(shè)置為min1i和min2i的父節(jié)點(diǎn),同時(shí),記min2i所指的位置的編碼為1,如下代碼所示:

// 設(shè)置父節(jié)點(diǎn) parent_node[min1i] = vocab_size + a; parent_node[min2i] = vocab_size + a; binary[min2i] = 1;// 設(shè)置一個(gè)子樹的編碼為1

構(gòu)建好Huffman樹后,此時(shí),需要根據(jù)構(gòu)建好的Huffman樹生成對(duì)應(yīng)節(jié)點(diǎn)的Huffman編碼。假設(shè),上述的數(shù)據(jù)生成的最終的Huffman樹為:

此時(shí),count數(shù)組,binary數(shù)組和parent_node數(shù)組分別為:

在生成Huffman編碼的過程中,針對(duì)每一個(gè)詞(詞都在葉子節(jié)點(diǎn)上),從葉子節(jié)點(diǎn)開始,將編碼存入到code數(shù)組中,如對(duì)于上圖中的“R”節(jié)點(diǎn)來說,其code數(shù)組為{1,0},再對(duì)其反轉(zhuǎn)便是Huffman編碼:

vocab[a].codelen = i;// 詞的編碼長度 vocab[a].point[0] = vocab_size - 2; for (b = 0; b < i; b++) {vocab[a].code[i - b - 1] = code[b];// 編碼的反轉(zhuǎn)vocab[a].point[i - b] = point[b] - vocab_size;// 記錄的是從根結(jié)點(diǎn)到葉子節(jié)點(diǎn)的路徑 }

注意:這里的Huffman樹的構(gòu)建和Huffman編碼的生成過程寫得比較精簡。

3.3. 負(fù)樣本選中表的初始化

如果是采用負(fù)采樣的方法,此時(shí)還需要初始化每個(gè)詞被選中的概率。在所有的詞構(gòu)成的詞典中,每一個(gè)詞出現(xiàn)的頻率有高有低,我們希望,對(duì)于那些高頻的詞,被選中成為負(fù)樣本的概率要大點(diǎn),同時(shí),對(duì)于那些出現(xiàn)頻率比較低的詞,我們希望其被選中成為負(fù)樣本的頻率低點(diǎn)。這個(gè)原理于“輪盤賭”的策略一致(詳細(xì)可以參見“優(yōu)化算法——遺傳算法”)。在程序中,實(shí)現(xiàn)這部分功能的代碼為:

// 生成負(fù)采樣的概率表 void InitUnigramTable() {int a, i;double train_words_pow = 0;double d1, power = 0.75;table = (int *)malloc(table_size * sizeof(int));// int --> intfor (a = 0; a < vocab_size; a++) train_words_pow += pow(vocab[a].cn, power);// 類似輪盤賭生成每個(gè)詞的概率i = 0;d1 = pow(vocab[i].cn, power) / train_words_pow;for (a = 0; a < table_size; a++) {table[a] = i;if (a / (double)table_size > d1) {i++;d1 += pow(vocab[i].cn, power) / train_words_pow;}if (i >= vocab_size) i = vocab_size - 1;} }

在實(shí)現(xiàn)的過程中,沒有直接使用每一個(gè)詞的頻率,而是使用了詞的0.750.750.75次方。

4、多線程模型訓(xùn)練

以上的各個(gè)部分是為訓(xùn)練詞向量做準(zhǔn)備,即準(zhǔn)備訓(xùn)練數(shù)據(jù),構(gòu)建訓(xùn)練模型。在上述的初始化完成后,接下來就是根據(jù)不同的方法對(duì)模型進(jìn)行訓(xùn)練,在實(shí)現(xiàn)的過程中,作者使用了多線程的方法對(duì)其進(jìn)行訓(xùn)練。

4.1、多線程的處理

為了能夠?qū)ξ谋具M(jìn)行加速訓(xùn)練,在實(shí)現(xiàn)的過程中,作者使用了多線程的方法,并對(duì)每一個(gè)線程上分配指定大小的文件:

// 利用多線程對(duì)訓(xùn)練文件劃分,每個(gè)線程訓(xùn)練一部分的數(shù)據(jù) fseek(fi, file_size / (long long)num_threads * (long long)id, SEEK_SET);

注意:這邊的多線程分割方式并不能保證每一個(gè)線程分到的文件是互斥的。對(duì)于其中的原因,可以參見“Linux C 編程——多線程”。

這個(gè)過程可以通過下圖簡單的描述:

在實(shí)現(xiàn)多線程的過程中,作者并沒有加鎖的操作,而是對(duì)模型參數(shù)和詞向量的修改可以任意執(zhí)行,這一點(diǎn)類似于基于隨機(jī)梯度的方法,訓(xùn)練的過程與訓(xùn)練樣本的訓(xùn)練是沒有關(guān)系的,這樣可以大大加快對(duì)詞向量的訓(xùn)練。拋開多線程的部分,在每一個(gè)線程內(nèi)執(zhí)行的是對(duì)模型和詞向量的訓(xùn)練。

作者在實(shí)現(xiàn)的過程中,主要實(shí)現(xiàn)了兩個(gè)模型,即CBOW模型和Skip-gram模型,在每個(gè)模型中,又分別使用到了兩種不同的訓(xùn)練方法,即層次Softmax和Negative Sampling方法。

對(duì)于CBOW模型和Skip-gram模型的理解,首先必須知道統(tǒng)計(jì)語言模型(Statistic Language Model)

在統(tǒng)計(jì)語言模型中的核心內(nèi)容是:計(jì)算一組詞語能夠成為一個(gè)句子的概率。

為了能夠求解其中的參數(shù),一大批參數(shù)求解的方法被提出,在其中,就有word2vec中要使用的神經(jīng)概率語言模型。具體的神經(jīng)概率語言模型可以參見“”。

4.2. CBOW模型

CBOW模型和Skip-gram模型是神經(jīng)概率語言模型的兩種變形形式,其中,在CBOW模型中包含三層,即輸入層,映射層和輸出層。對(duì)于CBOW模型,如下圖所示:

在CBOW模型中,通過詞wtw_twt?的前后詞wt?2w_{t-2}wt?2?wt?1w_{t-1}wt?1?wt+1w_{t+1}wt+1?wt+2w_{t+2}wt+2?來預(yù)測當(dāng)前詞wtw_twt?。此處的窗口的大小window為2。

4.3.1. 從輸入層到映射層

首先找到每個(gè)詞對(duì)應(yīng)的詞向量,并將這些詞的詞向量相加,程序代碼如下所示:

// in -> hidden // 輸入層到映射層 cw = 0; for (a = b; a < window * 2 + 1 - b; a++) if (a != window) {c = sentence_position - window + a;// sentence_position表示的是當(dāng)前的位置// 判斷c是否越界if (c < 0) continue;if (c >= sentence_length) continue;last_word = sen[c];// 找到c對(duì)應(yīng)的索引if (last_word == -1) continue;for (c = 0; c < layer1_size; c++) neu1[c] += syn0[c + last_word * layer1_size];// 累加cw++; }

當(dāng)累加完窗口內(nèi)的所有的詞向量的之后,存儲(chǔ)在映射層neu1中,并取平均,程序代碼如下所示:

for (c = 0; c < layer1_size; c++) neu1[c] /= cw;// 計(jì)算均值

當(dāng)取得了映射層的結(jié)果后,此時(shí)就需要使用Hierarchical Softmax或者Negative Sampling對(duì)模型進(jìn)行訓(xùn)練。

4.3.2. Hierarchical Softmax

Hierarchical Softmax是word2vec中用于提高性能的一項(xiàng)關(guān)鍵的技術(shù)。由Hierarchical Softmax的原理可知,對(duì)于詞w,其對(duì)數(shù)似然函數(shù)為:

L(w)=∑j∈point{(1?djw)?log[σ(XwTθjw)]+djw?log[1?σ(XwTθjw)]}L\left ( w \right )=\sum _{j\in point}\left \{ \left ( 1-d_j^w \right )\cdot log\left [ \sigma \left ( X_w^T\theta _j^w \right ) \right ]+d_j^w\cdot log\left [ 1-\sigma \left ( X_w^T\theta _j^w \right ) \right ] \right \}L(w)=jpoint?{(1?djw?)?log[σ(XwT?θjw?)]+djw??log[1?σ(XwT?θjw?)]}

其中,jjj表示的詞w對(duì)應(yīng)的Huffman編碼中的每一個(gè)編碼的下標(biāo),djwd_j^wdjw?表示的是第jjj個(gè)Huffman編碼,且djw∈{0,1}d_j^w\in \left \{ 0,1 \right \}djw?{0,1},這是一個(gè)求和的過程,因此,對(duì)于Huffman編碼中的每一個(gè)編碼,上述的對(duì)數(shù)似然函數(shù)為:

L(w,j)=(1?djw)?log[σ(XwTθjw)]+djw?log[1?σ(XwTθjw)]L\left ( w,j \right )=\left ( 1-d_j^w \right )\cdot log\left [ \sigma \left ( X_w^T\theta _j^w \right ) \right ]+d_j^w\cdot log\left [ 1-\sigma \left ( X_w^T\theta _j^w \right ) \right ]L(w,j)=(1?djw?)?log[σ(XwT?θjw?)]+djw??log[1?σ(XwT?θjw?)]

在此,變量為XwX_wXw?θjw\theta _j^wθjw?,此時(shí),分別對(duì)XwX_wXw?θjw\theta _j^wθjw?求偏導(dǎo)數(shù):

?L(w,j)?θjw=[1?djw?σ(XwTθjw)]Xw\frac{\partial L\left ( w,j \right )}{\partial \theta _j^w}=\left [ 1-d_j^w-\sigma \left ( X_w^T\theta _j^w \right ) \right ]X_w?θjw??L(w,j)?=[1?djw??σ(XwT?θjw?)]Xw?

?L(w,j)?Xw=[1?djw?σ(XwTθjw)]θjw\frac{\partial L\left ( w,j \right )}{\partial X_w}=\left [ 1-d_j^w-\sigma \left ( X_w^T\theta _j^w \right ) \right ]\theta _j^w?Xw??L(w,j)?=[1?djw??σ(XwT?θjw?)]θjw?

因此,對(duì)于θjw\theta _j^wθjw?的更新公式為:

θjw=θjw+η[1?djw?σ(XwTθjw)]Xw\theta _j^w=\theta _j^w+\eta \left [ 1-d_j^w-\sigma \left ( X_w^T\theta _j^w \right ) \right ]X_wθjw?=θjw?+η[1?djw??σ(XwT?θjw?)]Xw?

在word2vec源碼中,為了能夠加快計(jì)算,作者在開始的時(shí)候存儲(chǔ)了一份Sigmoid的值,因此,對(duì)于$\sigma \left ( X_w^T\theta _j^w \right ) $需要從expTable中查詢到對(duì)應(yīng)的值。

for (d = 0; d < vocab[word].codelen; d++) {// word為當(dāng)前詞// 計(jì)算輸出層的輸出f = 0;l2 = vocab[word].point[d] * layer1_size;// 找到第d個(gè)詞對(duì)應(yīng)的權(quán)重// Propagate hidden -> outputfor (c = 0; c < layer1_size; c++) f += neu1[c] * syn1[c + l2];// 映射層到輸出層if (f <= -MAX_EXP) continue;else if (f >= MAX_EXP) continue;else f = expTable[(int)((f + MAX_EXP) * (EXP_TABLE_SIZE / MAX_EXP / 2))];// Sigmoid結(jié)果// 'g' is the gradient multiplied by the learning rateg = (1 - vocab[word].code[d] - f) * alpha;// Propagate errors output -> hiddenfor (c = 0; c < layer1_size; c++) neu1e[c] += g * syn1[c + l2];// 修改映射后的結(jié)果// Learn weights hidden -> outputfor (c = 0; c < layer1_size; c++) syn1[c + l2] += g * neu1[c];// 修改映射層到輸出層之間的權(quán)重 }

對(duì)于窗口內(nèi)的詞的向量的更新,則是利用窗口內(nèi)的所有詞的梯度之和∑?L(w,j)?Xw\sum \frac{\partial L\left ( w,j \right )}{\partial X_w}?Xw??L(w,j)?來更新,如程序代碼所示:

// hidden -> in // 以上是從映射層到輸出層的修改,現(xiàn)在返回修改每一個(gè)詞向量 for (a = b; a < window * 2 + 1 - b; a++) if (a != window) {c = sentence_position - window + a;if (c < 0) continue;if (c >= sentence_length) continue;last_word = sen[c];if (last_word == -1) continue;// 利用窗口內(nèi)的所有詞向量的梯度之和來更新for (c = 0; c < layer1_size; c++) syn0[c + last_word * layer1_size] += neu1e[c]; }

4.3.3. Negative Sampling

與Hierarchical Softmax一致,Negative Sampling也是一種加速計(jì)算的方法,在Negative Sampling方法中使用的是隨機(jī)的負(fù)采樣,在CBOW模型中,已知詞www的上下文,需要預(yù)測詞www,對(duì)于給定的上下文,詞www即為正樣本,其他的樣本為負(fù)樣本,此時(shí)我們需要根據(jù)詞頻從剩下的詞中挑選出最合適的負(fù)樣本,實(shí)現(xiàn)的代碼如下所示:

// 標(biāo)記target和label if (d == 0) {// 正樣本target = word;label = 1; } else {// 選擇出負(fù)樣本next_random = next_random * (unsigned long long)25214903917 + 11;target = table[(next_random >> 16) % table_size];// 從table表中選擇出負(fù)樣本// 重新選擇if (target == 0) target = next_random % (vocab_size - 1) + 1;if (target == word) continue;label = 0; }

當(dāng)選擇出了正負(fù)樣本,此時(shí)的損失函數(shù)為:

l(w)=σ(XwTθw)?∏u∈NEG(w)[1?σ(XwTθu)]l\left ( w \right )=\sigma \left ( X_w^T\theta ^w \right )\cdot \prod _{u\in {NEG\left ( w \right )}}\left [ 1- \sigma \left ( X_w^T\theta ^u \right )\right ]l(w)=σ(XwT?θw)?uNEG(w)?[1?σ(XwT?θu)]

其對(duì)數(shù)似然函數(shù)為:

L=logl(w)=log∏u∈w∪NEG(w){[σ(XwTθu)]Lw(u)?[1?σ(XwTθu)]1?Lw(u)}L=log\; l\left ( w \right )=log\prod _{u\in {{w}\cup NEG\left ( w \right )}}\left \{ \left [ \sigma \left ( X_w^T\theta ^u \right ) \right ]^{L^w\left ( u \right )}\cdot \left [ 1- \sigma \left ( X_w^T\theta ^u \right )\right ]^{1-L^w\left ( u \right )} \right \}L=logl(w)=loguwNEG(w)?{[σ(XwT?θu)]Lw(u)?[1?σ(XwT?θu)]1?Lw(u)}

即為:

∑u∈w∪NEG(w){Lw(u)?log[σ(XwTθu)]+[1?Lw(u)]?log[1?σ(XwTθu)]}\sum _{u\in {{w}\cup NEG\left ( w \right )}}\left \{ {L^w\left ( u \right )}\cdot log\left [ \sigma \left ( X_w^T\theta ^u \right ) \right ]+\left [ 1-L^w\left ( u \right ) \right ]\cdot log \left [ 1- \sigma \left ( X_w^T\theta ^u \right )\right ] \right \}uwNEG(w)?{Lw(u)?log[σ(XwT?θu)]+[1?Lw(u)]?log[1?σ(XwT?θu)]}

取:

L(w,u)=Lw(u)?log[σ(XwTθu)]+[1?Lw(u)]?log[1?σ(XwTθu)]L\left ( w,u \right )={L^w\left ( u \right )}\cdot log\left [ \sigma \left ( X_w^T\theta ^u \right ) \right ]+\left [ 1-L^w\left ( u \right ) \right ]\cdot log \left [ 1- \sigma \left ( X_w^T\theta ^u \right )\right ]L(w,u)=Lw(u)?log[σ(XwT?θu)]+[1?Lw(u)]?log[1?σ(XwT?θu)]

在此,變量為XwX_wXw?θu\theta ^uθu,此時(shí),分別對(duì)XwX_wXw?θjw\theta _j^wθjw?求偏導(dǎo)數(shù):

?L(w,u)?θu=[Lw(u)?σ(XwTθu)]Xw\frac{\partial L\left ( w,u \right )}{\partial \theta ^u}=\left [ L^w\left ( u \right )- \sigma \left ( X_w^T\theta ^u \right )\right ]X_w?θu?L(w,u)?=[Lw(u)?σ(XwT?θu)]Xw?

?L(w,u)?Xw=[Lw(u)?σ(XwTθu)]θu\frac{\partial L\left ( w,u \right )}{\partial X_w}=\left [ L^w\left ( u \right )- \sigma \left ( X_w^T\theta ^u \right )\right ]\theta ^u?Xw??L(w,u)?=[Lw(u)?σ(XwT?θu)]θu

因此,更新的代碼為:

if (f > MAX_EXP) g = (label - 1) * alpha; else if (f < -MAX_EXP) g = (label - 0) * alpha; else g = (label - expTable[(int)((f + MAX_EXP) * (EXP_TABLE_SIZE / MAX_EXP / 2))]) * alpha;for (c = 0; c < layer1_size; c++) neu1e[c] += g * syn1neg[c + l2]; for (c = 0; c < layer1_size; c++) syn1neg[c + l2] += g * neu1[c];

對(duì)詞向量的更新與Hierarchical Softmax中一致。

4.3. Skip-gram模型

而Skip-gram模型與CBOW正好相反,在Skip-gram模型中,則是通過當(dāng)前詞wtw_twt?來預(yù)測其前后詞wt?2w_{t-2}wt?2?wt?1w_{t-1}wt?1?wt+1w_{t+1}wt+1?wt+2w_{t+2}wt+2?,Skip-gram模型如下圖所示:

4.3.1. Hierarchical Softmax

由上述的分析,我們發(fā)現(xiàn),在Skip-gram模型中,其計(jì)算方法與CBOW模型很相似,不同的是,在Skip-gram模型中,需要使用當(dāng)前詞分別預(yù)測窗口中的詞,因此,這是一個(gè)循環(huán)的過程:

for (a = b; a < window * 2 + 1 - b; a++) if (a != window)

對(duì)于向量的更新過程與CBOW模型中的Hierarchical Softmax一致:

c = sentence_position - window + a; if (c < 0) continue; if (c >= sentence_length) continue; last_word = sen[c]; if (last_word == -1) continue; l1 = last_word * layer1_size; for (c = 0; c < layer1_size; c++) neu1e[c] = 0; // HIERARCHICAL SOFTMAX if (hs) for (d = 0; d < vocab[word].codelen; d++) {f = 0;l2 = vocab[word].point[d] * layer1_size;// Propagate hidden -> output// 映射層即為輸入層for (c = 0; c < layer1_size; c++) f += syn0[c + l1] * syn1[c + l2];if (f <= -MAX_EXP) continue;else if (f >= MAX_EXP) continue;else f = expTable[(int)((f + MAX_EXP) * (EXP_TABLE_SIZE / MAX_EXP / 2))];// 'g' is the gradient multiplied by the learning rateg = (1 - vocab[word].code[d] - f) * alpha;// Propagate errors output -> hiddenfor (c = 0; c < layer1_size; c++) neu1e[c] += g * syn1[c + l2];// Learn weights hidden -> outputfor (c = 0; c < layer1_size; c++) syn1[c + l2] += g * syn0[c + l1]; } // Learn weights input -> hidden for (c = 0; c < layer1_size; c++) syn0[c + l1] += neu1e[c];

4.3.2. Negative Sampling

與上述一致,在Skip-gram中與CBOW中的唯一不同是在Skip-gram中是循環(huán)的過程。代碼的實(shí)現(xiàn)類似與上面的Hierarchical Softmax。

注釋版的word2vec源碼已經(jīng)上傳到Github中:Github:word2vec.c

參考文獻(xiàn)

[1] word2vec 中的數(shù)學(xué)原理詳解(一)目錄和前言

[2] word2vec 中的數(shù)學(xué)原理詳解(二)預(yù)備知識(shí)

[3] word2vec 中的數(shù)學(xué)原理詳解(三)背景知識(shí)

[4] word2vec 中的數(shù)學(xué)原理詳解(四)基于 Hierarchical Softmax 的模型

[5] word2vec 中的數(shù)學(xué)原理詳解(五)基于 Negative Sampling 的模型

[6] word2vec 中的數(shù)學(xué)原理詳解(六)若干源碼細(xì)節(jié)

[7] 深度學(xué)習(xí)與自然語言處理(1)_斯坦福cs224d Lecture 1

[8] Google Word2vec 學(xué)習(xí)手札

[9] Deep Learning in NLP (一)詞向量和語言模型

[10] Neural Probabilistic Language Model, word2vec來龍去脈

[11] word2vec原理概述

[12] 自己動(dòng)手寫word2vec (一):主要概念和流程

[13] The amazing power of word vectors

[14] word2vec前世今生

總結(jié)

以上是生活随笔為你收集整理的机器学习算法实现解析——word2vec源码解析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

国产亚洲精品成人 | 国产一级免费电影 | 国产精品视频在线看 | 成人黄色电影免费观看 | 日韩免费视频一区二区 | 日韩高清无线码2023 | 久久伦理 | 超碰人人91 | 欧美a级成人淫片免费看 | 日本黄色大片免费 | 黄色软件视频大全免费下载 | 中文久草 | 97超在线| av 一区二区三区四区 | 国产精品网在线观看 | 99在线观看免费视频精品观看 | 午夜免费久久看 | 国产白浆在线观看 | 精品视频在线看 | 97国产精品免费 | 国产一级一级国产 | 成人中心免费视频 | 97视频免费在线观看 | 亚洲精品黄 | 欧美一区二区伦理片 | 成年人视频在线 | 视频二区在线 | 欧美午夜一区二区福利视频 | 97成人精品视频在线观看 | 韩日av一区二区 | 亚洲欧美日韩国产一区二区三区 | 成人不用播放器 | 日韩在线视频网站 | 日韩中文幕 | 日韩电影精品 | 91九色蝌蚪国产 | av免费网| 亚洲日日夜夜 | 国产人成精品一区二区三 | 日韩电影在线观看一区二区三区 | 中文在线免费视频 | 婷婷色5月| 午夜精品一区二区三区在线观看 | v片在线看 | 欧美日韩国产一二三区 | 天天爱av导航 | 久久老司机精品视频 | 日韩av在线免费播放 | 久久久久国产精品厨房 | 亚洲黄色免费在线看 | 99久久精品无免国产免费 | 五月黄色 | 狠狠色噜噜狠狠 | 福利一区二区在线 | 久久国产经典视频 | 精品国产免费人成在线观看 | 久久第四色 | 久久综合电影 | 中文字幕精品一区二区三区电影 | 欧美另类调教 | 国产原厂视频在线观看 | 在线之家免费在线观看电影 | 久久精品国产免费看久久精品 | 色婷婷狠狠18 | www.亚洲激情.com | www.色就是色 | 欧美日韩69 | 五月天亚洲综合 | 四虎成人精品 | 日日综合 | 免费看特级毛片 | 中文字幕激情 | 国产一区在线观看免费 | 国产精品久久电影观看 | 99久久99久久免费精品蜜臀 | 日韩久久激情 | 精品96久久久久久中文字幕无 | 欧美日韩不卡在线 | 国产精品6999成人免费视频 | 日韩电影精品 | 91网址在线 | 99精品欧美一区二区 | 午夜精品一区二区三区在线 | 国产中文字幕网 | 永久免费av在线播放 | 亚洲理论在线观看 | 国产精品久久久久久久久久免费看 | 日韩电影在线观看中文字幕 | 天天色影院 | 美女一级毛片视频 | 亚洲人视频在线 | 少妇视频在线播放 | 99久久精品国产一区二区成人 | 看片一区二区三区 | 亚洲视频电影在线 | 国产精品久久久久一区二区国产 | av资源免费观看 | 国内三级在线观看 | a级国产毛片 | 成人精品一区二区三区中文字幕 | 亚洲国产99| 超碰在线免费福利 | 成人久久免费视频 | 97在线免费观看视频 | 国产成人在线精品 | 国产成人精品一区二区三区福利 | 精品国产欧美一区二区三区不卡 | 日b视频国产 | 91九色蝌蚪在线 | 狠狠综合网 | 免费看黄色小说的网站 | 五月天色中色 | 99精品欧美一区二区三区 | 亚洲精品动漫成人3d无尽在线 | 97福利 | 美女国内精品自产拍在线播放 | 丁香五月缴情综合网 | 三上悠亚一区二区在线观看 | 国产看片免费 | 日韩精品视频免费在线观看 | 日本韩国中文字幕 | 欧美一区二区精品在线 | 免费网站污 | 去看片 | 久久久久久久18 | 国产在线观看二区 | 国产成人久久久77777 | 在线高清av| 亚洲免费永久精品国产 | 欧美精品亚洲精品 | 人人插人人艹 | 天天综合精品 | 青草视频在线看 | 欧美一级高清片 | 99精品国产一区二区 | 久久久久久久福利 | 色婷婷在线观看视频 | 在线国产精品视频 | 玖玖999| 久久久久婷| 在线观看亚洲专区 | 日本中文字幕免费观看 | 日韩在线中文字幕视频 | 99精品欧美一区二区三区 | 人人射网站 | a天堂在线看 | 国产亚洲精品av | 中文字幕在线观看免费高清电影 | 又黄又爽又刺激的视频 | 国产高清免费在线观看 | 在线天堂日本 | 成年人黄色免费看 | 久久久福利视频 | 伊人久久精品久久亚洲一区 | 日日夜夜亚洲 | 在线观看黄色的网站 | 久在线 | 天天在线操 | 韩国av一区二区三区在线观看 | 国内久久久久久 | 亚洲成人蜜桃 | 日日夜夜草 | 国产久草在线观看 | 在线看小早川怜子av | 日韩一区二区三区免费视频 | 91九色最新| 九色在线视频 | 91久久偷偷做嫩草影院 | 久久综合九色欧美综合狠狠 | 在线观看免费日韩 | 91亚洲国产成人久久精品网站 | 91精品久久久久久久久久久久久 | 国产精品一区二区久久久久 | 日韩系列在线观看 | a视频免费在线观看 | 亚洲精品合集 | 婷婷久草| 久草在线久草在线2 | 狠狠操天天射 | 日韩二区三区在线 | 日韩视频www| 国产精品美女久久久 | 久久久精品国产一区二区电影四季 | 91av免费在线观看 | 天天操天天摸天天爽 | 黄网站色成年免费观看 | 国产三级午夜理伦三级 | 日韩高清在线一区二区三区 | 日韩欧美精选 | 波多野结衣小视频 | 麻花天美星空视频 | 日日干夜夜干 | 午夜色站 | 日本一区二区不卡高清 | 99久久精品日本一区二区免费 | 久久精品亚洲一区二区三区观看模式 | 成人黄色一级视频 | 日韩高清一区在线 | 国产999精品久久久久久绿帽 | 中文字幕精| 亚洲一区美女视频在线观看免费 | 99久久999久久久精玫瑰 | 91完整版| 九九九九精品 | av官网| 91亚洲精品久久久蜜桃网站 | 韩日精品视频 | 天天做夜夜做 | 亚洲高清不卡av | 亚洲国产剧情 | 天天插天天爱 | 国产在线播放一区二区三区 | 亚洲三级视频 | 色婷婷国产精品 | 婷婷综合在线 | 精品亚洲欧美无人区乱码 | 2020天天干天天操 | 人人澡澡人人 | 国产不卡免费视频 | 欧美色综合久久 | 97精品在线 | 成x99人av在线www | 97电影在线观看 | 9在线观看免费高清完整版 玖玖爱免费视频 | 三上悠亚在线免费 | 最新日韩在线观看视频 | 4p变态网欧美系列 | 国产成人精品久久久 | 久操中文字幕在线观看 | 免费成人黄色 | 亚洲小视频在线 | 激情在线网站 | 91亚洲国产成人久久精品网站 | 久久久久久久久久久久久影院 | 中文字幕资源网 | 91麻豆文化传媒在线观看 | 麻豆久久精品 | 国产精品6 | 色婷婷a | 九九爱免费视频 | 成人av在线影院 | 最近最新mv字幕免费观看 | 国产精品久久久久久av | 观看免费av | 午夜精品一区二区三区在线 | 五月婷婷激情综合 | 亚洲精品视频免费观看 | 午夜精品久久久久久久久久久 | 看片网站黄| 亚洲人视频在线 | 午夜视频在线观看一区二区三区 | 91人人视频在线观看 | 欧美成人手机版 | 欧美激情视频一区二区三区免费 | 99久久久国产精品免费99 | 成人免费 在线播放 | 国产成人a亚洲精品v | 中文字幕免费在线 | 久久成人国产精品 | 午夜av免费 | 国产精品久久久久久久久久久杏吧 | 又黄又色又爽 | 在线视频欧美精品 | 亚洲精品综合一区二区 | 亚洲精品小视频 | 国产美女精品人人做人人爽 | 色婷婷国产 | 欧美色插 | 色老板在线 | 免费看的黄色录像 | 亚洲一区二区三区精品在线观看 | 91视频网址入口 | 久久久久人人 | 国产精品乱码久久久久久1区2区 | 日本久久久久 | 国产免费高清视频 | 国产欧美在线一区二区三区 | 国产精品日韩在线 | 在线免费观看的av网站 | 在线亚洲播放 | 丁香六月欧美 | 免费网站在线 | 国产毛片aaa | 色av婷婷 | 在线观看91av | 在线观看福利网站 | 伊人天天干| 一级免费av | 国产精品免费在线观看视频 | 九九热视频在线 | 中文字幕在线观看网址 | 色综合久久精品 | 天天干天天做天天操 | 欧美日韩三区二区 | 国产精品自拍在线 | 91精品国产入口 | 国产免费人人看 | 久九视频 | 日韩欧美电影在线 | 国产亚洲va综合人人澡精品 | 黄色不卡av | 亚洲精品av在线 | 国产精品99蜜臀久久不卡二区 | 成人影片在线免费观看 | 天天爱天天干天天爽 | 日韩精品一区二区三区电影 | 人人干人人上 | 国产精品一区二区美女视频免费看 | 激情九九 | 国产精品一区二区三区在线看 | 2020天天干夜夜爽 | 伊人天天色 | 亚洲午夜大片 | 天天干天天操 | 亚洲国产日韩一区 | 欧美综合在线视频 | 91在线看视频免费 | 一区二区免费不卡在线 | 天天操天天曰 | 亚洲v欧美v国产v在线观看 | 青青河边草观看完整版高清 | 丁香婷婷在线观看 | 成人欧美日韩国产 | 亚洲视频中文 | 日日婷婷夜日日天干 | 91成人网在线 | 国产在线国产 | 在线免费观看视频一区二区三区 | 欧美一级日韩三级 | 亚洲九九精品 | 天天操网址| 久久久久一区二区三区四区 | 天天色成人网 | 丝袜美腿在线 | 亚洲播播| 九九综合九九 | 国产精品6 | 不卡国产在线 | 国产一区二区在线播放 | 四虎成人免费影院 | a久久久久| 欧美有色 | 久久综合成人 | 草久电影 | 婷婷在线视频观看 | 久久精品一区八戒影视 | 美女视频永久黄网站免费观看国产 | 国产一区免费 | 97精产国品一二三产区在线 | 亚洲日本在线视频观看 | 在线观看91精品国产网站 | 国产黄av| 国产精品xxxx18a99| 国产精品成久久久久三级 | 免费日韩一区 | 免费av小说| 久久久国产精品成人免费 | 黄色成年 | 中文字幕在线免费播放 | 亚洲久在线 | 国产精品一区二区久久久 | 中文字幕av免费在线观看 | 国产高清在线一区 | 国产一区二区三区免费在线 | 91香蕉国产在线观看软件 | 色在线高清 | 男女全黄一级一级高潮免费看 | 综合网伊人 | 在线观看av不卡 | 在线成人av | 97人人添人澡人人爽超碰动图 | 91麻豆精品91久久久久同性 | 精品视频专区 | 女人魂免费观看 | 免费精品视频在线观看 | 国产成人a v电影 | 成人国产精品久久久久久亚洲 | 福利片免费看 | 午夜精品一区二区三区免费视频 | 欧美人zozo | 国产精品 日韩 | 成人手机在线视频 | 91福利区一区二区三区 | 久久精品国产一区二区三区 | 97超碰在线资源 | 区一区二区三在线观看 | 黄色一级大片在线免费看国产一 | 五月花激情 | 天堂va在线高清一区 | 免费网站在线观看成人 | 97国产在线视频 | 国产精品久久久久久久久软件 | 国产黄大片在线观看 | 99欧美| 胖bbbb搡bbbb擦bbbb| 最近中文字幕大全 | 欧美日韩精品电影 | 69精品人人人人 | 国产专区视频在线观看 | 亚洲乱码国产乱码精品天美传媒 | 韩日av一区二区 | 成人精品亚洲 | 久久精品影片 | www黄色av| 高清不卡一区二区三区 | 中国一级片在线播放 | 欧美9999| 成人在线一区二区三区 | 久产久精国产品 | 久久精品久久99 | 免费在线观看一区 | av不卡免费在线观看 | 亚洲一区久久 | 日本精品视频免费 | 一区二区三区在线观看 | 亚洲视频,欧洲视频 | 日韩字幕 | 国产精品1区 | 国产亚洲小视频 | 亚洲电影第一页av | 特级西西人体444是什么意思 | 久久精品视频观看 | 亚洲国产成人高清精品 | 日韩激情综合 | 亚洲va在线va天堂 | 色播五月激情五月 | 日韩激情av在线 | www视频在线观看 | 国产黄影院色大全免费 | 免费色视频网站 | 久艹在线观看视频 | 99超碰在线播放 | 成人免费视频免费观看 | 成人欧美日韩国产 | 中文亚洲欧美日韩 | 麻豆传媒电影在线观看 | 国产在线欧美日韩 | 韩国一区二区三区在线观看 | 久久精品精品 | 亚洲精品乱码久久久久v最新版 | 91插插插网站| 青青草国产精品 | 草久在线观看视频 | 国产一级性生活视频 | www免费在线观看 | 久久久精品欧美 | 激情久久综合 | 天天操夜夜爱 | 午夜精品久久久久久久99婷婷 | 一级黄毛片 | 91手机在线看片 | 精品亚洲午夜久久久久91 | 99热最新地址 | 天天射天天操天天干 | 欧美日韩在线免费视频 | 国产裸体无遮挡 | 亚洲视频999 | 97超碰人人澡 | 97精品欧美91久久久久久 | 欧美一级片在线免费观看 | 成人午夜免费剧场 | 久久国产精品99久久久久久丝袜 | 亚洲综合激情小说 | 私人av | 久久毛片网站 | 国产a级片免费观看 | 日日碰狠狠躁久久躁综合网 | 日日夜操 | 伊人影院在线观看 | 久久精品www人人爽人人 | 99精品免费久久久久久久久 | 免费观看丰满少妇做爰 | 成人小电影在线看 | 欧美aa一级片 | 久久人人爽人人 | 99热只有精品在线观看 | 欧美有色 | 正在播放国产一区二区 | 五月天久久婷 | 日本久久91| 7777xxxx| 亚洲视频电影在线 | 欧美一级视频免费 | 欧美专区日韩专区 | 四虎永久网站 | 天天色 天天 | 亚洲va天堂va欧美ⅴa在线 | 日韩激情在线视频 | 日韩草比 | 日韩中文字幕视频在线 | 欧美日韩国产色综合一二三四 | 中文字幕一区二区三区精华液 | 一级欧美黄 | 免费看三级网站 | 欧美亚洲精品一区 | 字幕网资源站中文字幕 | 久久国色夜色精品国产 | 99精品福利视频 | 黄色h在线观看 | 亚洲精品国产精品国产 | 亚洲国产精品成人女人久久 | 美女网站在线观看 | 欧洲黄色片 | 大胆欧美gogo免费视频一二区 | 国产特级毛片 | 亚洲精品中文在线观看 | 欧美a在线看 | 中文字幕一区二区三区在线观看 | 国内外成人在线视频 | 手机在线视频福利 | 国产精品日韩欧美一区二区 | 婷婷激情综合五月天 | 久久免费av | 免费看搞黄视频网站 | 91夫妻自拍 | 国产日本亚洲 | 99亚洲视频 | 国产在线色站 | 69精品久久 | 久久国产亚洲视频 | 视频 天天草 | 欧美精品成人在线 | 欧美a级成人淫片免费看 | 亚洲精品午夜久久久久久久久久久 | 超碰在线人人爱 | 国产精品一区专区欧美日韩 | 久久人操 | 成人午夜影视 | 天天曰夜夜爽 | 99久久久国产免费 | 91av视频免费在线观看 | 国产美女免费看 | 国产精品a成v人在线播放 | 欧美午夜性 | 亚洲一一在线 | 狠狠激情中文字幕 | 欧美激情视频一区二区三区免费 | 成人免费中文字幕 | 天天天天爱天天躁 | 91精品国产综合久久久久久久 | 精品99在线观看 | 久久精品毛片基地 | 视频在线精品 | 伊人色**天天综合婷婷 | 91探花视频 | 国产精品中文字幕av | 99在线看 | 97视频免费在线看 | www视频免费在线观看 | 国产不卡毛片 | 久久久免费国产 | 99免费视频 | 一级黄色片在线免费观看 | 天天操天天舔天天爽 | 国产黄色在线观看 | 亚洲va欧洲va国产va不卡 | 免费视频久久 | 一区二区精品视频 | www.夜夜夜| 久久久久久久毛片 | 成人国产在线 | 免费看片网页 | 国产精品露脸在线 | 色婷婷激情 | 新版资源中文在线观看 | 亚洲午夜精品久久久久久久久久久久 | 亚洲aⅴ乱码精品成人区 | 97在线观看免费观看 | 成人性生交大片免费看中文网站 | 国产精品99精品久久免费 | 国产高清成人在线 | 久久艹精品 | 色综合天天 | 国产一区高清在线观看 | 精品久久久成人 | 久久理论视频 | 黄色网在线播放 | 黄色一级大片在线免费看国产一 | 国产精品2018 | 久久久久久免费毛片精品 | 奇人奇案qvod| 国产乱码精品一区二区蜜臀 | 亚洲成aⅴ人在线观看 | 青青草久草在线 | 成人在线视频免费看 | 日韩免费在线看 | 成人三级网站在线观看 | 91精品国产一区二区三区 | av丝袜天堂 | 天天操天天操天天 | 日韩欧美综合在线视频 | 激情开心站 | 日本在线成人 | 欧美极品xxxx| 色就是色综合 | 精品国产区 | 久久久国产精品视频 | 国产亚洲精品电影 | 中文av一区二区 | 91在线91 | 免费观看91视频 | 亚洲精选在线 | 久草免费资源 | 一区 二区 精品 | 天天射日 | 天天综合网天天综合色 | 国产 视频 久久 | 欧美精品999 | 精品麻豆 | 色婷婷av国产精品 | 美女在线免费视频 | 91桃花视频 | 四虎成人精品永久免费av九九 | 国产精品久久久久一区 | 国产精品美女久久久久久久久久久 | 在线黄网站 | 午夜在线观看影院 | 在线免费观看一区二区三区 | 精选久久| 亚洲国产精品久久久久 | 色av资源网| 97超碰超碰久久福利超碰 | 黄色av免费看 | 婷婷在线资源 | 精品国产一区二区三区男人吃奶 | 亚洲精品久久久久中文字幕二区 | 日韩欧美在线观看一区二区 | 欧美人zozo | 国产精品一区二区视频 | 天天射,天天干 | 日韩免费成人 | 中文在线免费看视频 | 午夜性色 | 欧美精品久久久久久久久老牛影院 | 日韩电影一区二区三区在线观看 | 日韩精品欧美精品 | 国内外激情视频 | 精品日韩视频 | 国产手机视频在线播放 | 欧美福利视频一区 | 久久国产高清视频 | www天天干| 国产色婷婷在线 | 国产中文字幕三区 | 五月花婷婷 | ww亚洲ww亚在线观看 | 国产精品人人做人人爽人人添 | 久久av福利 | 午夜av免费观看 | 亚洲精品综合久久 | 国产va饥渴难耐女保洁员在线观看 | 国产精品美女免费看 | 最新中文字幕 | 婷婷激情在线观看 | 少妇精69xxtheporn | 日韩精品久久久久久久电影竹菊 | 国产午夜免费视频 | 久久免费看a级毛毛片 | 啪啪资源 | 欧美一级欧美一级 | 亚洲国产精品成人av | 欧美一区二区三区激情视频 | 视频高清 | 天天综合网国产 | 欧美精品亚洲精品日韩精品 | www.狠狠插.com | 欧美va电影 | 中文字幕黄色网址 | 国产午夜精品免费一区二区三区视频 | 一本到在线 | 96视频在线 | 国产一二区在线观看 | 一二区精品 | 日韩天天操 | 91入口在线观看 | 日本中文字幕电影在线免费观看 | 一级成人在线 | 美女搞黄国产视频网站 | 天天干天天操av | 久久久久久久久久久网 | 91精品日韩 | 日韩高清不卡在线 | 天天操伊人 | 四虎伊人 | 欧美亚洲免费在线一区 | a色视频| 五月天视频网站 | 狠狠色丁香婷婷综合基地 | 国产精品9999久久久久仙踪林 | 五月婷婷国产 | 亚洲精品中文字幕在线观看 | 久久情爱| 久久精品99久久久久久 | 国产又粗又猛又爽又黄的视频先 | 超碰人人超 | 最近更新好看的中文字幕 | 日韩一区视频在线 | 亚洲精品乱码久久久久久高潮 | 日韩精品在线看 | 亚洲一区欧美激情 | 一本一道波多野毛片中文在线 | japanesexxxhd奶水| 五月婷婷激情网 | 亚洲永久精品在线 | 在线观看国产中文字幕 | 国产日韩欧美在线观看 | 久久国内免费视频 | 视频一区二区在线观看 | 狠狠色丁香婷婷综合欧美 | 97超级碰 | 天天插天天爱 | 国产成人av在线 | 国色天香在线 | 在线之家免费在线观看电影 | 欧亚日韩精品一区二区在线 | 国产免费专区 | 国产一级二级三级视频 | 欧美日韩久久久 | 久久婷婷一区 | 久久久久久久久福利 | 97在线观看免费 | 亚洲精品乱码久久久久久高潮 | 在线v片 | 999久久久精品视频 日韩高清www | 欧美日韩xxxxx | 国产专区日韩专区 | 精品久久久久久综合 | 夜夜狠狠| 毛片无卡免费无播放器 | 国产精品成人自产拍在线观看 | 国产一级片一区二区三区 | 日日干视频| 亚洲 欧美 日韩 综合 | 久影院| 欧美在线观看视频免费 | 亚洲精品中文在线观看 | 日韩特黄av | 国产a视频免费观看 | 91中文在线| 黄色在线小网站 | 亚洲免费av在线 | 日韩一区在线播放 | 成人黄色在线电影 | 久久精品久久久久电影 | 成年人黄色免费视频 | 不卡视频国产 | 亚洲婷婷综合色高清在线 | 91最新网址 | 久久免费视频在线观看 | 天天视频色版 | 亚洲涩涩一区 | 蜜臀av网址 | 国产精品igao视频网网址 | 麻豆视频免费入口 | 免费精品在线观看 | 天天操婷婷 | 日韩欧美综合在线视频 | 亚洲伊人第一页 | 国产精品毛片一区二区在线看 | 天天激情综合网 | 国产成人精品久久久久 | 国产91精品欧美 | 美女免费黄网站 | 综合国产在线观看 | 欧美国产大片 | 五月激情六月丁香 | 欧美日韩在线免费视频 | 亚洲影院一区 | 欧美性猛片| 91综合视频在线观看 | 亚洲免费视频观看 | 一区二区三区日韩视频在线观看 | 一区中文字幕 | 91精品视频免费在线观看 | 精精国产xxxx视频在线播放 | 天天射天天射天天 | 天天做日日做天天爽视频免费 | 91自拍视频在线观看 | 国产精品国产三级国产aⅴ无密码 | 三三级黄色片之日韩 | 黄色网在线免费观看 | 久久精品播放 | 成人va在线观看 | 日本中文一区二区 | av在线com| 久久久久日本精品一区二区三区 | 精品1区2区 | 黄色三级在线观看 | 国产手机av | 97超碰人人澡人人爱学生 | 中文字幕 国产视频 | 成人国产精品久久久久久亚洲 | 日本一区二区免费在线观看 | 国产精品不卡在线播放 | 91综合色 | 中文久草 | 一区二区三区国产精品 | 国产粉嫩在线 | 国产精品久久久久久久毛片 | 狠狠色丁香婷婷综合久久片 | 久久亚洲欧美日韩精品专区 | 亚洲电影第一页av | 亚洲午夜av电影 | 手机在线中文字幕 | 在线视频日韩精品 | 最近日本字幕mv免费观看在线 | 亚洲综合在 | 中文字幕字幕中文 | 久久高清免费视频 | 少妇高潮流白浆在线观看 | 色婷婷影视 | 人人澡人 | 精品久久久999 | 成人在线观看你懂的 | 日韩黄色一级电影 | 久久www免费人成看片高清 | 色婷婷中文 | 国产成人久久av免费高清密臂 | 国产亚洲精品成人av久久影院 | 草久久久 | 国产尤物一区二区三区 | 日韩精品五月天 | 欧美午夜性 | 成人h电影 | 高清精品久久 | 亚洲黄色成人网 | 美女搞黄国产视频网站 | 天天天天干 | 久久国语露脸国产精品电影 | 少妇按摩av | 97色狠狠| 不卡精品视频 | 欧美性色综合网 | 国产99久久九九精品 | 成年人视频在线免费观看 | 草莓视频在线观看免费观看 | 国产在线播放一区 | 国产成人精品在线观看 | 免费高清在线观看成人 | 免费观看91 | 婷婷六月丁香激情 | 美女精品国产 | 在线网址你懂得 | 黄色软件在线看 | 成人四虎 | 亚洲精品综合在线观看 | 天天操夜夜看 | 成人动漫视频在线 | 亚洲一区二区视频在线播放 | 亚洲视频网站在线观看 | 99久高清在线观看视频99精品热在线观看视频 | 国产精品一区二区三区四 | 国产三级香港三韩国三级 | av色图天堂网 | 99免费看片 | 色97在线| 久久精品电影院 | 久久99精品波多结衣一区 | 国产又黄又硬又爽 | 久久国产精品二国产精品中国洋人 | av亚洲产国偷v产偷v自拍小说 | 久久成人毛片 | 国产精品免费久久久久影院仙踪林 | 成人av免费在线观看 | 精品国产久 | 人人插人人插 | 国产精品久久久久久久久免费 | 欧美亚洲三级 | 日韩精品免费一区二区在线观看 | 国产一线二线三线性视频 | 成人精品视频 | 日韩三级在线 | 日本久久视频 | 欧美电影在线观看 | 欧美不卡在线 | 中文字幕在线播放一区二区 | 在线观看免费视频你懂的 | 在线视频福利 | 久久国产精品网站 | 国产精品视频在线观看 | 国产区精品视频 | 亚洲成人免费在线 | 99视频一区二区 | 国产传媒中文字幕 | 久久这里精品视频 | 日韩免费中文字幕 | 国产片免费在线观看视频 | 欧美日韩国产一区二区三区在线观看 | 96久久欧美麻豆网站 | 天天色天天 | 久久成人欧美 | 久久精品爱视频 | 亚洲桃花综合 | 波多野结衣在线观看视频 | 国产精品麻豆欧美日韩ww | 91av手机在线观看 | 久久少妇免费视频 | 在线观看岛国 | wwxxxx日本| 麻豆观看 | 亚洲综合色婷婷 | 久久久免费av | 丁香高清视频在线看看 | av免费试看 | 亚洲综合婷婷 | 久久艹在线观看 | 久久精品婷婷 | 99久久精品国产网站 | 丁香视频五月 | 亚洲欧洲国产精品 | 天天干天天在线 | 婷婷六月天在线 | 在线观看一 | 91在线国内视频 | 久久国产系列 | 99色| 天天操天天干天天操天天干 | 国产精美视频 | 久草在线视频中文 | 久久男人免费视频 | 天天综合入口 | 亚洲 欧美变态 另类 综合 | 久久精品视频18 | 夜夜高潮夜夜爽国产伦精品 | av电影在线不卡 | 日本久久成人中文字幕电影 | 欧美激情精品一区 | www.五月婷婷 | 色婷婷综合久久久久中文字幕1 | 久久久久婷 | 337p西西人体大胆瓣开下部 | 69精品| 久久综合五月 | 久久久精品国产免费观看一区二区 | 日韩二区精品 | 成人国产精品久久久久久亚洲 | 视频在线一区 | 亚洲欧美视频一区二区三区 | 91精品在线视频观看 | 99精品国产99久久久久久福利 | 91精品啪在线观看国产线免费 | 亚洲国产成人在线观看 | 国产va饥渴难耐女保洁员在线观看 | 99视频网址 | 国产精品一区二区在线播放 | 伊人电影在线观看 | 国内精品久久久久久久 | 欧美精品一区二区在线播放 | 亚洲高清视频在线观看 | 国产在线不卡视频 | 日韩欧美久久 | 久久人人干 | 国内精品视频在线 | 999抗病毒口服液 | 欧洲精品视频一区二区 | 99性视频 | 国产成人精品一区二区三区在线观看 | 日韩电影中文,亚洲精品乱码 | 日韩精品视频免费看 | 久久婷婷久久 | 欧美a免费 | 成 人 黄 色 视频免费播放 | 99在线视频播放 | 天天操天天干天天 | 成人h视频在线播放 | 黄色福利网站 | 99精品热| 丁香在线视频 | 在线观看色网站 | 国产91影院| 精品视频免费观看 | 中文字幕在线观看日本 | 美女网色| 欧美日本啪啪无遮挡网站 | 激情久久久久 | 在线观看91久久久久久 | 久久黄色网址 | 亚洲国产中文在线 | 一本一本久久a久久精品综合 | 99亚洲精品在线 | 久久99在线视频 | 精品国产aⅴ麻豆 | 丁香六月婷 | 久久综合五月天 | 高潮毛片无遮挡高清免费 | 国产福利一区在线观看 | 九九亚洲精品 | 久久久久久久久免费 | 久草在线精品观看 | 日本黄色大片免费 | 天天操天天摸天天干 | 五月婷婷综合久久 | 99精品一级欧美片免费播放 | 狠色在线 | 天堂资源在线观看视频 | 国产精品久久久久免费观看 | 久艹视频在线免费观看 | 久久精品99国产 |