自然語言處理的第一步:演算法如何理解文字

作者 NVIDIA

本文將探討如何透過向量化、雜湊(hashing)、標記化(tokenization)和其他技術準備文字,以便能與機器學習及其他數值演算法相容。我們將會說明與示範流程。

自然語言處理(natural language processing,NLP)是將機器學習及其他技術應用至語言。但是,機器學習及其他技術通常是以稱為向量的數值陣列,代表資料集中的各種情況(有時候稱為觀察、實體、實例或列)。我們將所有陣列的集合稱為矩陣,而矩陣中的每一列是代表情況。矩陣中的每一行是代表特徵或屬性。

至目前為止,如果不熟悉數學語言,則此種語言看起來可能非常抽象。不過,在處理表格資料時,資料專業人士早已透過試算表程式和關係資料庫接觸此類型的資料結構。

畢竟,將列視為實例,將行視為特徵時,試算表即等同於矩陣。例如,假設某資料集包含過去和現在員工,則每一列(或實例)都會有代表該員工年齡、職位、薪資、資歷等資料的行(或特徵)。

術語

NLP 需要解決的第一個問題是將文字實例的集合轉換成矩陣形式,其中每一列都是文字實例的數值表示,即向量。但是為了開始探索 NLP,需要認識幾個有用的術語。讓我們進行以下介紹。

在 NLP 中,單一實例稱為文件語料庫是指實例的集合。根據面臨的問題而定,文件可能如同短語或名稱一樣簡單,或與整本書一樣複雜。

