2019年CS224N課程筆記-Lecture 1: Introduction and Word Vectors

資源鏈接:https://www.bilibili.com/video/BV1r4411f7td?p=1(中英文字母版,不過可能由於up主不瞭解專業術語,許多專業術語翻譯的不是很好,不過也要感謝up的辛苦勞作了~)

(2019的感覺相對於之前的少了許多類似前言介紹的內容,我在這裏將總結一下之前版本的CS224N的本次課程沒講解的內容)

補充的前沿知識:

什麼是自然語言處理 (NLP)?

NLP/Natural Language Processing= computer science + artificial intelligence + linguistics

自然語言處理可以視爲多個領域的組合,涉及到計算機科學,AI人工智能,以及語言學知識,屬於一個包含多學科的綜合領域。

自然語言處理的目標:

使得計算機能夠處理或者“讀懂”自然語言,以完成一些有用的任務。

但是,完全理解或者展示語言所包含的意思(甚至是對語言進行定義)是一件非常困難的事情。

NLP 的應用:

  • 中文自動分詞(Chinese word segmentation)
  • 詞性標註(Part-of-speech tagging)
  • 句法分析(Parsing)
  • 自然語言生成(Natural language generation)
  • 文本分類(Text categorization)
  • 信息檢索(Information retrieval)
  • 信息抽取(Information extraction)
  • 文字校對(Text-proofing)
  • 問答系統(Question answering)
  • 機器翻譯(Machine translation)
  • 自動摘要(Automatic summarization)
  • 文字蘊涵(Textual entailment)

什麼是深度學習 (DL)?

深度學習是機器學習的一個分支。機器學習就是讓機器自動學習,而不是手工寫代碼,告訴機器應該怎麼做。而深度學習與傳統的機器學習不同。傳統的機器學習其實就是讓人類來審視一個特定的問題,找出解決問題的關鍵,然後設計出與該問題相關的特徵,然後寫代碼來識別這些特徵。這樣實質上機器並沒有學習什麼,倒是人類學習了很多。他們仔細研究問題,做了大量的數據分析和理論研究,判斷那些屬性是重要的。看起來機器只做了一件事,就是數值優化。

機器學習幾乎90%決定於人,而10%決定於計算機計算,而深度學習相反。(機器學習的成功更取決人設計的算法,而深度學習更傾向於數據集的好壞和大量時間的訓練)

機器學習 vs. 深度學習:

機器學習: 用特徵來描述數據,主要在於學習算法,最優化權值

深度學習: 自動學習好的特徵。通過模型的輸入的數據自動學習特徵(本質上也是最優化權值)。

目前深度學習火熱的原因:

在機器學習中,人爲設計的特徵往往過於特殊,對於某些數據集可能表現較好,但泛化能力差,並且模型特徵構造不足會直接影響模型的效果,需要較長的時間來設計特徵。

深度學習可以快速地學習特徵,並根據不同的數據集及時進行改變

相較於兩者來說,深度學習需要的數據量更大,這在之前是很難實現的,大家也都知道,大數據現在發展的非常迅速,也爲深度學習一定程度上解決了這個問題,而且目前大公司也是打信息戰,數據的存儲也比以往更加重視。

而且深層的神經網絡比機器學習理論上更容易捕捉數據的特徵。

NLP難在哪裏?

知識的表示,學習和使用都很複雜(舉個例子:光詞向量這個目前代表語言的一個計算機識別單位,還是沒有一個非常完成的,例如圖片、數據等,都是計算機直接可以識別的,但是語言不一樣)

人類知識含義當中的不確定性(用一句名言來解釋吧,一千個讀者就有一千個哈姆雷特。日常中一句話,不同的人都有不同的理解,所以說語言是不確定的)

正課內容:

人類語言的特點

人類語言是一種混亂的,就是每個人的理解是不一樣的,即使是同一句話。這也就是我們說的語義理解問題,我們交流時儘可能的讓別人明白自己想要表達的意思。

詞的表示:在語言中,可能是漢字、單詞、或者其他語言的基本單位,那麼在計算機中是怎麼表示哪?之前普遍的做法是使用WordNet這個詞典。

WordNet是一個由普林斯頓大學認識科學實驗室在心理學教授喬治·A·米勒的指導下建立和維護的英語字典。由於它包含了語義信息,所以有別於通常意義上的字典。WordNet根據詞條的意義將它們分組,每一個具有相同意義的字條組稱爲一個同義詞集合。WordNet爲每一個同義詞集合提供了簡短,概要的定義,並記錄不同同義詞集合之間的語義關係。在WordNet中,名詞,動詞,形容詞和副詞各自被組織成一個同義詞的網絡,每個同義詞集合都代表一個基本的語義概念,並且這些集合之間也由各種關係連接。

但是存在很多問題,不能準確表述單詞之間的相似性,以及需要人工進行維護,對於現在需要大量的詞語來說,這無非是一個災難性的工作。

在傳統的NLP中,主要採用ont-hot向量來表達單詞。

