深度學習 - 認識IMDb數據集 - 正反兩面影評
網路電影資料庫(Internet Movie Database,簡稱IMDb),搜集了50000則電影評價,其評價極端的兩極化,不是非常正面就是非常負面。我們可以用此數據做DL練習,此為二分類的練習。from
keras.datasets import imdb
(train_data, train_labels), (test_data, test_labels) = imdb.load_data(num_words=10000)
此數據當然已經經過keras處理過,用於練習使用,其將電影評論文字檔擷取純文字後,再將所有文字丟進一個word_index() 的dict(),這邊我們只讀取重複10000次以內的字符
(num_words=10000)
我們可以看到train_data[0] 是一大堆數字組成,其實就是word_index 中的value值。
我們來嘗試將這些數字翻譯成文字吧!
前提:首先train_data我們已經知道是經過將文字轉成數字的資料型態處理。
目標:想知道處理之前的train_data是什麼文章內容?
思路:先理解train_data[0]怎麼來的?
貼上練習程式碼:
這邊貼上之前練習將文章轉成文字list的片段程式碼 (單字出現頻率統計練習)
練習將之前的文章轉成word_index中的value顯示
也可以使用下面方法:
輸出結果:
前提:首先train_data我們已經知道是經過將文字轉成數字的資料型態處理。
目標:想知道處理之前的train_data是什麼文章內容?
思路:先理解train_data[0]怎麼來的?
- 將所有文章的文字符建立一個dict(),每個文字會對應一個value,即word_index['word':value] 這樣的dict()。
- 影評文章 film_review[0] = ['word1','word2','word3'....'wordx'] 對應word_index的value抓出來建立一個list。
- 程式碼可能如下(自己推測):
- 這邊知道train_data怎麼來的之後,現在要做的就是將指定value找回對應key值,所以會需要一個reverse_word_index() 來做這件事情。
reverse_word_index = dict([(value, key) for (key, value) in word_index.items()])
- 最後,建立一個翻譯的list來存放decode的文字資料。
以第1篇影評文章為例: (若要輸入n篇文章,使用for迴圈 j到n film_review[j] )
train_data=[]
train_data.append([word_index.get('%s'%i,0) for i in film_review[0]])
其中,dict.get(key,defaut=none) 指定輸入key,返回對應value,若找無此key則返回none。 key 若為純文字,需要將文字格式化,我使用%s來達成。translate_film_review = ' '.join(
[reverse_word_index.get(i - 3, '?') for i in train_data[0]])
貼上練習程式碼:
from keras.datasets import imdb
(train_data, train_labels), (test_data, test_labels) = imdb.load_data(num_words=10000)
word_index = imdb.get_word_index()
reverse_word_index = dict([(value, key) for (key, value) in word_index.items()])
decoded_review = ' '.join([reverse_word_index.get(i - 3, '?') for i in train_data[0]])
translate_film_review = ' '.join(
[reverse_word_index.get(i - 3, '?') for i in train_data[0]])
這邊貼上之前練習將文章轉成文字list的片段程式碼 (單字出現頻率統計練習)
import re
fp = open("/Users/lido/Library/Preferences/PyCharmCE2018.3/scratches/sample.txt","r")
article = fp.read()
new_article = re.sub("[^a-zA-Z\s]","",article)
words = new_article.split()
word_counts={}
for word in words:
if word.lower() in word_counts:
word_counts[word.lower()] = word_counts[word.lower()] +1 else:
word_counts[word.lower()] = 1
key_list = list(word_counts.keys())
練習將之前的文章轉成word_index中的value顯示
news_review=[]
news_review.append([word_index.get('%s'%i,0) for i in key_list])
print(news_review)
也可以使用下面方法:
"""for i in key_list: a=word_index.get('%s'%i) print(a) news_review.append(a)"""
輸出結果:
沒有留言:
張貼留言