CS224n學習筆記 Lecture1 2

2021-08-13 21:16:56 字數 3713 閱讀 1535

開始的這部分主要是對dl4nlp的乙個簡介。

個人理解,dl4nlp中,所有層級都是以向量的形式進行處理,用向量表示單詞、用向量表示句子等。向量是最靈活的形式,維度自由,可組成矩陣,可組成高維的tensor等。進行nlp等後續任務,首先需要輸入。輸入**主要有兩個,乙個是來自語音speech,乙個是來自文字text。對於nlp中,

有乙個概念需要理解:morphology(形態學)。這個所謂的形態學是乙個語言學中的概念,涉及到語音特徵、句法特徵、語義特徵等,處於音位學、句法學和語義學的結合部位。

整個的乙個nlp的通用處理流程是: 拿到輸入(來自語音/文字) -> 形態學分析(morphological analysis) -> 句法分析(syntactic analysis) -> 語義分析(semantic interpretation) -> 對話分析(discourse processing)

最後的那個階段需要利用上下文語境進行理解。

nlp 的工業界應用:

p.s.對於情感分析,傳統方法是用乙個情感詞袋,在詞袋上做分類器;基於dl的方法用rnn等解決,可識別」反話「的情感極性。對於qa,傳統方法是手工寫大量正規表示式,超蠢,效果也不好;基於dl的方法把事實儲存在向量裡。對於客服系統,如google的inbox,是基於rnn等dl方法實現的。對於mt,有傳統的smt,也有現在的nmt,nmt是將原文中的各個詞對映成向量,由向量來構建譯文。

nlp的難點:

1.人類的語言有歧義,需要明確某一代詞具體指代的是什麼。就是reference analysis

2.人類的語言較簡練,省略了大量的背景知識。省略的原因是由於人類已經儲備了大量基於現實世界、常識和上下文的一些知識。

隨後進入正題,介紹w2v。詞是進行nlp任務的最小單詞,需要把詞表示明白。

據說過去一直都是用的分類詞典,常見是就是像wordnet那樣的詞庫查詢上位詞和同義詞等。這種方法並不能區分同義詞之間的細微差別,如expert != good,這專業的程度完全不一樣好嘛!!此外,這種方法不需要大量人力去整理,而且不能實時加入新詞,由於是人工整理的,就會出現主觀化的問題,還無法計算詞和詞之間的相似度。總而言之,就是不好。

用稍現代化的模式去進行處理的時候,最早是採用one-hot編碼的形式進行詞語表示。這種就是列乙個詞典,初始化詞典裡的各個單詞對應的計數都是0,然後乙個乙個擼單詞,句子裡出現哪個單詞了就把詞典相應的位值+1,直到擼完為止。這種方法是有問題的,如果詞典特別大,比如達到百萬級別的話,那這向量也太長了!而且任意兩個向量之間的點積都為0,說人話就是這兩個詞沒有關聯,這是不對的,比如說motel和hotel...這兩個怎麼說是沒關聯呢?說motel和cat沒關聯還差不多!

在對詞語的理解時,很大程度上需要依賴其對應的上下文,如果能把單詞放到正確的上下文中,才說明正確掌握了他的意義。個人認為這就是w2v的語言學基礎。通過調整乙個單詞及其上下文單詞的向量,可根據這兩個向量推測兩個詞語的相似度,或者可根據乙個單詞的向量**詞語的上下文。w2v被稱作是分布式表示,稱為分布式主要是因為,不像one-hot這種編碼形式,把雞蛋都放在乙個籃子裡,而是把該單詞的含義分散到不同維度,因此稱作是分布的表示。

w2v是由兩個模型構成的:cbow和sg,兩個模型的作用完全相反,其中cbow是給定乙個中心詞,**其context詞,而sg則是給定context詞來**中心詞。通過單詞和上下文彼此**。

對於w2v的原始softmax,提出了兩種較為高效的訓練方法:負取樣和層次softmax。

學習神經網路word embedding的基本思路如下:

首先定義乙個**某單詞的上下文的模型: p

(con

text

|wt)

=…

其損失函式定義如下: j

=1−p

(w−t

|wt)

這裡的w−t

表示wt 的上下文(負號通常表示除了某詞之外),如果完美**,損失函式為零。然後在大語料庫上不同位置得到訓練例項,調整詞向量,最小化損失函式

lecture裡主要是針對sg模型進行了詳細講解。計算p(wt-2 | wt)、p(wt-1 | wt)、p(wt+1 | wt )、p(wt+2 | wt)等概率。這裡只是拿視窗為2舉例,實際上學習出的是乙個概率分布。目標函式是對所有中心詞其context詞的**結果的乘積,需要最大化這個乘積(理想情況是這個乘積的結果為1,表示對於所有中心詞,對其context詞的**都是準的)。

