深度學習中Embedding的理解
一、總結
一句話總結:
Embedding就是把高維的one-hot進行降維的過程。
1、Embedding的概念引入?
1)、一維列表也不行,二維稀疏矩陣也不行,怎么辦呢?這里就引入了Embedding的概念,由密集向量表示,實現降維!
2)、“並不是每個單詞都會被一個向量來代替,而是被替換為用於查找嵌入矩陣中向量的索引”
3)、同時訓練神經網絡時,每個Embedding向量都會得到更新,即在不斷升維和降維的過程中,找到最適合的維度。
2、詞袋模型和word2vec?
詞袋模型基於詞的one-hot表示,word2vec基於詞的分布式表示
3、one-hot、word2vec、embedding關系?
①)、由於one-hot編碼得到的矩陣太稀疏而且維度太高了,所以可以將one-hot向量作為word2vec的輸入,通過word2vec訓練低維詞向量(word embedding)。
②)、或者直接將得到的編碼序列通過word2vec轉化成固定維度的向量,及得到自己的word embedding。
4、詞袋模型?
一)、將文本看成一系列的詞語集合,將集合中所有詞語構成一個詞典,為每個詞語構建索引,那么整個文本就能表示為一個索引集(一系列詞的集合)。由於詞很多,所以用袋子裝起來,就簡稱為詞袋模型了。
二)、“基於詞袋的詞向量表達法像是為每一個文本建立了一個統計直方圖,直方圖的x軸是單詞,y軸是單詞在該文本的詞頻(或者TF-IDF)”。也就是將不定長的文本型數據轉化為定長的數值型數據,便於機器學習方法處理
5、詞向量模型?
“詞向量模型是考慮詞語位置關系的一種模型。通過大量語料的訓練,將每一個詞語映射到高維度(幾千、幾萬維以上)的向量當中,通過求余弦的方式,可以判斷兩個詞語之間的關系。” 這個高維的向量就是詞向量,現在常用word2vec構成詞向量模型。
二、深度學習中Embedding的理解
轉自或參考:深度學習中Embedding的理解
https://www.cnblogs.com/lyeeer/p/10310135.html
在自然語言處理領域,由於計算機並不直接處理文本,需要將其先轉化成易於計算的特征向量。這里就需要用到文本特征表示模型,主要有兩大類:直接從原始文本生成文本向量(LDA);先從文本中獲取字向量,然后在字向量的基礎上得到文本向量(詞袋模型基於詞的one-hot表示,word2vec基於詞的分布式表示)。
語言模型:通過上下文的詞,計算某個詞出現的概率的模型。其實就是一個多分類器
文本特征表示模型:將原始文本中的詞、詞組和句子轉化為易於計算的特征向量,常用的有詞袋模型、LDA模型、概率神經網絡模型等。其中實際應用較多的是詞袋模型,學術研究中用的較多的是深度神經網絡模型。
詞向量表示方法:One-hot表示和分布式表示(即用一個詞附近的其他詞來表示該詞)
詞袋模型:將文本看成一系列的詞語集合,將集合中所有詞語構成一個詞典,為每個詞語構建索引,那么整個文本就能表示為一個索引集(一系列詞的集合)。由於詞很多,所以用袋子裝起來,就簡稱為詞袋模型了。
“基於詞袋的詞向量表達法像是為每一個文本建立了一個統計直方圖,直方圖的x軸是單詞,y軸是單詞在該文本的詞頻(或者TF-IDF)”。也就是將不定長的文本型數據轉化為定長的數值型數據,便於機器學習方法處理
詞向量模型:“詞向量模型是考慮詞語位置關系的一種模型。通過大量語料的訓練,將每一個詞語映射到高維度(幾千、幾萬維以上)的向量當中,通過求余弦的方式,可以判斷兩個詞語之間的關系。” 這個高維的向量就是詞向量,現在常用word2vec構成詞向量模型。
word2vec:
是一個計算詞嵌入/詞向量(word embedding)的工具,包含兩種訓練模型:CBOW模型根據中心詞w(t)周圍的詞如w(t-2)&w(t-1)&w(t+1)&w(t+2)來預測中心詞w(t);Skip-gram模型則根據中心詞W(t)來預測周圍詞。
由於one-hot編碼得到的矩陣太稀疏而且維度太高了,所以可以將one-hot向量作為word2vec的輸入,通過word2vec訓練低維詞向量(word embedding)。或者直接將得到的編碼序列通過word2vec轉化成固定維度的向量,及得到自己的word embedding。
TF-IDF:詞頻(詞的出現頻率)-逆文檔頻率(衡量詞的常見程度,如果是'的'/'了'這種沒有實際意義的詞,可以設置一個小的權重),分母+1是避免分母為0。TF-IDF=TF*IDF
但是還是沒有表現出詞的位置信息以及相互關系。
N-gram模型:為了保持詞的順序,所以類似於滑窗操作。N表示滑窗的大小,比如如果為2-gram,那么兩個詞當成一組,如我愛吃火鍋可以構造的詞典為{"我愛":1,"愛吃":2,"吃火鍋":3}
one-hot(獨熱)編碼
在機器學習算法中,會遇到很多分類的特征,比如顏色中的紅橙黃綠、國籍、性別等,這些特征值都是離散的,但是要用算法實現的話,要對這些特征進行特征數字化處理。
也就是對這些特征進行數字化編碼,比如把顏色中的紅橙黃綠對應為[0,1,2,3],但是這樣也存在不合理性,1+2=3,也就是橙+黃變成綠,每個特征值又沒有數值疊加的特點,在邏輯上顯然是說不通的。
one-hot編碼,通過查閱資料,給出的定義是又稱為一位有效編碼,主要是采用N位狀態寄存器來對N個狀態進行編碼,每個狀態都是由其獨立的寄存器位,並且在任意時候只有一位有效。是分類變量作為二進制向量的表示,首先要求將分類值映射到整數值,然后每個整數值被表示為二進制向量,除了整數的索引外,都是0。
在特征提取上屬於詞袋模型
舉個例子,
#今天也要加油鴨 [ [1 0 0 0 0 0 0] [0 1 0 0 0 0 0] [0 0 1 0 0 0 0] [0 0 0 1 0 0 0] [0 0 0 0 1 0 0] [0 0 0 0 0 1 0] [0 0 0 0 0 0 1] ]
那么,每一個字都被表示為一個包含七個元素的數組,每個字都與列表中的唯一一個數組對應,構成了一個稀疏矩陣。
如果將其表示為列表的形式:
#今天也要加油鴨 [0 1 2 3 4 5 6]
one-hot編碼形成稀疏矩陣顯然更便於計算與理解。而且解決了能分開詞,這個最基本的問題。
缺點:1)但是如果當這個文本數量變大,不是一句話,而是一本長篇小說,那需要表示成為一個...無法想象的矩陣,那這樣的矩陣會過於稀疏,過度占用資源!
2)並且one-hot矩陣沒有辦法表示詞的順序關系,無法表示上下文。
===============================
Embedding層的作用
一維列表也不行,二維稀疏矩陣也不行,怎么辦呢?
這里就引入了Embedding的概念,由密集向量表示,實現降維!也就是說Embedding就是把高維的one-hot進行降維的過程。
“並不是每個單詞都會被一個向量來代替,而是被替換為用於查找嵌入矩陣中向量的索引”
同時訓練神經網絡時,每個Embedding向量都會得到更新,即在不斷升維和降維的過程中,找到最適合的維度。
===================
參考的博文
https://juejin.im/entry/5acc23f26fb9a028d1416bb3
https://blog.csdn.net/weixin_42078618/article/details/82999906
https://blog.csdn.net/kl1411/article/details/82981955
https://blog.csdn.net/program_developer/article/details/80852710
https://blog.csdn.net/u010412858/article/details/77848878
https://spaces.ac.cn/archives/4122