tf.keras.layers.Embedding詞嵌入淺析
本篇關(guān)于Keras的Embedding函數(shù)解析是參考了其他博主的文章,加上自己的理解,不當(dāng)之處請大家指出。
原文鏈接:
https://keras.io/search.html?query=embedding
https://blog.csdn.net/weixin_44493841/article/details/121487594
https://www.jianshu.com/p/a3f3033a7379
在介紹Embedding之前,先了解以下幾個概念:
數(shù)值張量
深度學(xué)習(xí)模型在處理文本數(shù)據(jù)時不會直接把原始文本數(shù)據(jù)作為輸入,它只能處理數(shù)值張量。
文本向量化
文本向量化就是把文本數(shù)據(jù)轉(zhuǎn)化成數(shù)值張量的過程,實現(xiàn)方法多是把文本分割成單詞或者字符,再把單詞或字符轉(zhuǎn)換為一個向量。
標(biāo)記
將文本分解而成的單詞或字符叫做標(biāo)記。
分詞
將文本分解成標(biāo)記的過程叫做分詞。
我們要用深度學(xué)習(xí)模型處理文本數(shù)據(jù),通過使用某種分詞方法來實現(xiàn)文本向量化,即在分詞過程,把生成的標(biāo)記與數(shù)值向量相關(guān)聯(lián),然后把這些向量組合成張量作為深度學(xué)習(xí)模型的輸入,embedding(詞嵌入)方法就是一種把標(biāo)記與數(shù)值向量相關(guān)聯(lián)的方法。
函數(shù)及參數(shù)
參數(shù)說明
input_dim: int > 0。詞匯表大小, 即最大整數(shù) index + 1,在分詞過程中每一個標(biāo)記都有唯一一個區(qū)別于其它標(biāo)記的索引,input_dim = 所有標(biāo)記的索引的最大值 + 1。
output_dim: int >= 0。詞向量的維度。
embeddings_initializer: embeddings
矩陣的初始化方法 (詳見 )。
embeddings_regularizer: embeddings
matrix 的正則化方法 (詳見 )。
embeddings_constraint: embeddings
matrix 的約束函數(shù) (詳見 )。
mask_zero: 是否把 0 看作為一個應(yīng)該被遮蔽的特殊的 "padding" 值。 這對于可變長的 十分有用。 如果設(shè)定為 True
,那么接下來的所有層都必須支持 masking,否則就會拋出異常。 如果 mask_zero 為 True
,作為結(jié)果,索引 0 就不能被用于詞匯表中 (input_dim 應(yīng)該與 vocabulary + 1 大小相同)。
input_length: 輸入序列的長度,當(dāng)它是固定的時。 如果你需要連接 Flatten
和 Dense
層,則這個參數(shù)是必須的 (沒有它,dense 層的輸出尺寸就無法計算)。
基礎(chǔ)嵌入層示例
個人理解:
該案例中,輸入矩陣input_array是一個2×3的矩陣[[8 4 7],[6 2 3]]。
在Embedding嵌入層中,設(shè)定input_dim=1000,表示最多有1000個不同的元素索引(非樣本,注意區(qū)分,一個樣本里可能包含多個元素,如input_array可以理解為兩個樣本,每個樣本里就有三個元素);設(shè)定output_dim=4,表示對于每個元素,都使用一個1×4的向量來表示;設(shè)定input_length=3,表示每個樣本或每次輸入3個元素。
輸出矩陣output_array是一個(2, 3, 4)的張量,表示一共有兩個樣本,每個樣本都通過一個(3,4)的張量來表示,其中3表示每個樣本有3個元素,每個元素用4維向量(4個數(shù)字)來表示。例如,input_array中的8通過向量[ 0.01561867 ?0.01928559 -0.04316533 ?0.04298258]來表示。
再舉另一個例子,做稍微深一點點理解
通俗的講,這個過程中,Embedding層生成了一個大小為3*2的隨機矩陣,記為M,查看矩陣M:
矩陣的每一行是該行下標(biāo)指示的標(biāo)記的數(shù)值向量,即矩陣M的第i(可取0,1,2)行是標(biāo)記為i的單詞對應(yīng)的數(shù)值向量。
data是Embedding層的輸入,它包含2個樣本,每個樣本長度都是7,輸出out是一個大小為(2,7,2)的矩陣,data[i,j]元素的數(shù)值向量是out[i,j,:]。
可以看到,這個時候得到的文本的向量化表示是隨機的,我們對這個模型進(jìn)行訓(xùn)練,更新各層權(quán)重,最后我們得到一個文本向量化的有意義的表示,即單詞間通過各自對應(yīng)的數(shù)值向量來反映單詞間相關(guān)性。