深度學習-->NLP-->NNLM簡介

本篇博文將總結NLP 裏面的embeddingword2vector ,以及NNLM 的簡介。

embedding

在一般任務中,我們總是非常自然的用特徵值來表示一個詞彙。但是,到底怎麼樣表示一個詞,纔是最合理的? 存儲其ASCII 碼錶示,只會告訴你這個詞是什麼,並不能表示這個詞真正的語義(也許你可以從這個詞的詞綴中獲得該詞的詞性或其他屬性,但也只能獲得這些東西)。更進一步的, 我們應該在什麼場景下, 將這些詞的表示聯合起來考慮? 因爲我們的神經網絡,常常輸入維度是整個詞典的大小|V| ,輸出維度是標籤集合的大小(一般遠小於|v| )。如何從稀疏的高維空間生成較小的維度空間?

如果我們用onehot 來表示詞的話:

這裏寫圖片描述

我們能得到如圖的一個表示: 只有某一維度的值是1,其他維度都是0, 這個值爲1的維度就代表這個詞。

你可能馬上就會意識到,這樣表示如果詞典大了,會不會向量就太長了?是的! 但這不是這個表示的最大問題,這個表示最大的問題是:它將所有單詞視爲彼此無關的獨立實體。 但是,我們真正想要的表示,是表示詞語的語義,顯然有很多詞的語義是相似的,而不是獨立的. 一個好的表示,應該要把這些相似關係也刻畫出來。

由此產生了wordembedding ,給出一個文檔,文檔就是一個單詞序列比如 A B A C B F G , 希望對文檔中每個不同的單詞都得到一個對應的向量(往往是低維向量)表示。比如,對於這樣的A B A C B F G 的一個序列,也許我們最後能得到:A 對應的向量爲[0.10.60.5]B 對應的向量爲[0.20.90.7] (此處的數值只用於示意)之所以希望把每個單詞變成一個向量,目的還是爲了方便計算,比如“求單詞A 的同義詞”,就可以通過“求與單詞Acos 距離下最相似的向量”來做到。

數學上的概念,從一個空間映射到另外一個空間,保留基本屬性。
word embedding 就是從一個高維空間(如:維度=詞彙表長度=1M),映射到低維度空間(如300)。

在神經網絡語言模型中,也就是 embedding lookup ,其實就是一個非線性變換。

非線性變換:embedding lookup
y=ebl(x)=W[x,:]WR|v|d
作用:int>embedding ,作用就是輸入一個整數x ,得到一個向量。
例如:

這裏寫圖片描述

那麼這個embedding 矩陣w 怎麼得到呢?在神經網絡語言模型中,首先先驗性的給定這個矩陣的shape ,初始化,然後通過不斷的學習學到這個矩陣。

NNLM(Neural Network Language Model)

首先看看ngram 語言模型潛在的問題:

  • 對“詞”的理解有限
    不能很好的理解每個詞之間的聯繫和含義。

  • 上下文的長度有限

我們以trigram 舉例,[(a,b),c] ,即已知a,b 預測c ,利用神經網絡語言模型。

這裏寫圖片描述

從上面的圖可以看到有層input embeddings ,那麼結合上面說的,這個embedding 層有上面作用呢?我們可以這樣簡單理解,在對word 進行onthot 編碼時,得出的矩陣是稀疏的,且每個word 之間的相互獨立的,但是在用embedding 之後得出的矩陣是稠密的,每個word 都能對於這個矩陣的每一行,可以看做對這個word 提取出了dimfeatures 。這樣就有以下幾個好處:

  • 能夠捕捉到詞法的相似性。
    good,better
  • 能夠捕捉到語法的相似性。
    see,saw
  • 能夠捕捉到語義相似性。
    dog,cat

找出每個詞對應於embedding 矩陣向量,然後將其在二維上可視化如下,越相似的word 距離越近。

這裏寫圖片描述

NNLM 模型的基本思想可以概括如下:

  • 假定詞表中的每一個word 都對應着一個連續的特徵向量;
  • 假定一個連續平滑的概率模型,輸入一段詞向量的序列,可以輸出這段序列的聯合概率;
  • 同時學習詞向量的權重和概率模型裏的參數。

這裏寫圖片描述

我們可以將上面整個模型拆分成兩部分加以理解:

  1. 首先是一個線性的embedding 層。它將輸入的N1onehot 詞向量,通過一個共享的D×V 的矩陣C ,映射爲N1 個分佈式的詞向量distributedvector 。其中,V 是詞典的大小,Dembedding 向量的維度(一個先驗參數)。C 矩陣裏存儲了要學習的word vector

  2. 其次是一個簡單的前向反饋神經網絡g 。它由一個tanh 隱層和一個softmax 輸出層組成。通過將embedding 層輸出的N1 個詞向量映射爲一個長度爲V 的概率分佈向量,從而對詞典中的word 在輸入context 下的條件概率做出預估:

    p(wt|w1,w2,...,wt1)f(wt,wt1,...,wtn+1)=g(wi,C(wtn+1),...,C(wt1))

我們可以通過最小化一個crossentropy 的正則化損失函數來調整模型的參數θ

L(θ)=1Ttlogf(wt,wt1,...,wtn+1)+R(θ)

爲什麼Embedding 會有這樣的作用?即所謂的“特徵學習/表示學習”(representation learning ),也是Deep learning 的核心原因之一。

Word2Vec

Ngram 模型一樣,NNLM 模型只能處理定長的序列。

因此,Mikolov 等人在2010年提出了一種RNNLM 模型,用遞歸神經網絡代替原始模型裏的前向反饋神經網絡,並將embedding 層與RNN 裏的隱藏層合併,從而解決了變長序列的問題。

另一個問題就比較嚴重了。RNNLM 的訓練太慢了。即便是在百萬量級的數據集上,即便是藉助了40個CPU進行訓練,RNNLM 也需要耗時數週才能給出一個稍微靠譜的解來。顯然,對於現在動輒上千萬甚至上億的真實語料庫,訓練一個RNNLM 模型幾 乎是一個impossible mission

我們對原始的NNLM 模型做如下改造:

  1. 移除前向反饋神經網絡中非線性的hidden layer ,直接將中間層的embedding layer 與輸出層的softmax layer 連接;

  2. 忽略上下文環境的序列信息:輸入的所有詞向量均彙總到同一個embedding layer ;將future words 納入上下文環境

這裏寫圖片描述

說下右邊skip_gram 模型,輸入w(t) 是一個onehot 類型數據,然後通過一個線性的embedding 層,也就是通過學習到的D×V 的矩陣C 進行embedding lookup ,得到一個稠密向量,再進行softmax 來預測上下文的詞。這就是skip_gram 模型,用來預測目標詞周圍的詞,這裏面全是線性的,沒有任何非線性的操作。因此這種模型非常快,從而可以處理大量的數據。

用途:

  • 尋找近義詞。
  • 用來作爲別的自然語言任務的特徵值。(訓練過程中學習到embedding
  • 用來爲別的Neural Network做初始化。(word2vec 訓練出來的embedding 作爲別的神經網絡語言模型的embedding 的初始值)

word2Vec 代碼實現可參考tensorflow實現word2vec,代碼講解可參考代碼講解

發佈了93 篇原創文章 · 獲贊 108 · 訪問量 25萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章