1. 程式人生 > >深度學習-自然語言模型隨記

深度學習-自然語言模型隨記

為什麼要研究深度學習?

語言模型

看概率!

n-gram

一行一行看,比如第一行,i後面接i的出現次數,i後面接want的出現次數。
上面表表示詞後面接某詞的次數,下面表表示詞後面接某詞的概率。

N表示預料庫的大小,小n在建模時一般取2,3就可以,也可以取到4,再大就會造成模型太過龐大。

詞向量

one-hot構造詞向量在此處的問題?但是構造出來的東西的價值利用程度高不高,它無非就是一個詞的對映。這種情況下詞與詞之間,句子與句子就失去了關係。我們不光是要生成詞的向量還要使詞與詞之間是有意義的。所謂的意義就是不能像one-hot編碼這麼簡單,要讓詞和詞之間要有一個潛在的含義。
怎樣把一個詞轉換成一個向量?(word2vector)
詞向量必須具有一層潛在的含義,相似的詞挨的比較近,轉換後的詞向量也應該挨的比較近。在我們語言空間上應該表現出來這樣一層含義。

計算機需要理解上表達意思相近的詞的含義,比如今天的菜便宜和今天的菜賤,當他們都是指菜便宜這一件事時,計算機應該要在向量空間中表達出來。所以說同義詞是非常重要的。

右側是西班牙語表達的詞向量空間。 這兩種語言構造出來的模型是相似的,這為什麼呢?因為我們構造出來的詞向量並不是跟語言掛鉤,只跟語義的邏輯環境掛鉤。 我們不關心詞的性質(大小),關心的是詞上下文的整體邏輯。

神經網路模型

詞向量模型和神經網路模型有什麼掛鉤?

在Projection Layer(投影層)對輸入的詞向量進行一個拼接,講他們的向量合層一個整體來處理。

在統計模型看來,貓在房間跑和狗在房間跑是明顯不同的。

貓在房間跑和狗在房間在神經網路看來就是動物在房間跑,所以其中的一個句子的出現概率增大,另一個句子的出現概率也會相應的增大。這是神經網路模型比較重要的特點。這就是為什麼我們要用神經網路來進行一個求解,因為在神經網路語言模型當中我們可以得到詞語之間近似的一個含義,而且它求解出來的空間語言模型也是符合我們真實的一個規律的。

Hierarchical Softmax(分層的softmax)

神經網路實現的兩種方案:

左側模型是根據上下文的詞來預測我們的當前詞是什麼。右側模型的輸入是當前詞,來預測上下文。

CBOW

使當前詞出現的概率越大越好。

哈弗曼樹

權值*步長
我們可以把哈弗曼樹的權值想象成詞的詞頻,意圖是講我們生活當中越常使用的詞在哈弗曼樹中越靠前。在樹中分層的softmax也就是說分層的進行一個判斷,這樣可以使得最重要的詞在前面。

哈弗曼樹構造的流程。
我們還可以拿哈弗曼樹來進行編碼,如果我想知道一個詞對應的編碼是什麼,在哈弗曼樹中可以利用到0(左子樹)和1(右子樹)編碼。
哈弗曼樹可利用的兩點就是:帶權路徑最短和哈夫曼編碼。
那對哈夫曼樹進行判斷是往左子樹走還是往右子樹走?我們要用到Hierarchical Softmax來進行判斷。對於這樣一個二分類,我們通常用的是邏輯迴歸。

Softmax是一個多分類的邏輯迴歸!!

CBOW模型例項

首先看怎樣才能走到足球,需要一次次的判斷往左走還是往右走。
得出結果足球的計算是個累乘的過程,相當於第一次*第二次*第三次*第四次

CBOW求解目標

求解目標:什麼樣的Context(w)使得p(概率)達到最大。

梯度上升求解

求一個最大值,那就採用梯度上升的方法。

還需要對X進行一個求導,因為X也會對結果才是一個非常大的影響。

式子的第一項是每個詞的詞向量。

Negative Sampling(負取樣),一般採用這種建模方式(簡單)

詞庫特別特別大的時候,那麼哈弗曼樹中間或後面的詞節點咋辦,計算複雜度還是很高。

1:代表預測出來的結果和我的詞對應上,0:代表沒對應上。
預測的結果有正例和負例。

詞頻越大的越容易被隨機到,哈弗曼樹是比較老的做法,現在採用的負取樣來幫助我們分類。

NEG表示負樣本的空間。1-不屬於這個詞的概率,結果就是屬於這個詞的概率。

v(w)就是最終我想要的詞的詞向量結果。