我們必須選擇如何將文件分解成較小的部分,此過程稱為將文件標記化(tokenization。因此,此過程會產生標記Token。標記是演算法可以理解的含義單位。在整個語料庫中看到之所有標記的集合稱為詞彙

常見的標記選擇是直接取得單字,於此情況下,文件表示為詞袋(bag of wordsBoW。具體而言,BoW 模型在單字層級掃描整個語料庫中的詞彙,表示詞彙是在語料庫中看到之所有單字的集合。然後,演算法會針對各個文件,計算語料庫中每一個單字出現的次數。

由於語料庫中的大多數單字不會出現在大多數文件中,因此在特定文件中,許多標記將會出現許多零計數。此為基本概念,但是根據這些計數形成向量時重要的實際考量,是確保每一列的行以相同方式對齊。換言之,以任兩列而言,根據任何索引 k,每列的第 k 個元素必須代表同一個單字。

範例

在詳細說明如何確保列對齊之前,我們先快速看一下範例。舉一個簡短的範例,我們將會發現確保此對齊對人類而言很容易。不過,我們最終仍必須考量演算法的雜湊部分,才能徹底實作。我將會在探討較簡單的部分之後說明此點。

範例來自於 SciKit-learn 文件,假設我們的語料庫是下列四個句子:

This is the first document.

This document is the second document.

And this is the third one.

Is this the first document?

預先處理

讓我們套用一些預先處理,以刪除大小寫和標點符號:

this is the first document

this document is the second document

and this is the third one

is this the first document

標記化

我們透過將每一個單字指定為標記,使經過預處理的文件標記化:

this」、「is」、「the」、「first」、「document

this」、「document」、「is」、「the」、「second」、「document

and」、「this」、「is」、「the」、「third」、「one

is」、「this」、「the」、「first」、「document

取得詞彙

掃描語料庫及取得每一個唯一的單字,即可形成詞彙:

this」、「is」、「the」、「first」、「document」、「second」、「and」、「third」、「one

向量化

我們計算每一個文件中每一個單字出現的次數。

this1is1the1first1document1second0and0third0one0

this1is1the1first0document2second1and0third0one0

this1is1the1first0document0second0and1third1one1

this1is1the1first1document1second0and0third0one 0

我們將這些整理成表格。

This is the first document second and third one
1 1 1 1 1 0 0 0 0
1 1 1 0 2 1 0 0 0
1 1 1 0 0 0 1 1 1
1 1 1 1 1 0 0 0 0
表 1:表格依據出現的順序,呈現語料庫中每一個單字的標頭。行表示特定單字出現在每個文件中的次數。列是針對每一個文件表示語料庫中每一個單字的計數。

如果忽略標頭,則是我們正在尋找的矩陣。

雜湊

值得注意的是,置換此矩陣及任何其他設計矩陣(將實例表示為列,特徵表示為行的矩陣)的列,不會改變其含義。行置換也是如此。依據將標記對映至行索引的方式,我們將可獲得不同的行排序,但是在表示中無有意義的變更。

這種將標記對映至索引,使每一個標記分別對映至不同索引的過程稱為雜湊。具體實作稱為雜湊或雜湊函式。

以詞彙為基礎的雜湊

我們在手動進行向量化時,隱含了建立雜湊函式。假設 0 索引系統,我們將第一個索引 0 分配給未見過的第一個單字。之後,遞增索引及重複此過程。雜湊函式會將「this」對映至索引為 0 的行,「is」對映至索引為 1 的行,「the」對映至索引為 3 的行。以詞彙為基礎的雜湊函式具有某些優點和缺點。

以詞彙為基礎之雜湊的優點

使用詞彙做為雜湊函式,讓我們可以反轉雜湊。表示根據特徵或行的索引,可以確定對應的標記。結果是在訓練模型後,即能看到特定標記(如單字、短語、字元、字首、字尾或其他單字部分)對模型及其預測的助益。因此,我們可以藉由檢視模型如何使用標記進行預測,解讀、解釋、問題排除或微調模型。我們也可以檢查重要標記,以判斷將其納入是否會為模型帶來不當的偏差。

讓我們探討某些機器學習模型產生的成品。例如,如果使用邏輯迴歸模型,則可以將與每一個特徵有關的係數,解讀為其對模型預測的影響。隨機森林模型產生特徵重要性,讓我們知道隨機森林中之決策樹使用每一個特徵做出決定的頻率。同樣地,簡單貝氏模型會產生指定類別之特徵非零的機率。

以詞彙為基礎之向量化的優點,在於瞭解每一個特徵代表哪一個標記。所以,我們可以透過邏輯迴歸模型,知道每一個標記對預測的影響程度。我們可以透過隨機森林模型,獲得與每一個標記有關的特徵重要性,知道隨機森林中之決策樹使用每個標記做出決定的頻率。我們可以透過簡單貝氏模型,知道某一個標記出現在各類別文件中的機率。

如果發現看似不相關或有不當偏差的標記疑似會影響預測時,可以將其從詞彙中刪除。如果發現可以忽略某些標記對預測的影響時,即可將其從詞彙中刪除,以取得更小、更有效率與更簡潔的模型。

以詞彙為基礎之雜湊的缺點

以詞彙為基礎的雜湊具有某些缺點,例如在訓練和預測中使用的記憶體量相對較大,以及在分散式訓練中造成的瓶頸。

以詞彙為基礎之雜湊的缺點之一為演算法必須儲存詞彙。在大型語料庫方面,文件變多通常會導致單字變多,進而導致標記變多。較長的文件也會造成詞彙量增加。

在單一執行緒上可以編寫演算法,以建立詞彙以及在單一行程中對標記進行雜湊。但是,無法有效地將進行單一行程的演算法平行化,因為每一個執行緒都必須等待其他執行緒檢查是否已將單字加入詞彙(儲存在共同記憶體中)。如果未將詞彙儲存在共同記憶體中,則每一個執行緒的詞彙將會導致不同的雜湊,且無法將它們整理成正確對齊的單一矩陣。

將向量化演算法平行化的最佳方式是在第一個行程中形成詞彙,然後將詞彙表放入共用記憶體中,最後平行雜湊。但是,此方法未充分利用平行化的好處。此外,如前所述,詞彙量會快速變大,尤其是包含大型文件的大型語料庫。

數學雜湊

幸運的是,存有另一種針對標記進行雜湊的方式:使用非密碼編譯數學雜湊函式對每一個實例進行雜湊。此類型之雜湊函式是使用算術、模組化算術與代數的組合,將物件(以位元表示)對映至已知範圍的整數或位元。因為範圍為已知,所以由最大值決定矩陣中有多少行。通常範圍很大,但是對大多數的列而言,大多數的行將為 0。因此,透過稀疏表示,將會最小化儲存矩陣需要的記憶體,且演算法可以有效率地處理以稀疏矩陣為基礎的運算。

此外,由於沒有詞彙,使用數學雜湊函式進行向量化無須任何詞彙儲存負擔。沒有詞彙即表示對平行化無限制,因此可以在任何數量的處理序之間劃分語料庫,允許各部分獨立向量化。當每一個處理序皆將其分擔的語料庫向量化時,即可堆疊產生的矩陣,以形成最終矩陣。此種使用數學雜湊函式實現的平行化可以消除瓶頸,大幅加快訓練工作流程的速度。

雖然使用數學雜湊函式可以縮短產生特徵向量需要的時間,其代價是失去可解讀性和可解釋性。由於在使用雜湊函式時,無法有效率地從特徵的索引對映回對應的標記,而無法確定哪一個標記對應哪一個特徵。所以我們會失去這些資訊,進而失去可解讀性和可解釋性。

結論

本文說明電腦將文字轉換成向量的基本演算法。我們已經解開謎團,瞭解如何將需要之數值輸入的演算法與文字輸入結合。

文字資料集通常非常大,所以必須注意速度。因此,我們探討了一些可以平行執行向量化的改進。同時探討了可解讀性、速度與記憶體用量之間的一些取捨。

我們藉由將機器學習應用至這些向量上,以開拓 NLP 自然語言處理領域。此外,向量化讓我們可以將相似性指標應用於文字中,以支援全文搜尋和經過改進的模糊比對應用。

歡迎參加 NVIDIA 深度學習機構(DLI)由講師指導的實作訓練課程,由專家手把手傳授如何使用基本工具和技術,建構以 Transformer 為基礎的自然語言處理模型,以執行文字分類任務,例如文件分類。獲得 DLI 認證證書,以證明實作與開發能力,並加快職涯成長。查看此 NLP 課程資訊,或為您的組織申請實作坊