使用詞向量得到更好的類別特徵的嵌入

2019-09-08     AI公園
作者:Inbar Naor
編譯:ronghuaiyang

導讀

詞向量除了用在NLP中,還可以用在類別特徵的嵌入表達上,是不是很神奇,一起來看看吧!

回到2012年,當神經網絡重新流行起來時,人們對不用擔心特徵工程就可以訓練模型的可能性感到興奮。事實上,最早的突破大多出現在計算機視覺領域,在這一領域,原始像素被用作網絡的輸入。

很快我們發現,如果你想使用文本數據,點擊流數據,或者幾乎所有帶有分類特徵的數據的時候,你必須問自己—我如何將我的分類特徵表示為我的網絡可以使用的向量?

最流行的方法是嵌入層—在網絡中添加一個額外的層,它為分類特徵的每個值分配一個向量。在訓練過程中,網絡學習不同層的權重,包括那些嵌入層。

在這篇文章中,我將展示這種方法失敗的例子,介紹category2vec,這是一種使用第二個網絡學習嵌入的替代方法,並將展示在主網絡中使用這些嵌入的不同方法。

那麼,嵌入層有什麼問題嗎?

嵌入層被訓練以適應特定的任務—網絡被訓練的任務。有時候這正是你想要的。但是在其他情況下,你可能希望你的嵌入能夠捕獲一些關於問題領域的直覺,從而減少過擬合的風險。你可以將其視為向模型中添加先驗知識,這有助於模型的泛化。

此外,如果你在相似的數據上有不同的任務,你可以使用來自一個任務的嵌入來改進另一個任務上的結果。這是深度學習工具箱中的主要技巧之一。這被稱為遷移學習,預學習或多任務學習,取決於環境。其基本假設是,解釋數據的許多未觀察到的隨機變量是跨任務共享的。因為嵌入試圖隔離這些變量,所以可以重用它們。

最重要的是,將嵌入作為網絡的一部分來學習會增加模型的複雜性,因為這會向模型添加許多權重,這意味著你將需要更多標記的數據來學習。

並不是說嵌入層不好,但是我們可以做得更好。讓我們看一個例子。

例子:點擊預測

Taboola的研究小組開發了一種算法,可以根據用戶當前閱讀的內容向他們推薦內容。我們可以把它看作一個點擊預測問題:給定你的閱讀歷史,你會點擊每一篇文章的機率是多少?

為了解決這個問題,我們訓練深度學習模型。很自然,我們開始學習嵌入作為我們網絡的一部分。

但是我們得到的很多嵌入都沒有意義。

你怎麼知道你的嵌入有沒有意義?

最簡單的方法是使用幾個條目的嵌入,並查看它們的相鄰的嵌入。看看它們在你的領域裡相似嗎?這可能很累人,而且不能給你一個總體的印象。因此,你還可以使用PCA或t-SNE來降低向量的維數,並根據特定的特性對它們進行著色。

一個項目的廣告商是一個強特徵,我們希望類似的廣告商有類似的嵌入。但這是我們對於不同廣告商訓練的不同的嵌入,我們用不同的顏色來區分廣告商使用的不同的語言:

哎喲。有些事情顯然是不對的。我的意思是,除非我們假設我們的用戶是多語種的天才,他們閱讀了一篇西班牙語的文章,然後毫不費力地去閱讀另一篇日語的文章,否則我們可能會希望在我們的嵌入空間中,類似廣告商是使用相同的語言來提供內容的。

這使得我們的模型更難解釋。人心煩意亂。有些人甚至失眠。

我們能做得更好嗎?

Word2Vec

如果你聽說過嵌入,你可能聽說過word2vec。這種方法將單詞表示為高維向量,因此語義相似的單詞將具有相似的向量。它有兩種風格:CBOW和Skip-Gram。CBOW訓練網絡從上下文預測一個單詞,而Skip-Gram則完全相反,它根據特定的目標單詞預測上下文。

我們可以用同樣的方法來提高我們廣告商的嵌入嗎?是的,我們...你懂的。

從Word2Vec到Category2Vec

這個想法很簡單:我們對word2vec進行了用戶點擊歷史的訓練。現在,每個「句子」都是用戶單擊的一組廣告商,我們嘗試根據用戶喜歡的其他廣告商(「上下文」)預測特定的廣告商(「單詞」)。唯一的不同是,與句子不同,語序不一定重要。我們可以忽略這個事實,或者使用每個歷史的排列來增強數據集。你可以將這種方法應用於任何種類的高模態分類特徵,比如國家、城市、用戶id等。參見此處和此處。

如此簡單,卻又如此有效。還記得我們之前看到的嵌入可視化嗎?這是它現在的樣子:

好多了!所有使用相同語言的廣告商都聚集在一起。

現在我們有了更好的嵌入,我們可以用它們做什麼?

對不同的模型使用嵌入

首先,請注意,category2vec只是一個通用實踐的示例:在task a中學習到的嵌入式應用程式用於task b。我們可以使用不同的體系結構、不同的任務,甚至在某些情況下,使用不同的數據集替換它。這是這種方法的一大優點。

在我們的模型中有三種不同的方式來使用新的嵌入:

  1. 使用新的嵌入作為新網絡的特性。例如,我們可以對用戶點擊的所有廣告商的嵌入進行平均,以表示用戶歷史,並使用它來了解用戶的品味。這篇文章的重點是神經網絡,但是你可以用任何ML算法來實現。
  2. 初始化網絡中嵌入層的權重,使用我們剛剛學習的嵌入。這就像告訴網絡—這是我從其他任務中知道的,現在根據當前任務調整它。
  3. 多任務學習 -使用兩個網絡,通過參數共享對它們進行訓練。你可以強制它們共享嵌入(硬共享),或者允許它們在權重相差太大時通過「懲罰」網絡(軟共享)具有稍微不同的權重。這通常是通過正則化權重之間的距離來實現的。
  4. 你可以將其看作是將知識從一個任務傳遞到另一個任務,但也可以看作是一種正則化技術:word2vec網絡充當另一個網絡的正則化器,並強制它學習具有我們感興趣的特性的嵌入式。

好了,我們重新複述一遍

有時候,我們可以通過簡單地使用一些現有的方法,但是將它應用到一些新的東西上,從而獲得很好的結果。我們使用word2vec為廣告商創建了廣告的嵌入,我們的結果比使用嵌入層獲得的結果更有意義。正如我們在Taboola 中所說,有意義的嵌入=有意義的生活。

英文原文:https://engineering.taboola.com/using-word2vec-better-embeddings-categorical-features/

更多文章,請關注微信公眾號:AI公園

文章來源: https://twgreatdaily.com/zh-hk/qbp5PW0BJleJMoPMn2SQ.html