用Keras構建神經網路
Keras是目前最受歡迎的深度學習庫之一,對人工智慧的商品化做出了巨大貢獻。它使用起來非常簡單,允許你用幾行代碼構建強大的神經網路。在這篇文章中,你將瞭解如何通過Keras構建神經網路,通過將使用者評論分為兩類:積極或消極評估來預測使用者評論的情感。這就是所謂的情感分析,我們會用著名的imdb評論資料集來做實驗。我們將構建的模型也可以應用於其他機器學習問題,只需進行一些更改。
請注意,本文我們不會深入Keras或深度學習的細節。本文旨在為你提供Keras神經網路的藍圖,並使你熟悉其實現。
Keras是什麼。
Keras是一個開源的python庫,可以讓你輕鬆構建神經網路。該庫能夠在TensorFlow,Microsoft Cognitive Toolkit,Theano和MXNet上運行。 Tensorflow和Theano是Python中用來構建深度學習演算法的最常用的數字平台,但它們可能相當複雜且難以使用。相比之下,Keras提供了一種簡單方便的方法來構建深度學習模型。它的創造者是FrançoisChollet,使人們能夠儘可能快速和簡單地構建神經網路。他專註於可擴充性,模組化,極簡主義和python的支援。Keras可以使用GPU和CPU,它同時支援Python 2和3。 Google Keras為深度學習和人工智慧的商品化做出了巨大貢獻,因為它已經商品化了強大的現代深度學習演算法,這些演算法以前不僅無法訪問,而且也不可用。
什麼是情感分析。
藉助情感分析,我們想要確定說話者或作家對於文檔,互動或事件的態度(例如情緒)。因此,這是一個自然語言處理問題,需要理解文本,以及潛在的意圖。情緒主要分為積極的,消極的和中立三類。因此,情感分析廣泛應用於諸如評論,調查,文檔等等。
imdb資料集
imdb情緒分類資料集由來自imdb使用者的50,000個電影評論組成,標記為positive(1)或negative(0)。評論是預先處理的,每一個都被編碼為一個整數形式的單詞索引序列。評論中的單詞按照它們在資料集中的總體頻率進行索引。例如,整數“2”編碼資料中第二個最頻繁的詞。 50,000個評論中,25000個作為訓練集,另25000個作為測試集。該資料集由斯坦福大學的研究人員建立並於2011年發布,他們的準確率達到了88.89%。
匯入庫並擷取資料
我們首先匯入所需的庫來預先處理資料。
%matplotlib inline
import matplotlib
import matplotlib.pyplot as plt
import numpy as np
from keras.utils import to_categorical
from keras import models
from keras import layers
我們繼續下載已經內建到Keras中的imdb資料集。由於我們不希望將資料集進行50/50的訓練、測試拆分,我們會在下載後立即將資料合併到資料和目標中,因此我們可以稍後再進行80/20拆分。
from keras.datasets import imdb
(training_data, training_targets), (testing_data, testing_targets) =
imdb.load_data(num_words=10000)
data = np.concatenate((training_data, testing_data), axis=0)
targets = np.concatenate((training_targets, testing_targets), axis=0)
探索資料
現在我們可以開始探索資料集了:
print("Categories:", np.unique(targets))
print("Number of unique words:", len(np.unique(np.hstack(data))))
Categories: [0 1]
Number of unique words: 9998
length = [len(i) for i in data]
print("Average Review length:", np.mean(length))
print("Standard Deviation:", round(np.std(length)))
Average Review length: 234.75892
Standard Deviation: 173.0
你可以在上面的輸出中看到資料集被標記為兩個類別,分別代表0或1,表示評論的情感。整個資料集包含9998個字,評論的平均長度為234個字,標準差為173個字。
現在我們來看一個訓練範例:
print("Label:", targets[0])
Label: 1
print(data[0])
[1, 14, 22, 16, 43, 530, 973, 1622, 1385, 65, 458, 4468, 66, 3941, 4,
173, 36, 256, 5, 25, 100, 43, 838, 112, 50, 670, 2, 9, 35, 480, 284,
5, 150, 4, 172, 112, 167, 2, 336, 385, 39, 4, 172, 4536, 1111, 17, 546,
38, 13, 447, 4, 192, 50, 16, 6, 147, 2025, 19, 14, 22, 4, 1920, 4613,
469, 4, 22, 71, 87, 12, 16, 43, 530, 38, 76, 15, 13, 1247, 4, 22, 17,
515, 17, 12, 16, 626, 18, 2, 5, 62,