基于詞典的中文情感傾向分析算法設(shè)計(jì)

情感傾向可認(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/

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市炫欺,隨后出現(xiàn)的幾起案子眠副,更是在濱河造成了極大的恐慌,老刑警劉巖竣稽,帶你破解...
    沈念sama閱讀 216,496評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件囱怕,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡毫别,警方通過(guò)查閱死者的電腦和手機(jī)娃弓,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)岛宦,“玉大人台丛,你說(shuō)我怎么就攤上這事±危” “怎么了挽霉?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,632評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀(guān)的道長(zhǎng)变汪。 經(jīng)常有香客問(wèn)我侠坎,道長(zhǎng),這世上最難降的妖魔是什么裙盾? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,180評(píng)論 1 292
  • 正文 為了忘掉前任实胸,我火速辦了婚禮,結(jié)果婚禮上番官,老公的妹妹穿的比我還像新娘庐完。我一直安慰自己,他們只是感情好徘熔,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,198評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布门躯。 她就那樣靜靜地躺著,像睡著了一般酷师。 火紅的嫁衣襯著肌膚如雪讶凉。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,165評(píng)論 1 299
  • 那天窒升,我揣著相機(jī)與錄音缀遍,去河邊找鬼。 笑死饱须,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的台谊。 我是一名探鬼主播蓉媳,決...
    沈念sama閱讀 40,052評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼譬挚,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了酪呻?” 一聲冷哼從身側(cè)響起减宣,我...
    開(kāi)封第一講書(shū)人閱讀 38,910評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎玩荠,沒(méi)想到半個(gè)月后漆腌,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,324評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡阶冈,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,542評(píng)論 2 332
  • 正文 我和宋清朗相戀三年闷尿,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片女坑。...
    茶點(diǎn)故事閱讀 39,711評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡填具,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出匆骗,到底是詐尸還是另有隱情劳景,我是刑警寧澤,帶...
    沈念sama閱讀 35,424評(píng)論 5 343
  • 正文 年R本政府宣布碉就,位于F島的核電站盟广,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏瓮钥。R本人自食惡果不足惜衡蚂,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,017評(píng)論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望骏庸。 院中可真熱鬧毛甲,春花似錦、人聲如沸具被。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,668評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)一姿。三九已至七咧,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間叮叹,已是汗流浹背艾栋。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,823評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蛉顽,地道東北人蝗砾。 一個(gè)月前我還...
    沈念sama閱讀 47,722評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親悼粮。 傳聞我的和親對(duì)象是個(gè)殘疾皇子闲勺,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,611評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容

  • 0前言 昨天收到鏈家網(wǎng)的通知,今天10:30面試扣猫。為了更好的控制時(shí)間菜循,我九點(diǎn)半就到了面試地點(diǎn)附近,沒(méi)想到意外的...
    點(diǎn)妞妞閱讀 3,867評(píng)論 1 19
  • 焦點(diǎn)講師一期班洛陽(yáng)劉琳?qǐng)?jiān)持分享第六十五天 在準(zhǔn)備明天的減壓課的過(guò)程中申尤,收獲到一個(gè)很好的故事癌幕,讓我感觸很深。...
    小溪與大海閱讀 305評(píng)論 1 1
  • 1 . 打開(kāi)終端 終端輸入 sudo gem update --system 更新ruby環(huán)境: 終端輸入 $r...
    HeavenWong閱讀 316評(píng)論 1 1