碎碎念:

這一個寒假,準確來說是大三的寒假,主要做了以下幾件事

1. 從源碼角度學了STL和C++11的一大特性,優化了以前寫的一些代碼,HMM,對數線性模型,,全局模型,CRF詞性標註的代碼,使得性能達到我目前水平的最優。至少跟師兄們寫的python代碼比,效率比他們高。

2. 看了神經網路和深度學習的前三章,並且用C++和eigen庫寫了前向全連接的神經網路進行詞性標註的代碼。

之後就開始考研的旅途,為了防止考研後把這一點點基礎全忘了,現在記錄下來。

這是github實現代碼。

NLPJCL/BPNN?

github.com
圖標

目標:

輸入是一個詞或者一組詞序列,輸出是一個詞性或者一組詞性

1.先定義一個神經網路。

我們來推導進行詞性標註的神經元的結構。方法是:從問題開始循序漸進的推導。

一.輸入:

1. 單單靠一個詞是無法預測詞性的(一個詞在這句可能是名詞,在那句又可能是動詞),

因此我們還要把它放在句子,同時看它前後的詞。所以這裡我們引出一個概念,叫做上下文窗口:比如如果上下文窗口是5的話,就是輸入是包括這個詞在內以及它前面的兩個詞和他後面的兩個詞。

好的,明確我們的輸入之後,讓我們大腦稍作休息,舉個例子來理解一下細節。

比如一句話:我是中國人。

我們要對這句話標註詞性,

當我們要預測第一個詞:「我」的詞性的時候,

我們輸入到神經元的是」start」 , 」start」,」」,」是」,」中國人」。

當我們要預測第二個詞:「」是」的詞性的時候,

我們輸入到神經元的是」start」,」我」,」」,」中國人」,」end」。

2.接下來遇到的問題是:我們如何表示一個詞?

先來回顧一下,在神經網路和深度學習這本書中,是如何表示一張圖片的?

摘抄原文一句話:

很自然,我們可以將圖片像素的強度進行編碼作為輸入神經元來設計網路。

比如如果圖片是64x64的灰度圖像。那麼我們會需要4096個輸入神經元。

圖片自然而然可以用像素作為輸入到神經網路中。字元串呢?

引出第二個東西,詞嵌入:」

理論知識我也沒去了解,舉例感性認識一下吧。

1.這種表示詞的向量通常是低維、稠密的,所有的詞向量的維度都一樣,每一維都可以認為在表達某種語義。

例如:

母親[0.13,-0.52,…0.93,0.44]

媽媽[0.11,-0.49,…0.80,0.46]

可以看出,「母親」和「媽媽」這種含義相近的詞,其向量在數值上非常接近。使用這種表示方式,便建立了一個語義向量空間,每個詞都被嵌在語義空間中的一個點上,這也是其被稱為詞嵌入的原因。含義相近的詞在語義空間中的位置也會非常接近。

現在回過頭來,我們剛開始的問題是如何表示一個詞(字元串)?

我們可以把別人訓練好的預訓練詞向量,來用一張二維表來存儲。每一行代表一個詞的詞向量。

當我們想要把某個詞輸入到神經網路中去的時候,我們就在這張二維表中查找這個詞的詞向量。然後作為神經網路的輸入。Prefect!這個二維表也就是預訓練的詞向量可以跟著神經網路的參數一起訓練。

總結一下:上面我們的那個例子,

假設我們預訓練的詞向量的維度是100。

我們輸入到神經元的是」start」 , 」start」,」」,」是」,」中國人」。

我們在二維表中依次查找「start」,「start」,」我」 ,」是」,」中國人」的詞向量,然後拼接起來作為一個500維的向量作為神經網路的輸入。

自然而然我們得到一個公式:神經網路輸入神經元的維度是窗口大小x預訓練詞向量的維度。

在上面我們的例子中是5x100。

至此,輸入我們就講完了,自然而然我們設計的神經網路的輸入神經元的維度是500。

至於隱藏層:

查找一句話:自己體會(翻白眼)

相?於神經?絡中輸?輸出層的直觀設計,隱藏層的設計則堪稱??藝術。特別是,通過 ?些簡單的經驗法則來總結隱藏層的設計流程是不可?的。相反,神經?絡的研究?員已經為 隱藏層開發了許多設計最優法則,這有助於?絡的?為能符合?們期望的那樣。例如,這些法則可以?於幫助權衡隱藏層數量和訓練?絡所需的時間開銷。在本書後?我們會碰到?個這樣 的設計最優法則。

所以我們直接定義隱藏層的層數的層數為1,維度為300。

至於輸出層:

先統計出訓練集所有可能的詞性,然後輸出層的神經元的維度為所有可能的詞性。

總結:

至此,我們進行詞性標註的神經網路已經構建好了,請大家不厭其煩的再聽我總結一下:

1. 輸入神經元的維度是窗口大小x詞向量的維度。

2. 隱藏神經元的層數是1,維度是300。

3. 輸出神經元的維度是訓練集中可能出現的詞性種類。

輸入是一句話的一個詞以及前兩個詞和後兩個詞,通過查詢詞向量的二維表來查找到他們的詞向量,拼接起來(作為該詞的特徵)。輸入到隱藏層。

輸出層可以用softmax函數得到對應的概率。最後取最大值作為預測的結果。

Loss函數選擇交叉熵。

本質上,我們這種預測方式還是以一個詞一個詞為單位進行預測的。

名詞解釋:

多層感知機(MLP):儘管是由S型神經元而不是感知機構成,這種多層?絡有時被稱為多層感知機或者MLP

前饋神經?絡(Feedforword neural network):都是以上?層的輸出作為下?層的輸?。這種?絡被稱為前饋神經?絡。

參考:

1.師兄的一個代碼

zysite/BPNN?

github.com圖標

2.一本在線閱讀書

Neural networks and deep learning?

neuralnetworksanddeeplearning.com圖標
推薦閱讀:

相關文章