黃杰晟
(廣東開放大學人工智能學院,廣州510091)
主題文本分析也稱主題發現(Topic Discovery),是利用一系列語義理解方法,從復雜的大規模信息源中抽取關鍵詞或術語,并在此基礎上加以聚類,從而發現文獻主題的技術方法。旨在處理和分析大規模信息并且使用戶快速有效了解信息內容,發現信息中的主題[1]。
情感文本分析(Sentiment Analysis)是自然語言處理(NLP)中一個重要的研究方向,也叫意見挖掘或傾向性分析,是人們對帶有情感色彩的主觀性文本進行分析、處理、歸納和推理的過程,例如產品、話題、評論、情緒或者態度的領域,通過分析文本中的字、詞、句、篇是積極(Positive)還是消極(Negative)的情感。
情感文本傾向性分析與主題文本分析相似但有所不同,主題文本分類分析是基于內容本身,把文本分類到各個預定義的主題上,如政治、軍事、財經、體育等;而情感文本分類不是基于內容本身,而是按照文本表達的情感、態度進行判斷。現有的機器學習中的分類方法都可以用到情感分類。
中國傳統古詩詞文字簡潔用意深刻,重在以意象來表現詩歌的內涵,加上常運用典故,遣詞用字比較晦澀難懂,如果首先能通過對詩詞進行情感和主題的分析,高效快速對古詩詞作品乃至詩詞作者有一個大致的了解,再結合創作作品的時代背景,最后通過對詩詞作品“字-句-聯-篇”細細品味,能使現代人更容易理解中國傳統文化詩歌的內涵,對繼承與發揚古詩詞都能起到積極的作用。因此本文選取了被世人稱作“詩圣”的著名唐代詩人杜甫的詩集做相關情感和主題分析,理由有二,一是杜甫名氣大,詩歌創作水平高;二是其作品數量眾多,共有1400余首詩注①清初錢謙益《錢注杜詩》(上海古籍出版社,1979年),王鳴盛推崇為“從來注杜第一善本”。錢謙益箋注的杜詩,是南宋紹興三年(1133)吳若在建康(今江蘇南京)府學刻行的杜集,前八卷集古詩415首,卷九至卷十八集近體詩1009首,合1424首。仇兆鰲詳注秦亮點校《杜詩全集》(珠海出版社,1996年)卷一至卷二十三集“杜詩計1439首”。。
NLP情感分析中一般有兩種方法,第一種是基于情感詞統計,可以自定義相關的情感詞詞頻進行統計,對照現有的情感詞典,通過對情感詞和組合句子的得分score進行打分,如果score>0判斷為正向,如果score<0判斷為負向,該方法的優點是簡單,通用性強,但其效果主要依賴情感詞典對情感詞采集和統計質量。第二種方法是基于機器學習,對文本情感進行特征提取,利用機器學習的方法構建分類器,機器學習的情感分析是根據不同的對象,人工選取和設計不同的特征及分類器,這種方法對情感極性的判斷會更加準確,但相對復雜。本文采用了兩種方法進行了結合,對于以杜甫全集為例的古詩詞進行情感分析,首先通過提取關鍵詞進行大致的情感分析,再通過情感詞典判別用詞是正面情感還是負面情感,統計情感值判斷情感極性,最后使用機器學習的主題模型LDA聚類算法進行主題挖掘分析。
本文分析的數據對象是唐代偉大杜甫的作品全集,本互聯網版杜甫全集有1150首,共有139,385個字,包含了杜甫一生創作的所有詩,數據樣本充足。杜甫被后世成為“詩圣”,是唐代的現實主義詩人,其作品絕大多數已被后人熟悉與分析。杜甫年輕時處于盛唐年間,經濟繁榮,天下太平,其中晚年由于安史之亂爆發,戰爭不斷,唐朝由盛轉衰,經濟敗落,民不聊生,造就了其作品大多深刻地反映了這段時期的社會現實,以詩歌抒發憂國憂民的思想和和表達悲天憫人的情感,有明顯的主題內容和情感分析代表性。
知網提供的HowNet和臺灣大學的NTUSD是中文領域使用較多的兩個情感詞典。HowNet包含評價詞語和情感詞語兩個部分,其中情感詞語中含有836個正面情感詞和1254個負面情感詞語,評價詞語中含有3730個正面評價詞語和3116個負面評價詞語。NTUSD包含2810個正面情感詞語和8276個負面情感詞語[2]。但是情感的極性依然需要人工建模構建,建模不同得到的情感極性也不同。
而在實際項目開發更被開發者青睞的是波森中文語義開放平臺所提供的BosonNLP情感詞典,它收集了114765個在社交媒體中的常用字詞,詞典適用于處理社交媒體的情感分析,數據分為鍵和值兩部分,每個詞都對應著一個-6.7到+6.4的值,代表積極或消極情感,正數越大,代表積極情感越強烈,負數越大,代表消極情感越強烈。其優點在于已經通過建模為現代社交常用詞標注了情感值,缺點在于標注的情感值用于社交情感分析會比較準確,用于分析其他領域會有一定失誤。
常用的方法是通過逐點互信息(Point-wise Mutual Information,PMI)來建立情感詞典。逐點互信息用在自然語言處理中用作度量詞與詞之間的緊密程度。如果兩個詞在一定距離范圍內共同出現,則認為這兩個詞共現,可以將這組固定搭配作為一個組合特征添加到分詞程序中。
文本信息處理必須對文本對象進行分詞處理,在英文中,單詞之間是以空格作為自然分界符的,而在中文中,字、句和段能通過明顯的分界符來簡單劃界,唯獨很難對詞的邊界進行界定,因此處理中文文本時,需要對分詞進行處理,把句子轉為詞來表示。本文采用的是Python中的jieba中文分詞庫進行分詞。
停用詞(stop word)是一類沒有實際意義,但卻在文本中非常常見又必不可少的詞,常為冠詞、介詞、副詞或連詞等,在信息處理中,除去停用詞有助于節省存儲空間和提高搜索和分析效率。本文去除停用詞選取的是哈工大停用詞庫。
情感分析的一種簡單而有效的方式是統計作者在作品中的高頻詞,通過分析高頻詞的情感,達到預測作者作品的情感。
對詞頻(Term Frequency,TF)的統計可以采用以下幾種方式:
第一種是統計所有分詞中出現次數最高的詞,詞頻TF為某個詞在文檔中出現的次數,詞頻高的詞常作為關鍵詞;但這樣的詞常包含許多沒有意思的詞,所以要把它們去掉,即去除停用詞。而且在NLP中并不是出現的越多就越重要,出現的越少就越不重要。
第二種是采用TF-IDF詞頻統計方式,TF-IDF是一種簡單有效的提取關鍵詞的方法。TF為某個詞在文章出現的總次數/文章中的總詞數,IDF(Inverse Doc-ument Frequency)稱為逆文檔率,IDF為包含該詞的文章個數/語料庫的文章總數,描述的是詞i相對于文檔j的重要性,二者相乘便是TF-IDF值。TF-IDF值高的詞表示作為關鍵詞對文章的代表性越高[3],數學公式描述為。
公式中分子nij表示關鍵詞i在文檔j中出現的次數,分母表示所有文檔j中所有詞出現的次數和。,其中IDFi表示詞語i的反文檔頻率,|D|表示語料庫中的文件總數,|j:ti∈dj|表示包含詞語ti的文檔數目,+1是為了防止分母為0。
以下通過使用TF,TF并去除停用詞以及TF-IDF三種方式統計前十位的關鍵詞進行比較,如下表所示,可以看出不同方法得到的高頻關鍵詞不盡相同,而使用TF-IDF得到的高頻關鍵詞顯然是更有意義的,而且把眾多單字詞變為雙字詞組。