在實際操作時,要對這個最原始的目標函式進行一下改造。乘法顯然是不太好處理的,乙個通用的trick是將乘法轉成求和,利用log操作。而且接觸過ml的都知道,處理最小化要比處理最大化更受歡迎,原始目標函式是進行最大化,取個負數就轉成了最小化。因此,將原始目標函式進行對數似然的相反數操作即可得到較易處理的損失函式形式。對於目標函式裡的p,用softmax函式得到。

softmax函式本質上是將乙個向量轉換成另乙個向量,向量的shape不變,只是將向量中的各個值進行"規範化"處理,將乙個任意值轉成(0,1)之間的乙個浮點數,在nn裡這個值可近似認為是概率。softmax的計算函式如下:

這裡涉及到的u和v分別對應詞o(context詞)的向量和詞c(中心詞)的向量,來自於兩個矩陣u和v,二者均為這個模型的引數,是我們要通過損失函式反覆迭代更新的。之所以叫做softmax函式是因為,該函式中用的指數函式會將較大的數變得更大,而較小的數變得很小很小,類似於max函式

p.s. 在對應的assignment1裡第一部分就是針對softmax做的一些練習。softmax有乙個特性,那就是平移不變性(我也不知道專業的說法是這個,勿噴),數學表示就是softmax(x) = softmax(x + c),其中c為乙個常數或常向量,x是乙個向量。這個很好證。實際利用這個特性時,c普遍取-max x(i),就是x向量中的最大值。為啥要費勁減去這麼個值呢?還要從softmax函式本身定義著手。softmax函式用指數來進行」規範化「操作,指數操作會把大數繼續放大,如exp(1000)時,直接算是會上溢位的,得到inf,對於exp(-1000),還是不行,會下溢位,得到0,下溢位這個事情是因為,浮點數只有64位,太小的數字也是表示不出來的。減去x(i)的最大值,可以保證指數最大不會超過0,不會發生上溢位,即使下溢位了,也能得到乙個相對合理的值。

這個softmax函式很重要很重要很重要!!!!!

對於整個sg模型的執行過程,用如下scratch表示很清楚:

最左邊wt的是用one-hot編碼表示的中心詞,是乙個v維向量,v表示的是詞典的大小(輸入其實是乙個pair,每乙個pair為(中心詞,context詞1)),乘以w矩陣,該矩陣為d行v列矩陣,每列表示乙個詞向量,這個詞向量用d維列向量表示,這個操作其實就是乙個對映table,揪出對應的詞向量。再將該向量與w'矩陣相乘,對得到的結果再進行softmax轉換得到概率,經過softmax轉換過得列向量中的值加和為1,值最大的那個對應的就是**出來的該中心詞在視窗中該位應該出現的詞,與真實情況進行對比來計算損失,然後反過來更新w和w'矩陣。?????最終的詞向量就是w矩陣,這個不清楚。

對於模型的訓練,用梯度下降法。模型的引數就是w和w'矩陣。求導即可得到梯度,使用sgd而非bgd來減少訓練時間,這些都是老生常談了。比較特別的一點是提到了一句,nn喜歡嘈雜的演算法。?????這個是為什麼,需要仔細思考一下

至此得到sg模型訓練的整體流程,針對softmax函式,還有優化的空間,後邊會提到一些trick,這個不是lecture1 中主要提到的問題了,後邊再繼續總結。

CS224n筆記一 開端

自然語言處理的目標是讓計算機處理或者 理解 自然語言,以完成有意義的任務,如qa等。形態學 morphological analysis 或稱詞法或者詞彙形態學。其研究詞的內部結構,包括屈折變化和構詞法兩個部分。句法分析 syntactic analysis 和語義分析 semantic inter...

CS224N 語言模型介紹

語言模型實現 語言模型是指根據給定序列 下乙個單詞的任務,其形式化表達為 給定單詞序列x 1 x 2 x t 然後 單詞x t 1 的概率分布 語言模型的另一種定義是給給定文字序列分配概率 這個概率代表了該文字序列出現的可能性大小 例如,給定一段文字x 1 x 2 x t 那麼這段文字出現的概率為 ...

CS224N 子詞模型(subwords)

二 subword model 三 subword level language model 四 hybrid nwt 五 character level 因為人類書寫系統多種多樣,同時詞語存在形態變換,音譯,縮寫以及網路用語等現象,所以僅在word level進行建模是不夠的,需要model bl...