機器學習領域一個最令人著迷的任務,就是訓練機器理解人類交流能力的進步。在機器學習領域,這一分支被稱為自然語言處理(Natural Language Processing)。
本文嘗試解釋自然語言處理的基礎知識,以及隨著深度學習和神經網絡的發展,自然語言處理所取得的快速進展。在我們深入研究之前,有必要了解一些基礎知識。
語言是什麼?
一種語言,基本上是一個由人類社會共享的固定的詞彙表,用來表達和交流他們的思想。這個詞彙表作為他們成長過程的一部分被世代相傳,並且大部分保持不變,每年會增加很少的部分作為補充。諸如詞典之類的精細資源得到了維護,以便一個人遇到一個新詞時,他或她可以通過參考詞典來了解其含義。一旦人們接觸到這個詞,它就會被添加到他或她自己的詞彙表中,可以用於進一步的交流。計算機如何理解語言?計算機是在數學規則下工作的機器。它沒法解釋或者理解那些人類可以輕鬆做到的事,但卻能在幾秒內執行完複雜的計算。計算機要處理任何概念,都必須以一種數學模型的形式表達這些概念。 這種約束極大地限制了計算機可以使用的自然語言的範圍和領域。目前,機器在執行分類和翻譯的任務方面非常成功。分類基本上是將一段文本分類為一個類別,而翻譯則是將這段文本轉換成任何其他語言。什麼是自然語言處理?自然語言處理,或簡稱為NLP,被廣泛地定義為通過軟體對自然語言(如語音和文本)的自動操作。自然語言處理的研究已經有50多年的歷史了,並且隨著計算機的興起而從語言學領域發展起來。基本的轉換正如前文所述,讓一臺機器理解自然語言(人類使用的語言),需要將語言轉換成某種可以建模的數學框架。下面提到的是幫助我們實現這一目標的一些最常用的技術。分詞,詞幹提取,詞形還原分詞是將文本分解成單詞的過程。分詞可以在任何字符上發生,但最常見的分詞方法是在空格上進行分詞。詞幹提取是一種截斷詞尾以獲得基本單詞的粗糙方法,通常包括去掉派生詞綴。派生詞是指一個詞由另一個詞形成(派生)的詞。派生詞通常與原始詞屬於不同的詞類。最常見算法是Porter算法。詞形還原對詞進行詞彙和形態分析,通常只是為了消除詞尾變化。詞尾變化是一組字母加在單詞的末尾以改變其含義。一些詞尾變化是單詞複數加s,如bat,bats。詞頻(TF):詞頻表示詞語出現在一篇文章中的頻率。
逆文件頻率(IDF):衡量詞語提供的信息量,即它在所有文檔中是常見的還是罕見的。它由log (N/d)計算得出。N是文檔總數,d是包含某個詞語的文檔數。獨熱編碼獨熱編碼是另一種以數字形式表示詞語的方法。詞語向量的長度等於詞彙表的長度,每一個句子用一個矩陣來表示,行數等於詞彙表的長度,列數等於句子中詞語的數量。詞彙表中的詞語出現在句子中時,詞語向量對應位置的值為1,否則為0。
圖片來源 - 谷歌
詞嵌入詞嵌入是一組語言模型和特徵學習技術共有的統稱,詞彙表中的詞語或短語被映射到由實數構成的向量裡。這種技術主要用於神經網絡中。為了便於理解,我們可以將嵌入看作是將每個單詞投射到一個特徵空間,如下圖所示。
每個詞被映射到一個特徵空間裡(性別,王室成員,年齡,食物等)
然而,事實上這些維度並不那麼清楚或便於理解。但由於算法是在維度的數學關係上訓練的,因此這不會產生問題。從訓練和預測的角度來看,維度所代表的內容對於神經網絡來說是沒有意義的。如果你有興趣對線性代數有一個直觀的理解,投影和變換是一些機器學習算法背後的核心數學原理,我將強烈鼓勵他們訪問3Blue1Brown的「線性代數的本質」。(b站搬運了相關視頻,詳情請看《線性代數的本質》,譯者注)表示方法詞袋要使算法獲取文本數據之間的關係,需要用清晰的結構化表示。詞袋是一種以表格表示數據的方法,其中列表示語料庫的總詞彙表,每一行表示一個觀察。單元格(行和列的交集)表示該特定觀察中的列所代表的單詞數。它有助於機器用易於理解的矩陣範式理解句子,從而使各種線性代數運算和其他算法能夠應用到數據上,構建預測模型。下面是醫學期刊文章樣本的詞袋模型示例
這種表示非常有效,並且負責為一些最常用的機器學習任務(如垃圾郵件檢測,情感分類器等)生成模型。
它忽視了文本的順序/語法,從而失去了單詞的上下文。這種表示方法生成的矩陣非常稀疏,並且更偏向於最常見的單詞。試想,算法主要依賴於單詞的數量,而在語言中,單詞的重要性實際上與出現頻率成反比。頻率較高的詞是更通用的詞,如the,is,an,它們不會顯著改變句子的含義。因此,重要的是適當地衡量這些詞,以反映它們對句子含義的影響。嵌入矩陣嵌入矩陣是表示詞彙表中每個單詞嵌入的一種方法。行表示單詞嵌入空間的維數,列表示詞彙表中出現的單詞。為了將樣本轉換為其嵌入形式,將獨熱編碼形式中的每個單詞乘以嵌入矩陣,從而得到樣本的詞嵌入形式。需要記住的一件事是,獨熱編碼僅指在詞彙表中單詞位置處具有值是1的n維向量,n是詞彙表的長度。這些獨熱編碼來自詞彙表,而不是觀測的結果。循環神經網絡(RNN)循環神經網絡就像它的名字一樣,是神經網絡非常重要的一種變體,被大量運用於自然語言處理。循環神經網絡的的標準輸入是一個詞而不是一個完整的樣本,這是概念上與標準神經網絡的不同之處。這給神經網絡提供了能夠處理不同長度句子的靈活性,而這是標準神經網絡無法做到的(由於它固定的結構)。它也提供了一個額外的在不同文本位置共享特徵學習的優勢,而這也是標準神經網絡無法做到的。循環神經網絡把一個句子的不同單詞在t時刻輸入並且利用t-1時刻的激活值,下面的圖詳細展示了循環神經網絡結構:
上述結構也被叫做多對多架構,也就是輸入的數量等於輸出的數量。這種結構在序列模型中是非常有用的。
除了上面提到的架構外,還有三種常用的RNN架構。
1.多對一的RNN:多對一的架構指的是使用多個輸入(Tx)來產生一個輸出(Ty)的RNN架構。適用這種架構的例子是分類任務。2.一對多的RNN:一對多架構指的是RNN基於單個輸入值生成一系列輸出值的情況。使用這種架構的一個主要示例是音樂生成任務,其中輸入是jounre或第一個音符。
3.多對多(Tx不等於Ty)架構:該架構指的是讀取許多輸入以產生許多輸出的地方,其中,輸入的長度不等於輸出的長度。使用這種架構的一個主要例子是機器翻譯任務。
Encoder(編碼器)指的是讀取要翻譯的句子的網絡一部分,Decoder(解碼器)是將句子翻譯成所需語言的網絡的一部分。RNN的局限性上述RNN架構的示例僅能捕獲語言的一個方向上的依賴關係。基本上,在自然語言處理的情況下,它假定後面的單詞對之前單詞的含義沒有影響。根據我們的語言經驗,我們知道這肯定是不對的。RNN也不能很好地捕捉長期的依賴關係,梯度消失的問題在RNN中再次出現。這兩種局限性導致了新型的RNN架構的產生,下面將對此進行討論。門控循環單元(GRU)它是對基本循環單元的一種修改,有助於捕獲長期的依賴關係,也有助於解決消失梯度問題。
GRU增加了一個額外的存儲單元,通常稱為更新門或重置門。除了通常的具有sigmoid函數和softmax輸出的神經單元外,它還包含一個額外的單元,tanh作為激活函數。使用tanh是因為它的輸出可以是正的也可以是負的,因此可以用於向上和向下伸縮。然後,該單元的輸出與激活輸入相結合,以更新內存單元的值。
因此,在每個步驟中,隱藏單元和存儲單元的值都會被更新。存儲單元中的值在決定傳遞給下一個單元的激活值時起作用。
詳細的解釋請參考:https://towardsdatascience.com/understanding-gru-networks-2ef37df6c9beLSTM在LSTM架構中,有一個更新門和一個忘記門,而不是像在GRU中那樣只有一個更新門。
這種架構為存儲單元提供了一個選項,可以保留t-1時刻的舊值,並將t時刻向其添加值。
關於LSTM的更詳細的解釋,請訪問:http://colah.github.io/posts/2015-08-explanation – lstms/
雙向RNN
在上述RNN架構中,僅考慮以前時間戳出現的影響。在NLP中,這意味著它只考慮了當前單詞出現之前的單詞的影響。但在語言結構中,情況並非如此,因此靠雙向RNN來拯救。
雙向RNN由前向和後向循環神經網絡組成,並結合兩個網絡在任意給定時間t的結果進行最終預測,如圖所示。
在這篇文章中,我試圖涵蓋自然語言處理領域中所有流行的相關實踐和神經網絡架構。對於那些對深入了解神經網絡感興趣的人,我強烈建議你們去 Coursera 上 Andrew Ng 的課程。
想要查看相關文獻和參考內容?
點擊【從基礎到 RNN 和 LSTM,NLP 取得的進展都有哪些?】即可訪問~
via https://towardsdatascience.com/natural-language-processing-from-basics-to-using-rnn-and-lstm-ef6779e4ae66
你可能錯過了這些企業的秋招信息,新增B站、美團、攜程、網易等(持續更新中...)
自今天開始,AI研習社會定期搜集並推送各大名企校招崗位和內推信息,同時也會邀請求職成功者和企業人力專家分享求職經驗。另外,我們會在社區職薦版塊更新 AI 企業校招和社招信息,歡迎有志於在 AI 行業發展的應屆畢業生們來 AI 研習社投遞簡歷噢~
點擊連結可訪問查看過去一段時間企業校招信息:https://ai.yanxishe.com/page/blogDetail/14121
雷鋒網雷鋒網雷鋒網(公眾號:雷鋒網)
雷鋒網原創文章,未經授權禁止轉載。詳情見轉載須知。