詞向量: https://blog.csdn.net/class_brick/article/details/78908984
word2vec也叫word embeddings,中文名“詞向量”,作用就是將自然語言中的字詞轉為計算機可以理解的稠密向量(Dense Vector)。在word2vec出現之前,自然語言處理經常把字詞轉為離散的單獨的符號,也就是One-Hot Encoder。
比如上面的這個例子,在語料庫中,杭州、上海、寧波、北京各對應一個向量,向量中只有一個值為1,其余都為0。但是使用One-Hot Encoder有以下問題。一方面,城市編碼是隨機的,向量之間相互獨立,看不出城市之間可能存在的關聯關系。其次,向量維度的大小取決于語料庫中字詞的多少。如果將世界所有城市名稱對應的向量合為一個矩陣的話,那這個矩陣過于稀疏,并且會造成維度災難。?
使用Vector Representations可以有效解決這個問題。Word2Vec可以將One-Hot Encoder轉化為低維度的連續值,也就是稠密向量,并且其中意思相近的詞將被映射到向量空間中相近的位置。?
如果將embed后的城市向量通過PCA降維后可視化展示出來,那就是這個樣子。
我們可以發現,華盛頓和紐約聚集在一起,北京上海聚集在一起,且北京到上海的距離與華盛頓到紐約的距離相近。也就是說模型學習到了城市的地理位置,也學習到了城市地位的關系。
word2vec模型其實就是簡單化的神經網絡。
輸入是One-Hot Vector,Hidden Layer沒有激活函數,也就是線性的單元。Output Layer維度跟Input Layer的維度一樣,用的是Softmax回歸。我們要獲取的dense vector其實就是Hidden Layer的輸出單元。有的地方定為Input Layer和Hidden Layer之間的權重,其實說的是一回事。?
Word2Vec
問題設定
對于One-hot的詞向量:
無法通過兩向量夾角余弦值計算其相似度,word2vec提供了Skip-Gram(跳字模型)與CBOW(連續詞袋模型)兩個詞嵌入模型,通過這種模型訓練出的詞向量可以較好的表示出詞之間的相似度。
Skip-Gram
即跳字模型,其核心思想是對于一個上下文,設定一個大小為m的滑窗,在滑窗內選擇1個中心詞,預測滑窗內m-1個背景詞。即如果上下文是:
對每一個詞進行One-hot編碼:
設定滑窗大小為2,如果選擇中心詞apple,那么將會有以下訓練數據:
設計一個只有1個輸入層、1個隱藏層、1個輸出層的神經網絡,其中輸出層的神經元個數等于輸入層即等于One-hot編碼的維度,而隱含層的神經元個數通常遠小于輸出層,比如One-hot維度如果是10000,隱含層可以只有300個神經元
CBOW
即Continuous Bag of Words,連續詞袋模型,其核心思想是對于一個上下文,設定一個大小為m的滑窗,在滑窗內選擇1個背景詞,m - 1個中心詞,與Skip-Gram相反,設定滑窗大小為2,如果選擇中心詞 I, eat, every, day ,那么將會有以下訓練數據:
--------------------------------------------------------------------------------------------------------------------
【其他】
『TensorFlow』讀書筆記_Word2Vec:https://www.cnblogs.com/hellcat/p/8068198.html
Word2Vec又稱Word Embeddings,中文稱為"詞向量"、"詞嵌入"等。
One_Hot_Encoder
圖像和語音天然可以表示為稠密向量,自然語言處理領域在Word2Vec之前都是使用離散符號,如"中國"表示為5178,"北京"表示為3987這樣,即One_Hot_Encoder,一個詞對應一個向量(向量中一個值為1其余值為0),這使得整篇文章變為一個稀疏矩陣。而在文本分類領域,常使用Bag of Words模型,將文章對應的稀疏矩陣進行合并,比如"中國"出現23次,則5178位置特征值為23這樣。
由于One_Hot_Encoder的特征編碼是隨機的,完全忽視了字詞之間可能的關聯。而且稀疏向量作為存儲格式時,其效率比較低,即我們需要更多的訓練數據,另外,稀疏矩陣計算也非常麻煩。
向量空間模型
向量表達可以有效的解決這些問題,向量空間模型會將意思相近的詞映射到鄰近的位置。向量空間模型在NLP中依賴的假設是Distributional Hypothesis,即相同語境中出現的詞其意義也相近。
向量空間模型有兩個子類,
????其一是計數模型,計數模型會統計相鄰詞出現的頻率,然后將之處理為小而稠密的矩陣
????其二是預測模型,預測模型則是根據一個詞相鄰的詞去推測出這個詞,以及其空間向量
Word2Vec就屬于一種預測模型,其分為兩個模式,
????CBOW模式從缺詞的原始語句推測目標詞,適用于小型數據
????Skip-Gram利用目標詞逆推原始語句,對大型語料庫效果很好
預測模型一般是給定前h個詞的情況下去最大化目標詞的概率,CBOW模型并不需要計算全部詞匯表中的可能性,隨機選擇k個詞匯和目標詞匯進行計算loss,這個方法由tf.nn.nce_loss()已經實現了。
以一句話為例;“the quick brown fox jumped over the lazy dog”為例,滑窗尺寸為一時映射關系有:CBOW中,【the、brown】->【quick】這樣的,而Skip-Gram中相反,我們希望得到的是(quick,the)、(quick,brown)這樣的關系。面對隨機生成的負樣本時,我們希望概率分布在the的位置盡可能的大。
再舉個例子:對同樣一個句子:Hangzhou is a nice city。我們要構造一個語境與目標詞匯的映射關系,其實就是input與label的關系。?
這里假設滑窗尺寸為1(滑窗尺寸……這個……不懂自己google吧-_-|||)?
CBOW可以制造的映射關系為:[Hangzhou,a]—>is,[is,nice]—>a,[a,city]—>nice?
Skip-Gram可以制造的映射關系為(is,Hangzhou),(is,a),(a,is), (a,nice),(nice,a),(nice,city)