情感傾向可認(rèn)為是主體對(duì)某一客體主觀(guān)存在的內(nèi)心喜惡忱叭,內(nèi)在評(píng)價(jià)的一種傾向占锯。它由兩個(gè)方面來(lái)衡量:一個(gè)情感傾向方向,一個(gè)是情感傾向度挺身。
情感傾向方向也稱(chēng)為情感極性侯谁。在微博中,可以理解為用戶(hù)對(duì)某客體表達(dá)自身觀(guān)點(diǎn)所持的態(tài)度是支持章钾、反對(duì)墙贱、中立,即通常所指的正面情感贱傀、負(fù)面情感惨撇、中性情感。例如“贊美”與“表?yè)P(yáng)”同為褒義詞府寒,表達(dá)正面情感串纺,而“齷齪”與“丑陋”就是貶義詞,表達(dá)負(fù)面情感椰棘。
情感傾向度是指主體對(duì)客體表達(dá)正面情感或負(fù)面情感時(shí)的強(qiáng)弱程度纺棺,不同的情感程度往往是通過(guò)不同的情感詞或情感語(yǔ)氣等來(lái)體現(xiàn)。例如:“敬愛(ài)”與“親愛(ài)”都是表達(dá)正面情感邪狞,同為褒義詞祷蝌。但是“敬愛(ài)”遠(yuǎn)比“親愛(ài)”在表達(dá)情感程度上要強(qiáng)烈。通常在情感傾向分析研究中帆卓,為了區(qū)分兩者的程度差別巨朦,采取給每個(gè)情感詞賦予不同的權(quán)值來(lái)體現(xiàn)。
目前剑令,情感傾向分析的方法主要分為兩類(lèi):一種是基于情感詞典的方法糊啡;一種是基于機(jī)器學(xué)習(xí)的方法,如基于大規(guī)模語(yǔ)料庫(kù)的機(jī)器學(xué)習(xí)吁津。前者需要用到標(biāo)注好的情感詞典棚蓄,英文的詞典有很多堕扶,中文主要有知網(wǎng)整理的情感詞典Hownet和臺(tái)灣大學(xué)整理發(fā)布的NTUSD兩個(gè)情感詞典,還有哈工大信息檢索研究室開(kāi)源的《同義詞詞林》可以用于情感詞典的擴(kuò)充梭依∩运悖基于機(jī)器學(xué)習(xí)的方法則需要大量的人工標(biāo)注的語(yǔ)料作為訓(xùn)練集,通過(guò)提取文本特征役拴,構(gòu)建分類(lèi)器來(lái)實(shí)現(xiàn)情感的分類(lèi)糊探。
文本情感分析的分析粒度可以是詞語(yǔ)、句子也可以是段落或篇章河闰。段落篇章級(jí)情感分析主要是針對(duì)某個(gè)主題或事件進(jìn)行傾向性判斷科平,一般需要構(gòu)建對(duì)應(yīng)事件的情感詞典,如電影評(píng)論的分析姜性,需要構(gòu)建電影行業(yè)自己的情感詞典效果會(huì)比通用情感詞典效果更好瞪慧;也可以通過(guò)人工標(biāo)注大量電影評(píng)論來(lái)構(gòu)建分類(lèi)器。句子級(jí)的情感分析大多事通過(guò)計(jì)算句子里包含的所有情感詞的平均值來(lái)得到污抬。
篇章級(jí)的情感分析汞贸,也可以通過(guò)聚合篇章中所有的句子的情感傾向來(lái)計(jì)算得出绳军。因此印机,針對(duì)句子級(jí)的情感傾向分析,既能解決較短文本的情感分析门驾,同時(shí)也可以是篇章級(jí)文本情感分析的基礎(chǔ)射赛。本文正是根據(jù)這一思路,設(shè)計(jì)的情感分析算法奶是。
算法主要由三部分組成:
1楣责、文本切割轉(zhuǎn)換
算法設(shè)計(jì)的最大分析對(duì)象為篇章,最小對(duì)象為句子聂沙,我們可以把句子視作特例——單句的篇章秆麸,故算法分析的對(duì)象為文檔D。
Paragraph = Document.split(“/n”) ## 將文檔以換行符”/n”分割成段落P
Sentence = Paragraph.split( punc ) punc = [“及汉【谌ぃ”,”;”,”坷随?”,”房铭!”] ## 將段落用中文里常用的句號(hào)、分號(hào)温眉、問(wèn)號(hào)缸匪、感嘆號(hào)等劃分句意的符號(hào),切割成不同的句子L
Group = Sentence.split(“类溢,”) ## 用逗號(hào)劃分出句子里的意群(表示情感的最小單元)
Seg( each Group ) ##調(diào)用在線(xiàn)分詞工具或者本地分詞函數(shù)凌蔬,對(duì)意群進(jìn)行分詞
開(kāi)源中文分詞工具有很多,如在線(xiàn)的SCWS(PHP),張華平博士團(tuán)隊(duì)開(kāi)發(fā)的NLPIR(C龟梦、Python隐锭、Java),哈工大的LTP(C++计贰、Python)钦睡,還有R語(yǔ)言的分詞包RWordseg(NLPIR的R接口)。幾款分詞工具各有各自的特點(diǎn)躁倒,在這里不詳細(xì)介紹了荞怒,讀者可以自行檢索查閱。
文本切割的目的是將文本變成我們后續(xù)分析需要的格式秧秉,如句子“我今天很不高興褐桌。”象迎,進(jìn)行文本切割后荧嵌,轉(zhuǎn)換成:
[(1,“我”砾淌,“r”)啦撮,(2,“今天”汪厨,”t”)赃春,(3,“很”劫乱,”d”)织中,(4,“不”衷戈,”d”)狭吼,(5,“高興”殖妇,“a”)]
選擇不同的分詞工具刁笙,可以獲得不同的詞語(yǔ)屬性,用SCWS分詞拉一,還可以獲得每個(gè)詞的IDF值采盒;用LTP分詞,可以獲得句子的依存關(guān)系蔚润、語(yǔ)義角色等磅氨。這些屬性對(duì)于我們后面計(jì)算句子的情感傾向都是有幫助的。本文只用都了詞語(yǔ)的詞性嫡纠,感興趣的讀者可以思考如何用其他的屬性來(lái)實(shí)現(xiàn)更好的情感分析烦租。
2延赌、情感定位
本文基于已有的中文情感詞庫(kù),構(gòu)建了一張情感詞表叉橱,然后對(duì)文本進(jìn)行中文分詞處理挫以,將處理后得到的單詞依次與預(yù)先構(gòu)建好的情感詞表逐個(gè)查找,若能找到窃祝,則是情感詞掐松,并讀取情感極性及相應(yīng)權(quán)值,否則粪小,不是情感詞大磺,則進(jìn)入下一個(gè)候選單詞,直至整句話(huà)判斷結(jié)束探膊。
過(guò)程可以表示如下:
For each Paragraph in Document:
???For each Line in Paragraph:
??????For each Group in Line:
?????????For each Word in Group:
????????????If word in senDict:
???????????????senWord = (句中位置杠愧,情感傾向,情感強(qiáng)度)
文本的情感分析是從發(fā)現(xiàn)句中的情感詞開(kāi)始逞壁,通過(guò)情感詞的傾向和傾向度流济,來(lái)決定句子的情感,從而決定整個(gè)文本的情感腌闯。但是我們?cè)趯?shí)際生活中會(huì)發(fā)現(xiàn)绳瘟,否定詞的修飾會(huì)使情感詞語(yǔ)的情感極性發(fā)生改變。比如:“我今天很不高興”绑嘹,該句中“高興”是褒義詞稽荧,由于否定詞“不”的修飾橘茉,使其情感極性發(fā)生了改變工腋,轉(zhuǎn)變成了負(fù)面情感。由于漢語(yǔ)中存在多重否定現(xiàn)象畅卓,即當(dāng)否定詞出現(xiàn)奇數(shù)次時(shí)擅腰,表示否定意思;當(dāng)否定詞出現(xiàn)偶數(shù)次時(shí)翁潘,表示肯定意思趁冈。本文單獨(dú)構(gòu)建了一個(gè)否定詞典notDict,并設(shè)置其權(quán)值為-1拜马,常見(jiàn)的否定詞如:不渗勘、沒(méi)、無(wú)俩莽、非旺坠、莫、弗扮超、毋取刃、勿蹋肮、未、否璧疗、別坯辩、無(wú)、休崩侠。
對(duì)否定詞的處理過(guò)程可以簡(jiǎn)化為:
For each Paragraph in Document:
???For each Line in Paragraph:
??????For each Group in Line:
?????????For each Word in Group:
????????????If word in senDict:
???????????????senWord = (句中位置漆魔,情感傾向,情感強(qiáng)度)
???????????????LastSenWordPosition = 0 ##上一個(gè)情感詞在句中的位置
???????????????for i in range(senWord[0]却音,LastSenWordPosition有送,-1):
??????????????????if Group[i] in notDict:
?????????????????????notWord.append( (句中位置,-1) )
???????????????LastSenWordPosition = senWord[0]
另外僧家,當(dāng)程度副詞修飾情感詞雀摘,該情感詞的情感傾向程度發(fā)生了變化。比如: “今天坐了12個(gè)小時(shí)的車(chē)八拱,身體極度疲憊阵赠。”肌稻,“疲憊”是一個(gè)貶義詞清蚀,前面一個(gè)程度副詞“極度”的修飾使得“疲憊”原來(lái)的情感傾向程度發(fā)生了變化,這比沒(méi)有修飾之前更加強(qiáng)烈爹谭。因此枷邪,為了準(zhǔn)確表達(dá)文本的情感傾向,需做相應(yīng)的權(quán)值調(diào)整诺凡。本文中的程度副詞來(lái)源于知網(wǎng)(HowNet)东揣,選用“情感分析用詞語(yǔ)集(beta版)”中的“中文程度級(jí)別詞語(yǔ)”共219 個(gè),藺璜等人提出了把程度副詞劃分六個(gè)等級(jí)腹泌,筆者為每個(gè)程度副詞定義了一個(gè)權(quán)重嘶卧,被程度副詞修飾后的情感詞其權(quán)值應(yīng)做相應(yīng)調(diào)整。程度副詞如下表所示:
程度副詞示例
type 權(quán)值
超|over 1.5
很|very 1.25
極其|extreme / 最|most 2
較|more 1.2
欠|insufficiently 0.5
稍|-ish 0.8
程度副詞的處理過(guò)程跟否定詞類(lèi)似凉袱,過(guò)程簡(jiǎn)化如下:
For each Paragraph in Document:
???For each Line in Paragraph:
??????For each Group in Line:
?????????For each Word in Group:
????????????If word in senDict:
???????????????senWord = (句中位置芥吟,情感傾向,情感強(qiáng)度)
???????????????LastSenWordPosition = 0 ##上一個(gè)情感詞在句中的位置
???????????????for i in range(senWord[0]专甩,LastSenWordPosition钟鸵,-1):
??????????????????if Group[i] in degreeDict:
?????????????????????degreeWord = ( (句中位置,修飾強(qiáng)度) )
???????????????LastSenWordPosition = senWord[0]
經(jīng)過(guò)這樣的處理涤躲,文本被進(jìn)一步轉(zhuǎn)換格式:
“我今天很不高興棺耍。”
①經(jīng)過(guò)文本切割轉(zhuǎn)換
[(1篓叶,“我”烈掠,“r”)羞秤,(2,“今天”左敌,”t”)瘾蛋,(3,“很”矫限,”d”)哺哼,(4,“不”叼风,”d”)取董,(5,“高興”无宿,“a”)]
②情感定位
[(5茵汰,“Happy”,4)孽鸡,[(4,-1)]蹂午,(3,1.25)] ##[情感詞,否定詞彬碱,程度副詞]
3豆胸、情感聚合
本文在前面說(shuō)過(guò),篇章級(jí)情感傾向通過(guò)聚合篇章中所有的句子的情感傾向來(lái)計(jì)算得出巷疼。句子級(jí)由句子中所含情感詞來(lái)計(jì)算晚胡。通過(guò)前兩步的操作,我們完成了句子意群的劃分嚼沿,同時(shí)也提出了每個(gè)意群里的情感詞蟀架、否定詞和程度副詞缴淋。有了這些喷好,下面我們先求出意群的情感值:
情感群—情感值 = 否定詞-1 * 程度詞權(quán)重 * 情感詞權(quán)重
我們?cè)趯?shí)際應(yīng)用中又發(fā)現(xiàn)胡控,當(dāng)一個(gè)句子中同時(shí)出現(xiàn)否定詞和程度詞時(shí)扎瓶,由于否定詞和程度詞相對(duì)位置的不同缘薛,會(huì)引起情感的不同沃测,比如:
“我很不高興”——分詞之后: 我 很 不 高興
“我不很高興”——分詞之后: 我 不 很 高興
可以看出溶褪,第一句話(huà)表達(dá)的是一種很強(qiáng)烈的負(fù)面情感沙咏,而第二句話(huà)則表達(dá)的是一種較弱的正面情感辨图。因此,如果否定詞在程度詞之前肢藐,起到的是減弱的作用故河;如果否定詞在程度詞之后,則起到的是逆向情感的作用吆豹。所以我們對(duì)上述算法做了一下調(diào)整:
W = 1
If 位置(否定詞)> 位置(程度詞):
W = -1
意群情感值 = W * 程度詞權(quán)重 * 情感詞權(quán)重
If 位置(否定詞)< 位置(程度詞):
W = 0.5
意群情感值 = W * 程度詞權(quán)重 * 情感詞權(quán)重
如果意群里出現(xiàn)多個(gè)否定詞鱼的,則處理辦法為:
For n in notWord:
???W = -1 * W
句子是由意群組成理盆,故句子的情感我們可以簡(jiǎn)單記做:
句子情感值 = sum(意群情感值1,意群情感值2……)
段落是由不同的句子組成凑阶,但是考慮到段落的長(zhǎng)短變化很大猿规,故放棄用求和的方式來(lái)計(jì)算情感值,改為求平均值:
段落情感值 = average(句子1情感值宙橱,句子2情感值……)
文檔是由不同的段落組成姨俩,同理,不同文檔有不同的段落师郑,故我們同樣求平均值:
文檔情感值 = average(段落1情感值环葵,段落2情感值……)
以上是情感值的計(jì)算,至于情感傾向宝冕,首先可以通過(guò)情感值的符號(hào)來(lái)判斷情感傾向是正向還是負(fù)向张遭,若情感傾向不止正、負(fù)地梨、中立這三種情況帝璧,還有更細(xì)的劃分,則可以根據(jù)情感正負(fù)的情況湿刽,把對(duì)應(yīng)的情感傾向進(jìn)行匯總來(lái)表述的烁。
上述的做法是最簡(jiǎn)單的做法,沒(méi)有考慮太多句子之間的差異以及不同段落對(duì)文檔的重要性诈闺。
本算法還有很多值得改進(jìn)的地方渴庆,比如句子是由詞語(yǔ)根據(jù)一定的語(yǔ)言規(guī)則構(gòu)成的,應(yīng)該把句子中詞語(yǔ)的依存關(guān)系納入到句子情感的計(jì)算過(guò)程中去雅镊,可根據(jù)句子依存關(guān)系襟雷,從句子的根節(jié)點(diǎn)開(kāi)始對(duì)每個(gè)詞進(jìn)行情感傾向計(jì)算,根據(jù)句子依存關(guān)系求出句子的情感傾向和情感值仁烹。文檔的情感耸弄,也應(yīng)該根據(jù)句子的不同重要程度來(lái)計(jì)算,根據(jù)句子對(duì)文檔的重要程度賦予不同權(quán)重卓缰,調(diào)整其對(duì)文檔情感的貢獻(xiàn)程度计呈。確定句子的重要程度,可以根據(jù)句子在文檔中的位置征唬,根據(jù)句子中所含信息量的大小捌显,句子中所含關(guān)鍵詞的多少等等。
筆者按照這個(gè)思路总寒,用python寫(xiě)了一百多行的代碼實(shí)現(xiàn)了上述的算法扶歪,測(cè)試了一番,效果還可以摄闸,但詞典的精度還需改進(jìn)善镰。
對(duì)《圣經(jīng)》文本進(jìn)行的情感分析 來(lái)自:視物致知
openbible.info使用Viralheat Sentiment Analysis API對(duì)圣經(jīng)所做的情感分析以及可視化妹萨。
參考文獻(xiàn):
陳曉東. (2012). 基于情感詞典的中文微博情感傾向分析研究 (Master’s thesis, 華中科技大學(xué)).
王飛躍,李曉晨,毛文吉,王濤. (2013). 社會(huì)計(jì)算的基本方法與應(yīng)用 (pp. 36-49). 浙江大學(xué)出版社.
rzcoding. Python 文本挖掘:使用情感詞典進(jìn)行情感分析(算法及程序設(shè)計(jì)).http://rzcoding.blog.163.com/blog/static/2222810172013101844033170/