表1 三種方式提取前十位關鍵詞的比較
統計時是把詩歌名、詩人名、詩歌內容都進行了統計,杜甫(1150)詩人名,以及二首(65),三首(21)這2個標題高頻詞也一并進行了顯示,共計103個通過TF-IDF的關鍵詞以詞云圖的形式進行顯示,杜甫詩中最喜歡的用詞一目了然。代表詩句有“萬里悲秋常作客,百年多病獨登臺。”,“海內風塵諸弟隔,天涯涕淚一身遙。”。

圖1 杜甫全集中前103個TF-IDF關鍵詞詞云圖
情感分析方法之一是可以統計關鍵情感詞出現的次數,如“喜、怒、哀、樂、苦、笑”,“生、老、病、死”等直接表達情感的詞,如下圖2所示。代表詩句有“老病巫山里,稽留楚客中。”,“生死向前去,不勞吏怒嗔。”等。
古今中外的詩人亦大多喜歡借物抒情、托物言志,也可以通過一些名詞物品間接表達情感的詞,常用的有季節詞如“春、夏、秋、冬”,植物“梅、蘭、竹、菊”等間接表達情感的詞,如圖3所示。代表詩句有“國破山河在,城春草木深。”,“遲日江山麗,春風花草香。”等。

圖2 部分直接情感詞頻統計柱狀直方圖統計

