<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                # 用深度學習預測電影評論的情感 > 原文: [https://machinelearningmastery.com/predict-sentiment-movie-reviews-using-deep-learning/](https://machinelearningmastery.com/predict-sentiment-movie-reviews-using-deep-learning/) [情感分析](https://en.wikipedia.org/wiki/Sentiment_analysis)是一種自然語言處理問題,其中理解文本并預測潛在意圖。 在這篇文章中,您將了解如何使用 Keras 深度學習庫在 Python 中預測電影評論的積極或消極情感。 閱讀這篇文章后你會知道: * 關于自然語言處理的 IMDB 情感分析問題以及如何在 Keras 中加載它。 * 如何在 Keras 中使用單詞嵌入來解決自然語言問題。 * 如何開發和評估 IMDB 問題的多層感知器模型。 * 如何為 IMDB 問題開發一維卷積神經網絡模型。 讓我們開始吧。 * **2016 年 10 月更新**:更新了 Keras 1.1.0 和 TensorFlow 0.10.0 的示例。 * **2017 年 3 月更新**:更新了 Keras 2.0.2,TensorFlow 1.0.1 和 Theano 0.9.0 的示例。 ![Predict Sentiment From Movie Reviews Using Deep Learning](https://img.kancloud.cn/c0/f6/c0f65841dedb2b421b09812878568699_470x456.png) 使用深度學習預測電影評論的情感 [SparkCBC](https://www.flickr.com/photos/25031050@N06/3407720762/) 的照片,保留一些權利。 ## IMDB 電影評論情感問題描述 數據集是[大型電影評論數據集](http://ai.stanford.edu/~amaas/data/sentiment/),通常稱為 IMDB 數據集。 大型電影評論數據集(通常稱為 IMDB 數據集)包含 25,000 個用于訓練的高極移動評論(好的或壞的)以及用于測試的相同數量。問題是確定給定的移動評論是否具有正面或負面情感。 這些數據由斯坦福大學的研究人員收集并用于 [2011 年論文](http://ai.stanford.edu/~amaas/papers/wvSent_acl2011.pdf) [PDF],其中 50/50 的數據用于訓練和測試。準確度達到 88.89%。 該數據還被用作 2014 年底至 2015 年初名為“[袋子爆米花袋](https://www.kaggle.com/c/word2vec-nlp-tutorial/data)”的 Kaggle 比賽的基礎。獲勝者達到 99%時,準確率達到 97%以上。 ## 使用 Keras 加載 IMDB 數據集 Keras 可以訪問內置的 [IMDB 數據集。](http://keras.io/datasets/) keras.datasets.imdb.load_data()允許您以可用于神經網絡和深度學習模型的格式加載數據集。 單詞已被整數替換,表示數據集中單詞的絕對流行度。因此,每個評論中的句子由一系列整數組成。 第一次調用 imdb.load_data()會將 IMDB 數據集下載到您的計算機并將其作為 32 兆字節文件存儲在?/ .keras / datasets / imdb.pkl 下的主目錄中。 有用的是,imdb.load_data()提供了額外的參數,包括要加載的頂部字的數量(其中具有較低整數的字在返回的數據中標記為零),要跳過的頂部字的數量(以避免“該”的)以及支持的最大評論期限。 讓我們加載數據集并計算它的一些屬性。我們將首先加載一些庫并將整個 IMDB 數據集作為訓練數據集加載。 ```py import numpy from keras.datasets import imdb from matplotlib import pyplot # load the dataset (X_train, y_train), (X_test, y_test) = imdb.load_data() X = numpy.concatenate((X_train, X_test), axis=0) y = numpy.concatenate((y_train, y_test), axis=0) ``` 接下來,我們可以顯示訓練數據集的形狀。 ```py # summarize size print("Training data: ") print(X.shape) print(y.shape) ``` 運行此代碼段,我們可以看到有 50,000 條記錄。 ```py Training data: (50000,) (50000,) ``` 我們還可以打印唯一的類值。 ```py # Summarize number of classes print("Classes: ") print(numpy.unique(y)) ``` 我們可以看到,這是一個二元分類問題,在評論中有好的和壞的情感。 ```py Classes: [0 1] ``` 接下來,我們可以了解數據集中唯一單詞的總數。 ```py # Summarize number of words print("Number of words: ") print(len(numpy.unique(numpy.hstack(X)))) ``` 有趣的是,我們可以看到整個數據集中只有不到 100,000 個單詞。 ```py Number of words: 88585 ``` 最后,我們可以了解平均審核長度。 ```py # Summarize review length print("Review length: ") result = [len(x) for x in X] print("Mean %.2f words (%f)" % (numpy.mean(result), numpy.std(result))) # plot review length pyplot.boxplot(result) pyplot.show() ``` 我們可以看到,平均評論不到 300 字,標準差超過 200 字。 ```py Review length: Mean 234.76 words (172.911495) ``` 我們可以看到一個指數分布的盒子和胡須圖,我們可以看到一個指數分布,我們可以覆蓋分布的質量,剪切長度為 400 到 500 字。 ![Review Length in Words for IMDB Dataset](https://img.kancloud.cn/68/2b/682b766cf0dee1b671aa1e440f8104b0_800x600.png) 查看 IMDB 數據集的單詞長度 ## Word 嵌入 自然語言處理領域的最新突破稱為[字嵌入](https://en.wikipedia.org/wiki/Word_embedding)。 這是一種在高維空間中將單詞編碼為實值向量的技術,其中單詞之間的意義相似性轉換為向量空間中的接近度。 離散詞被映射到連續數的向量。當使用神經網絡處理自然語言問題時這很有用,深度學習模型我們需要數字作為輸入。 Keras 提供了一種方便的方法,可以將單詞的正整數表示轉換為[嵌入層](http://keras.io/layers/embeddings/)的單詞嵌入。 該層采用定義映射的參數,包括也稱為詞匯量大小的預期詞的最大數量(例如,將被視為整數的最大整數值)。該層還允許您為每個單詞向量指定維度,稱為輸出維度。 我們想為 IMDB 數據集使用單詞嵌入表示。 假設我們只對數據集中前 5,000 個最常用的單詞感興趣。因此我們的詞匯量將為 5,000。我們可以選擇使用 32 維向量來表示每個單詞。最后,我們可以選擇將最大審核長度限制為 500 字,將評論截斷時間縮短,并將填充評論縮短為 0 值。 我們將加載 IMDB 數據集,如下所示: ```py imdb.load_data(nb_words=5000) ``` 然后,我們將使用 Keras 實用程序使用 sequence.pad_sequences()函數將數據集截斷或填充到每個觀察的長度 500。 ```py X_train = sequence.pad_sequences(X_train, maxlen=500) X_test = sequence.pad_sequences(X_test, maxlen=500) ``` 最后,稍后,我們模型的第一層將是使用 Embedding 類創建的單詞嵌入層,如下所示: ```py Embedding(5000, 32, input_length=500) ``` 對于給定的復習訓練或整數格式的測試模式,該第一層的輸出將是大小為 32×500 的矩陣。 既然我們知道如何在 Keras 中加載 IMDB 數據集以及如何為它使用單詞嵌入表示,那么讓我們開發并評估一些模型。 ## 用于 IMDB 數據集的簡單多層感知器模型 我們可以從開發一個具有單個隱藏層的簡單多層感知器模型開始。 嵌入表示這個詞是一個真正的創新,我們將通過一個相對簡單的神經網絡展示 2011 年被認為是世界級的結果。 讓我們首先導入此模型所需的類和函數,并將隨機數生成器初始化為常量值,以確保我們可以輕松地重現結果。 ```py # MLP for the IMDB problem import numpy from keras.datasets import imdb from keras.models import Sequential from keras.layers import Dense from keras.layers import Flatten from keras.layers.embeddings import Embedding from keras.preprocessing import sequence # fix random seed for reproducibility seed = 7 numpy.random.seed(seed) ``` 接下來,我們將加載 IMDB 數據集。我們將簡化數據集,正如單詞嵌入一節中所討論的那樣。只會加載前 5,000 個單詞。 我們還將使用 50%/ 50%的數據集拆分進行訓練和測試。這是一種很好的標準拆分方法。 ```py # load the dataset but only keep the top n words, zero the rest top_words = 5000 (X_train, y_train), (X_test, y_test) = imdb.load_data(num_words=top_words) ``` 我們將以 500 字的方式綁定評論,截斷更長的評論和零填充更短的評論。 ```py max_words = 500 X_train = sequence.pad_sequences(X_train, maxlen=max_words) X_test = sequence.pad_sequences(X_test, maxlen=max_words) ``` 現在我們可以創建我們的模型。我們將使用嵌入層作為輸入層,將詞匯表設置為 5,000,將字向量大小設置為 32 維,將 input_length 設置為 500.第一層的輸出將是 32×500 大小的矩陣,如上一節所述。 我們將嵌入層輸出展平為一維,然后使用一個 250 單位的密集隱藏層和整流器激活功能。輸出層有一個神經元,并將使用 sigmoid 激活輸出 0 和 1 的值作為預測。 該模型使用對數損失,并使用有效的 ADAM 優化程序進行優化。 ```py # create the model model = Sequential() model.add(Embedding(top_words, 32, input_length=max_words)) model.add(Flatten()) model.add(Dense(250, activation='relu')) model.add(Dense(1, activation='sigmoid')) model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy']) print(model.summary()) ``` 我們可以適應模型并在訓練時使用測試集作為驗證。這個模型很快就會過度使用,因此我們將使用很少的訓練時期,在這種情況下只需 2 個。 有很多數據,所以我們將使用 128 的批量大小。在訓練模型后,我們評估其在測試數據集上的準確性。 ```py # Fit the model model.fit(X_train, y_train, validation_data=(X_test, y_test), epochs=2, batch_size=128, verbose=2) # Final evaluation of the model scores = model.evaluate(X_test, y_test, verbose=0) print("Accuracy: %.2f%%" % (scores[1]*100)) ``` 運行此示例適合模型并總結估計的表現。我們可以看到,這個非常簡單的模型獲得了近 86.94%的分數,這是在原始論文的附近,只需很少的努力。 ```py Train on 25000 samples, validate on 25000 samples Epoch 1/2 39s - loss: 0.5160 - acc: 0.7040 - val_loss: 0.2982 - val_acc: 0.8716 Epoch 2/2 37s - loss: 0.1897 - acc: 0.9266 - val_loss: 0.3143 - val_acc: 0.8694 Accuracy: 86.94% ``` 我確信如果我們訓練這個網絡,我們可以做得更好,也許使用更大的嵌入并添加更多的隱藏層。讓我們嘗試不同的網絡類型。 ## IMDB 數據集的一維卷積神經網絡模型 設計卷積神經網絡以尊重圖像數據中的空間結構,同時對場景中學習對象的位置和方向具有魯棒性。 該相同原理可用于序列,例如電影評論中的一維單詞序列。使 CNN 模型對于學習識別圖像中的對象具有吸引力的相同屬性可以幫助學習單詞段落中的結構,即對于特征的特定位置的技術不變性。 Keras 分別支持 Conv1D 和 MaxPooling1D 類的一維卷積和池化。 再次,讓我們導入此示例所需的類和函數,并將隨機數生成器初始化為常量值,以便我們可以輕松地重現結果。 ```py # CNN for the IMDB problem import numpy from keras.datasets import imdb from keras.models import Sequential from keras.layers import Dense from keras.layers import Flatten from keras.layers.convolutional import Conv1D from keras.layers.convolutional import MaxPooling1D from keras.layers.embeddings import Embedding from keras.preprocessing import sequence # fix random seed for reproducibility seed = 7 numpy.random.seed(seed) ``` 我們也可以像以前一樣加載和準備我們的 IMDB 數據集。 ```py # load the dataset but only keep the top n words, zero the rest top_words = 5000 (X_train, y_train), (X_test, y_test) = imdb.load_data(num_words=top_words) # pad dataset to a maximum review length in words max_words = 500 X_train = sequence.pad_sequences(X_train, maxlen=max_words) X_test = sequence.pad_sequences(X_test, maxlen=max_words) ``` 我們現在可以定義我們的卷積神經網絡模型。這次,在嵌入輸入層之后,我們插入一個 Conv1D 層。該卷積層具有 32 個特征映射,并且一次讀取嵌入的單詞表示 3 個向量元素的嵌入單詞嵌入。 卷積層之后是 1D max pooling layer,其長度和步幅為 2,使卷積層的特征映射的大小減半。網絡的其余部分與上面的神經網絡相同。 ```py # create the model model = Sequential() model.add(Embedding(top_words, 32, input_length=max_words)) model.add(Conv1D(filters=32, kernel_size=3, padding='same', activation='relu')) model.add(MaxPooling1D(pool_size=2)) model.add(Flatten()) model.add(Dense(250, activation='relu')) model.add(Dense(1, activation='sigmoid')) model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy']) print(model.summary()) ``` 我們也像以前一樣適應網絡。 ```py # Fit the model model.fit(X_train, y_train, validation_data=(X_test, y_test), epochs=2, batch_size=128, verbose=2) # Final evaluation of the model scores = model.evaluate(X_test, y_test, verbose=0) print("Accuracy: %.2f%%" % (scores[1]*100)) ``` 運行該示例,我們首先會看到網絡結構的摘要。我們可以看到我們的卷積層保留了 32 維輸入的嵌入輸入層的維度,最多 500 個字。池化層通過將其減半來壓縮該表示。 運行該示例對上述神經網絡模型提供了一個小但令人歡迎的改進,準確率接近 87.79%。 ```py Train on 25000 samples, validate on 25000 samples Epoch 1/2 38s - loss: 0.4451 - acc: 0.7640 - val_loss: 0.3107 - val_acc: 0.8660 Epoch 2/2 39s - loss: 0.2373 - acc: 0.9064 - val_loss: 0.2909 - val_acc: 0.8779 Accuracy: 87.79% ``` 同樣,存在很多進一步優化的機會,例如使用更深和/或更大的卷積層。一個有趣的想法是將最大池化層設置為使用 500 的輸入長度。這會將每個要素圖壓縮為單個 32 長度向量,并可以提高表現。 ## 摘要 在這篇文章中,您發現了用于自然語言處理的 IMDB 情感分析數據集。 您學習了如何為情感分析開發深度學習模型,包括: * 如何加載和查看 Keras 中的 IMDB 數據集。 * 如何開發一個用于情感分析的大型神經網絡模型。 * 如何開發一種用于情感分析的一維卷積神經網絡模型。 您對情感分析或此帖有任何疑問嗎?在評論中提出您的問題,我會盡力回答。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看