動手學深度學習 第二課

2021-10-02 20:17:02 字數 3083 閱讀 8282

基本概念:讀入文字、分詞、建立字典、將詞轉為索引

將文字按段落讀取,再將文字轉為小寫,使用正則的方法,消除其中的非字母的字元,得到句子。

import re

with open(

'1.txt', 'r'

) as f:

print(

[re.sub(

'[^a-z]+', ' ', line.strip(

).lower(

))for line in f]

)

分詞:對每個句子進行分詞,也就是將乙個句子劃分成若干個詞(token),轉換為乙個詞的序列。

建立字典:為了方便模型處理,我們需要將字串轉換為數字。因此我們需要先構建乙個字典(vocabulary),將每個詞對映到乙個唯一的索引編號。

**需要注意的是:**一些特殊的token:pad:使得短句子和長的相同,在sgd的時候批次的句子一樣長; bos eos 分別為開始結束 ;unk未知字元,比如無論use_special_token引數是否為真,都會使用的特殊token是unk。

**將詞轉為索引:**使用字典,我們可以將原文本中的句子從單詞序列轉換為索引序列。

用現有工具進行分詞

我們前面介紹的分詞方式非常簡單,它至少有以下幾個缺點:

標點符號通常可以提供語義資訊,但是我們的方法直接將其丟棄了

類似「shouldn』t", 「doesn』t"這樣的詞會被錯誤地處理

類似"mr.」, "dr."這樣的詞會被錯誤地處理

我們可以通過引入更複雜的規則來解決這些問題,但是事實上,有一些現有的工具可以很好地進行分詞,我們在這裡簡單介紹其中的兩個:spacy和nltk。

基本概念:語言模型、n元語法、讀取資料、時序取樣

**語言模型:**一段自然語言文字可以看作是乙個離散時間序列,給定乙個長度為tt的詞的序列w1,w2,…,wtw1,w2,…,wt,語言模型的目標就是評估該序列是否合理,即計算該序列的概率:p(w1,w2,…,wt).

假設序列w1,w2,…,wtw1,w2,…,wt中的每個詞是依次生成的,我們有

詞頻計算:

其中n(w1)n(w1)為語料庫中以w1w1作為第乙個詞的文字的數量,nn為語料庫中文字的總數量。

**n元語法:**序列長度增加,計算和儲存多個詞共同出現的概率的複雜度會呈指數級增加。nn元語法通過馬爾可夫假設簡化模型,馬爾科夫假設是指乙個詞的出現只與前面nn個詞相關,即nn階馬爾可夫鏈(markov chain of order nn)如果n=1n=1,那麼有p(w3∣w1,w2)=p(w3∣w2)p(w3∣w1,w2)=p(w3∣w2)。基於n−1n−1階馬爾可夫鏈,我們可以將語言模型改寫為

nn元語法的缺陷:

1 引數空間過大

2 資料稀疏

**時序取樣:**在訓練中我們需要每次隨機讀取小批量樣本和標籤。如果序列的長度為tt,時間步數為nn,那麼一共有t−nt−n個合法的樣本,但是這些樣本有大量的重合,我們通常採用更加高效的取樣方式。我們有兩種方式對時序資料進行取樣,分別是隨機取樣和相鄰取樣。

隨機取樣:在隨機取樣中,每個樣本是原始序列上任意擷取的一段序列,相鄰的兩個隨機小批量在原始序列上的位置不一定相毗鄰。

**相鄰取樣:**在相鄰取樣中,相鄰的兩個隨機小批量在原始序列上的位置相毗鄰。

rnns在nlp中典型應用:

(1)語言模型與文字生成(language modeling and generating text)

給定一組單詞序列,需要根據前面單詞**每個單詞出現的可能性。語言模型能夠評估某個語句正確的可能性,可能性越大,語句越正確。另一種應用便是使用生成模型**下乙個單詞的出現概率,從而利用輸出概率的取樣生成新的文字。

(2)機器翻譯(machine translation)

機器翻譯是將一種源語言語句變成意思相同的另一種源語言語句,如將英語語句變成同樣意思的中文語句。與語言模型關鍵的區別在於,需要將源語言語句序列輸入後,才進行輸出,即輸出第乙個單詞時,便需要從完整的輸入序列中進行獲取。

(3)語音識別(speech recognition)

語音識別是指給定一段聲波的聲音頻號,**該聲波對應的某種指定源語言語句以及計算該語句的概率值。

(4)影象描述生成 (generating image descriptions)

同卷積神經網路(convolutional neural networks, cnns)一樣,rnns已經在對無標影象描述自動生成中得到應用。cnns與rnns結合也被應用於影象描述自動生成。

從一些例子中你可以看出序列問題有很多不同型別。有些問題裡,輸入資料 x和輸出資料y都是序列,但就算在那種情況下,x和y有時也會不一樣長。

我們的目的是基於當前的輸入與過去的輸入序列,**序列的下乙個字元。迴圈神經網路引入乙個隱藏變數h,用ht表示h在時間步t的值。ht的計算基於xt和ht−1,可以認為ht記錄了到當前字元為止的序列資訊,利用ht對序列的下乙個字元進行**。

需要尋優的引數有三個,分別是u、v、w。與bp演算法不同的是,其中w和u兩個引數的尋優過程需要追溯之前的歷史資料,引數v相對簡單只需關注目前,那麼我們就來先求解引數v的偏導數。

這個式子看起來簡單但求解起來很容易出錯,因為其中巢狀著啟用函式函式,是復合函式的求導過程。 rnn的損失也是會隨著時間累加的,所以不能只求t時刻的偏導。

w和u的偏導的求解由於需要涉及到歷史資料,其偏導求起來相對複雜,我們先假設只有三個時刻,那麼在第三個時刻 l對w的偏導數為:

相應的,l在第三個時刻對u的偏導數為:

根據上面兩個式子可以寫出l在t時刻對w和u偏導數的通式:

整體的偏導公式就是將其按時刻再一一加起來。前面說過啟用函式是巢狀在裡面的,如果我們把啟用函式放進去,拿出中間累乘的那部分:

累乘會導致啟用函式導數的累乘,進而會導致「梯度消失「和「梯度**「現象的發生。

梯度消失就意味消失那一層的引數再也不更新,那麼那一層隱層就變成了單純的對映層,毫無意義了。

深度學習第二課 Softmax回歸

與第一課線性回歸 linear regression 不同,softmax回歸針對的是多分類的情況,即labels不再僅有0,1兩個分類。softmax通過指數運算將最後的分類轉為0 1間的概率,在終於類別概率中,數值大的為 概率。與線性回歸損失不同,softmax函式計算損失採用的是交叉熵損失 c...

linux學習第二課

今天跟著benjamin學習linux的第二課,主講內容 linux作業系統的檔案 一.linux系統下除了一般檔案外,所有的目錄和裝置 光碟機,硬碟等 都是以檔案的形式存在了。所以這裡就出現了乙個問題,我們怎樣才能使用物理裝置中的資料呢,linux系統是將物理裝置掛載 linux中乙個非常重要的概...

Android學習第二課

android技術結構圖 是針對安卓,對linux kernel進行優化 libraries android rumtime core libraries dalvik virtual machine 常用庫應用程式框架方便了我們的開發 手機的應用程式 android的四大元件 activity s...