收藏和點贊,您的關(guān)注是我創(chuàng)作的動力
概要
?? 情感分析在最近的十年內(nèi)得到了快速的發(fā)展,這歸功于大數(shù)據(jù)的支持。相較于英語而言,中文的使用同樣廣泛。如何把握中文里的情感也是服務(wù)行業(yè)所關(guān)注的問題。本文旨在研究中文情緒分析的設(shè)計與開發(fā),意在基于Pytorch平臺,利用深度學習去構(gòu)建神經(jīng)網(wǎng)絡(luò)模型從而去判斷中文文本數(shù)據(jù)中所蘊含的情緒,試圖通過遷移學習的方式,把電影評價數(shù)據(jù)的模型應(yīng)用在教育評價的數(shù)據(jù)上。本文先是通過了對文獻的分析,得到了遷移學習的基礎(chǔ),再是通過深度神經(jīng)網(wǎng)絡(luò)模型的搭建以及網(wǎng)上電影評價數(shù)據(jù)來訓練,最終得到一個對于電影評價、教育評價都適用的模型。
【關(guān)鍵詞】:Pytorch;神經(jīng)網(wǎng)絡(luò);情感分析;遷移學習
一、相關(guān)基礎(chǔ)理論
??
2.1 主流深度學習框架
Pytorch是Facebook在2017年推出的開源深度學習框架,源于torch更新后的一種新產(chǎn)品。因其是原生的python包,所以它與python是無縫集成的,同樣使用了命令式編碼風格。其易于上手、入門的緣故,非專業(yè)人士同樣可以使用該平臺來提高工作效率。Pytorch及其擴展函數(shù)庫構(gòu)成了一個豐富、完整的神經(jīng)網(wǎng)絡(luò)構(gòu)建、應(yīng)用平臺,開源,免費,學習和使用方便[10]。相較于TensorFlow,Pytorch具有動態(tài)計算圖表、精簡的后端與高度可拓展等優(yōu)勢,深度學習專業(yè)人員可以利用該平臺進行深度學習領(lǐng)域項目的設(shè)計與應(yīng)用。
2.2 神經(jīng)網(wǎng)絡(luò)
2.2.1 神經(jīng)網(wǎng)絡(luò)基礎(chǔ)
人工神經(jīng)網(wǎng)絡(luò)(Artificial Neural Networks),簡稱為神經(jīng)網(wǎng)絡(luò)(NNs)是一種受人腦的生物神經(jīng)網(wǎng)絡(luò)啟發(fā)而設(shè)計的計算模型。這種網(wǎng)絡(luò)基于系統(tǒng)的復雜程序,善于從輸入的數(shù)據(jù)和標簽中學習到相關(guān)映射關(guān)系,從而達成完成預測或者解決分類問題的目的。人工神經(jīng)網(wǎng)絡(luò)本質(zhì)上是一種應(yīng)用類似于大腦神經(jīng)突觸聯(lián)接的結(jié)構(gòu)進行信息處理的數(shù)學模型,用于擬合任意映射,因此也被稱為通用擬合器。神經(jīng)網(wǎng)絡(luò)的運行包含前饋的預測過程和反饋的學習過程。
如圖2-1所示,在前饋的預測過程中,信號(Inputs)從輸入單元輸入,并沿著網(wǎng)絡(luò)連邊傳輸,每個信號會與連邊上的權(quán)重(Weights)進行乘積,從而得到隱含層單元的輸入;接下來,隱含層單元對所有連邊輸入的信號進行匯總(通過transfer function進行求和),然后經(jīng)過一定的處理(激活函數(shù))進行輸出( );這些輸出的信號再乘以從隱含層到輸出的那組連線上的權(quán)重( ),從而得到輸入給輸出單元的信號;最后,輸出單元再對每一條輸入連邊的信號進行匯總,并進行加工處理再輸出。最后的輸出就是整個神經(jīng)網(wǎng)絡(luò)的輸出。神經(jīng)網(wǎng)絡(luò)在訓練階段會通過優(yōu)化函數(shù)調(diào)節(jié)每條連邊上的權(quán)重 數(shù)值。
在反饋的學習過程中,每個輸出神經(jīng)元會首先計算出它的預測誤差,然后將這個誤差沿著網(wǎng)絡(luò)的所有連邊進行反向傳播,得到每個隱含層節(jié)點的誤差。最后,根據(jù)每條連邊所連通的兩個節(jié)點的誤差計算連邊上的權(quán)重更新量,從而完成網(wǎng)絡(luò)的學習與調(diào)整。
二、中文情感分類模型構(gòu)建
3.1 開發(fā)環(huán)境
模型是在系統(tǒng)WIN10、1TB+256G(SSD)、內(nèi)存16G 、INTEL酷睿I7-7700HQ的CPU以及英偉達GTX1070(8G)顯卡的PC機上通過python3.8版本和Anaconda1.9.12版本來使用pytorch構(gòu)建深度學習模型。Anaconda是一個開源的python包管理器,包含了python、conda等180多個科學包及其依賴項。它支持Windows、Linux和Mac三種系統(tǒng)。由于它提供了包管理與環(huán)境管理的功能,能夠很方便地解決多版本python切換、并存以及下載安裝各種第三方包等問題。使用自帶的jupyter notebooks應(yīng)用程序,可以直接在谷歌網(wǎng)頁頁面編寫、運行和調(diào)試代碼。
構(gòu)建神經(jīng)網(wǎng)絡(luò)模型中使用到的python模塊的功能介紹:
1、Re—python獨有的通過正則表達式對字符串匹配操作的模塊。
2、Jieba—一款基于python的強大的分詞庫,完美支持中文分詞。
3、Collections—包括了dict、set、list、tuple以外的一些特殊容器類型。
4、Matplotlib—將數(shù)據(jù)可視化。
3.2 數(shù)據(jù)部分
本模型中所使用的用于訓練模型的數(shù)據(jù)均來自于網(wǎng)上的開源數(shù)據(jù)包,其包括了豆瓣在2018年之前約13萬部電影數(shù)據(jù)以及105萬條左右的電影評論。其中評論數(shù)據(jù)中包含評論者的ID、電影的ID、評論內(nèi)容、點贊次數(shù)、評論時間和評論等級。由于文本信息均為不等長的序列,可能會出現(xiàn)內(nèi)存不足、無法訓練模型的情況,因此我們對電影評價數(shù)據(jù)做以下預處理,過程保證全隨機:
1.抽取5000條評價星級為4~5的評價作為滿意度高的評價存放在comment_good.txt文件中。
2. 抽取5000條評價星級為1~2的評價作為滿意度低的評價存放在comment_bad.txt文件中。
3.對comment_good.txt和comment_bad.txt中的文本進行去噪處理。
3.3 文本特征提取
3.3.1、過濾標點符號
通過filter_punc函數(shù)對文本的標點符號中進行過濾操作,它通過調(diào)用正則表達式的相應(yīng)程序包,替換掉了所有中英文的標點符號。#將文本中的標點符號過濾掉def filter_punc(sentence): sentence = re.sub( “[\s+.!/_,$%^(+"'“”《》?“]+|[+——!,。?、~@#¥%……&():]+”, “”, sentence)
return(sentence)
3.3.2 中文分詞、單詞過濾
中文分詞是對文本數(shù)據(jù)分析的一種重要環(huán)節(jié),主要的目的是將一個連續(xù)的中文句子按照漢語語言的規(guī)則組合成分開的詞組的過程(腳注)。在python中,通過調(diào)用“jieba”模塊來對原始文本進行分詞。jieba模塊擁有一個自帶的詞典,調(diào)用jieba.lcut(x)函數(shù)就將x中的字符分成若干個詞,并存儲在列表all_words[]中。x為一條評論文本數(shù)據(jù)。由于jieba自帶的詞典不足以滿足我們的需求,因此我們根據(jù)已知數(shù)據(jù)的特性,通過調(diào)用Python的字典(diction)來建立自己專用的單詞表,其中diction中存儲了每個單詞作為鍵(key),一對數(shù)字分別表示詞的編號以及詞在整個語料中出現(xiàn)的次數(shù)作為值(value)。存儲第一個數(shù)值的目的是用數(shù)字來替換文字,存儲第二個數(shù)值的目的是方便查看不同詞的頻率(TF)。根據(jù)公式(2-5)、2(6)統(tǒng)計訓練集中評價的條數(shù)、以及包含某個特征詞的評論條數(shù),用于計算IDF。通過“TF-IDF”指標過濾常見無用詞語,保留 重要的詞語,從而得到更優(yōu)質(zhì)的詞袋。
三 運行結(jié)果與分析
圖3-3 優(yōu)化函數(shù)SDG、學習率為0.01下的三條曲線分布
圖3-3中藍色的Train Loss表示訓練集上的損失函數(shù),橘色的Valid Loss表示校驗集上的損失函數(shù),綠色的Valid Accuracy表示校驗集上的分類準確度??梢杂^察到,隨著訓練周期的增加,訓練數(shù)據(jù)和校驗數(shù)據(jù)的損失函數(shù)曲線并沒有發(fā)現(xiàn)明顯下降趨勢,甚至于在第10周期之后訓練數(shù)據(jù)的損失函數(shù)一直高于校驗數(shù)據(jù)的損失函數(shù)值,且模型準確率一直不超過70%,這說明模型并沒有訓練成功。將學習率調(diào)整為0.001后再次訓練模型。
圖3-4 優(yōu)化函數(shù)SDG、學習率為0.001下的三條曲線分布
觀察圖3-4可知,訓練數(shù)據(jù)的損失函數(shù)曲線在第一個周期之后與校驗數(shù)據(jù)損失函數(shù)曲線持平,也就意味著SGD在學習率為0.001并沒有起到做到作用,且模型準確率低達0.53。將學習率調(diào)整為0.1后再次訓練模型。
圖3-5 優(yōu)化函數(shù)SDG、學習率為0.1下的三條曲線分布
觀察圖3-5可知,雖然模型的準確率在穩(wěn)步上升,但訓練數(shù)據(jù)的損失函數(shù)值一直高于校驗數(shù)據(jù)的損失函數(shù)值,這說明30步訓練并沒有成功的訓練模型。試著將循環(huán)調(diào)整為15次后對模型進行訓練。
圖3-6 優(yōu)化函數(shù)SDG、學習率為0.1下的三條曲線分布
觀察圖3-6可知,模型準確率一直止步于70%,雖然校驗數(shù)據(jù)的損失函數(shù)值一直圍繞著訓練數(shù)據(jù)的損失函數(shù)進行波動,但是該損失值過大,不足以證明模型被訓練好。究其原因,問題可能出現(xiàn)在使用的激活函數(shù)為Relu,因為第二章提到的學習率的問題引發(fā)了Dead ReLU problem,極大可能由于SGD是固定學習率的緣故。因此我們試著采用之前介紹的學習率不固定的Adam優(yōu)化算法訓練模型,初始設(shè)置學習率為0.1。
圖3-7 優(yōu)化函數(shù)Adam、學習率為0.1下的三條曲線分布
五 結(jié) 論
?? 通過利用影視作品的評價數(shù)據(jù)去訓練模型可以得知,對于好作品而言,人們一般不會從電影好的方面去評價一個作品的好壞,更多的是抒發(fā)自己看完電影后的感悟,大部分描述的詞匯與電影的本身內(nèi)容沒有直接的關(guān)聯(lián),這也證實了電影評價的數(shù)據(jù)確實不好用一般的分類模型去分析。此外,模型的精確度還可以通過針對性的對數(shù)據(jù)清洗來提高。
另一方面“大數(shù)據(jù)”與“教育”的相結(jié)合可能遠遠的會比我們現(xiàn)在所搭建的神經(jīng)網(wǎng)絡(luò)分類器要復雜的許多,我們的分類器暫時也只能做到對文本情緒的好壞進行分類。在情感領(lǐng)域內(nèi),情感的分類遠遠不是非黑即白這么簡單,教育工作者會需要評價文本中蘊含的情感建立更加具有針對性的教育方針的改變,所以我們模型還遠遠達不到這方面的要求。但現(xiàn)在所搭建的神經(jīng)網(wǎng)絡(luò)模型,是更加高級的神經(jīng)網(wǎng)絡(luò)(RNN模型或者LSTM模型)的基礎(chǔ)。路漫漫其修遠兮,擁有扎實的基礎(chǔ)理論才有可能再往上繼續(xù)延伸,這是起點,卻不是終點。文章來源:http://www.zghlxwxcb.cn/news/detail-738356.html
目錄
目錄
1 緒論5
1.1 研究背景5
1.2 國內(nèi)外研究現(xiàn)狀5
1.3 研究問題6
1.4 研究方法與手段7
2 相關(guān)基礎(chǔ)理論8
2.1 主流深度學習框架8
2.2 神經(jīng)網(wǎng)絡(luò)8
2.2.1 神經(jīng)網(wǎng)絡(luò)基礎(chǔ)8
2.2.2 神經(jīng)網(wǎng)絡(luò)的分類任務(wù)9
2.2.3 激活函數(shù)9
2.2.4 損失函數(shù)10
2.2.5 過擬合現(xiàn)象11
2.2.6 泛化能力12
2.2.7 超參數(shù)12
2.3 詞袋模型12
2.4 詞頻逆文檔頻率(TF-IDF)13
3 中文情感分類模型構(gòu)建13
3.1 開發(fā)環(huán)境13
3.2 數(shù)據(jù)部分14
3.3 文本特征提取14
3.3.1 過濾標點符號14
3.3.2 中文分詞及單詞過濾14
3.3.3 文本數(shù)據(jù)向量化14
3.3.4 數(shù)據(jù)劃分15
3.4 神經(jīng)網(wǎng)絡(luò)的搭建15
3.5 運行結(jié)果與分析16
3.6 優(yōu)化與改進模型20
4 方案拓展以及總結(jié)21
4.1 方案拓展21
4.2 方案總結(jié)22
參考文獻23
致謝24文章來源地址http://www.zghlxwxcb.cn/news/detail-738356.html
到了這里,關(guān)于基于PyTorch的中文情緒分析器設(shè)計與開發(fā)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!