深度學習中Embedding的理解

2022-02-24 23:13:54 字數 3266 閱讀 1465

embedding就是把高維的one-hot進行降維的過程。1)、一維列表也不行,二維稀疏矩陣也不行,怎麼辦呢?這裡就引入了embedding的概念,由密集向量表示,實現降維!

2)、「並不是每個單詞都會被乙個向量來代替,而是被替換為用於查詢嵌入矩陣中向量的索引」

3)、同時訓練神經網路時,每個embedding向量都會得到更新,即在不斷公升維和降維的過程中,找到最適合的維度。詞袋模型基於詞的one-hot表示,word2vec基於詞的分布式表示①)、由於one-hot編碼得到的矩陣太稀疏而且維度太高了,所以可以將one-hot向量作為word2vec的輸入,通過word2vec訓練低維詞向量(word embedding)。

②)、或者直接將得到的編碼序列通過word2vec轉化成固定維度的向量,及得到自己的word embedding。一)、將文字看成一系列的詞語集合,將集合中所有詞語構成乙個詞典,為每個詞語構建索引,那麼整個文字就能表示為乙個索引集(一系列詞的集合)。由於詞很多,所以用袋子裝起來,就簡稱為詞袋模型了。

二)、「基於詞袋的詞向量表達法像是為每乙個文字建立了乙個統計直方圖,直方圖的x軸是單詞,y軸是單詞在該文字的詞頻(或者tf-idf)」。也就是將不定長的文字型資料轉化為定長的數值型資料,便於機器學習方法處理「詞向量模型是考慮詞語位置關係的一種模型。通過大量語料的訓練,將每乙個詞語對映到高維度(幾千、幾萬維以上)的向量當中,通過求余弦的方式,可以判斷兩個詞語之間的關係。」 這個高維的向量就是詞向量,現在常用word2vec構成詞向量模型。**或參考:深度學習中embedding的理解

在自然語言處理領域,由於計算機並不直接處理文字,需要將其先轉化成易於計算的特徵向量。這裡就需要用到文字特徵表示模型,主要有兩大類:直接從原始文字生成文字向量(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,那麼兩個詞當成一組,如我愛吃火鍋可以構造的詞典為

在機器學習演算法中,會遇到很多分類的特徵,比如顏色中的紅橙黃綠、國籍、性別等,這些特徵值都是離散的,但是要用演算法實現的話,要對這些特徵進行特徵數位化處理。

也就是對這些特徵進行數位化編碼,比如把顏色中的紅橙黃綠對應為[0,1,2,3],但是這樣也存在不合理性,1+2=3,也就是橙+黃變成綠,每個特徵值又沒有數值疊加的特點,在邏輯上顯然是說不通的。

one-hot編碼,通過查閱資料,給出的定義是又稱為一位有效編碼,主要是採用n位狀態暫存器來對n個狀態進行編碼,每個狀態都是由其獨立的暫存器位,並且在任意時候只有一位有效。是分類變數作為二進位制向量的表示,首先要求將分類值對映到整數值,然後每個整數值被表示為二進位制向量,除了整數的索引外,都是0。

在特徵提取上屬於詞袋模型

舉個例子,

#今天也要加油鴨[[

1000

000]

[010

0000

][00

1000

0][0

0010

00][

0000

100]

[000

0010

][00

00001]]

那麼,每乙個字都被表示為乙個包含七個元素的陣列,每個字都與列表中的唯一乙個陣列對應,構成了乙個稀疏矩陣。

如果將其表示為列表的形式:

#今天也要加油鴨[0

1234

56]

one-hot編碼形成稀疏矩陣顯然更便於計算與理解。而且解決了能分開詞,這個最基本的問題。

缺點:1)但是如果當這個文字數量變大,不是一句話,而是一本長篇**,那需要表示成為乙個...無法想象的矩陣,那這樣的矩陣會過於稀疏,過度占用資源!

2)並且one-hot矩陣沒有辦法表示詞的順序關係,無法表示上下文。

一維列表也不行,二維稀疏矩陣也不行,怎麼辦呢?

這裡就引入了embedding的概念,由密集向量表示,實現降維!也就是說embedding就是把高維的one-hot進行降維的過程。

「並不是每個單詞都會被乙個向量來代替,而是被替換為用於查詢嵌入矩陣中向量的索引」

同時訓練神經網路時,每個embedding向量都會得到更新,即在不斷公升維和降維的過程中,找到最適合的維度。

深度學習中Embedding層

keras.layers.embeddings.embedding input dim,output dim,embeddings initializer uniform embeddings regularizer none,activity regularizer none,embeddings...

機器學習的embedding

embedding在數學上表示乙個maping,f x y,也就是乙個function,其中該函式是injective 就是我們所說的單射函式,每個y只有唯一的x對應,反之亦然 和structure preserving 結構儲存,比如在x所屬的空間上x1 x2,那麼對映後在y所屬空間上同理 y1 ...

nn模組中的LSTM與Embedding

rnn和rnncell層的區別在於前者能夠處理整個序列,而後者一次只處理序列中乙個時間點的資料,前者封裝更完備易於使用,後者更具靈活性。rnn層可以通過組合呼叫rnncell來實現。例1 rnn import torch as t from torch.autograd import variabl...