原先在NLP領域中主要是通過稀疏向量(SparseVector),在2001年,首次出現的稠密向量(DenseVector)對詞語進行描述,也就是詞嵌入。
2013 年Mikolov等人做出的主要創新是「去除隱藏層和近似的計算目標」,提升了模型的訓練效率。在結合用來產生詞向量(將文本中詞語轉換為低維向量,能捕捉詞語間的語義關係,並在NLP中使用。)的相關模型word2vec(word to vector)後,可以用來訓練大規模的詞嵌入模型。
word2vec模型有兩種不同的方法,兩種方法剛好是相反的:
在觀念上,這個「嵌入」的模型和昨天介紹過的「前饋神經網路」差異不大,最差的差異在於,在透過一個大雨易資料庫的訓練過後,可以得到相關單詞(如性別、時態、國際事務)間的特定關係。
另外,將預訓練的「詞嵌入矩陣」用於初始化後,可以提高下游的任務型能。
而在現在,word2vec應用的範圍也不僅限於詞語,而是跳脫到了其他領域,其中的「skip-gram」現在也被用於網路、生物序列等領域。
三個類型的神經網路應用最廣:循環神經網路(RNN)、卷積神經網路(CNN)、結構遞歸神經網絡(RvNN)
循環神經網路(RNN, Recurrent Neural Network)
是處理序列輸入的一種神經網路,可以處理具有不定長度的數據,如文章、聲音、影片。
特性是加入一個hidden vector,這個隱藏向量不會學習,但會在數據序列中傳遞,可以幫助RNN利用過去資訊預測未來結果。
長短期記憶網路(LSTM, long-shortterm memory networks)
在2013Ilya Sutskever博士提出的LSTM模型對於原先的梯度消失/梯度爆炸問題(兩個都是當前面隱藏層學習速率低於後面時,隨隱藏層數目增加,分類準確率反而下降,指示原因有些不同)可以有更好的解決辦法。
LSTM也是循環神經網路的一種,借用了人腦長期記憶、短期記憶的理論,在模型中設定了一個大門(Gate),可以決定哪些元素應該被保留 (長期)、那些該被遺忘(短期)。可以將這個大門視為RNN中的hidden vector。
卷積神經網絡(CNN, convolutionalneural networks)
與RNN相比,CNN的優點是有更好的「並行性」,不同於前者在操作中依賴過去所有的狀態,CNN在每個時間步驟中只依賴局部上下文。
CNN可以涵蓋更廣泛的上下文內容(利用卷積層),也可以和LSTM進行組合與堆疊,加速LSTM的訓練。
結構遞歸神經網絡(RvNN, recursive neural networks)
RNN、CNN都將語言視為一個「序列」(從前到後一整段的整體),但從語言學角度來看,語言是有層級結構的:單字→詞語→句子。
這也啟發了RvNN,以樹狀結構取代序列,與先前都是由左至右對序列進行處理的方法不同,這是一個由下而上的結構,樹中的每個節點都是透過子節點的表徵計算所得。
Sutskever 等人提出,類似前面我們有提過的,利用「編碼器」、「解碼器」的方法,做出預測,並將輸出符號作為下一個符號的輸入。
除了在文字、翻譯領域有好的成績,也在對圖片產生描述、對表格產生文字等等方面有很好的應用。
序列到序列的模型通常都是基於RNN的,但也可以使用其他模型,比如LSTM、Transformer等等,甚至是各類的結合體。
在Day2有介紹過了,可以用來觀察句子或文件周圍的單字,得到包含了更多上下文資訊的表述。
是Transformer的核心。
在2015年被首度提出,但在2018年時,才被證明在不同類型的任務中都非常有效。
語言模型嵌入與上下文無關,僅是用於初始化模型的第一層,可以做為目標模型中的特徵,或根據具體任務進行調整。
使用預訓練的語言模型,可以在少量資料的情況下進行有效的學習。
嗯……看完之後有什麼感想嗎?
我自己是覺得表達的沒有很清楚(自首),如果有你有那裡感覺不太理解的可以提出來,我再來多看看Orz