圖3 部分間接情感詞統計餅圖統計
從圖2和圖3中的部分示例的常見情感詞可以看到,表達高興與不高興的詞各占一半左右,而季節詞中喜歡使用“春秋”明顯高于“夏冬”,表達積極與消極的情感也基本對半。但在表達情感的詞中,更多的部分還需對其他詞進行度量分析,如否定詞也是一類表達情感的詞,如杜甫詩中常見的有“不可”、“不見”、“不知”、“不能”等。代表詩句有“丹青不知老之將至,富貴于我如浮云。”,“行旅相攀援,川廣不可越。”等。
2.3.1 情感詞典與弱詞性標注
因為中文語法的復雜性,除了基本情感詞典外,還需要標點符號詞典、連接詞詞典、短語詞典等[4]。
用s(w)標記正面與負面情感詞,其中正面情感詞score值均大于0,負面情感詞score值均小于0。它們主要集中在形容詞、名詞、動詞、嘆詞,這些詞或多或少都會體現情感。在情感詞與情感詞的連用時,采用加法的求和計算。
用n(w)標記否定詞,否定詞往往會改變評論的情感極性,常用否定詞包括:不、沒、無、非、未、否、勿、不是、并非、沒有、絕不等。在否定詞與情感詞連用時,要區分否定詞后面的詞是正面情感還是負面情感,當與正面情感詞相連時,采用負號相乘,讓情感變為相反極性,當與負面情感詞連用時,因為負面情感本身就為負值,因此直接相乘。并且要注意否定詞連用的個數,如雙重否定等于肯定。
用d(w)標記程度副詞,程度副詞可以改變情感詞的情感強度,常用的程度副詞包括:很、非常、極、十分、最、太、更、挺、極其、格外等。在程度副詞與情感詞的連用時,采用相乘進行計算,讓緊跟其后的情感詞向積極或消極的方向增強。
用t(w)標記停用詞,在情感分析中可用兩種方式對其處理,一種是在分析前就去除停用詞,不對其進行分析,另一種是把停用詞的分值設置為0,加入到情感分值中,不影響分值的計算。
2.3.2 符號化情感極性計算公式
對“,。!?”這四種標點作為分句為單位,對分句進行一次情感極性計算,對分句內的詞進行分詞并計算情感。

表2 詞性的情感分值表
如識別現代漢語“今天電影非常不好看。”這句評論為例,識別過程如下:首先進行分詞,得到今天(t(w),0)電影(s(w),2.44122887218)非常(d(w),2.73909702864)不(n(w),-1),好看((sw),4.03663526827),情感分析為0+2.44122887218+2.73909702864*(-1)*4.03663526827=-8.615506796<0為消極情感。
ss(w)=n(w)×d(w)×s(w),其中n(w)表示否定詞情感,d(w)表示副詞情感,s(w)表示其余詞的情感,ss(w)表示該分句的情感,全文的情感即為所有分句情感的總和,記作。

表3 杜甫詩情感分值計算示例
主題模型是一種能夠在大量文檔中挖掘抽象主題的無監督聚類統計模型,主題模型主要有兩種推理分析方法:
一種是概率潛在語義分析(Probabilistic Latent Se-mantic Analysis,PLSA),PLSA是一種基于概率統計的模型,主要使用的是EM(期望最大化)算法,它包含兩個不斷迭代的過程:E(期望)過程和M(最大化)過程。
另一種是隱含狄利克雷分布(Latent Dirichlet Allo-cation,LDA),LDA是一種混合概率模型,采用Gibbs sampling方法,通過最大化詞語共現概率尋找詞語聚類,LDA文檔生成過程中可以設定文檔主題數量,避免PLSI方法等過擬合以及參數過多問題,可高效提取文檔隱含主題,并對文檔聚類。
LDA是一種是生成式的統計主題模型,由哥倫比亞大學教授David M.Blei提出,該方法能夠有效捕捉預料中詞匯共現情況,將非結構化文檔中復雜的高維詞匯空間映射到“文檔-主題-詞匯”的低維空間中獲得文檔聚類。該統計主題模型近年來得到了學者的廣泛應用,它能夠在計算機沒有完全了解文本結構的情況下,分析出易理解且相對平穩的語言結構,為數據集中的文本尋找一個相對簡短的描述[5]。
主題生成模型主要包含選擇文檔和生成主題這兩個核心工作。例如用d代表文檔,共有N篇,用t代表主題,共有K種,用w代表單詞,共有M個,生成模型通過p(t|d)以一定概率在文檔中選擇某個主題,并從該主題中通過p(w|t)的概率選擇某個關鍵詞,以這樣的方式得到主題詞語。那么,如果我們要生成一篇文檔,它里面的每個詞語出現的概率即為:

