2、分詞:對每個句子進行分詞,也就是將乙個句子劃分成若干個詞(token),轉換為乙個詞的序列。
3、建立字典:將每個詞對映到乙個唯一的索引(index)。為了方便模型處理,我們需要將字串轉換為數字。因此我們需要先構建乙個字典(vocabulary),將每個詞對映到乙個唯一的索引編號。
4、將詞轉為索引:使用字典,我們可以將原文本中的句子從單詞序列轉換為索引序列
前面介紹的分詞方式非常簡單,它至少有以下幾個缺點:
a、標點符號通常可以提供語義資訊,但是我們的方法直接將其丟棄了
b、類似「shouldn』t", 「doesn』t"這樣的詞會被錯誤地處理
c、類似"mr.」, "dr."這樣的詞會被錯誤地處理
5、用現有工具進行分詞:spacy和nltk。
一段自然語言文字可以看作是乙個離散時間序列,給定乙個長度為 t 的詞的序列w1,
w2,…
,wtw_,w_,…,w_
w1,w2
,…,
wt ,語言模型的目標就是評估該序列是否合理,即計算該序列的概率:p(w
1,w2
,…,w
t)p(w_,w_,…,w_)
p(w1,
w2,
…,wt
)介紹基於統計的語言模型,主要是 n 元語法( n -gram)
1、n 元語法:
概念:通過馬爾可夫假設簡化模型,馬爾科夫假設是指乙個詞的出現只與前面 n 個詞相關,即 n 階馬爾可夫鏈(markov chain of order n )
當 n 分別為1、2和3時,我們將其分別稱作一元語法(unigram)、二元語法(bigram)和三元語法(trigram)。
當 n 較小時, n 元語法往往並不準確。例如,在一元語法中,由三個詞組成的句子「你走先」和「你先走」的概率是一樣的。然而,當 n 較大時, n 元語法需要計算並儲存大量的詞頻和多詞相鄰頻率。
缺點:引數空間過大;資料稀疏
2、時序資料的取樣
在訓練中我們需要每次隨機讀取小批量樣本和標籤。與之前章節的實驗資料不同的是,時序資料的乙個樣本通常包含連續的字元。
如果序列的長度為 t ,時間步數為 n ,那麼一共有 t−n 個合法的樣本,但是這些樣本有大量的重合。有更加高效的取樣方式,分別是隨機取樣和相鄰取樣。
隨機取樣:在隨機取樣中,每個樣本是原始序列上任意擷取的一段序列,相鄰的兩個隨機小批量在原始序列上的位置不一定相毗鄰。
相鄰取樣:在相鄰取樣中,相鄰的兩個隨機小批量在原始序列上的位置相毗鄰
下圖展示了如何基於迴圈神經網路實現語言模型。我們的目的是基於當前的輸入與過去的輸入序列,**序列的下乙個字元。迴圈神經網路引入乙個隱藏變數h
hh,用hth_
ht表示h
hh在時間步t
tt的值。hth_
ht的計算基於xtx_
xt和ht−
1h_ht−1
,可以認為hth_
ht記錄了到當前字元為止的序列資訊,利用hth_
ht對序列的下乙個字元進行**。
1、迴圈神經網路的構造
2、one-hot向量
將字元表示成向量。假設詞典大小是 n ,每次字元對應乙個從 0 到 n−1 的唯一的索引,則該字元的向量是乙個長度為 n 的向量,若字元的索引是 i ,則該向量的第 i 個位置為 1 ,其他位置為 0
3、裁剪梯度
迴圈神經網路中較容易出現梯度衰減或梯度**,這會導致網路幾乎無法訓練。裁剪梯度(clip gradient)是一種應對梯度**的方法。假設我們把所有模型引數的梯度拼接成乙個向量g
gg,並設裁剪的閾值是θ
\theta
θ。裁剪後的梯度
m in
(θ∣∣
g∣∣,
1)gmin(\frac,1)g
min(∣∣
g∣∣θ
,1)
g的l2
l_l2
範數不超過θ
\theta
θ。4、困惑度
通常使用困惑度(perplexity)來評價語言模型的好壞。困惑度是對交叉熵損失函式做指數運算後得到的值。特別地,
最佳情況下,模型總是把標籤類別的概率**為1,此時困惑度為1;
最壞情況下,模型總是把標籤類別的概率**為0,此時困惑度為正無窮;
基線情況下,模型總是**所有類別的概率都相同,此時困惑度為類別個數。
顯然,任何乙個有效模型的困惑度必須小於類別個數。
TNU深度學習筆記2
這節課主要講了怎麼訓練rnn,用的方法是bptt backpropagation through time rnn的目標是訓練引數wh wo,wi。bptt的做法是,先將rnn隨著時間展開,如下圖 展開之後像訓練普通神經網路一樣做backpropagation就行了,唯一的區別在於rnn輸入是乙個連...
《python深度學習》筆記2
這是 python深度學習 的 我的一些注釋筆記,可能有一些函式已經有庫實現了,我先放在著,以後遇到了我再過來補,如果有大神指教就更好了 import numpy as np import pandas as pd from keras.datasets import imdb from keras...
動手學深度學習學習筆記(2)
操作 算術操作 在pytorch中,同一種操作可能有很多種形式,下面用加法作為例子。加法形式一 y torch.rand 5,3 print x y 加法形式二 print torch.add x,y 還可指定輸出 result torch.empty 5,3 torch.add x,y,out r...