深度學習筆記——理論與推導之Structured Learning【NLP】(十二)
阿新 • • 發佈:2019-01-02
Language Technology
Meaning of Word(一個vector表示一個word)
Predicting the next word
給一串sequence of words,預測下一個單詞
- 我們現在要做的就是將wi-1和wi-2描述成一個feature vector,1- of -N encoding:
假設只要對著幾個詞彙做word2vec:lexicon = {apple,bag,cat,dog,elephant}
那麼,apple=[1 0 0 0 0],The vector is lexicon size,每一個dimension對於一個word。
- 接下來我們要通過wi-2和wi-1來預測wi,這個NN的input是wi-2和wi-1,output是下一個單詞wi的可能是某個word的機率。
- 接下來如何訓練這個NN呢?
首先通過爬蟲下載一些博文,通過如下方法設定NN,(如輸入“這裡”“是”,輸出為“八”,即Minimizing cross entropy)
- Word Vector:
- input一個word:有關係的詞彙的hidden layer的output會是非常相近的,這樣最後輸出的結果才會相近:
- input兩個word:
下面input到hidden layer中,顏色一樣的箭頭,代表它們的weight是一樣的:
像下圖那樣,減少引數量,令W1=W2=W,帶來的好處是,我們不用再擔心要考慮幾個word,因為即使我們考慮10個word,在這個方法上也只是10個word相加,並不會導致weight的數量增加10倍。
那麼我們應該如何update weights呢?
- input一個word:有關係的詞彙的hidden layer的output會是非常相近的,這樣最後輸出的結果才會相近:
- 這種找Word Vector的方法除了Predict next word還有Various Architectures方法(如Continuous bad of word(CBOW) model或者Skip-gram)。
- 但如果詞彙難以窮舉呢?
- 加上“other”的dimension,但這樣就不能把不同的word分開。
- 在英文中字母是可以窮舉的,所以把26x26x26作為一個dimension。
- Word Vector:
word和word之間的差,可以代表兩個word之間的關係:
這個發現可以用來做推理,即:
Meaning of Word Sequence(一個vector表示一個word Sequence)
- 用一個固定長度的vector表示不同長度的word sequences,這個word sequence可能指的是一個文章或者是一個段落:
- Outline:
- Deep Structured Semantic Model(DSSM):Application——Information Retrieval(IR)
- Recursive Deep Model:Application——Sentiment Analysis
- Paragraph Vector:Unsupervised
Information Retrieval(IR-DSSM)
- Vector Space Model:我們把document都變成space上面的點,query也是一個點,在搜尋的時候,我們就計算query和其他document之間的夾角,如果夾角很小,說明他們的關聯性是很高的,這可能就是我們搜尋出來的內容。那麼我們如何將,一個query、一個document如何用一個vector來表示它。
- 最常用的方法就是Bag of word(這個方法無視word前後順序的問題,所以Bag of word有一個問題,就是如果出現的詞一樣,那麼即使對應順序不一樣,也會是同一個vector):我們有一個vector,這個vector的一個dimension就對應一個word,如下:
每一個word都會乘以一個IDF(每一個word的重要性) - Vector Space Model + Bag-of-word:
缺點:Bag-of-word中每一個dimension都是沒有關係的,所以Bag-of-word其本質上就是在看query和document中有多少詞重合,選擇詞重合數最多的,沒有考慮到query和document的背後是在講什麼
IR-Semantic Embedding
- Bag-of-word feature通過進一步處理,用一個DNN,將Bag-of-word feature變成一個low dimension的feature,而這個feature就是用來表達document or query的語義。
下面不同顏色的點,代表不同主題的新聞:
然而,現在的問題就是我們不知道input bag-of-word後的target是什麼。 - DSSM:
- 通過在網頁搜尋中,記下點選了哪個網頁,如下,比如輸入query q1時document d1被點選了,那麼,document d1和query q1之間的夾角就會更相近,而document d2和query q1之間的夾角就會差別更大,如下(下面六個都是同一種模型):
- Typical DNN vs DSSM:
Typical DNN是有一個確切的target。
DSSM沒有指定document和query的output要長什麼樣子,只要query和所要的document方向一樣就好。
- 有了Click data後,我們就可以learn一個DNN出來,首先,我們將document都通過DNN變成一個low dimension的vector,然後輸入一個query,將query通過DNN一樣得到一個vector,然後計算它和document之間的夾角,把夾角小的輸出來。
- 卷積的DSSM:
- 通過在網頁搜尋中,記下點選了哪個網頁,如下,比如輸入query q1時document d1被點選了,那麼,document d1和query q1之間的夾角就會更相近,而document d2和query q1之間的夾角就會差別更大,如下(下面六個都是同一種模型):
Sentiment Analysis(Recursive Deep Model)詞彙順序問題
- 詞彙順序問題很重要(而僅僅使用Bag-of word並不能解決這個問題):
- 首先要知道word sequence背後的文法結構,very+good是一個偏移,not good就是一個更大的偏移
- 所以現在給我們一個word sequence,我們可以輕易知道它的文法結構。接下來每一個word,我們都可以用vector來描述它。我們怎麼知道”very”和”good”的vector長什麼樣呢?我們現在可以將它經過一個NN,這個NN輸入是2倍的Z,輸出是一倍的Z(vector的大小是|Z|)。
那麼為什麼不直接把very的vector和good的vector直接相加呢?因為V(wA,wB) ≠V(wA) + V(wB)。因為”not”是中性詞,”good”是正向詞,而”not good”確實負向詞。說明這vector之間是不能疊加的。
灰色代表的是中性詞,藍色代表的是正向詞,橙色代表的是負向詞。我們可以做到not的時候,reverse another input。
深藍色是在強化這個正向詞,深紅色是在強化這個負向詞。我們可以做到very的時候,emphasize another input。
今天我們可以用V(“good”)和V(“very”)作為NN的input,而output是V(“very good”),我們又可以用V(“not”)和V(“very good”)做為input得到V(“not very good”)。這樣詞序就被考慮進去了,因此但詞序改變的時候,所代表的序列也會改變。
那我們應該如何learn這些NN呢?
這裡是為了看看這篇文章是正向還是負向的,我們發現不同長度的句子中,Negative,Neutral,Positive,Very Negative,Very Positive等的分佈。我們看到當句子比較短的時候,是比較不容易判斷句子表達正向還是負向的,所以當句子比較短的時候,Neutral的數量比較多。
Paragraph Vector(Unsupervised)
- 不需要任何的Training Data
- 這裡,我們以填詞做為例子,通過xi-1和xi-2判斷下面的xi:我們的輸入是兩個值xi-1和xi-2,輸出就是next word xi,因此:
- 我們發現上面的模型有一個問題,如果xi-2是魔君而xi-1是名叫,如:針對魔戒的魔君應該是Sauron,而仙劍5的魔君應該是姜世離,而由於xi-1和xi-2的值一樣,所以xi得到的也會是一樣的:
- 針對上面問題,我們在word的基礎上新增一個paragraph,我們把paragraph變成一個給定維度的vector,比如有10萬個段落,那麼就有10萬維:
那麼關於這個“魔君名叫__”就會變成: