国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

計算機競賽 基于GRU的 電影評論情感分析 - python 深度學(xué)習(xí) 情感分類

這篇具有很好參考價值的文章主要介紹了計算機競賽 基于GRU的 電影評論情感分析 - python 深度學(xué)習(xí) 情感分類。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

1 前言

?? 優(yōu)質(zhì)競賽項目系列,今天要分享的是

基于GRU的 電影評論情感分析

該項目較為新穎,適合作為競賽課題方向,學(xué)長非常推薦!

?? 更多資料, 項目分享:

https://gitee.com/dancheng-senior/postgraduate文章來源地址http://www.zghlxwxcb.cn/news/detail-667801.html

1.1 項目介紹

其實,很明顯這個項目和微博謠言檢測是一樣的,也是個二分類的問題,因此,我們可以用到學(xué)長之前提到的各種方法,即:

樸素貝葉斯或者邏輯回歸以及支持向量機都可以解決這個問題。

另外在深度學(xué)習(xí)中,我們可以用CNN-Text或者RNN以及LSTM等模型最好。

當(dāng)然在構(gòu)建網(wǎng)絡(luò)中也相對簡單,相對而言,LSTM就比較復(fù)雜了,為了讓不同層次的同學(xué)們可以接受,學(xué)長就用了相對簡單的GRU模型。

如果大家想了解LSTM。以后,學(xué)長會給大家詳細(xì)介紹。

2 情感分類介紹

其實情感分析在自然語言處理中,情感分析一般指判斷一段文本所表達(dá)的情緒狀態(tài),屬于文本分類問題。一般而言:情緒類別:正面/負(fù)面。當(dāng)然,這就是為什么本人在前面提到情感分析實際上也是二分類問題的原因。

3 數(shù)據(jù)集

學(xué)長本次使用的是非常典型的IMDB數(shù)據(jù)集。

該數(shù)據(jù)集包含來自互聯(lián)網(wǎng)的50000條嚴(yán)重兩極分化的評論,該數(shù)據(jù)被分為用于訓(xùn)練的25000條評論和用于測試的25000條評論,訓(xùn)練集和測試集都包含50%的正面評價和50%的負(fù)面評價。該數(shù)據(jù)集已經(jīng)經(jīng)過預(yù)處理:評論(單詞序列)已經(jīng)被轉(zhuǎn)換為整數(shù)序列,其中每個整數(shù)代表字典中的某個單詞。

查看其數(shù)據(jù)集的文件夾:這是train和test文件夾。

計算機競賽 基于GRU的 電影評論情感分析 - python 深度學(xué)習(xí) 情感分類,python,java

接下來就是以train文件夾介紹里面的內(nèi)容
計算機競賽 基于GRU的 電影評論情感分析 - python 深度學(xué)習(xí) 情感分類,python,java

然后就是以neg文件夾介紹里面的內(nèi)容,里面會有若干的text文件:
計算機競賽 基于GRU的 電影評論情感分析 - python 深度學(xué)習(xí) 情感分類,python,java

4 實現(xiàn)

4.1 數(shù)據(jù)預(yù)處理

?



    #導(dǎo)入必要的包
    import zipfile
    import os
    import io
    import random
    import json
    import matplotlib.pyplot as plt
    import numpy as np
    import paddle
    import paddle.fluid as fluid
    from paddle.fluid.dygraph.nn import Conv2D, Pool2D, Linear, Embedding
    from paddle.fluid.dygraph.base import to_variable
    from paddle.fluid.dygraph import GRUUnit
    import paddle.dataset.imdb as imdb


    #加載字典
    def load_vocab():
        vocab = imdb.word_dict()
        return vocab
    #定義數(shù)據(jù)生成器
    class SentaProcessor(object):
        def __init__(self):
            self.vocab = load_vocab()
    
        def data_generator(self, batch_size, phase='train'):
            if phase == "train":
                return paddle.batch(paddle.reader.shuffle(imdb.train(self.vocab),25000), batch_size, drop_last=True)
            elif phase == "eval":
                return paddle.batch(imdb.test(self.vocab), batch_size,drop_last=True)
            else:
                raise ValueError(
                    "Unknown phase, which should be in ['train', 'eval']")



步驟

  1. 首先導(dǎo)入必要的第三方庫

  2. 接下來就是數(shù)據(jù)預(yù)處理,需要注意的是:數(shù)據(jù)是以數(shù)據(jù)標(biāo)簽的方式表示一個句子,因此,每個句子都是以一串整數(shù)來表示的,每個數(shù)字都是對應(yīng)一個單詞。當(dāng)然,數(shù)據(jù)集就會有一個數(shù)據(jù)集字典,這個字典是訓(xùn)練數(shù)據(jù)中出現(xiàn)單詞對應(yīng)的數(shù)字標(biāo)簽。

4.2 構(gòu)建網(wǎng)絡(luò)

這次的GRU模型分為以下的幾個步驟

  • 定義網(wǎng)絡(luò)
  • 定義損失函數(shù)
  • 定義優(yōu)化算法

具體實現(xiàn)如下

?
#定義動態(tài)GRU
class DynamicGRU(fluid.dygraph.Layer):
def init(self,
size,
param_attr=None,
bias_attr=None,
is_reverse=False,
gate_activation=‘sigmoid’,
candidate_activation=‘relu’,
h_0=None,
origin_mode=False,
):
super(DynamicGRU, self).init()
self.gru_unit = GRUUnit(
size * 3,
param_attr=param_attr,
bias_attr=bias_attr,
activation=candidate_activation,
gate_activation=gate_activation,
origin_mode=origin_mode)
self.size = size
self.h_0 = h_0
self.is_reverse = is_reverse
def forward(self, inputs):
hidden = self.h_0
res = []
for i in range(inputs.shape[1]):
if self.is_reverse:
i = inputs.shape[1] - 1 - i
input_ = inputs[ :, i:i+1, :]
input_ = fluid.layers.reshape(input_, [-1, input_.shape[2]], inplace=False)
hidden, reset, gate = self.gru_unit(input_, hidden)
hidden_ = fluid.layers.reshape(hidden, [-1, 1, hidden.shape[1]], inplace=False)
res.append(hidden_)
if self.is_reverse:
res = res[::-1]
res = fluid.layers.concat(res, axis=1)
return res

class GRU(fluid.dygraph.Layer):
    def __init__(self):
        super(GRU, self).__init__()
        self.dict_dim = train_parameters["vocab_size"]
        self.emb_dim = 128
        self.hid_dim = 128
        self.fc_hid_dim = 96
        self.class_dim = 2
        self.batch_size = train_parameters["batch_size"]
        self.seq_len = train_parameters["padding_size"]
        self.embedding = Embedding(
            size=[self.dict_dim + 1, self.emb_dim],
            dtype='float32',
            param_attr=fluid.ParamAttr(learning_rate=30),
            is_sparse=False)
        h_0 = np.zeros((self.batch_size, self.hid_dim), dtype="float32")
        h_0 = to_variable(h_0)
        
        self._fc1 = Linear(input_dim=self.hid_dim, output_dim=self.hid_dim*3)
        self._fc2 = Linear(input_dim=self.hid_dim, output_dim=self.fc_hid_dim, act="relu")
        self._fc_prediction = Linear(input_dim=self.fc_hid_dim,
                                output_dim=self.class_dim,
                                act="softmax")
        self._gru = DynamicGRU(size=self.hid_dim, h_0=h_0)
        
    def forward(self, inputs, label=None):
        emb = self.embedding(inputs)
        o_np_mask =to_variable(inputs.numpy().reshape(-1,1) != self.dict_dim).astype('float32')
        mask_emb = fluid.layers.expand(
            to_variable(o_np_mask), [1, self.hid_dim])
        emb = emb * mask_emb
        emb = fluid.layers.reshape(emb, shape=[self.batch_size, -1, self.hid_dim])
        fc_1 = self._fc1(emb)
        gru_hidden = self._gru(fc_1)
        gru_hidden = fluid.layers.reduce_max(gru_hidden, dim=1)
        tanh_1 = fluid.layers.tanh(gru_hidden)
        fc_2 = self._fc2(tanh_1)
        prediction = self._fc_prediction(fc_2)
        
        if label is not None:
            acc = fluid.layers.accuracy(prediction, label=label)
            return prediction, acc
        else:
            return prediction

4.3 訓(xùn)練模型

?
def train():
with fluid.dygraph.guard(place = fluid.CUDAPlace(0)): # # 因為要進(jìn)行很大規(guī)模的訓(xùn)練,因此我們用的是GPU,如果沒有安裝GPU的可以使用下面一句,把這句代碼注釋掉即可
# with fluid.dygraph.guard(place = fluid.CPUPlace()):

        processor = SentaProcessor()
        train_data_generator = processor.data_generator(batch_size=train_parameters["batch_size"], phase='train')

        model = GRU()
        sgd_optimizer = fluid.optimizer.Adagrad(learning_rate=train_parameters["lr"],parameter_list=model.parameters())

        steps = 0
        Iters, total_loss, total_acc = [], [], []
        for eop in range(train_parameters["epoch"]):
            for batch_id, data in enumerate(train_data_generator()):

                steps += 1
                doc = to_variable(
                    np.array([
                        np.pad(x[0][0:train_parameters["padding_size"]], 
                              (0, train_parameters["padding_size"] - len(x[0][0:train_parameters["padding_size"]])),
                               'constant',
                              constant_values=(train_parameters["vocab_size"]))
                        for x in data
                    ]).astype('int64').reshape(-1))
                label = to_variable(
                    np.array([x[1] for x in data]).astype('int64').reshape(
                        train_parameters["batch_size"], 1))
        
                model.train()
                prediction, acc = model(doc, label)
                loss = fluid.layers.cross_entropy(prediction, label)
                avg_loss = fluid.layers.mean(loss)
                avg_loss.backward()
                sgd_optimizer.minimize(avg_loss)
                model.clear_gradients()
 
                if steps % train_parameters["skip_steps"] == 0:
                    Iters.append(steps)
                    total_loss.append(avg_loss.numpy()[0])
                    total_acc.append(acc.numpy()[0])
                    print("step: %d, ave loss: %f, ave acc: %f" %
                         (steps,avg_loss.numpy(),acc.numpy()))

                if steps % train_parameters["save_steps"] == 0:
                    save_path = train_parameters["checkpoints"]+"/"+"save_dir_" + str(steps)
                    print('save model to: ' + save_path)
                    fluid.dygraph.save_dygraph(model.state_dict(),
                                                   save_path)
    draw_train_process(Iters, total_loss, total_acc)

計算機競賽 基于GRU的 電影評論情感分析 - python 深度學(xué)習(xí) 情感分類,python,java
計算機競賽 基于GRU的 電影評論情感分析 - python 深度學(xué)習(xí) 情感分類,python,java

4.4 模型評估

計算機競賽 基于GRU的 電影評論情感分析 - python 深度學(xué)習(xí) 情感分類,python,java

結(jié)果還可以,這里說明的是,剛開始的模型訓(xùn)練評估不可能這么好,很明顯是過擬合的問題,這就需要我們調(diào)整我們的epoch、batchsize、激活函數(shù)的選擇以及優(yōu)化器、學(xué)習(xí)率等各種參數(shù),通過不斷的調(diào)試、訓(xùn)練最好可以得到不錯的結(jié)果,但是,如果還要更好的模型效果,其實可以將GRU模型換為更為合適的RNN中的LSTM以及bi-
LSTM模型會好很多。

4.5 模型預(yù)測

?
train_parameters[“batch_size”] = 1

with fluid.dygraph.guard(place = fluid.CUDAPlace(0)):

    sentences = 'this is a great movie'
    data = load_data(sentences)
    print(sentences)
    print(data)
    data_np = np.array(data)
    data_np = np.array(np.pad(data_np,(0,150-len(data_np)),"constant",constant_values =train_parameters["vocab_size"])).astype('int64').reshape(-1)
    infer_np_doc = to_variable(data_np)

    model_infer = GRU()
    model, _ = fluid.load_dygraph("data/save_dir_750.pdparams")
    model_infer.load_dict(model)
    model_infer.eval()
    result = model_infer(infer_np_doc)
    print('預(yù)測結(jié)果為:正面概率為:%0.5f,負(fù)面概率為:%0.5f' % (result.numpy()[0][0],result.numpy()[0][1]))

計算機競賽 基于GRU的 電影評論情感分析 - python 深度學(xué)習(xí) 情感分類,python,java

訓(xùn)練的結(jié)果還是挺滿意的,到此為止,我們的本次項目實驗到此結(jié)束。

5 最后

?? 更多資料, 項目分享:

https://gitee.com/dancheng-senior/postgraduate

到了這里,關(guān)于計算機競賽 基于GRU的 電影評論情感分析 - python 深度學(xué)習(xí) 情感分類的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 大數(shù)據(jù)畢業(yè)設(shè)計Python+Django旅游景點評論數(shù)據(jù)采集分析可視化系統(tǒng) NLP情感分析 LDA主題分析 bayes分類 旅游爬蟲 旅游景點評論爬蟲 機器學(xué)習(xí) 深度學(xué)習(xí) 人工智能 計算機畢業(yè)設(shè)計

    大數(shù)據(jù)畢業(yè)設(shè)計Python+Django旅游景點評論數(shù)據(jù)采集分析可視化系統(tǒng) NLP情感分析 LDA主題分析 bayes分類 旅游爬蟲 旅游景點評論爬蟲 機器學(xué)習(xí) 深度學(xué)習(xí) 人工智能 計算機畢業(yè)設(shè)計

    畢業(yè)論文(設(shè)計)開題報告 學(xué)生姓名 學(xué) ?號 所在學(xué)院 信息工程學(xué)院 專 ?業(yè) 指導(dǎo)教師姓名 指導(dǎo)教師職稱 工程師 助教 指導(dǎo)教師單位 論文(設(shè)計)題目 基于樸素貝葉斯算法旅游景點線上評價情感分析 開 ?題 ?報 ?告 ?內(nèi) ?容 選題依據(jù)及研究內(nèi)容(國內(nèi)、外研究現(xiàn)狀,初步

    2024年04月17日
    瀏覽(109)
  • 門控循環(huán)單元網(wǎng)絡(luò)(GRU)在計算機視覺中的應(yīng)用:基于深度學(xué)習(xí)模型的

    作者:禪與計算機程序設(shè)計藝術(shù) 《門控循環(huán)單元網(wǎng)絡(luò)(GRU)在計算機視覺中的應(yīng)用:基于深度學(xué)習(xí)模型的》 1.1. 背景介紹 隨著計算機視覺領(lǐng)域的快速發(fā)展,深度學(xué)習(xí)模型已經(jīng)在許多任務(wù)中取得了顯著的成果。但是,為了提高模型的性能,仍需要考慮一些關(guān)鍵問題,如模型的可讀

    2024年02月14日
    瀏覽(25)
  • 計算機競賽 基于深度學(xué)習(xí)的人臉表情識別

    計算機競賽 基于深度學(xué)習(xí)的人臉表情識別

    ?? 優(yōu)質(zhì)競賽項目系列,今天要分享的是 基于深度學(xué)習(xí)的人臉表情識別 該項目較為新穎,適合作為競賽課題方向,學(xué)長非常推薦! ?? 更多資料, 項目分享: https://gitee.com/dancheng-senior/postgraduate 面部表情識別技術(shù)源于1971年心理學(xué)家Ekman和Friesen的一項研究,他們提出人類主要有

    2024年02月10日
    瀏覽(860)
  • 基于深度學(xué)習(xí)的人臉表情識別 計算機競賽

    基于深度學(xué)習(xí)的人臉表情識別 計算機競賽

    ?? 優(yōu)質(zhì)競賽項目系列,今天要分享的是 基于深度學(xué)習(xí)的人臉表情識別 該項目較為新穎,適合作為競賽課題方向,學(xué)長非常推薦! ?? 更多資料, 項目分享: https://gitee.com/dancheng-senior/postgraduate 面部表情識別技術(shù)源于1971年心理學(xué)家Ekman和Friesen的一項研究,他們提出人類主要有

    2024年02月06日
    瀏覽(786)
  • 計算機競賽 - 基于機器視覺的圖像拼接算法

    計算機競賽 - 基于機器視覺的圖像拼接算法

    圖像拼接在實際的應(yīng)用場景很廣,比如無人機航拍,遙感圖像等等,圖像拼接是進(jìn)一步做圖像理解基礎(chǔ)步驟,拼接效果的好壞直接影響接下來的工作,所以一個好的圖像拼接算法非常重要。 再舉一個身邊的例子吧,你用你的手機對某一場景拍照,但是你沒有辦法一次將所有你

    2024年02月13日
    瀏覽(25)
  • 基于機器視覺的車道線檢測 計算機競賽

    基于機器視覺的車道線檢測 計算機競賽

    ?? 優(yōu)質(zhì)競賽項目系列,今天要分享的是 基于深度學(xué)習(xí)的視頻多目標(biāo)跟蹤實現(xiàn) 該項目較為新穎,適合作為競賽課題方向,學(xué)長非常推薦! ?? 更多資料, 項目分享: https://gitee.com/dancheng-senior/postgraduate 理解車道檢測的概念 那么什么是車道檢測?以下是百度百科對車道的定義:

    2024年02月08日
    瀏覽(29)
  • 計算機競賽 題目:基于深度學(xué)習(xí)的手勢識別實現(xiàn)

    計算機競賽 題目:基于深度學(xué)習(xí)的手勢識別實現(xiàn)

    ?? 優(yōu)質(zhì)競賽項目系列,今天要分享的是 基于深度學(xué)習(xí)的手勢識別實現(xiàn) 該項目較為新穎,適合作為競賽課題方向,學(xué)長非常推薦! ?? 更多資料, 項目分享: https://gitee.com/dancheng-senior/postgraduate 手勢識別在深度學(xué)習(xí)項目是算是比較簡單的。這里為了給大家會更好的訓(xùn)練。其中

    2024年02月07日
    瀏覽(101)
  • 計算機競賽 基于機器視覺的行人口罩佩戴檢測

    計算機競賽 基于機器視覺的行人口罩佩戴檢測

    簡介 2020新冠爆發(fā)以來,疫情牽動著全國人民的心,一線醫(yī)護(hù)工作者在最前線抗擊疫情的同時,我們也可以看到很多科技行業(yè)和人工智能領(lǐng)域的從業(yè)者,也在貢獻(xiàn)著他們的力量。近些天來,曠視、商湯、???、百度都多家科技公司研發(fā)出了帶有AI人臉檢測算法的紅外測溫、口罩

    2024年02月10日
    瀏覽(19)
  • 計算機競賽 基于機器視覺的手勢檢測和識別算法

    計算機競賽 基于機器視覺的手勢檢測和識別算法

    ?? 優(yōu)質(zhì)競賽項目系列,今天要分享的是 基于深度學(xué)習(xí)的手勢檢測與識別算法 該項目較為新穎,適合作為競賽課題方向,學(xué)長非常推薦! ?? 更多資料, 項目分享: https://gitee.com/dancheng-senior/postgraduate 廢話不多說,先看看學(xué)長實現(xiàn)的效果吧 主流的手勢分割方法主要分為靜態(tài)手

    2024年02月11日
    瀏覽(30)
  • 計算機競賽 基于機器視覺的停車位識別檢測

    計算機競賽 基于機器視覺的停車位識別檢測

    簡介 你是不是經(jīng)常在停車場周圍轉(zhuǎn)來轉(zhuǎn)去尋找停車位。如果你的車輛能準(zhǔn)確地告訴你最近的停車位在哪里,那是不是很爽?事實證明,基于深度學(xué)習(xí)和OpenCV解決這個問題相對容易,只需獲取停車場的實時視頻即可。 該項目較為新穎,適合作為競賽課題方向,學(xué)長非常推薦!

    2024年02月11日
    瀏覽(39)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包