embedding
embedding 可以理解為比如降維,或者說把一些復雜難以表達的特征用相對來說可以用數學表達或者更易計算的形式來表達的一種映射。比如把單詞轉化成向量,把數字(的奇偶正負實復等性質)轉化成n維矩陣。
embedding 就是一個用低維的向量表示的一個物體,可以是一個詞,一個物品,一個電影等,embedding向量的性質就是能使距離相近的向量對應的物體有近似的含義,復仇者聯盟和鋼鐵俠之間的距離就會很近,復聯和亂世佳人的距離就會很遠。
能夠用低維向量編碼,並且能保留其含義。
對於顏色,我們可以把它拆成三個特征維度,用這三個維度的組合理論上可以表示任意一種顏色。同理,對於詞,我們也可以把它拆成指定數量的特征維度,詞表中的每一個詞都可以用這些維度組合成的向量來表示,這個就是Word Embedding的含義。當然,詞跟顏色還是有很大的差別的——我們已經知道表示顏色的三個維度有明確對應的物理意義(即RGB),直接使用物理原理就可以知道某一個顏色對應的RGB是多少。但是對於詞,我們無法給出每個維度所具備的可解釋的意義,也無法直接求出一個詞的詞向量的值應該是多少。所以我們需要使用語料和模型來訓練詞向量——把嵌入矩陣當成模型參數的一部分,通過詞與詞間的共現或上下文關系來優化模型參數,最后得到的矩陣就是詞表中所有詞的詞向量。這里需要說明的是,有的初學者可能沒繞過一個彎,就是“最初的詞向量是怎么來的”——其實你只要知道最初的詞向量是瞎JB填的就行了。嵌入矩陣最初的參數跟模型參數一樣是隨機初始化的,然后前向傳播計算損失函數,反向傳播求嵌入矩陣里各個參數的導數,再梯度下降更新,這個跟一般的模型訓練都是一樣的。等訓練得差不多的時候,嵌入矩陣就是比較准確的詞向量矩陣了。到處挖坑蔣玉成
word2vec
CBOW:每個詞由相鄰的詞決定
Skip-gram:每個詞都決定了相鄰的詞

word2vec的出現,極大的促進了NLP的發展,尤其是促進了深度學習在NLP中的應用(不過有意思的是,word2vec算法本身其實並不是一個深度模型,它只有兩層全連接),利用預訓練好的詞向量來初始化網絡結構的第一層幾乎已經成了標配,尤其是在只有少量監督數據的情況下,如果不拿預訓練的embedding初始化第一層,幾乎可以被認為是在蠻干。在此之后,一大批word embedding方法大量涌現,比較知名的有GloVe和fastText等等,它們各自側重不同的角度,並且從不同的方向都得到了還不錯的embedding表征。
2.2 GloVe
我們既可以對一個序列中的詞進行embedding,那自然可以對用戶的購買序列中的一個商品,用戶觀看序列中的一個商品,用戶觀看序列中的一個電影進行embedding。而廣告,推薦,搜索等領域用戶數據的稀疏性幾乎必然要求對user和item進行embedding后才能進行有效的訓練。
在另一個空間表達物體,甚至揭示了物體間的潛在關系
連續特征離散化后做embedding。
id embedding
item embedding
user embedding
time embedding
待補充例子
