詞向量: https://blog.csdn.net/class_brick/article/details/78908984
word2vec也叫word embeddings,中文名“詞向量”,作用就是將自然語言中的字詞轉(zhuǎn)為計(jì)算機(jī)可以理解的稠密向量(Dense Vector)。在word2vec出現(xiàn)之前,自然語言處理經(jīng)常把字詞轉(zhuǎn)為離散的單獨(dú)的符號(hào),也就是One-Hot Encoder。

比如上面的這個(gè)例子,在語料庫中,杭州、上海、寧波、北京各對(duì)應(yīng)一個(gè)向量,向量中只有一個(gè)值為1,其余都為0。但是使用One-Hot Encoder有以下問題。一方面,城市編碼是隨機(jī)的,向量之間相互獨(dú)立,看不出城市之間可能存在的關(guān)聯(lián)關(guān)系。其次,向量維度的大小取決于語料庫中字詞的多少。如果將世界所有城市名稱對(duì)應(yīng)的向量合為一個(gè)矩陣的話,那這個(gè)矩陣過于稀疏,并且會(huì)造成維度災(zāi)難。?
使用Vector Representations可以有效解決這個(gè)問題。Word2Vec可以將One-Hot Encoder轉(zhuǎn)化為低維度的連續(xù)值,也就是稠密向量,并且其中意思相近的詞將被映射到向量空間中相近的位置。?
如果將embed后的城市向量通過PCA降維后可視化展示出來,那就是這個(gè)樣子。

我們可以發(fā)現(xiàn),華盛頓和紐約聚集在一起,北京上海聚集在一起,且北京到上海的距離與華盛頓到紐約的距離相近。也就是說模型學(xué)習(xí)到了城市的地理位置,也學(xué)習(xí)到了城市地位的關(guān)系。
word2vec模型其實(shí)就是簡(jiǎn)單化的神經(jīng)網(wǎng)絡(luò)。

輸入是One-Hot Vector,Hidden Layer沒有激活函數(shù),也就是線性的單元。Output Layer維度跟Input Layer的維度一樣,用的是Softmax回歸。我們要獲取的dense vector其實(shí)就是Hidden Layer的輸出單元。有的地方定為Input Layer和Hidden Layer之間的權(quán)重,其實(shí)說的是一回事。?

Word2Vec
問題設(shè)定
對(duì)于One-hot的詞向量:

無法通過兩向量夾角余弦值計(jì)算其相似度,word2vec提供了Skip-Gram(跳字模型)與CBOW(連續(xù)詞袋模型)兩個(gè)詞嵌入模型,通過這種模型訓(xùn)練出的詞向量可以較好的表示出詞之間的相似度。
Skip-Gram
即跳字模型,其核心思想是對(duì)于一個(gè)上下文,設(shè)定一個(gè)大小為m的滑窗,在滑窗內(nèi)選擇1個(gè)中心詞,預(yù)測(cè)滑窗內(nèi)m-1個(gè)背景詞。即如果上下文是:
對(duì)每一個(gè)詞進(jìn)行One-hot編碼:

設(shè)定滑窗大小為2,如果選擇中心詞apple,那么將會(huì)有以下訓(xùn)練數(shù)據(jù):

設(shè)計(jì)一個(gè)只有1個(gè)輸入層、1個(gè)隱藏層、1個(gè)輸出層的神經(jīng)網(wǎng)絡(luò),其中輸出層的神經(jīng)元個(gè)數(shù)等于輸入層即等于One-hot編碼的維度,而隱含層的神經(jīng)元個(gè)數(shù)通常遠(yuǎn)小于輸出層,比如One-hot維度如果是10000,隱含層可以只有300個(gè)神經(jīng)元
CBOW
即Continuous Bag of Words,連續(xù)詞袋模型,其核心思想是對(duì)于一個(gè)上下文,設(shè)定一個(gè)大小為m的滑窗,在滑窗內(nèi)選擇1個(gè)背景詞,m - 1個(gè)中心詞,與Skip-Gram相反,設(shè)定滑窗大小為2,如果選擇中心詞 I, eat, every, day ,那么將會(huì)有以下訓(xùn)練數(shù)據(jù):

