楊 政,易綿竹
(信息工程大學(xué) 洛陽(yáng)校區(qū),洛陽(yáng) 471003)
由于信息科技日新月異的變革和網(wǎng)絡(luò)數(shù)據(jù)洪流的沖擊,人們?nèi)粘J褂玫恼Z(yǔ)言在不斷發(fā)生著變化,有越來(lái)越少使用的舊詞匯被淘汰,也有更多的新詞匯大量涌現(xiàn).每一種新詞的出現(xiàn)和變化發(fā)展都蘊(yùn)含了不同的情感意義.因此,對(duì)于情感詞的新詞發(fā)現(xiàn)以及新詞的傾向性分析研究一直是情感分析中的熱點(diǎn)問(wèn)題.
但是,新詞的產(chǎn)生伴隨著多種情緒的表達(dá),這使得一個(gè)新詞可能包含多種情感傾向,而其中每種傾向的重要度各不相同.因此本文提出基于詞向量的新詞情感傾向性分析方法,通過(guò)量化的方式分析新詞可能含有的多種情感傾向.同時(shí),通過(guò)訓(xùn)練詞向量,可以對(duì)具有相似情感傾向的情感詞進(jìn)行聚類分析,尋找近義詞.
對(duì)新詞的發(fā)現(xiàn)和對(duì)新詞進(jìn)行情感分類的研究,國(guó)外目前已有大量的相關(guān)工作,對(duì)于文本情感分析也取得不少研究成果,但是國(guó)內(nèi)對(duì)于短文本,例如情感短語(yǔ)或情感詞的研究可分為兩種,一是基于情感詞典和規(guī)則的短文本情感分析,二是基于機(jī)器學(xué)習(xí)的短文本情感分析.
基于情感詞典的情感分析有肖江[1]等采用相似度方法構(gòu)建相關(guān)領(lǐng)域情感詞典,有Jo[2]等基于“主題-句子”關(guān)系的情感分類方法,在詞上同時(shí)標(biāo)記主題和情感兩類標(biāo)簽,有楊立月[3]等構(gòu)建的微博情感詞典,包括開源情感詞典、具有時(shí)代特征的網(wǎng)絡(luò)情感詞典以及具有明顯情感傾向的語(yǔ)氣情感詞典.基于機(jī)器學(xué)習(xí)的情感分類方法有2013年Liu[4]等提出的將Co-training協(xié)同訓(xùn)練算法和SVM相結(jié)合進(jìn)行的情感分析.2016年Dey[5]等利用Bayes算法進(jìn)行的情感分析.
但是,情感新詞的發(fā)現(xiàn)不僅限于圍繞情感詞典發(fā)現(xiàn)的詞語(yǔ),很多新詞的產(chǎn)生都富含情感的標(biāo)簽.例如“閨蜜”雖然是名詞,但是能表達(dá)一個(gè)人對(duì)另一個(gè)人蘊(yùn)含的親密情緒.除此之外,一個(gè)情感新詞的情感也并不是單一的分類,而是有多重情緒在其中的,并且比重也不相同.所以對(duì)情感新詞的傾向應(yīng)該是多分類的.因此,本文提出基于詞向量的中文新詞情感傾向性分析.
自然語(yǔ)言處理領(lǐng)域一個(gè)重要攻克方向就是中文分詞問(wèn)題.中文語(yǔ)言處理的過(guò)程不像西方語(yǔ)言一樣在詞與詞之間有天然的分界線,所以分詞問(wèn)題就可以在很大程度上影響接下來(lái)的很多步驟,例如關(guān)系抽取、自動(dòng)文摘等.而現(xiàn)在大多的分詞方法都是根據(jù)詞庫(kù)進(jìn)行的,那么未登錄詞的問(wèn)題就顯得更為重要[6,7].中文的書寫沒(méi)有首字母大寫,也沒(méi)有專名號(hào)等,因此計(jì)算機(jī)難以辨認(rèn)人名地名等專有名詞.除專有名詞外,網(wǎng)絡(luò)用語(yǔ)、品牌機(jī)構(gòu)名、縮略語(yǔ)、簡(jiǎn)寫詞等詞匯,它們的出現(xiàn)和演變似乎完全無(wú)規(guī)律可尋.隨著語(yǔ)言處理的重要性不斷提高,中文分詞領(lǐng)域的研究都在集中攻克這一難關(guān).自動(dòng)發(fā)現(xiàn)新詞成為了關(guān)鍵的環(huán)節(jié).
新詞挖掘的傳統(tǒng)方法是,首先對(duì)文本進(jìn)行分詞,假定未能成功匹配的文本剩余片段是新詞,然后提取這些片段[8].但是,分詞結(jié)果的準(zhǔn)確性是依賴于分詞詞庫(kù)的完整性的,如果分詞詞庫(kù)中完全沒(méi)有新詞,那么分詞的結(jié)果就可能導(dǎo)致挖掘的“新詞”難以成詞.
那么新詞挖掘需要另辟蹊徑,一種成熟的想法是,不依賴于任何已建立好的詞庫(kù),而僅僅根據(jù)詞本身含有的特征,在較大規(guī)模的語(yǔ)料中將可能成詞的文本片段全都提取出來(lái),不論該詞是新詞還是舊詞.然后,將這個(gè)提取的詞庫(kù)中的詞和已有詞庫(kù)進(jìn)行比較,就可以找出新詞了[9-11].
判斷一個(gè)詞是否可以成詞的首要標(biāo)準(zhǔn)是該詞的凝合度[12].例如在約5900萬(wàn)字的訓(xùn)練語(yǔ)料庫(kù)中,出現(xiàn)頻率超過(guò)150的兩個(gè)字段,“的設(shè)計(jì)”的出現(xiàn)頻率比“設(shè)計(jì)感”要高,但是在人們的認(rèn)知中“設(shè)計(jì)感”才是一個(gè)詞,這就說(shuō)明“設(shè)計(jì)”和“感”的結(jié)合程度更緊密,但是“設(shè)計(jì)”和“的”的結(jié)合就沒(méi)有達(dá)到人們認(rèn)知中的緊密程度.
下面將通過(guò)計(jì)算證明“設(shè)計(jì)感”一詞的內(nèi)部凝固程度比“的設(shè)計(jì)”要高.如果“設(shè)計(jì)”一詞和“感”在文本中的出現(xiàn)是獨(dú)立的,并且是隨機(jī)的,那么計(jì)算這3個(gè)字被拼湊到一起的概率.在該5900萬(wàn)字的語(yǔ)料庫(kù)中,“設(shè)計(jì)”一詞出現(xiàn)了8491次,該詞出現(xiàn)的概率約為0.000 0143.“感”字在語(yǔ)料中出現(xiàn)了59 448次,出現(xiàn)的概率約為0.000 9321.如果這兩個(gè)字段之間隨機(jī)且相互獨(dú)立,那么“設(shè)計(jì)感”一詞出現(xiàn)的概率就應(yīng)該是0.000 0143×0.000 9321,約為 1.33×10-7.但事實(shí)上,“設(shè)計(jì)感”一詞在該語(yǔ)料中出現(xiàn)了185次,出現(xiàn)概率約為3.13×10-6,大約是預(yù)測(cè)值的46倍.以此類推,統(tǒng)計(jì)語(yǔ)料可發(fā)現(xiàn)“的”字的出現(xiàn)概率約為0.0343,因而“的”和“設(shè)計(jì)”隨機(jī)組合到一起的概率應(yīng)當(dāng)為0.0343×0.000 0143,約為4.904×10-6,出現(xiàn)的頻次應(yīng)當(dāng)在290次,這個(gè)數(shù)據(jù)與“的設(shè)計(jì)”在語(yǔ)料中出現(xiàn)的頻次比較接近,該字段出現(xiàn)的頻次為1816,是預(yù)測(cè)值的6.26倍.從以上的計(jì)算可以看出,“設(shè)計(jì)感”的結(jié)合更緊密,該字段是一個(gè)有意義的搭配的可能性更大,而“的設(shè)計(jì)”的出現(xiàn)則更有可能是“的”和“設(shè)計(jì)”這兩個(gè)字段被隨機(jī)拼接到一起的.
但是,一個(gè)值得注意的問(wèn)題是,計(jì)算的過(guò)程中不存在先驗(yàn)知識(shí).換言之,“設(shè)計(jì)感”一詞可能是由“設(shè)計(jì)”和“感”組合而成,也可能是“設(shè)”和“計(jì)感”組合而成,因此在計(jì)算的時(shí)候需要枚舉一個(gè)字段的多種組合方法,然后取概率最大的組合方式.
一個(gè)詞之所以成詞除了其內(nèi)部的凝合度之外,還有一個(gè)標(biāo)準(zhǔn)就是該詞外部的自由度[13].例如“輩子”的用法,除了“一輩子”、“這輩子”、“上輩子”、“下輩子”等用法外,在“輩子”前面添加字就沒(méi)有很多選擇了.“輩子”這個(gè)字段左邊可以出現(xiàn)的字比較有限,因此在計(jì)算凝合度時(shí),“輩子”并不單獨(dú)成詞,真正成詞的其實(shí)是“一輩子”、“這輩子”這樣的整體.
因此需要添加“信息熵”的概念,信息熵反映了獲得一個(gè)事件的結(jié)果后會(huì)帶來(lái)多大的信息量.如果一個(gè)事件某個(gè)結(jié)果的發(fā)生概率為p,當(dāng)該結(jié)果出現(xiàn)時(shí),將被得到的信息量就被定義為-log(p).p的值越小,得到的信息量就越大.
鄰接熵是Huang等[14]提出的判斷一個(gè)字串是否成詞的重要統(tǒng)計(jì)量.鄰接熵統(tǒng)計(jì)量利用信息熵來(lái)衡量候選新詞t的左鄰字符和右鄰字符的不確定性.不確定性越高,表明候選新詞t的前后字符串越混亂,越不穩(wěn)定,所以其成詞的可能性就越高.
例如在實(shí)驗(yàn)用語(yǔ)料中,“杯子”一詞一共出現(xiàn)了1080次,“輩子”一詞一共出現(xiàn)了4030次,兩者的右鄰字集合的信息熵分別為4.7374和6.1655,數(shù)值上是接近的.但“杯子”的左鄰字則用例非常豐富.例如“加杯子”、“拿杯子”、“用杯子”、“新杯子”、“舊杯子”、“收杯子”、“摔杯子”等幾十種不同的用法.計(jì)算得出“杯子”所有左鄰字的信息熵為4.9745.但“輩子”的左鄰字則相對(duì)少了很多,在語(yǔ)料庫(kù)中出現(xiàn)的4030個(gè)“輩子”中有3240個(gè)是“一輩子”,414個(gè)“這輩子”,261個(gè)“下輩子”,78 個(gè)“上輩子”,除此之外還有“n 輩子”、“兩輩子”等15種比較罕見(jiàn)的用法.所有左鄰字的信息熵僅為1.3679.
除了左鄰字外,一些文本片段雖然左鄰字用法很多,右鄰字用例卻非常貧乏,例如“國(guó)慶”、“托兒”、“鵝卵”等,這些詞單獨(dú)成詞也是不符合常理的.
因此,一個(gè)短語(yǔ)或詞的自由運(yùn)用程度可以定義為這個(gè)短語(yǔ)的左鄰字信息熵和右鄰字信息熵中的較小值.
使用詞向量來(lái)表示詞的方法很早之前就出現(xiàn)了,一般叫做1-of-N representation,也有叫獨(dú)熱表示法等等,但是這種方法使用的維度是整個(gè)詞匯表的大小.對(duì)于詞表中每個(gè)詞,將該詞對(duì)應(yīng)位置上的0置為1.例如一個(gè)有5個(gè)詞的詞表,第二個(gè)詞answer的向量表示就是(0,1,0,0,0),第五個(gè)詞hungry的向量表示就是(0,0,0,0,1).因此可以看出,一個(gè)詞匯表的詞匯量一般非常大,所以這種詞匯向量的表達(dá)方式稀疏程度非常大,表達(dá)效率也不高[15].
解決這個(gè)問(wèn)題的方法是Dristributed representation,該方法是通過(guò)訓(xùn)練,將每個(gè)詞表示為一個(gè)較短的向量,向量的每個(gè)維度表達(dá)一個(gè)語(yǔ)義信息[16],但是這個(gè)向量每個(gè)維度具體表達(dá)什么意義的可解釋性不好.在Word2Vec出現(xiàn)前,一般使用神經(jīng)網(wǎng)絡(luò)訓(xùn)練詞向量從而處理詞.一般分為CBOW (Continuous Bag-of-Words與Skip-Gram兩種模型[17-19].CBOW模型的輸入是文本中一個(gè)詞對(duì)應(yīng)的上下文詞的詞向量,而輸出是該詞的詞向量.例如句子片段“…distributed representations which encode the relevant grammatical relations…”上下文大小為6,輸出詞是“encode”,那么輸入就應(yīng)當(dāng)是“encode”的前 3 個(gè)詞和后3個(gè)詞的詞向量.需要說(shuō)明的是,這6個(gè)詞是沒(méi)有先后順序的,使用的是詞袋模型.而Skip-Gram模型和CBOW模型相反的,其輸入是一個(gè)詞的詞向量,而輸出是該詞上下文詞語(yǔ)的詞向量.如上例中,Skip-Gram模型的輸入為“encode”的詞向量,而輸出則是“encode”上下文各3個(gè)詞,一共6個(gè)詞的詞向量.而Word2Vec則使用哈夫曼數(shù)的數(shù)據(jù)結(jié)構(gòu)代替了神經(jīng)網(wǎng)絡(luò)模型,同樣也分為CBOW和Skip-Gram兩種模型.
首先分析CBOW模型.第一步需要定義詞向量的維度大小為M,以及該字段的上下文大小2c,這樣對(duì)于訓(xùn)練樣本中的每一個(gè)詞,其前面的c個(gè)詞和后面的c個(gè)詞就作為CBOW模型的輸入,輸出為所有詞匯的詞向量w.算法步驟如算法1.
算法1.CBOW模型算法(1)以訓(xùn)練語(yǔ)料為樣本建立哈夫曼樹;(2)隨機(jī)初始化所有的模型參數(shù)θ和詞向量;(3)進(jìn)行梯度上升迭代過(guò)程,對(duì)于訓(xùn)練集中的每一個(gè)樣本(context(w),w)做如下處理:(3.1)e=0,計(jì)算images/BZ_251_1563_2166_1809_2220.png∑images/BZ_251_1357_2260_1524_2310.png(3.2)for j = 2 toimages/BZ_251_1572_2230_1614_2267.png,計(jì)算:()images/BZ_251_1357_2310_1520_2360.pngimages/BZ_251_1357_2360_1486_2402.pngimages/BZ_251_1357_2402_1549_2444.png(4)對(duì)于 context(w)中的每一個(gè)詞向量Xi(共2c個(gè))進(jìn)行更新:images/BZ_251_1333_2519_1445_2553.png;(5)如果梯度收斂,則結(jié)束梯度迭代,否則返回第(3)步.
而對(duì)于Skip-Gram模型,該模型的輸入輸出與CBOW模型相同,訓(xùn)練算法如算法2.
算法2.Skip-Gram模型算法(1)以訓(xùn)練語(yǔ)料為樣本建立哈夫曼樹;(2)隨機(jī)初始化所有的模型參數(shù)θ和詞向量;(3)進(jìn)行梯度上升迭代過(guò)程,對(duì)于訓(xùn)練集中的每一個(gè)樣本(w,context(w))做如下處理:
images/BZ_252_251_546_418_596.png)(for i=1 to 2c e=0 for j = 2 to lw,計(jì)算:(images/BZ_252_251_600_414_650.png)images/BZ_252_251_663_380_705.png images/BZ_252_251_716_430_757.pngimages/BZ_252_226_776_330_801.png(4)如果梯度收斂,則結(jié)束梯度迭代,否則返回第(3)步.
在Word2Vec中,除了基于哈夫曼樹的方法訓(xùn)練模型外,還有基于負(fù)采樣的方法[20].因?yàn)橐粋€(gè)詞如果過(guò)于生僻,則哈夫曼樹的查找層級(jí)就會(huì)比較多.而采用負(fù)采樣的方法時(shí),每次只是通過(guò)采樣n個(gè)不同的中心詞做負(fù)例,就可以訓(xùn)練模型.
基于詞向量的新詞情感傾向性分析是首先利用上文中提及的凝合度、信息熵以及詞頻等計(jì)算量,通過(guò)一定的閾值設(shè)定發(fā)現(xiàn)新詞.然后,利用Word2Vec通過(guò)對(duì)訓(xùn)練語(yǔ)料的學(xué)習(xí),生成詞表中所有詞的詞向量,而后找出所有新詞詞表中與其相似度最高的幾個(gè)詞.該新詞發(fā)現(xiàn)及情感傾向分析方法的構(gòu)建架構(gòu)如圖1所示.
圖1 新詞發(fā)現(xiàn)及情感傾向分析設(shè)計(jì)架構(gòu)
該方法首先要將語(yǔ)料中所有字分成長(zhǎng)度小于5的字段,然后對(duì)字段進(jìn)行計(jì)算凝合度以及信息熵.計(jì)算完成后,選擇處于某閾值內(nèi)的詞作為新詞.將新詞添加進(jìn)分詞詞表中后,對(duì)語(yǔ)料進(jìn)行分詞處理,分詞后訓(xùn)練所有詞的詞向量.隨后,計(jì)算所有新詞的中,與每個(gè)詞距離最近的前n個(gè)詞.最后進(jìn)行情感傾向分析.具體的構(gòu)建過(guò)程如下:
步驟1.從待檢索的文本庫(kù)中通過(guò)對(duì)xml語(yǔ)言或html語(yǔ)言的分析,將網(wǎng)頁(yè)中的文本內(nèi)容提取出來(lái).
步驟2.對(duì)文本分成若干長(zhǎng)度小于5的字段.并計(jì)算每個(gè)字段的凝合度和信息熵.根據(jù)實(shí)驗(yàn)得出的最佳閾值篩選得出新詞表.
步驟3.對(duì)文本進(jìn)行分詞處理.一般分詞后要去除停用詞,但是詞向量的學(xué)習(xí)要依據(jù)上下文,停用詞也會(huì)詞其產(chǎn)生影響,因此在這一步先不去除停用詞.
步驟4.將分詞后的文件利用Word2Vec進(jìn)行訓(xùn)練,并不斷地調(diào)整參數(shù)以得到令人滿意的結(jié)果.訓(xùn)練結(jié)束得到所有詞的詞向量.
步驟5.找出新詞表中與每個(gè)詞距離最近的前n個(gè)詞,通過(guò)這些詞的情感傾向分析新詞的情感傾向.
該方法流程圖如圖2所示.
圖2 新詞發(fā)現(xiàn)及情感傾向性分析方法流程圖
為了檢驗(yàn)提出的方法,本文從新浪微博上抓取了1200萬(wàn)條數(shù)據(jù),主要分析內(nèi)容為每條微博的文本內(nèi)容作為語(yǔ)料庫(kù).
新詞發(fā)現(xiàn)步驟中,經(jīng)過(guò)多次實(shí)驗(yàn),本文將新詞獲取的凝合度閾值設(shè)定為0.35,信息熵設(shè)定為0.5至1.5之間.添加的新詞舉例如表1所示.
表1 新詞發(fā)現(xiàn)舉例
通過(guò)對(duì)模型訓(xùn)練時(shí)參數(shù)的調(diào)整,除詞向量維度外,其余參數(shù)選定包括,當(dāng)前詞與預(yù)測(cè)詞在一個(gè)句子中的最大距離為3,使用CBOW算法.詞與詞之間的距離計(jì)算公式為兩向量的Cosine值:
程序輸入為以上舉例中的5個(gè)新詞,輸出為訓(xùn)練模型中與每個(gè)詞相似度最大的4個(gè)詞,當(dāng)調(diào)整模型詞向量空間維度為100時(shí),輸出結(jié)果如表2所示.每個(gè)新詞對(duì)應(yīng)4個(gè)距離最近的詞,對(duì)每個(gè)新詞分別列出了這4個(gè)詞以及他們之間的距離.
表2 情感傾向分析結(jié)果
從表2的結(jié)果可以看出,經(jīng)過(guò)詞向量訓(xùn)練的新詞可以從與其相近的詞中分析其情感傾向.例如抓狂表達(dá)的情感與淚、可憐、衰等都是相近的.同時(shí),通過(guò)兩個(gè)詞之間不同的距離也可以看出近似關(guān)系的遠(yuǎn)近.
為更具體表義社會(huì)新詞的情感含義及其傾向性,本文提出了一種基于詞向量的新詞情感傾向性分析方法.本文在分析了新詞發(fā)現(xiàn)方法和詞向量訓(xùn)練工具Word2Vec的基礎(chǔ)上,研究了基于Word2Vec的新詞情感傾向性分析方法的可行性和架構(gòu)設(shè)計(jì),并面向微博語(yǔ)料進(jìn)行實(shí)驗(yàn).從實(shí)驗(yàn)結(jié)果可以看出該方法具有較好的可行性和可以信服的結(jié)果,但是在具體的新詞情感傾向性分類上沒(méi)有進(jìn)行,因此還有很多待完善的細(xì)節(jié).
對(duì)情感詞的新詞發(fā)現(xiàn)和傾向性分析是為了更好理解用戶通過(guò)文本表達(dá)的情感,也是為中文分詞的未登錄詞挖掘提供了一種探索的方法.雖然該方向的研究仍存在諸多困難,但是在不斷深入創(chuàng)新的過(guò)程中必會(huì)取得令人滿意的效果.