天天看點

使用Keras進行深度學習:(三)使用text-CNN處理自然語言(上)

歡迎大家關注我們的網站和系列教程: http://www.tensorflownews.com/ ,學習更多的機器學習、深度學習的知識!

上一篇文章中一直圍繞着CNN處理圖像資料進行講解,而CNN除了處理圖像資料之外,還适用于文本分類。CNN模型首次使用在文本分類,是Yoon Kim發表的“Convolutional Neural Networks for Sentence Classification”論文中。在講解text-CNN之前,先介紹自然語言處理和Keras對自然語言的預處理。

自然語言處理就是通過對文本進行分析,從文本中提取關鍵詞來讓計算機處理或了解自然語言,完成一些有用的應用,如:情感分析,問答系統等。比如在情感分析中,其本質就是根據已知的文字和情感符号(如評論等)推測這段文字是正面還是負面的。想象一下,如果我們能夠更加精确地進行情感分析,可以大大提升人們對于事物的了解效率。比如不少基金公司利用人們對于某家公司的看法态度來預測未來股票的漲跌。

接下來将使用imdb影評資料集簡單介紹Keras如何預處理文本資料。該資料集在

這裡

下載下傳。由于下載下傳得的是tar.gz壓縮檔案,可以使用python的tarfile子產品解壓。解壓後的目錄為:

使用Keras進行深度學習:(三)使用text-CNN處理自然語言(上)

1.讀取imdb資料集

我們通過以下函數分别讀取train和test中的所有影評

使用Keras進行深度學習:(三)使用text-CNN處理自然語言(上)

得到的影評如下圖,每條影評用雙引号包住。

使用Keras進行深度學習:(三)使用text-CNN處理自然語言(上)

2.使用Tokenizer将影評文字轉換成數字特征

在上文中已經得到了每條影評文字了,但是text-CNN的輸入應該是數字矩陣。可以使用Keras的Tokenizer子產品實作轉換。

簡單講解Tokenizer如何實作轉換。當我們建立了一個Tokenizer對象後,使用該對象的fit_on_texts()函數,可以将輸入的文本中的每個詞編号,編号是根據詞頻的,詞頻越大,編号越小。可能這時會有疑問:Tokenizer是如何判斷文本的一個詞呢?其實它是以空格去識别每個詞。因為英文的詞與詞之間是以空格分隔,是以我們可以直接将文本作為函數的參數,但是當我們進行中文文本時,我們需要使用分詞工具将詞與詞分開,并且詞間使用空格分開。具體實作如下:

使用Keras進行深度學習:(三)使用text-CNN處理自然語言(上)

使用word_index屬性可以看到每次詞對應的編碼,可以發現類似”the”、”a”等詞的詞頻很高,但是這些詞并不能表達文本的主題,我們稱之為停用詞。對文本預處理的過程中,我們希望能夠盡可能提取到更多關鍵詞去表達這句話或文本的中心思想,是以我們可以将這些停用詞去掉後再編碼。網上有許多歸納好的停用詞,大家可以下載下傳了之後,去除該文本中的停用詞。

使用Keras進行深度學習:(三)使用text-CNN處理自然語言(上)

對每個詞編碼之後,每句影評中的每個詞就可以用對應的編碼表示,即每條影評已經轉變成一個向量了:

使用Keras進行深度學習:(三)使用text-CNN處理自然語言(上)

3.讓每句數字影評長度相同

對每個詞編碼之後,每句影評中的每個詞就可以用對應的編碼表示,即每條影評已經轉變成一個向量。但是,由于影評的長度不唯一,需要将每條影評的長度設定一個固定值。

使用Keras進行深度學習:(三)使用text-CNN處理自然語言(上)

每個句子的長度都固定為150,如果長度大于150,則将超過的部分截掉;如果小于150,則在最前面用0填充。每個句子如下:

使用Keras進行深度學習:(三)使用text-CNN處理自然語言(上)

4.使用Embedding層将每個詞編碼轉換為詞向量

通過以上操作,已經将每個句子變成一個向量,但上文已經提及text-CNN的輸入是一個數字矩陣,即每個影評樣本應該是以一個矩陣,每一行代表一個詞,是以,需要将詞編碼轉換成詞向量。使用Keras的Embedding層可以實作轉換。Embedding層基于上文所得的詞編碼,對每個詞進行one-hot編碼,每個詞都會以一個vocabulary_size(如上文的2000)維的向量;然後通過神經網絡的訓練疊代更新得到一個合适的權重矩陣(具體實作過程可以參考skip-gram模型),行大小為vocabulary_size,列大小為詞向量的次元,将本來以one-hot編碼的詞向量映射到低維空間,得到低維詞向量。比如the的編号為1,則對應的詞向量為權重矩陣的第一行向量。如下圖,藍色線對應權重值組成了該詞的詞向量。需要聲明一點的是Embedding層是作為模型的第一層,在訓練模型的同時,得到該語料庫的詞向量。當然,也可以使用已經預訓練好的詞向量表示現有語料庫中的詞。

使用Keras進行深度學習:(三)使用text-CNN處理自然語言(上)

至此已經将文本資料預處理完畢,将每個影評樣本轉換為一個數字矩陣,矩陣的每一行表示一個詞向量。下圖梳理了處理文本資料的一般步驟。在此基礎上,可以針對相應資料集的特點對資料集進行特定的處理。比如:在該資料集中影評可能含有一些html标簽,我們可以使用正規表達式将這些标簽去除。

使用Keras進行深度學習:(三)使用text-CNN處理自然語言(上)

下一篇文章,我們将介紹text-CNN模型,利用該模型對imdb資料集進行情感分析,并在文末給出整個項目的完整代碼連結。歡迎持續關注!

本篇文章出自 http://www.tensorflownews.com ,對深度學習感興趣,熱愛Tensorflow的小夥伴,歡迎關注我們的網站!