蔡鑫,婁京生
?
基于LSTM深度學(xué)習(xí)模型的中國電信官方微博用戶情緒分析
蔡鑫,婁京生
(中國電信股份有限公司上海研究院,上海 200122)
中國電信官方微博(簡稱電信官微)作為一種互聯(lián)網(wǎng)媒體,是中國電信對(duì)外發(fā)布信息并獲取用戶反饋的重要渠道。用戶對(duì)電信官微消息內(nèi)容的評(píng)論,反映了用戶對(duì)中國電信品牌、產(chǎn)品和服務(wù)的不同態(tài)度。爬取了電信官微的消息內(nèi)容和評(píng)論數(shù)據(jù),對(duì)經(jīng)過清洗的數(shù)據(jù)采用Word2vec進(jìn)行文本信息表示,并使用深度學(xué)習(xí)平臺(tái)基于LSTM深度神經(jīng)網(wǎng)絡(luò)模型進(jìn)行用戶交互文本的正負(fù)面情感分類,實(shí)現(xiàn)電信官微訪問用戶情緒分析。
深度學(xué)習(xí);LSTM;情緒分析;微博
官方微博是企業(yè)或機(jī)構(gòu)通過身份認(rèn)證的具有法律效應(yīng)的微博平臺(tái)賬號(hào)。對(duì)于用戶眾多的電信運(yùn)營商而言,官方微博是進(jìn)行產(chǎn)品/套餐展示、營銷、客服以及客戶溝通的平臺(tái),成本低、輻射廣、傳播快是這一互聯(lián)網(wǎng)媒體渠道的重要特征。利用官方微博及時(shí)發(fā)現(xiàn)用戶的訴求,快速處理好用戶關(guān)注的問題,就能夠贏得用戶稱贊,促成輿論轉(zhuǎn)向,樹立品牌形象。
微博具有互動(dòng)的特性,粉絲或其他微博用戶都可以對(duì)中國電信官方微博(簡稱電信官微)發(fā)布的消息進(jìn)行評(píng)論,而這些反饋內(nèi)容反映了用戶對(duì)電信品牌、產(chǎn)品和服務(wù)的主觀態(tài)度。如果對(duì)用戶交互數(shù)據(jù)進(jìn)行深入的分析,可以準(zhǔn)確獲取對(duì)中國電信而言非常有價(jià)值的用戶意見和建議,對(duì)于改善企業(yè)的產(chǎn)品和服務(wù)大有裨益。
傳統(tǒng)方式下,需要設(shè)立官方微博運(yùn)營專員,對(duì)用戶互動(dòng)內(nèi)容進(jìn)行人工分析和處理,耗費(fèi)大量人力成本。本文嘗試采用基于LSTM深度學(xué)習(xí)模型的自然語言處理技術(shù),對(duì)電信官微的訪問用戶交互信息進(jìn)行用戶情緒分析,輔助開展微博運(yùn)營工作。
對(duì)于文本形式的微博評(píng)論數(shù)據(jù),計(jì)算機(jī)處理過程中需要用到自然語言處理(natural language processing,NLP)的相關(guān)技術(shù)。自然語言處理是計(jì)算機(jī)科學(xué)領(lǐng)域與人工智能領(lǐng)域中的一個(gè)重要方向。它研究能實(shí)現(xiàn)人與計(jì)算機(jī)之間用自然語言進(jìn)行有效通信的各種理論和方法[1]。簡而言之,NLP是讓計(jì)算機(jī)能夠理解人類語言的一種技術(shù)。
自然語言領(lǐng)域最細(xì)粒度的是詞語,詞語組成句子,句子再組成段落、篇章、文檔。所以要想實(shí)現(xiàn)讓計(jì)算機(jī)處理自然語言,首先要解決的是詞語的二進(jìn)制信息表示問題。
詞向量的意思就是通過一個(gè)數(shù)字組成的向量來表示一個(gè)詞,Word2vec是其中一種向量表示技術(shù),Google 于2013年將其開源。Word2vec 使用分布式表示(distributed representation)的詞向量表示方式。其基本思想是通過訓(xùn)練將每個(gè)詞映射成維實(shí)數(shù)向量(為模型中的超參數(shù)),通過詞與詞之間的距離來判斷它們之間的語義相似度。詞向量來源于上下文的詞預(yù)測模型,Mikolov等人[2]提出CBOW(continuous bag-of-word)和Skip-gram(continuous skip-gram)兩個(gè)模型,分別使用三層神經(jīng)網(wǎng)絡(luò)對(duì)語言建模預(yù)測上下文單詞出現(xiàn)的概率。CBOW是依據(jù)詞所在的上下文中的詞作為輸入預(yù)測詞本身;而Skip-gram則是依據(jù)詞本身作為輸入預(yù)測上下文中的詞。
Word2vec模型在實(shí)現(xiàn)上下文預(yù)測的同時(shí),獲得了一項(xiàng)副產(chǎn)品,即單詞在向量空間上的表示,這是Word2vec真正的最重要的貢獻(xiàn)。Word2vec算法使得具有相似語義的詞可以表示為相互靠近的向量,Mikolov等人[2]給出了一個(gè)著名等式“king-man+woman=queen”,形象地說明了詞向量處理文本的魔力。
深度學(xué)習(xí)的概念來源于人工神經(jīng)網(wǎng)絡(luò)模型。深度學(xué)習(xí)通過組合低層特征形成更加抽象的高層表示屬性類別或特征,以發(fā)現(xiàn)數(shù)據(jù)的分布式特征表示。傳統(tǒng)的神經(jīng)網(wǎng)絡(luò)一般由輸入層、隱藏層、輸出層組成,其中隱藏層的數(shù)目按需確定。深度神經(jīng)網(wǎng)絡(luò)是目前最常見的深度學(xué)習(xí)模型,而且包括多種不同類型的網(wǎng)絡(luò),例如:CNN(convolutional neural network,卷積神經(jīng)網(wǎng)絡(luò))、DBN(deep belief network,深度置信網(wǎng)絡(luò))等。
在NLP領(lǐng)域,RNN(recurrent neural network,循環(huán)神經(jīng)網(wǎng)絡(luò))因其對(duì)上下文的兼顧而顯得更為適用。在自然語言處理中,上下文關(guān)系非常重要,句子里相鄰詞并不獨(dú)立,不同的排列組合會(huì)有不同的意義,例如“微信比短信方便”“短信比微信方便”,只是變換一下次序,意義就會(huì)完全相反。RNN中當(dāng)前時(shí)刻的輸出,除與上一層的輸出有關(guān)之外,還考慮了上一時(shí)刻隱藏層的輸出的影響。RNN是非常強(qiáng)大的動(dòng)態(tài)系統(tǒng),但由于梯度消失/梯度爆炸的問題,傳統(tǒng)RNN在實(shí)際中很難處理長期依賴。
為了解決這個(gè)問題,采用了特殊隱式單元的LSTM(long short-term memory,長短期記憶)網(wǎng)絡(luò)被首先提出,其自然行為便是長期的保存輸入。LSTM包含一種稱作記憶細(xì)胞的特殊單元類似累加器和門控神經(jīng)元:它在下一個(gè)時(shí)間步長將擁有一個(gè)權(quán)值并聯(lián)接到自身,復(fù)制自身狀態(tài)的真實(shí)值和累積的外部信號(hào),但這種自聯(lián)接是由另一個(gè)單元學(xué)習(xí)并決定何時(shí)清除記憶內(nèi)容的乘法門控制的[3]。LSTM網(wǎng)絡(luò)隨后被證明比傳統(tǒng)的RNN更加有效,特別是在語音識(shí)別以及機(jī)器翻譯應(yīng)用中表現(xiàn)良好。簡而言之,LSTM也是一種RNN,并且有效解決了傳統(tǒng)RNN未解決的長期依賴問題,能夠存儲(chǔ)遠(yuǎn)距離上下文對(duì)當(dāng)前時(shí)刻輸出的影響。
首先需要獲取語料數(shù)據(jù),電信官微數(shù)據(jù)屬于公開數(shù)據(jù)集,可以通過官微網(wǎng)址進(jìn)行獲取。實(shí)際中一般采用網(wǎng)絡(luò)爬蟲軟件執(zhí)行內(nèi)容爬取任務(wù)。
網(wǎng)絡(luò)爬蟲是獲取網(wǎng)站公開數(shù)據(jù)的一種有效工具。網(wǎng)絡(luò)采集器屬于網(wǎng)絡(luò)爬蟲的一種,利用采集工具批量采集網(wǎng)頁中的內(nèi)容,其中包括論壇、貼吧、媒體網(wǎng)站等,從中摘取某些數(shù)據(jù)形成統(tǒng)一的本地?cái)?shù)據(jù)庫。網(wǎng)絡(luò)采集器不需要技術(shù)成本,可被用作初級(jí)的數(shù)據(jù)采集工具,常見的有Gooseeker、八爪魚等。此外,針對(duì)特定網(wǎng)站的特定數(shù)據(jù)采集,例如本文中的官方微博用戶評(píng)論數(shù)據(jù),可基于Scrapy等開源框架自行開發(fā)爬蟲程序,這樣可以滿足更加自主和靈活的采集需求。
爬取下來的微博用戶交互數(shù)據(jù),還需要進(jìn)行必要的清洗和轉(zhuǎn)換。主要包括:去重,即去掉同一消息內(nèi)容下同一用戶的重復(fù)評(píng)論;去噪,一些低質(zhì)量的內(nèi)容,如文本過短只包含一個(gè)漢字的評(píng)論可視為噪聲數(shù)據(jù)并簡單剔除;拼接,將同一消息內(nèi)容下同一用戶的多條評(píng)論按時(shí)序進(jìn)行拼接,以形成更為完整的上下文語義。經(jīng)過上述預(yù)處理過程的文本數(shù)據(jù),便可以進(jìn)入后續(xù)的NLP環(huán)節(jié)。
中文以字為基本書寫單位,而詞是一個(gè)或多個(gè)字的組合。與西方語言不通,詞和詞之間沒有明顯的區(qū)分標(biāo)記。因此中文自然語言處理,首先要進(jìn)行中文分詞。通俗地說,中文分詞就是要由機(jī)器在中文文本中詞與詞之間加上標(biāo)記。具體地,輸入“中國電信致力于做領(lǐng)先的綜合智能信息服務(wù)運(yùn)營商”;輸出“中國電信/致力于/做/領(lǐng)先/的/綜合/智能/信息/服務(wù)/運(yùn)營商”。
分詞技術(shù)被歸為以下3個(gè)主要類別:基于詞典的分詞技術(shù);基于統(tǒng)計(jì)的分詞技術(shù);基于規(guī)則的分詞技術(shù)。3類分詞技術(shù)有各自的優(yōu)缺點(diǎn),具體工作中,可采用較為成熟的結(jié)巴(Jieba)分詞或CRF++分詞。這兩個(gè)分詞算法都不能簡單地歸屬于某一大類的分詞技術(shù)中,而是采用了交叉的技術(shù)策略。算法支持用戶自定義詞庫,可以將具有行業(yè)特征的專有詞添加到自定義詞庫,以便分詞引擎能夠識(shí)別和處理,如“運(yùn)營商”“天翼”等。
經(jīng)過分詞處理的文本語料,便可送入Word2vec進(jìn)行訓(xùn)練,以獲得詞向量表示,這一過程也成為詞嵌入(word embedding)。在互聯(lián)網(wǎng)上有一些基于海量語料(例如中文維基百科等)的預(yù)訓(xùn)練詞向量,這些語料內(nèi)的詞基本可以覆蓋本文所需的電信官微使用詞匯。但是一方面由于詞庫過于龐大,勢必要用更多維數(shù)去表示,詞向量就會(huì)更加冗長和稀疏;另一方面,某些詞在電信行業(yè)具有特指的含義,區(qū)別于普通文檔,例如“終端”一詞,在電信行業(yè)中與“手機(jī)”的含義就比一般意義上更為接近。因此,并不適合將通用的預(yù)訓(xùn)練詞向量直接拿來使用,而應(yīng)基于場景問題域本身的語料重新進(jìn)行詞向量訓(xùn)練。
除了Google自己的Word2vec工具,開源社區(qū)中還存有對(duì)詞向量感興趣的第三方開發(fā)者所編寫的不同版本,其中Python gensim主題模型包中的Word2vec對(duì)算法的封裝比較完善。訓(xùn)練Word2vec模型主要需要設(shè)置詞向量的維數(shù),即上文所述的模型超參數(shù)值。的取值與語料內(nèi)包含的不同詞匯個(gè)數(shù)相關(guān),可依據(jù)經(jīng)驗(yàn)或由封裝函數(shù)進(jìn)行優(yōu)化設(shè)置。
本文對(duì)高維數(shù)的詞向量做了主成分分析(principal component analysis,PCA),選取部分詞以及與它們距離最接近的Top10的詞,在權(quán)重最高的兩個(gè)主成分構(gòu)成的二維平面中進(jìn)行了可視化展示,效果如圖1所示。圖1中結(jié)果印證了詞向量距離以及詞之間語義相似度二者的一致性關(guān)系。
圖1 Word2vec詞向量距離圖示
本場景的分析目標(biāo),是根據(jù)用戶評(píng)論文本數(shù)據(jù)判別微博用戶對(duì)電信的情緒偏好(包含:“正面”“負(fù)面”和“無關(guān)”),這在NLP基本問題歸類中屬于文本分類問題。即根據(jù)給定文本的內(nèi)容,將其判定為事先確定的若干個(gè)文本類別中的某一類或者某幾類的過程。
從機(jī)器學(xué)習(xí)的技術(shù)層面看,分類問題是比較典型的監(jiān)督學(xué)習(xí)(supervised learning)。百度百科將監(jiān)督學(xué)習(xí)定義為利用一組已知類別的樣本調(diào)整分類器的參數(shù),使其達(dá)到所要求性能的過程,也稱為監(jiān)督訓(xùn)練或有教師學(xué)習(xí)。監(jiān)督學(xué)習(xí)是從標(biāo)記的訓(xùn)練數(shù)據(jù)來推斷一個(gè)功能的機(jī)器學(xué)習(xí)任務(wù)[4]。對(duì)于監(jiān)督學(xué)習(xí)而言,有高質(zhì)量標(biāo)注的學(xué)習(xí)樣本是模型訓(xùn)練成功的重要前提。為此,本文從全部語料中隨機(jī)地抽取20%的樣本,分3組獨(dú)立進(jìn)行人工標(biāo)注,再通過投票機(jī)制確定每個(gè)樣本的分類標(biāo)注,從而保證學(xué)習(xí)樣本的標(biāo)注質(zhì)量。
本文采用Word2vec即維詞向量表示一個(gè)詞,而句子可以看成多個(gè)詞所組成的序列。句子的長短即包含的詞語個(gè)數(shù)可能不同,如果將詞向量序列簡單拼接作為句子的信息表示,那么句子的維數(shù)就會(huì)長短不一,無法作為后續(xù)深度神經(jīng)網(wǎng)絡(luò)的直接輸入。考慮到微博評(píng)論的一般表述方式都以短句為主,因此設(shè)定一個(gè)固定長度(本文取值34)作為文本的限定長度。當(dāng)評(píng)論文本長度(包含詞數(shù)) >時(shí),對(duì)之后的文本進(jìn)行截?cái)?;?dāng)文本長度 <時(shí),通過類似缺失值處理的方式補(bǔ)齊,本文采用空字符填充以做到不失原文語義。經(jīng)過上述處理,文本就可以表示成個(gè)維向量序列形式,輸入深度學(xué)習(xí)網(wǎng)絡(luò)。
網(wǎng)絡(luò)的具體結(jié)構(gòu)如下:文本經(jīng)過詞嵌入進(jìn)行向量化之后,進(jìn)入標(biāo)準(zhǔn)LSTM層進(jìn)行上下文學(xué)習(xí),之后LSTM的輸出結(jié)果經(jīng)過全連接(dense)層將維度降至目標(biāo)變量類別個(gè)數(shù)3,再迭加softmax層就可以得到輸入文本在各個(gè)類別的概率,從而實(shí)現(xiàn)最終的分類目的。整個(gè)深度學(xué)習(xí)模型構(gòu)建流程如圖2所示。
伴隨著人工智能的熱潮,很多互聯(lián)網(wǎng)公司和研究機(jī)構(gòu)都積極參與研發(fā)深度學(xué)習(xí)框架,并將其開源以擴(kuò)大影響力,因此目前市面上深度學(xué)習(xí)框架數(shù)目眾多。其中,TensorFlow由Google于2015年推出,基于架構(gòu)靈活的計(jì)算圖進(jìn)行設(shè)計(jì),依托Google強(qiáng)大的研發(fā)實(shí)力和業(yè)界影響力,Tensorflow在社區(qū)活躍度、文檔豐富性、生態(tài)完備性方面都體現(xiàn)了優(yōu)勢。
基于此,在本文實(shí)際驗(yàn)證中采用TensorFlow作為深度學(xué)習(xí)平臺(tái)。同時(shí)為了簡化編程開銷,更專注于深度學(xué)習(xí)模型本身,還使用了Keras作為高層框架。Keras是一個(gè)極簡主義、高度模塊化的神經(jīng)網(wǎng)絡(luò)庫,可充分利用TensorFlow通用計(jì)算能力。另外,為了更好地實(shí)現(xiàn)Python環(huán)境包和多版本管理,引入了Anaconda作為管理工具。
圖2 深度學(xué)習(xí)模型建模示意
驗(yàn)證平臺(tái)環(huán)境主要安裝過程如下。
步驟1 Anaconda安裝配置
下載Python版本為2.7對(duì)應(yīng)的Anaconda:
https://repo.continuum.io/archive/Anaconda2-5.0.0.1-Linux-x86_64.sh
安裝Anaconda:
$ bash Anaconda2-5.0.0.1-Linux-x86_64.sh
步驟2 Tensorflow安裝配置
執(zhí)行下面命令,準(zhǔn)備環(huán)境:
$ conda create -n tensorflow python=2.7
激活上述名字為『tensorflow』的環(huán)境:
$ source activate tensorflow
安裝最新版本Tensorflow:
(tensorflow)$ pip install tensorflow
步驟3 Keras安裝配置
(tensorflow)$ pip install keras
本文使用Python腳本完成深度學(xué)習(xí)網(wǎng)絡(luò)構(gòu)建。在數(shù)據(jù)預(yù)處理階段,對(duì)于經(jīng)過分類標(biāo)注的訓(xùn)練文本,使用結(jié)巴分詞進(jìn)行中文分詞。再通過字符截?cái)嗪吞畛?,形成長度限定為的等長分詞序列。之后,Python調(diào)用Keras的API構(gòu)建本文第3.3節(jié)所述的深度學(xué)習(xí)模型。
深度神經(jīng)網(wǎng)絡(luò)建模主要語句如下:
model = Sequential()
model.add(Embedding(len(dict)+1, 256, input_ length=34))
model.add(LSTM(128, dropout_W=0.2, dropout_U=0.2))
model.add(Dense(3,activation='relu'))
model.add(Activation('softmax'))
model.compile(loss="categorical_crossentropy",optimizer="rmsprop",metrics=['accuracy'])
model.fit(x, y, batch_size = 128, nb_epoch=20)
注:x存儲(chǔ)訓(xùn)練樣本分詞典下標(biāo)序列,y存儲(chǔ)訓(xùn)練樣本分類標(biāo)簽,dict為語料庫詞典。
訓(xùn)練過程可以輸出經(jīng)過每次迭代(epoch)之后的損失函數(shù)值(loss)以及模型準(zhǔn)確率(accuracy,簡稱acc),通過觀察loss和acc的不斷變化,可以判斷模型是否收斂。本文的訓(xùn)練中經(jīng)過20次迭代,在訓(xùn)練集上loss下降到0.062 2,acc達(dá)到0.977 1;在驗(yàn)證集上也分別達(dá)到0.288 4、0.921 9,是較為理想的結(jié)果。loss和acc的變化趨勢如圖3所示。
圖3 深度學(xué)習(xí)網(wǎng)絡(luò)訓(xùn)練迭代過程loss與acc變化趨勢
由實(shí)際驗(yàn)證結(jié)果可知,結(jié)合詞向量詞嵌入與LSTM深度學(xué)習(xí)模型的文本分類方法,對(duì)于電信官微用戶情緒分析效果十分有效。在有高質(zhì)量訓(xùn)練樣本標(biāo)注的前提下,這一方法可以很容易地延伸到其他NLP文本分類應(yīng)用場景中,如客服投訴文本分類、客服服務(wù)質(zhì)量評(píng)價(jià)等。
傳統(tǒng)的文本處理方法(例如TF-IDF)基于詞袋(bag-of-word)特征,基本原理還是詞頻統(tǒng)計(jì)。主要有兩個(gè)缺陷,一是丟失了詞的上下文順序,二是忽略了詞的語義差異。對(duì)于類似微博評(píng)論的短文本,語義信息本就不夠豐富,信息丟失就會(huì)對(duì)結(jié)果產(chǎn)生更為明顯的影響。
本文采用基于深度學(xué)習(xí)的NLP技術(shù)進(jìn)行文本分類,工作基礎(chǔ)是詞向量(Word2vec)或稱詞嵌入技術(shù),將有上下文語義信息的詞向量的序列作為文本特征表示,從源頭上基本消除了語義信息丟失的問題。詞向量不僅可以用作文本分類,還可以被作為很多 NLP 相關(guān)工作的數(shù)據(jù)輸入,如文本聚類、文本相似度分析、seq2seq文本生成等。
另外筆者注意到,參考文獻(xiàn)[5]中提到一種使用固定長度向量表征段落文本的方法,該方法是在Word2vec基礎(chǔ)上的進(jìn)一步延伸,也被稱為Sentence2vec,可以規(guī)避本文提到的文本截?cái)嗪脱a(bǔ)齊過程,值得進(jìn)一步研究和嘗試。
近年來,基于深度學(xué)習(xí)的NLP技術(shù)進(jìn)展迅速,在語音識(shí)別、自動(dòng)問答和寫作、機(jī)器翻譯等場景都有了突破性的成果。隨著算法的進(jìn)一步研究和改進(jìn),筆者相信基于深度學(xué)習(xí)技術(shù)一定能催生出更多相關(guān)的人工智能創(chuàng)新產(chǎn)品。
[1] BIRD S, KLEIN E, LOPER E. Python自然語言處理[M]. 陳濤, 張旭, 崔楊, 等譯. 北京: 人民郵電出版社, 2014.
BIRD S, KLEIN E, LOPER E. Natural language processing with Python[M]. Translated by CHEN T, ZHANG X, CUI Y, et al. Beijing: Posts & Telecom Press, 2014.
[2] MIKOLOV T, CHEN K,CORRADO G, et al. Efficient estimation of word representations in vector space[C]// 1st International Conference on Learning Representations(ICLR 2013), Sep 3, 2013, Scottsdale, Arizona, USA. [S.l.:s.n.], 2013.
[3] LECUN Y, BENGIO Y, HINTONG. Deep learning[J]. Nature, 2015, 521(5): 436-444.
[4] 李航. 統(tǒng)計(jì)學(xué)習(xí)方法[M]. 北京: 清華大學(xué)出版社, 2012.
LI H. Statistical learning method[M]. Beijing: Tsinghua University Press, 2012.
[5] LE Q, MIKOLOV T. Distributed representations of sentences and documents[C]//The 31st International Conference on International Conference on Machine Learning, June 21-26, 2014, Beijing, China. New York: ACM Press, 2014.
Sentiment analysis of telecom official micro-blog users based on LSTM deep learning model
CAI Xin, LOU Jingsheng
Shanghai Research Institute of China Telecom Co., Ltd., Shanghai 200122, China
As an internet media, China Telecom official micro-blog is an important channel for the company to publish information and get feedback from users. Users’ comments on telecom official micro-blog messages reflect different attitudes towards telecom brand, products and services. The message content and comment data of the micro-blog was crawled, and the Word2vec was used to express the text information after data cleaning, and the deep learning platform was chosen to carry out the positive and negative emotional classification of the user interaction text based on the LSTM deep neural network model, and sentiment analysis of telecom official micro-blog users was realized.
deep learning, LSTM, sentiment analysis, micro-blog
TP391
A
10.11959/j.issn.1000?0801.2017340
2017?10?31;
2017?11?29
蔡鑫(1975?),男,中國電信股份有限公司上海研究院高級(jí)工程師,主要研究方向?yàn)閿?shù)據(jù)分析挖掘、人工智能、數(shù)據(jù)規(guī)劃和信息管理。
婁京生(1975?),男,中國電信股份有限公司上海研究院助理工程師,主要研究方向?yàn)閿?shù)據(jù)分析挖掘、人工智能。