當前位置:
首頁 > 科技 > 一文掌握:NLP中如何實現對文本數據的編碼?

一文掌握:NLP中如何實現對文本數據的編碼?

全文共2535字,預計閱讀時長5分鐘

在自然語言處理中,找到一種能在系統中將數據表示出來的方法(如將一系列文本在文本分類器中表示出來)是至關重要的。如何對這些分類數據進行編碼以使其符合統計分類器的要求?答案是輸入辭彙向量。本文介紹了兩種文本數據的編碼途徑:稀疏向量(又稱「one-hot 編碼」)和密集向量。

自然語言處理中,自然語言處理的數據表示是一個非常重要的方面。和其他的機器學習任務一樣,自然語言處理也需要找到能將我們的數據(一系列文本)在系統中(例如文本分類器)表示出來的方法。正如Yoav Goldberg 所問,「我們怎樣對這些分類數據進行編碼以使其符合統計分類器的要求?」答案是輸入辭彙向量。

來源: Yandex Data School Natural Language Processing Course

首先,在探討「怎樣將詞語轉換成數字表示」這一問題之前,先想一想,在對數據進行編碼中,我們感興趣的是什麼?更準確來說,我們編碼的是什麼?從一系列原始文本或預處理文本中的辭彙特徵,諸如單詞、字母、詞性標註、字排列、詞序等等,到一系列向量,這些都是要編碼的內容。對文本數據的編碼有兩種實現途徑:稀疏向量(又稱「one-hot 編碼」)和密集向量。

one-hot編碼

在神經網路廣泛應用在自然語言處理NLP前,即在傳統的自然語言處理中,對文本的向量化是通過one-hot編碼來是實現的。需要注意的是,在一些實踐中,one-hot編碼仍然是一種有效的編碼法,再加上其融合了神經網路技術,所以其目前還未過時。在one-hot編碼中,每一個單詞或形符都對應著一個向量。

來源: Adrian Colyer

例如,可以將上圖編碼作為代表「The queen entered the room.」這一個句子向量表示的一小段。注意,在這裡,只有元素(element)「queen」被激活了(activated),其他的元素如「king」「man」等都沒有實現激活。若以上圖向量元素部分表示「The king was once a man, but is now a child」,它的one-hot向量表示會有所不同。對資料庫進行one-hot編碼處理的結果就是稀疏矩陣。想像一下,如果你擁有一個由兩萬個單片語成的語料庫,在這個語料庫中,對一篇可能由40個單片語成的短文檔進行one-hot編碼後得到的是一個有兩萬行的矩陣,其中每一行代表一個單詞。該矩陣非零元素最多40個,如果在這40個單詞中存在大量的非唯一的單詞,非零元素可能會更少。這樣一來,矩陣中就會存在很多零元素,這最終會需要佔據大量的內存以存儲這些稀疏表示(spare representations)。除了潛在的內存容量問題外,one-hot編碼的一個很大的缺陷在於缺乏意義表達。雖然我們可以用這種方法獲得特定文本中的單詞是否存在的信息,但是不能簡單地從這些單詞中確定任何意義。這個問題的部分原因是,通過使用one-hot編碼,我們就不知道詞與詞之間的位置關係或者詞序。這個順序在用文字表達意義上是最重要的,這在後文也會提到。另外,在one-hot編碼中單詞相似度也很難看出來,因為詞向量是統計正交的。以「dog」和「dogs」或者「car」和「auto」為例。這兩對片語無疑分別在不同方面存在相似性。在線性系統中進行one-hot編碼時,通過在預處理過程中使用傳統的自然語言處理工具,如詞幹提取和詞形還原,就可以顯示第一組詞語之間的相似性。然而,我們需要一種更可靠的的方法來發現第二組詞語間未顯示出來的相似性。下面對此進行說明。

