自然語言處理初學者指南

文章目錄

  • 一、說明
  • 二、自然語言處理發展史
    • 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 的更多信息。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/72120.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/72120.shtml
英文地址,請注明出處:http://en.pswp.cn/web/72120.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

unittest vs pytest區別

unittest vs pytest 對比 ?unittest 像“手動擋汽車”:操作步驟多,規則嚴格,適合老司機。?pytest 像“自動擋汽車”:開起來輕松,功能強大,適合新手和高效開發。 區別點?unittest?(你學過的&…

CT117E-M4 CubeMX與Keil5 MDK-ARM基礎配置

目錄 1.CubeMX構建項目 2.芯片時鐘配置 2.1 芯片引腳配置 2.2 時鐘樹配置 3.調試接口配置 4.項目管理器Project Manager配置 4.1 project 4.2 Code Generator 5. 生成代碼 6.MDK_ARM配置 6.1 編譯器選擇 ?6.2 調試器配置 7. 創建本地代碼文件夾 8. #include 路徑…

MySQL中有哪幾種鎖?

大家好,我是鋒哥。今天分享關于【MySQL中有哪幾種鎖?】面試題。希望對大家有幫助; MySQL中有哪幾種鎖? 1000道 互聯網大廠Java工程師 精選面試題-Java資源分享網 在MySQL中,鎖是用來控制并發訪問的機制,確…

MongoDB 和 Elasticsearch的區別、優缺點對比,以及選型建議

MongoDB 和 Elasticsearch 在存儲和搜索方面各有特點,適用于不同的場景。以下是它們的區別、優缺點對比,以及選型建議。 1. 概述 MongoDB:分布式 NoSQL 文檔數據庫,基于 BSON(類似 JSON)的文檔存儲&#x…

55.HarmonyOS NEXT 登錄模塊開發教程(九):部署與發布

溫馨提示:本篇博客的詳細代碼已發布到 git : https://gitcode.com/nutpi/HarmonyosNext 可以下載運行哦! HarmonyOS NEXT 登錄模塊開發教程(九):部署與發布 效果預覽 1. 引言 在前八篇教程中,我們介紹了H…

vue3實現跨頁面緩存

避免頻繁向后端發送請求,vue3中,可以用緩存機制,為了實現跨頁面緩存,可以把緩存放到localsotrage里面 關鍵代碼: const globalCache JSON.parse(localStorage.getItem(globalCache)) || {}; 然后加一個forceRefresh關鍵字, const fetchData async (forceRefresh false) …

c++類和對象(下篇)上

今天又重新回到c的學習中~在前兩篇博客中,我簡單的學習了類的定義,實例化,以及類中的默認成員函數.下篇是類和對象的收尾篇,在這篇中我將補充一下中篇所講的構造函數以及介紹一些類和對象的新知識.下面讓我們開始學習吧. 再談構造函數 在之前我們實現構造函數時,初始化成員變量…

深度學習 bert流程

Token IDs 在自然語言處理任務中,特別是使用預訓練模型如BERT時,文本首先通過一個分詞器(例如 BertTokenizer)轉換為一系列的token IDs。這些ID是每個詞或子詞單元在詞匯表(包含漢字、英文單詞、標點符號)…

PPT內視頻播放無法播放的原因及解決辦法

PPT內視頻無法播放,通常是視頻編解碼的問題。目前我遇到的常見的視頻編碼格式有H.264,H.265,VP9,AV1這4種。H.264編解碼的視頻,Windows原生系統可以直接播放,其他的視頻編碼格式需要安裝對應的視頻編解碼插…

星越L_行李艙空間拓展講解

目錄 1.儲物槽 2.底板蓋儲物空間 3.掛鉤 3.左側照明燈 4.第二排座椅放倒 1.儲物槽 使用鑰匙或者后備箱按鈕打開電動后備箱,左側儲物槽可儲藏物品。 2.底板蓋儲物空間 打開地板蓋,下方有儲物空間。并放置了隨車工具。 3.掛鉤 后備箱左右兩測各有一個掛鉤。

深度學習與大模型-矩陣

矩陣其實在我們的生活中也有很多應用,只是我們沒注意罷了。 1. 矩陣是什么? 簡單來說,矩陣就是一個長方形的數字表格。比如你有一個2行3列的矩陣,可以寫成這樣: 這個矩陣有2行3列,每個數字都有一個位置&a…

LuaJIT 學習(2)—— 使用 FFI 庫的幾個例子

文章目錄 介紹Motivating Example: Calling External C Functions例子:Lua 中調用 C 函數 Motivating Example: Using C Data StructuresAccessing Standard System FunctionsAccessing the zlib Compression LibraryDefining Metamethods for a C Type例子&#xf…

基于 FastText、dlib 和 CppJieba 的中文語義相似度計算實踐

在自然語言處理(NLP)領域,語義相似度計算是許多任務的核心,例如問答系統、文本檢索和推薦系統。然而,中文因缺乏顯式分詞和復雜的語義結構,實現高效的語義對比具有一定挑戰性。 本文將介紹如何結合 CppJieba(高效中文分詞工具)、FastText(詞向量模型)和 dlib(機器學…

HCIA-11.以太網鏈路聚合與交換機堆疊、集群

鏈路聚合背景 拓撲組網時為了高可用,需要網絡的冗余備份。但增加冗余容易后會出現環路,所以我們部署了STP協議來破除環路。 但是,根據實際業務的需要,為網絡不停的增加冗余是現實需要的一部分。 那么,為了讓網絡冗余…

Unity基于C#+UGUI解決方案,制作每日簽到系統(本地存儲簽到數據)

一、需求介紹:基于本地存儲系統制作一個每日簽到系統界面,相關簽到界面如下圖所示,點擊“簽到有禮”按鈕后就會跳轉到“每日登錄禮”這個界面,點擊“立即簽到”按鈕之后,按鈕就會置灰,而且按鈕的文字會變成“等待明日”。 二、制作界面顯示相關功能,需要在Unity中新建一…

AI本地部署

文檔加載(Document Loading):從多種不同來源加載文檔。LangChain提供了100多種不同的文檔加載器,包括PDF在內的非結構化的數據、SQL在內的結構化的數據,以及Python、Java之類的代碼等? ?文本分割(Splitti…

精準車型識別:視覺分析技術的力量

隨著智慧城市和智能交通系統的快速發展,車型識別檢測成為交通管理、安全監控和數據分析的關鍵技術之一。利用視覺分析的方式,我們可以高效、準確地檢測監控下的車輛類型、車牌信息及車流量,為城市交通管理提供有力支持。本文將從背景、技術實…

上下文微調(Contextual Fine-Tuning, CFT)提高大型語言模型(LLMs)在特定領域的學習和推理能力

大型語言模型(LLMs)在開放領域任務中表現出色,但在快速演變的專業領域(如醫學、金融)中面臨挑戰: 知識更新難題:傳統指令微調(Instruction Fine-Tuning, IFT)依賴顯式指令,難以適應動態知識。災難性遺忘:持續預訓練(Continued Pretraining, CPT)可能導致模型遺忘已…

在 LaTeX 中強制表格位于頁面頂部

在 LaTeX 中強制表格位于頁面頂部,可以通過以下 多種方法結合使用,按優先級推薦: 方法 1:使用 [!t] 位置限定符 原理:通過 [!t] 強制 LaTeX 優先將表格放置在頁面頂部(Top),! 表示忽…

kotlin與MVVM的結合使用總結(二)

在 MVVM(Model - View - ViewModel)架構中,M 層即 Model 層,主要負責數據的管理、存儲和獲取,它與業務邏輯和數據處理相關。在 Kotlin 中實現 MVVM 的 M 層,通常會涉及數據類的定義、數據的本地存儲與遠程獲…