-
Notifications
You must be signed in to change notification settings - Fork 16
embed
詞向量的 word2vec 技術 出現後,神經網路領域的人,就想將這種技術變成網路中的一層,於是就發展出了 embed 詞嵌入層。
以下是一個循環神經網路語言模型,你可以看到 x = self.embed(x) 就是一個詞嵌入層,只要加入一個 embed 層,就能在網路訓練過程中,自動建構出詞向量,於是我們就不需要事先訓練好詞向量了,這樣用起來方便很多。
class RNNLM(nn.Module):
# ...
def forward(self, x, h):
x = self.embed(x) # 詞嵌入層
out, h = self.rnn(x, h)
out = out.reshape(out.size(0)*out.size(1), out.size(2))
out = self.linear(out)
return out, hEmbed層是深度學習中一種常用的層,它主要用於將高維度的稀疏資料(如文字、ID等)轉換成低維度的密集向量,通常稱為嵌入向量(Embedding Vector)。
但是 Embed 層和 Linear 層不同, Embed 層的輸入是詞彙的代號 (ID),但是 Linear 層的輸入則是向量。
筆者註:我猜測 Embed 層可能會把 ID 轉為 one-hot 表示法,然後再用一個 Linear 層將 one-hot 轉為 embed ...
在自然語言處理(NLP)等應用中,我們需要將文字轉換成向量,以便於進行數據處理和分析。一個常見的方法是使用 one-hot encoding,即將每個文字表示成一個高維度的向量,其中大部分元素都是0,只有一個元素是1,代表該文字的位置。然而,這樣表示的向量維度很高,會導致模型較難訓練。因此,Embed層的作用就是將高維度的稀疏資料轉換成低維度的密集向量,可以減少向量維度,並且在保留重要信息的同時,使相似的文字在向量空間中距離更接近。
Embed 層通常是在模型的輸入層中使用的,它會接收一個高維度的向量,並返回一個低維度的嵌入向量。Embed層的參數是可訓練的,模型會通過反向傳播算法來學習如何將高維度的稀疏資料轉換成低維度的嵌入向量。
Embed 層的構想,應該是來自 AutoEncoder 模型 ,該模型具有 Encoder/Decoder 架構,如下圖所示:

但是使用 Embed 層,我們不需要用詞向量訓練算法 (CBOW/Skip-Gram) 去訓練出詞向量,也不需要加入一個 AutoEncoder 網路,只要單純將詞彙 (語句) 作為神經網路的輸入就行了,這實在是非常的方便好用。