Word2vec基础之霍夫曼树
? ? ? ? word2vec使用了CBOW與Skip-Gram來訓練模型與得到詞向量,但是并沒有使用傳統的DNN模型。最先優化使用的數據結構是用霍夫曼樹來代替隱藏層和輸出層的神經元,即霍夫曼樹的:
? ? ? ? ?葉子節點:起到輸出層神經元的作用,葉子節點的個數即為詞匯表的小大。
? ? ? ? ?內部節點:起到隱藏層神經元的作用。
霍夫曼樹的建立過程如下:
輸入:權值為(w1,w2,...wn)的n個節點
輸出:對應的霍夫曼樹
處理步驟:
? ? ? ? ?1)將(w1,w2,...wn)看做是有n棵樹的森林,每個樹僅有一個節點。
? ? ? ? ?2)在森林中選擇根節點權值最小的兩棵樹進行合并,得到一個新的樹,這兩顆樹分布作為新樹的左右子樹。新樹的根節點權重為左右子樹的根節點權重之和。
? ? ? ? 3) 將之前的根節點權值最小的兩棵樹從森林刪除,并把新樹加入森林。
? ? ? ? 4)重復步驟2)和3)直到森林里只有一棵樹為止。
下面我們用一個具體的例子來說明霍夫曼樹建立的過程,我們有(a,b,c,d,e,f)共6個節點,節點的權值分布是(20,4,8,6,16,3)。首先是最小的b和f合并,得到的新樹根節點權重是7.此時森林里5棵樹,根節點權重分別是20,8,6,16,7。此時根節點權重最小的6,7合并,得到新子樹,依次類推,最終得到下面的霍夫曼樹。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
? ? ? ?那么霍夫曼樹有什么好處呢?一般得到霍夫曼樹后我們會對葉子節點進行霍夫曼編碼,由于權重高的葉子節點越靠近根節點,而權重低的葉子節點會遠離根節點,這樣我們的高權重節點編碼值較短,而低權重值編碼值較長。這保證的樹的帶權路徑最短,也符合我們的信息論,即我們希望越常用的詞擁有更短的編碼。
? ? ? ?如何編碼呢?一般對于一個霍夫曼樹的節點(根節點除外),可以約定左子樹編碼為0,右子樹編碼為1。如上圖,則可以得到c的編碼是00。注意,是從左到右,從上到下(根節點除外)的順序開始編碼。
? ? ? ?在word2vec中,約定編碼方式和上面的例子相反,即約定左子樹編碼為1,右子樹編碼為0,同時約定左子樹的權重不小于右子樹的權重。
總結
以上是生活随笔為你收集整理的Word2vec基础之霍夫曼树的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: word2vec原理(一): 词向量、C
- 下一篇: word2vec原理(三): 基于Neg