(課程中沒有具體介紹one-hot,這裏可以看一下我之前的文章,之前的文章很多都是自己也不太明白的情況下寫的,但是one-hot這部分寫的還是比較明白的https://blog.csdn.net/RHJlife/article/details/104893608,同時課程中也缺少TF-IDF文本向量化,有興趣的可以看一下)

one-hot缺點:由於語料庫比較大,導致向量過於龐大,有多少個詞,向量就多長,而且不能表達單詞之間的相似性,因爲各個向量正交,無法計算餘弦相似度。

解決的一個思路:一個單詞的詞向量可以通過上下文單詞的含義決定。如果這個單詞向量通過上下文單詞找出來的,意味着這個單詞可以很好的生成出自己的上下文單詞(經常出現在自己上下文中的單詞的生成概率大)。這也就是我們常說的分佈式詞向量,考慮語義的一種思路。

word2vec

其實word2vec分爲兩個模型分別爲跳字模型(根據一箇中心詞生成上下文)和連續詞袋模型(根據上下文生成一箇中心詞),課程中以詞袋模型爲例子講的

實現思想:

  1. 我們有個很大的語料庫
  2. 語料庫中的詞都可以用一個向量表示(訓練過程是兩個向量表示:中心詞向量和背景詞向量)
  3. 遍歷一個文本,對於文本中的每個位置t,遍歷到的位置t對應的詞稱爲中心詞c,中心詞的上下文單詞成爲詞o(選擇中心詞上下m個詞作爲背景詞,m也叫窗口大小,是人爲設定的超參數)
  4. 使用詞向量c和詞向量o的相似性來計算,當給定詞c時詞o出現的概率,即p(o|c)

word2vec目標函數和損失函數

L爲目標函數,具體含義就是,遍歷該語句,語句長度爲T,所以第一層爲t=1->t=T,意味着中心詞的移動;因爲每次中心詞時都要求該中心上下m個背景詞和中心詞的概率,所以背景詞是t+j,j在-m到m之間,且不等於0(因爲等於0就是中心詞了);θ是超參數矩陣(因爲後續要求到等,而且超參數非常多,所以用θ表示所有的超參數);我們希望目標函數的值最大化,但是往往最大化不容易求解,而最小值更容易求解,所以將上述L轉化爲J,J爲損失函數,也就是L的等價變化的負值。

爲什麼等價哪?因爲添加log是不影響最大值和最小值的,而且把乘轉化爲求和,更容易計算(如果還想問爲什麼變成求和更容易,後續自己可以不變化成log然後計算一下就知道了),加負號是將求最大值變成最小值,T的引入實際上把函數倍減,也不影響最大值和最小值,後續求導可能方便約分等。

那麼,概率等於多少哪?也就是P函數函數如何設計?

u代表背景詞向量,v代表中心詞向量。解釋一下爲什麼這麼設計,首先橙色部分,爲什麼是中心詞向量和背景詞向量的點乘哪?因爲點乘對兩個向量有表示相似度的含義(具體可以查閱餘弦相似度的概念);藍色部分中V代表所有樣本,也就是分母是分子的所有可能的和,爲什麼分母是對分子的求和?因爲這樣就可以表示概率了呀~不明白的話,我就這麼解釋:你抽中紅球的概率是不是(紅球/所有球之和),就這個意思,單個樣本/所有樣本就是該樣本的概率;爲什麼用exp來對橙色部分進行處理?因爲點乘可能正負,對於概率來說,是不合理的,所以加上exp,則分子一定是正數,分母更不用說了;其實p函數採取的是一種softmax的思想,有興趣的可以瞭解下,softmax中的操作其實就是上述解釋~

求loss函數的梯度

(課程推到,原理是鏈式法則,有興趣的可以自己推到一下~)

(求和的話,可以發現如果求很多求導,例如u1,其他不含該項的其實是0的)

參數更新/梯度更新:

α是學習率(一個超參數,人爲設定的)

優化的過程是怎麼樣的?

其實上述是不準確的,以往實際上曲線可能是曲曲折折的,這是一個比較理想的圖。沿梯度方向不斷下降,最終就會區域最小值(也有可能是局部最小值,這個ai知識有基礎的話應該是的是咋回事~)

爲什麼採取兩個詞向量(背景詞向量和中心詞向量)呢?

第一點解釋就是容易實現,因爲word2vec有兩套模型:跳字模型/skip-gram(通過中心詞預測上下文單詞)和連續詞袋模型CBOW(通過上下文單詞預測中心詞),只用一個會很麻煩

最終的詞向量選擇是誰?答案:中心詞向量+背景詞向量,爲什麼呢?因爲加權平均的思想,中心詞向量+背景詞向量其實與(中心詞向量+背景詞向量)/2是等價的,求平均和求和實際一樣的(常數項不影響實際含義的~這句話一定要理解)

因爲p函數分母和整個語料庫有關係,所以時間複雜度是非常高的,所以可以採用隨機梯度下降的方法,也就是隨機抽取其中一些樣本進行訓練,而不必訓練這個預料庫。

大家可能有疑問:隨機採樣的話是不是不準》確實有一點點,但是隨機採樣的樣本的數學期望其實和整體是一樣的,理論上可以一定程度上代表整體樣本(雖然是隨機的,但是其實大部分樣本都會訓練到的,這麼理解1000個樣本,我每次取100,其實是一輪要進行10輪,每次100個,每次分母只計算這抽取的100個的;原先是1000個樣本進行一輪,分母是計算全部的1000個;實際上都是訓練了1000個數據,不會存在遺漏的,但是分母不太一樣,可以細細品味~)

課程上沒說,不過還有兩套近似算法來優化上述p函數與整個語料庫有關的問題,分別是:負採樣層序softmax

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章