【zt】word to vector

詞向量: 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)

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。