文章目錄
- 一、說明
- 二、自然語言處理發展史
- 2.1 最早的自然語言處理簡介
- 2.2 歷史
- 2.3 NLP 的早期工作
- 三、NLP的現代方法
- 3.1 單詞編碼
- 3.2 循環神經網絡
- 3.3 強化學習
- 3.4 深度學習
- 四、更進一步的方法
一、說明
對于初學者來說,自然語言處理的發展歷史非常有必要了解,通過梳理歷史發展,我們可以清楚技術脈絡,從而有助于我們對于這門技術的整體有宏觀認知。本文就是要梳理該技術的發展過程,呈現給初學者。
二、自然語言處理發展史
2.1 最早的自然語言處理簡介
1954 年,IBM 演示了使用 IBM 701 大型機上的機器翻譯將俄語句子翻譯成英語的能力。雖然以今天的標準來看這很簡單,但這次演示證明了語言翻譯的巨大優勢。在本文中,我們將研究自然語言處理(NLP) 以及它如何幫助我們更自然地與計算機交談。
由于各種原因,NLP 是機器學習最重要的子領域之一。自然語言是用戶和機器之間最自然的界面。在理想情況下,這涉及語音識別和語音生成。甚至艾倫·圖靈也在他的“智能”文章中認識到了這一點,他在文章中將“圖靈測試”定義為一種測試機器通過自然語言對話表現出智能行為的能力的方法。
NLP 不是一個單一的實體,而是一個研究領域的范圍。圖 1 展示了語音助手,這是當今 NLP 的常見產品。NLP 研究領域在語音助手應用程序的基本塊上下文中顯示。
除了語音助手技術之外,NLP 的主要優勢之一是世界上存在大量非結構化文本數據,這些數據是自然語言處理和理解的驅動力。如果機器能夠處理、組織和理解這些文本(主要為人類使用而生成),我們可以為未來的機器學習應用解鎖大量有用的應用程序,并釋放出大量可以投入使用的知識。例如,維基百科包含大量知識,這些知識以多種方式鏈接在一起,以說明主題之間的關系。維基百科本身就是一個可以應用 NLP 的非結構化數據寶貴來源。
現在讓我們探索一下 NLP 的歷史和方法。
2.2 歷史
NLP 與 AI 一樣,有著跌宕起伏的歷史。IBM 在 1954 年為喬治敦大學演示所做的早期工作強調了機器翻譯的巨大優勢(將 60 多個俄語句子翻譯成英語)。這種早期方法使用六條語法規則來編寫 250 個單詞的詞典,并導致對機器翻譯進行大量投資,但基于規則的方法無法擴展到生產系統。
MIT 的 SHRDLU(以英文字母的頻率順序命名)于 20 世紀 60 年代末在 LISP 中開發,使用自然語言讓用戶操縱和查詢積木世界的狀態。積木世界是一個充滿不同積木的虛擬世界,用戶可以使用“拿起一個大紅色積木”等命令來操縱它。可以堆疊和查詢對象以了解世界的狀態(“紅色金字塔的右邊有什么東西嗎?”)。當時,這個演示被認為非常成功,但無法擴展到更復雜和模糊的環境。
在 20 世紀 70 年代和 80 年代初期,開發了許多聊天機器人式的應用程序,這些應用程序可以就有限的話題進行交談。這些是現在所謂的對話式人工智能的前身,在許多領域得到了廣泛而成功的應用。其他應用程序(如 Lehnert 的 Plot Units)實現了敘事摘要。這允許用“情節單元”總結一個簡單的故事,例如動機、成功、喜憂參半和其他敘事構建塊。
20 世紀 80 年代末,NLP 系統研究從基于規則的方法轉向統計模型。隨著互聯網的出現,大量文本信息變得可供機器訪問,NLP 變得更加重要。
2.3 NLP 的早期工作
20 世紀 60 年代,人們開始研究如何將意義賦予單詞序列。在一種稱為標記的過程中,句子可以被分解成詞性,以了解它們在句子中的關系。這些標記器依靠人為構建的基于規則的算法,用句子中的上下文來“標記”單詞(例如名詞、動詞、形容詞等)。但這種標記相當復雜,因為英語中有多達 150 種不同類型的語音標記。
使用 Python 的自然語言工具包 (NLTK),您可以看到詞性標注的產物。在此示例中,最終的元組集表示標記化的單詞及其標簽(使用 UPenn 標簽集)。此標簽集由 36 個標簽組成,例如 VBG(動詞、動名詞或現在分詞)、NN(單數名詞)、PRP(人稱代詞)等。
>>> quote = "Knowing yourself is the beginning of all wisdom."
>>> tokens = nltk.word_tokenize( quote )
>>> tags = nltk.pos_tag( tokens )
>>> tags
[('Knowing', 'VBG'), ('yourself', 'PRP'), ('is', 'VBZ'),('the', 'DT'), ('beginning', 'NN'), ('of', 'IN'), ('all', 'DT'),('wisdom', 'NN'), ('.', '.')]
>>>
標記單詞似乎并不復雜,但由于單詞的含義可能因使用地點而異,因此這個過程可能很復雜。詞性標記是解決其他問題的先決條件,并應用于各種 NLP 任務。
在存在歧義的情況下,基于嚴格規則的標記方法已讓位于統計方法。給定一段文本(或語料庫),可以計算一個單詞跟在另一個單詞后面的概率。在某些情況下,概率非常高,而在其他情況下,概率為零。龐大的單詞圖及其轉換概率是訓練機器找出哪些單詞更有可能跟在其他單詞后面的產物,并且可以以多種方式使用。例如,在語音識別應用程序中,此單詞圖可用于識別被噪音弄亂的單詞(基于該單詞之前的單詞序列的概率)。這也可以用于自動更正應用程序(為拼寫錯誤的單詞推薦一個單詞)。這種技術通常使用隱馬爾可夫模型 (HMM) 來解決。
HMM 的用處在于,人類不需要構建此圖;機器可以根據有效文本語料庫構建它。此外,它可以根據單詞元組(一個單詞跟在另一個單詞后面的概率,稱為二元組)或基于 n-gram(其中 n=3,一個單詞在序列中跟在另外兩個單詞后面的概率)構建。HMM 不僅應用于 NLP,還應用于各種其他領域(例如蛋白質或 DNA 測序)。
以下示例說明了在 NLTK 中如何從簡單句子構造二元詞組:
>>> sentence = "the man we saw saw a saw"
>>> tokens = nltk.word_tokenize( sentence )
>>> list(nltk.bigrams( tokens ) )
[('the', 'man'), ('man', 'we'), ('we', 'saw'), ('saw', 'saw'),('saw', 'a'), ('a', 'saw')]
>>>
讓我們探索一些 NLP 任務的現代方法。
三、NLP的現代方法
現代 NLP 方法主要側重于神經網絡架構。由于神經網絡架構依賴于數值處理,因此需要編碼來處理單詞。兩種常見方法是獨熱編碼和詞向量。
3.1 單詞編碼
獨熱編碼將單詞轉換為獨特的向量,然后可以由神經網絡進行數字處理。考慮上一個二元組示例中的單詞。我們創建獨熱向量,其維度與要表示的單詞數量相同,并在該向量中分配一個位來表示每個單詞。這將創建一個獨特的映射,可用作神經網絡的輸入(向量中的每個位作為神經元的輸入)(參見圖 2)。這種編碼比簡單地將單詞編碼為數字(標簽編碼)更有利,因為網絡可以更有效地使用獨熱向量進行訓練。
另一種編碼是詞向量,它將單詞表示為高維向量,其中向量的單位是實數。但不是為每個單位分配一個單詞(如獨熱編碼),而是每個單位代表單詞的類別(例如單數與復數或名詞與動詞),并且可以有 100-1,000 個單位寬(維數)。這種編碼的有趣之處在于單詞現在具有數字相關性,并且編碼可以對詞向量應用數學運算(例如加、減或取反)。
3.2 循環神經網絡
循環神經網絡 (RNN) 于 20 世紀 80 年代發展起來,在 NLP 中占據著獨特的地位。顧名思義,與典型的前饋神經網絡相比,RNN 在時間域中運行。RNN 隨時間展開并分階段運行,其中先前的輸出為后續階段的輸入提供信息(請參閱圖 3 中的展開網絡示例)。這種類型的架構非常適用于 NLP,因為網絡不僅考慮單詞(或其編碼),還考慮單詞出現的上下文(后面的內容、前面的內容)。在這個設計好的網絡示例中,輸入神經元接收單詞編碼,輸出通過網絡前饋到輸出節點(目的是輸出用于語言翻譯的單詞編碼)。在實踐中,每個單詞編碼一次只接收一個并傳播。在下一個時間步驟中,下一個單詞編碼被接收(輸出僅在最后一個單詞被接收后發生)。
傳統 RNN 通過反向傳播的一種變體(稱為時間反向傳播 (BPTT))進行訓練。RNN 的一種流行變體是長短期記憶單元 (LSTM),它具有獨特的架構和遺忘信息的能力。
3.3 強化學習
強化學習側重于在環境中選擇行動以最大化某些累積獎勵(這種獎勵不是立即可理解的,而是通過多次行動習得的)。行動的選擇基于一種策略,該策略定義給定行動是應該探索新狀態(可以進行學習的未知領域)還是舊狀態(基于過去的經驗)。
在 NLP 和機器翻譯的背景下,觀察是呈現的單詞序列。狀態表示部分翻譯,而動作表示是否可以提供翻譯或是否需要更多信息(更多觀察或單詞)。隨著進一步的觀察,狀態可能會確定有足夠的信息并呈現翻譯。這種方法的關鍵是翻譯是逐步完成的,強化學習可以確定何時進行翻譯或何時等待更多信息(在主動詞出現在句子末尾的語言中很有用)。
強化學習也被用作實現基于文本摘要的 RNN 的訓練算法。
3.4 深度學習
深度學習/深度神經網絡已成功應用于各種問題。您會發現深度學習是問答系統、文檔摘要、圖像標題生成、文本分類和建模等諸多領域的核心。請注意,這些案例代表了自然語言理解和自然語言生成。
深度學習是指具有多層(深度部分)的神經網絡,它將特征作為輸入并從這些數據中提取更高級的特征。深度學習網絡能夠學習表示的層次結構和輸入的不同抽象級別。深度學習網絡可以使用監督學習或無監督學習,也可以形成其他方法的混合體(例如將循環神經網絡與深度學習網絡結合起來)。
最常見的深度學習網絡方法是卷積神經網絡 (CNN),它主要用于圖像處理應用(例如對圖像內容進行分類)。圖 5 展示了一個用于情緒分析的簡單 CNN。它由一個單詞編碼輸入層(來自標記化輸入)組成,然后將其饋送到卷積層。卷積層將輸入分割成許多輸入“窗口”以生成特征圖。這些特征圖通過最大運算進行池化,從而降低輸出的維度并提供輸入的最終表示。這被饋送到提供分類(例如正面、中性、負面)的最終神經網絡中。
雖然 CNN 在圖像和語言領域已被證明是有效的,但其他類型的網絡也可以使用。長短期記憶是一種新型的 RNN。LSTM 細胞比典型的神經元更復雜,因為它們包括狀態和許多內部門,可用于接受輸入、輸出數據或忘記內部狀態信息。LSTM 通常用于自然語言應用。LSTM 最有趣的用途之一是與 CNN 結合使用,其中 CNN 提供處理圖像的能力,而 LSTM 經過訓練可生成輸入圖像內容的文本句子。
四、更進一步的方法
使用 NLP 的應用程序越來越多,這證明了 NLP 的重要性。NLP 為計算機和在線提供的大量非結構化數據提供了最自然的界面。2011 年,IBM 展示了 Watson?,它與 Jeopardy 的兩位最偉大的冠軍展開較量,并使用自然語言界面擊敗了他們。Watson 還使用 2011 版維基百科作為其知識來源 - 這是語言處理和理解道路上的一個重要里程碑,也是未來發展的指標。您也可以在此處了解有關NLP 的更多信息。