--------------------------------------------------------------------------------------------------------------------
【其他】
『TensorFlow』讀書筆記_Word2Vec:https://www.cnblogs.com/hellcat/p/8068198.html
Word2Vec又稱Word Embeddings,中文稱為"詞向量"、"詞嵌入"等。
One_Hot_Encoder
圖像和語音天然可以表示為稠密向量,自然語言處理領(lǐng)域在Word2Vec之前都是使用離散符號(hào),如"中國(guó)"表示為5178,"北京"表示為3987這樣,即One_Hot_Encoder,一個(gè)詞對(duì)應(yīng)一個(gè)向量(向量中一個(gè)值為1其余值為0),這使得整篇文章變?yōu)橐粋€(gè)稀疏矩陣。而在文本分類領(lǐng)域,常使用Bag of Words模型,將文章對(duì)應(yīng)的稀疏矩陣進(jìn)行合并,比如"中國(guó)"出現(xiàn)23次,則5178位置特征值為23這樣。
由于One_Hot_Encoder的特征編碼是隨機(jī)的,完全忽視了字詞之間可能的關(guān)聯(lián)。而且稀疏向量作為存儲(chǔ)格式時(shí),其效率比較低,即我們需要更多的訓(xùn)練數(shù)據(jù),另外,稀疏矩陣計(jì)算也非常麻煩。
向量空間模型
向量表達(dá)可以有效的解決這些問題,向量空間模型會(huì)將意思相近的詞映射到鄰近的位置。向量空間模型在NLP中依賴的假設(shè)是Distributional Hypothesis,即相同語境中出現(xiàn)的詞其意義也相近。
向量空間模型有兩個(gè)子類,
????其一是計(jì)數(shù)模型,計(jì)數(shù)模型會(huì)統(tǒng)計(jì)相鄰詞出現(xiàn)的頻率,然后將之處理為小而稠密的矩陣
????其二是預(yù)測(cè)模型,預(yù)測(cè)模型則是根據(jù)一個(gè)詞相鄰的詞去推測(cè)出這個(gè)詞,以及其空間向量
Word2Vec就屬于一種預(yù)測(cè)模型,其分為兩個(gè)模式,
????CBOW模式從缺詞的原始語句推測(cè)目標(biāo)詞,適用于小型數(shù)據(jù)
????Skip-Gram利用目標(biāo)詞逆推原始語句,對(duì)大型語料庫效果很好
預(yù)測(cè)模型一般是給定前h個(gè)詞的情況下去最大化目標(biāo)詞的概率,CBOW模型并不需要計(jì)算全部詞匯表中的可能性,隨機(jī)選擇k個(gè)詞匯和目標(biāo)詞匯進(jìn)行計(jì)算loss,這個(gè)方法由tf.nn.nce_loss()已經(jīng)實(shí)現(xiàn)了。
以一句話為例;“the quick brown fox jumped over the lazy dog”為例,滑窗尺寸為一時(shí)映射關(guān)系有:CBOW中,【the、brown】->【quick】這樣的,而Skip-Gram中相反,我們希望得到的是(quick,the)、(quick,brown)這樣的關(guān)系。面對(duì)隨機(jī)生成的負(fù)樣本時(shí),我們希望概率分布在the的位置盡可能的大。
再舉個(gè)例子:對(duì)同樣一個(gè)句子:Hangzhou is a nice city。我們要構(gòu)造一個(gè)語境與目標(biāo)詞匯的映射關(guān)系,其實(shí)就是input與label的關(guān)系。?
這里假設(shè)滑窗尺寸為1(滑窗尺寸……這個(gè)……不懂自己google吧-_-|||)?
CBOW可以制造的映射關(guān)系為:[Hangzhou,a]—>is,[is,nice]—>a,[a,city]—>nice?
Skip-Gram可以制造的映射關(guān)系為(is,Hangzhou),(is,a),(a,is), (a,nice),(nice,a),(nice,city)