算法步驟如下:
(1)結巴分詞:對預料庫的文字進行分詞;
(2)去除停用詞:去除無意思的詞;
(3)生成TF-IDF矩陣:生成逆文檔高頻詞;
(4)LDA建模:使用Python中的nltk和gensim庫中的模型對語料訓練;
(5)獲取主題詞/主題詞團:通過模型生成。
人們在寫文章時,往往會先想好幾個要寫的主題,接著圍繞這些個主題來遣詞造句,最后表達成文。LDA主題模型則對人創作文章的思路進行反向操作,對寫好的文章,以一個合理的分布來描述主題詞,進而通過主題詞猜測出文章的主題。
根據上述步驟和原理,在LDA模型中,會假設有K個主題數目,所有的分布就選擇這K個主題來展開。訓練樣本中有N篇文檔,對應第d個文檔中有Nd個詞,目標是找到每篇文檔里主題的分布和每個主題里主題詞的分布。LDA模型認為,從文檔主題分布中抽取一個主題,然后從抽取到的主題所對應的單詞中抽取一個單詞,將此過程重復N次,就可以生成一篇有N個詞的文檔[6]。LDA模型如圖4所示。

圖4 LDA模型文檔生成過程
使用LDA模型對杜甫全集假設分3個主題進行聚類,每個類別生成8個關鍵詞的矩陣,選擇了一個較為高頻和穩定的分類結果如表4。

表4 主題與詞袋關鍵詞
從3個主題中可以看出,由于在數據集的導入中本沒有人為的去進行分類干預,而是把全集整體作為一個輸入,所以得到3個主題并不是區分度很明顯,但是卻能實際反映出杜甫的詩歌中最主要的三個主題都比較接近,體現了詩人的真正主題風格。從詞袋中的主題關鍵詞可以看出,“萬里”用得最多,即可以指離家萬里的人、在外漂泊的人、也可以指邊關將士,還可以是萬里路,萬里風光,都是一種豪邁的用詞,“乾坤”也是對天地萬物的一種描述,“回首”則表達了詩人對過去的關注和對未來的展望。
那詩人關注的是又是什么呢?我們從詞袋中的其他關鍵詞可以找到蹤跡,應該是“天下”“朝廷”等國家大事,“將軍”“使君”“干戈”等奉命出征的人與軍事活動。
綜上所述,通過機器學習中的TF-IDF和IDA主題模型技術,對杜甫全集進行了分析,可以看出杜甫的詩歌中用詞很多都有豐富的情感,如“蕭條”“寂寞”“白頭”“白發”等,可見其心態以消極居多,非常符合當時唐代由盛轉衰的時代。其次杜甫詩中“朝廷”“草堂”“將軍”“戎馬”等使用也非常多,可見其對國家的興盛和邊疆的軍事非常關注,也非常關心黎民百姓的生活,也正因為這樣,他的詩歌能引起老百姓的共鳴和廣為流傳。
由此可見杜甫是一位關心國家與社會的詩人,應該是邊塞詩人派而不是山水田園派,這也與后世認為杜甫是偉大的現實主義詩人一致。
在分析過程中遇到如下問題,這些是對古詩詞研究分析都可能遇到的問題。
首先是情感詞典的選取,無論是知網HowNet還是社交媒體BosonNLP,都以現代漢語為主,而古詩詞中有不少在詞典中甚至沒有出現,所以對于古典詩詞的分析,需要有專門的古詩詞的情感詞典等才能更好識別。
第二是情感詞典盡管實現簡單,但是缺點也是很明顯的,就是中華漢語博大精深,在情感詞典中往往對應只有一個值,是不能滿足同個詞不同詞性或在不同語境下的含義的。
第三是使用LDA主題分析時是并沒有對每首詩都進行分類標注,使得模型生成的多分類的主題內容區分不是很明顯。
下一步的工作是對詩歌進行標簽分類,嘗試使用深度學習的方式去分析古詩詞中的情感和主題。