使用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模塊解壓。解壓后的目錄為:

1.讀取imdb數據集

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

?

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

?

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

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

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

?

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

?

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

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

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

?

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

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

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

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

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

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

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

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

相關文章

powerpoint轉換器_如何將PowerPoint演示文稿轉換為主題演講

powerpoint轉換器If someone sends you a Microsoft PowerPoint presentation, but you’d rather use Apple’s presentation software, Keynote, you’re in luck! Apple’s done all the hard work for you. Here’s how to convert a PowerPoint presentation to Keynote. …

Android高仿大眾點評(帶服務端)

2019獨角獸企業重金招聘Python工程師標準>>> 實例講解了一個類似大眾點評的項目,項目包含服務端和android端源碼, 服務端為php代碼,如果沒有接觸過php, 文章中講解一鍵部署php的方法,讓您5分鐘將服務端搭建成功, 您也可以將php換成…

vista任務欄透明_在Windows XP中獲取Vista任務欄縮略圖預覽

vista任務欄透明It was only a matter of time before people started cloning Windows Vista features and adding them into Windows XP. One of my favorite Vista features is the thumbnails that popup when you mouse over the taskbar. And now I can use them in XP a…

Spring實戰Day2

創建對象之后如何體現對象之間的依賴? Spring容器負責創建Bean和依賴注入,那么Spring是怎么將Bean裝配在一起的呢? Spring提供了三種方式裝配機制 1.隱式的bean發現機制和自動裝配 圖一圖二,是兩個組件與Config類同包 圖三&#x…

Git的狀態轉換

近期公司用Git來管理代碼,用起來是要比svn爽一些。就是剛接觸的時候比較痛苦,特別是那些狀態(版本號的提交/合并/回退)。差點把我搞暈了。如今回過頭來總結一下,就清楚多了。 就本地倉庫來看。Git能夠分成5個不同的狀態。能夠通過$ git statu…

RN自定義組件封裝 - 播放類似PPT動畫

1. 前言 近日,被安排做一個開場動畫的任務。雖然RN提供了Animated來自定義動畫,但是本次動畫中的元素頗多,交互甚煩。。。在完成任務的同時,發現很多步驟其實是重復的,于是封裝了一個小組件記錄一下,分享給…

target存放的是編譯后的.class文件地方 默認情況下不會講非class文件放入進入 如果要使用非.class文件 需要通過增加配置方式自動加入文件...

target存放的是編譯后的.class文件地方 默認情況下不會講非class文件放入進入 如果要使用非.class文件 需要通過增加配置方式自動加入文件轉載于:https://www.cnblogs.com/classmethond/p/10520615.html

dropbox mac_如何在Windows或Mac上啟動時阻止Dropbox打開

dropbox macDropbox is a handy way to synchronize files across devices via the cloud. By default, Dropbox starts whenever you turn on your Windows PC or Mac, but sometimes you might not want it to. Here’s how to make sure it doesn’t launch when you startu…

spring cloud 總結

Finchley版本Spring Cloud Finchley; Spring Boot 2.0.3 史上最簡單的 SpringCloud 教程 | 第一篇: 服務的注冊與發現(Eureka)(Finchley版本) 所有的服務向這里注冊 史上最簡單的SpringCloud教程 | 第二篇: 服務消費者(restribbon&#xff09…

深入分析 ThreadLocal 內存泄漏問題

2019獨角獸企業重金招聘Python工程師標準>>> ThreadLocal 的作用是提供線程內的局部變量,這種變量在線程的生命周期內起作用,減少同一個線程內多個函數或者組件之間一些公共變量的傳遞的復雜度。但是如果濫用 ThreadLocal,就可能會…

如何將iPhone應用程序從應用程序庫移動到主屏幕

Justin Duino賈斯汀杜伊諾(Justin Duino)So as to not clutter up your home screen, newly-downloaded apps from the App Store can be sent directly to the App Library. But what if you later want to open the app without digging through the library? Here’s how t…

luogu4389 付公主的背包

題目鏈接:洛谷 題目大意:現在有$n$個物品,每種物品體積為$v_i$,對任意$s\in [1,m]$,求背包恰好裝$s$體積的方案數(完全背包問題)。 數據范圍:$n,m\leq 10^5$ 這道題,看到…

Git與Github的連接與使用

2019獨角獸企業重金招聘Python工程師標準>>> Git與Github的連接與使用 下面繼續,使用git 將項目上傳到GitHub上 首先要有GitHub賬號,這就不用說了,沒有的先注冊,地址:https://github.com 沒有倉庫的話,先新…

ttl電路制作pong游戲_如何玩Mozilla Firefox的隱藏的獨角獸Pong游戲

ttl電路制作pong游戲It seems like every browser has a hidden game these days. Chrome has a dinosaur game, Edge has surfing, and Firefox has . . . unicorn pong? Yep, you read that right—here’s how to play it. 這些天似乎每個瀏覽器都有一個隱藏的游戲。 Chrom…

nginx 注釋配置及詳解

前言 DMZ(Demilitarized Zone) 非軍事區,生產環境 WEB 服務部署的區域,公司的架構為一臺nginx 充當 load balance 服務,負載到兩臺 nginx 上面,反向代理至后臺服務,但是nginx 用的全是默認配置加上 proxy_pass 和 upst…

為什么無法運行谷歌play_什么是Google Play積分,以及如何使用它們?

為什么無法運行谷歌playThe Google Play Store is home to thousands of apps, games, movies, e-books, and more. You might find yourself making a lot of purchases there, so why not get rewarded for it? That’s where Google Play Points come in. Google Play商店提…

2019年春季學期第三周作業

本周作業 本周請大家完成上周挑戰作業的第一部分:給定一個整數數組(包含正負數),找到一個具有最大和的子數組,返回其最大的子數組的和。 例如:[1, -2, 3, 10, -4, 7, 2, -5]的最大子數組為[3, 10, -4, 7, 2] 1).實驗代…

Linux實驗二:linux 常用命令練習

ls命令 列出目錄內容 echo命令 顯示字符串 date命令 顯示或設置系統的日期與時間 cal命令 顯示日歷 who命令 列出登錄用戶信息 chown命令 chgrp命令 改變文件所屬的用戶組 chmod命令 改變文件訪問權限 find命令 在目錄中搜索文件 轉載于:https://www.cnblogs.com/nullno/p/87…

python數據類型之元組類型

#為何要有元組&#xff0c;存放多個值&#xff0c;元組不可變&#xff0c;更多的是用來做查詢 t(1,[1&#xff0c;2,3],a,(1,2)) #ttuple((1,[1,2,3],a,(1,2))) # print(type(t)) <class tuple># #元組可以作為字典的key # d{(1,2):egon} # print(d,type(d),d[(1,2)])# …

短語密碼_使用密碼短語以提高安全性

短語密碼Did you know that Windows supports using passwords of up to 127 characters? I don’t use passwords anymore, and I haven’t for years. I’ve switched to using password phrases instead. 您知道Windows支持使用最多127個字符的密碼嗎&#xff1f; 我不再使…