斯坦福 NLP CS224n 課程筆記
Ref: CS224N 官網地址html
老爺子鎮樓 ^_^
web
首先,在表示詞的含義以前,要先明確什麼是含義。含義是一個語義符號,它表明着一個事物或者一個想法。有一些nlp工具能夠得到詞的語義,如WordNet,給出一個詞,這些工具能夠給出他的詞性、近義詞、反義詞等。函數
傳統NLP中,詞由離散的符號來表示,即獨熱編碼。例如:
旅館 = [0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
啤酒 = [0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0]
若是語料庫中有N個詞,則每一個詞由一個N維的one-hot 向量表示。若是詞彙量很大,那個將會出現問題。工具
經過上下文表示詞義:優化
'You shall know a word by the company it keeps' (J. R. Firth 1957: 11)編碼
一個詞的含義應該能夠由上下文來表示。spa
由這種思想,咱們將一個詞表示爲一個密度向量,每一位再也不是一個0或者1,而是一個小數。例如:
expect=[0.286 0.729 -0.177 ... 0.271 0.487]
詞之間的距離能夠表示詞在語義上的類似性,如上圖。htm
Word2vec(Mikolov et al. 2013) 是實現詞嵌入的經典,它的思想是:blog
那麼,條件機率\(P(o|c)\) 應該如何計算呢?
答案是,先計算類似度,而後\(softmax\),即:\(p(o|c) = \frac{exp(u_0^Tv_c)}{\sum_{w \in V}exp(u_w^T v_c)}\)
其中,每一個詞有兩種詞向量,在上下文位置時,使用 \(u\) 表示;在中心詞位置時,使用 \(v\) 表示;分母是全部詞彙。get
爲何這麼計算呢?咱們注意到,\(u_0^Tv_c\) 表示的是兩個向量的點乘,而點乘表示的是向量的餘弦類似度,類似度越高,表明兩個向量越相近,在詞向量空間中,咱們認爲詞向量越相近其所表示的語義越接近。那麼上述條件機率描述的其實就是在當前向量表示下,中心詞 \(c\) 與上下文詞 \(o\) 的相近程度(語義上的)。再結合咱們的優化目標 \(L(\theta)\) ,咱們能夠發現優化過程能夠視爲不斷調整詞向量,讓不一樣位置的中心詞與窗口內的上下文詞的語義的相近程度的和最大。爲何這麼作就能獲得一個好的詞表示呢?回想上小節『詞向量的思想和依據』中有講到, 一個詞的含義應該能夠由上下文來表示'。咱們能夠發現其實這樣的優化過程的基礎思想就是讓一個詞的含義儘可能與上下文的語義類似。