經過one-hot編碼的詞向量的主要好處在於,它實現了二進位詞的共現(也稱「一組詞」),這使得一系列廣泛的自然語言處理任務得以執行,比如作為該領域最有用和最常見任務之一的文本分類。這種類型的詞向量對於線性機器學習演算法和神經網路很有用,儘管這兩者都主要與線性系統相關聯。One-hot編碼的變體中對線性系統有用且能幫助克服上面所提問題的是n-gram和TF-IDF表示法。儘管它們不同於one-hot編碼,但相似之處在於它們都是與嵌入完全不同的簡單向量表示,下面將對此進行介紹。

密集向量

在將特定的文本數據以一定方式表示出來,尤其是在考慮二進位詞共現的情況下,稀疏詞向量似乎是一種完全可行的方式。我們還可以使用相關的線性方法,比如N-grams和TF-IDF,來解決one-hot編碼的一些最嚴重和最明顯的缺點。但是,如果仍然採取這種方法,而不換另一種方法的話,要理解文本的核心意義以及形符之間的語義關係仍然很困難,而詞嵌入向量就是能夠解決以上難題的一種方法。

在「傳統」的自然語言處理中,可以使用人為操作或習得的詞性標註(POS)等方法來確定文本中的不同形符來分別執行何種功能(名詞、動詞、副詞、不定冠詞等)。這是人為特徵任務的一種形式,這些特徵可以用於自然語言處理函數的各種方法中。例如,命名實體識別,如果我們在一段文本中尋找命名實體,那麼合理的做法就是首先只看名詞(或名詞短語),因為命名實體幾乎是名詞的一個專屬子集。

但是,如果我們將特徵表示為密集向量,也就是說,將核心特徵嵌入到為d維的嵌入空間中。我們可以將一個用來表示20000個單詞的維度壓縮到50或100個維度。在這種方法中,每個特性不再有自己的維度,而是分別映射到一個向量上。

如前所述,結果表明意義並不是與二進位詞的共現相關,而是與詞的位置關係相關。可以這樣想:如果說「foo」和「bar」這兩個詞同時出現在一個句子中,那麼判斷其意思是很困難的。然而,如果說「The foo barked, which startled the young bar」,判斷這些詞的意思就更容易了。單詞的位置及其與周圍單詞的關係是非常重要的。

「通過一個詞所搭配的單詞,它的意義就清晰了」---John Rupert Firth

來源:Adrian Colyer

那麼,這些特徵到底是什麼呢?單詞間關係的重要層面由神經網路來決定。雖然人類對這些特徵的解釋並不可能是完全準確的,但是上圖展示了其基礎過程,這與著名的「國王-男人+女人=女王」的例子有關。

這些特徵是如何習得的呢? 答案是使用一個二層(淺層)神經網路,而詞嵌入通常與自然語言處理的「深度學習」組合在一起,但是構建詞嵌入的過程並沒有用到深度學習,儘管學習權重(learned weights)通常用於深度學習任務的後續階段。

流行的原始word2vec詞嵌入法包括連續性詞袋(即CBOW模型)和Skip-gram模型,這兩種模型都是在給定語境的條件下預測目標詞或者在給定詞的條件下預測語境(注意這裡的「語境」指的是文本中詞的滑動窗口(a sliding window of words in the text))。

我們並不關心模型的輸出層,因為輸出層在訓練後就會被丟棄,而嵌入層的權值將會被用於後續的自然語言處理的神經網路中。這種嵌入層類似於one-hot編碼方法中構建的詞向量。

留言 點贊 發個朋友圈

我們一起分享AI學習與發展的乾貨

編譯組: 狄思雲、胡婷

相關鏈接:

https://www.kdnuggets.com/2018/11/data-representation-natural-language-processing.html

如需轉載,請後台留言,遵守轉載規範


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 讀芯術 的精彩文章:

今日芯聲:僱主忽視矽谷員工的強烈抗議,堅持服務軍方,為何?
今日芯聲:帶走了一代人青春的金庸,留下了這樣的遺願

TAG:讀芯術 |