2016-10-31 24 views
3

我一直在閱讀深度學習論文的一些NLP,發現微調似乎是一個簡單但令人困惑的概念。有人問過here,但仍不清楚。微調Word嵌入如何工作?

微調在論文中提到像Y.金預先訓練字的嵌入到特定任務的嵌入詞,「卷積神經網絡的句子分類,」KS大,R. Socher和CD曼寧,「樹形結構的長期短期記憶網絡中改進的語義表示」,只是簡單地提及而沒有涉及任何細節。

我的問題是:使用word2vec或手套作爲預訓練的字矢量生成

字曲面嵌入被用作輸入像解析或情緒分析下游任務設有(X),這意味着這些輸入矢量被插入到一個新的神經網絡模型對於某些特定的任務,在訓練這個新模型的同時,不知何故我們可以獲得更新的任務特定的單詞嵌入。但據我所知,在訓練過程中,反向傳播所做的是更新模型的權重(W),它不會改變輸入特徵(X),所以原始單詞嵌入究竟如何精確調整?這些微調矢量從哪裏來?

回答

3

是的,如果您將嵌入向量作爲輸入進行填充,則無法微調嵌入(至少很容易)。但是,所有框架都提供某種EmbeddingLayer,它將輸入的整數作爲字/字符/其他輸入標記的類序數,並執行嵌入查找。這樣的埋入層是非常類似於被饋送一熱編碼類完全連接層,但方式更有效,因爲它僅需要獲取/從兩個前矩陣改變一個行和背面通過。更重要的是,它可以學習嵌入的權重。

所以經典的方法是將實際的類提供給網絡而不是嵌入,並且預先在整個網絡中嵌入一層,使用word2vec/glove進行初始化,並繼續學習權重。在開始微調之前,先凍結它們幾次迭代也許是合理的,直到網絡的其他部分開始對它們做一些合理的事情。

+0

感謝您的回答。因此,EmbeddingLayer接受諸如單熱編碼之類的輸入並連接「真正的」隱藏層。那是對的嗎?通過使用word2vec/glove初始化EmbeddingLayer,這是否意味着將它們用作EmbeddingLayer中的參數?希望你能舉一個簡單的例子。感謝 – LingxB

+0

舉例keras https://blog.keras.io/using-pre-trained-word-embeddings-in-a-keras-model.html,一些討論的TF http://stackoverflow.com/questions/35687678 /使用-A-預先訓練的字嵌入-word2vec - 或手套式-tensorflow。對嵌入的輸入通常不是**單一熱門編碼,而只是整數。是的,用手套進行初始化意味着將嵌入層的權重矩陣設置爲手套向量。 – Ishamael