IMDB網(wǎng)絡(luò)電影數(shù)據(jù)集與自然語言處理(一)

步驟:

影評文字——數(shù)據(jù)預(yù)處理——features(特征)——深度學(xué)習(xí)模型——預(yù)測——預(yù)測結(jié)果。

步驟1:讀取IMDB數(shù)據(jù)集;

步驟2:建立token字典;

步驟3:使用token字典將“影評文字”轉(zhuǎn)化為“數(shù)字列表”

步驟4:截長補短讓所有“數(shù)字列表”長度都是100

步驟5:Embedding層將“數(shù)字列表”轉(zhuǎn)化為"向量列表";

步驟6:將向量列表送入深度學(xué)習(xí)模型進(jìn)行訓(xùn)練


具體:

步驟1:讀取IMDB數(shù)據(jù)集;

下載數(shù)據(jù)集:網(wǎng)址:http://ai.stanford.edu/~amaas/data/sentiment

1.導(dǎo)入所需模塊

import urllib.request #導(dǎo)入urllib模塊,將用于下載文件

import os ?#導(dǎo)入os模塊,用于確定文件是否存在

import tarfile #用于解壓文件

2.下載數(shù)據(jù)集

url="http://ai.stanford.edu/~amaas/data/sentiment/aclImdb_v1.tar.gz" #設(shè)置下載地址

filepath="data/aclImdb_v1.tar.gz" #設(shè)置存儲文件的路徑

#判斷文件不存在就會下載文件

if not os.path.isfile(filepath):?

? ? result=urllib.request.urlretrieve(url,filepath)

? ? print('downloaded:',result)

結(jié)果截圖:

3.解壓壓縮下載文件

if not os.path.exists("data/aclImdb"): #判斷解壓壓縮文件是否存在

? ? tfile = tarfile.open("data/aclImdb_v1.tar.gz", 'r:gz') #打開壓縮文件

? ? result=tfile.extractall('data/') #解壓文件到data目錄中



4. 讀取數(shù)據(jù)集

(1)導(dǎo)入所需模塊

from keras.datasets import imdb

from keras.preprocessing import sequence ?#導(dǎo)入sequence模塊,用于讓”數(shù)字列表“長度一致

from keras.preprocessing.text import Tokenizer ?#導(dǎo)入tokenizer模塊,用于建立字典

(2) 創(chuàng)建rm_tag函數(shù)刪除文字中的HTML標(biāo)簽

import re #導(dǎo)入Regular Expression 模塊

def rm_tags(text): #創(chuàng)建rm_tags函數(shù),輸入?yún)?shù)text文字

? ? re_tag = re.compile(r'<[^>]+>') #創(chuàng)建re_tag為正規(guī)表達(dá)式變量

? ? return re_tag.sub('', text) #將文本中符合正則表達(dá)式條件的字符替換成空字符

(3)創(chuàng)建read_files函數(shù)讀取IMDb文件目錄

【注:acImdb文件夾分為:train文件夾(12500正(pos),12500負(fù)(neg))和test集】

import os

def read

_files(filetype): #讀取訓(xùn)練數(shù)據(jù)時,filetype參數(shù)會傳入”train“;測試數(shù)據(jù)傳入test

? ? path = "data/aclImdb/"

? ? file_list=[] ?#創(chuàng)建文件列表

? ? positive_path=path + filetype+"/pos/" #設(shè)置正面評價的文件目錄為?positive_path

? ? for f in os.listdir(positive_path): #使用for循環(huán)將?positive_path目錄下所有文件加入file_list

? ? ? ? file_list+=[positive_path+f]

#負(fù)面評價

? ? negative_path=path + filetype+"/neg/" ?

? ? for f in os.listdir(negative_path):

? ? ? ? file_list+=[negative_path+f]

#顯示當(dāng)前讀取的filetype(test或train)目錄下的文件個數(shù)

? ? print('read',filetype, 'files:',len(file_list))

? ? all_labels = ([1] * 12500 + [0] * 12500)

? ? all_texts? = [] ?

? ? for fi in file_list: ? #fi讀取file_list所有文件

? ? ? ? with open(fi,encoding='utf8') as file_input: # 打開文件

? ? ? ? ? ? all_texts += [rm_tags(" ".join(file_input.readlines()))] ?# file_input.readlines()讀取文件;join連接文件內(nèi)容,rm_tags刪除tag,最后加入all_texts list

? ? return all_labels,all_texts

(4) 讀取INDb數(shù)據(jù)目錄

y_train,train_text=read_files("train")

y_test,test_text=read_files("test")

結(jié)果:訓(xùn)練集和測試集各25000項文字和25000項標(biāo)簽(1正0負(fù)),其中正:0-12499;負(fù):12500-24999

查看IMDB數(shù)據(jù)結(jié)果截圖:


步驟2:建立token字典

深度學(xué)習(xí)模型只能接受數(shù)字,所以我們將“影評文字”轉(zhuǎn)化為“數(shù)字列表”。

要如何轉(zhuǎn)化呢?當(dāng)我們把一種語言翻譯成另一種語言,必須要有字典。相同的,文字轉(zhuǎn)化為數(shù)字,也必須有字典。Keras提供了Tokenizer模塊,類似字典功能。

1.建立token

token = Tokenizer(num_words=2000) ?#建立一個有2000單詞的字典

token.fit_on_texts(train_text) #按單詞出現(xiàn)次數(shù)排序,排序前2000的單詞會列入詞典中

2.查看token讀了多少文章


3.查看token.word_index屬性


步驟3:使用token字典將“影評文字”轉(zhuǎn)化為“數(shù)字列表”

建立token字典后,就可以使用token.word_index字典將文字轉(zhuǎn)化為數(shù)字列表。

1.使用token.texts_to_sequences將文字轉(zhuǎn)換為數(shù)字

x_train_seq = token.texts_to_sequences(train_text)

x_test_seq? = token.texts_to_sequences(test_text)

2. 查看轉(zhuǎn)化為sequences之后的結(jié)果


步驟4:截長補短讓所有“數(shù)字列表”長度都是100

因為每一則影評文字的字?jǐn)?shù)都不固定,有些170字,有些80字,轉(zhuǎn)換成”數(shù)字列表“字?jǐn)?shù)也不固定。

而后續(xù)要將數(shù)字列表轉(zhuǎn)換為向量列表來學(xué)習(xí),所以長度必須固定。

方法:截長補短

1. 使用sequnences.pad_sequences方法截長補短

x_train = sequence.pad_sequences(x_train_seq, maxlen=100)

x_test? = sequence.pad_sequences(x_test_seq,? maxlen=100)

2.影評文字轉(zhuǎn)化為數(shù)字列表后,長度大于100截去

3.如果文章轉(zhuǎn)成數(shù)字不足100,pad_sequences處理后,前面會加上0




最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容