申資卓,楊 瑩,邵艷秋
(北京語言大學 信息科學學院,北京 100083)
中國是詩詞的故鄉(xiāng),也是音樂的國度?!鞍艘簟笔枪糯荣t將樂器按其制作材料分為的八類。韓愈在《送孟東野序》中寫道“金石絲竹匏土革木者,物之善鳴者也。”千百年來,隨著時代發(fā)展和文化交流,中國“八音”中的樂器有的傳承至今,有的逐漸失傳。
目前對于樂器中“八音”的研究大致可以分為以下幾類: 其一是對一種具體樂器的研究,馬玉婷梳理了涉“磬”詩的發(fā)展脈絡[1];李萌、王少杰統(tǒng)計了宋詞中的“笙”[2];蒲雨瀟研究了宋詞中的“簫”[3]。其二是古代文學文本中“八音”的研究,王華統(tǒng)計分析了《詩經(jīng)》中“八音”的分布情況[4]。其三是從音樂的視角對“八音”進行的研究。
“八音”被認為是中國最古老的樂器分類方法。唐宋是中國古典音樂大繁榮的時期,隨著音樂的不斷豐富與發(fā)展,“八音”所包含的樂器種類也越來越多樣。通過文獻閱讀,我們搜集了古代文學中“八音”的名稱,如表1所示。
表1 “八音”中的樂器
續(xù)表
根據(jù)表1分別將《全唐詩》(42 979首)、《全宋詞》(21 050首)中包含“八音”的詩詞按照字符串匹配的方式挑選出來,統(tǒng)計結(jié)果為圖1、圖2。
圖1 八音在《全唐詩》中的頻次分布
圖2 八音在《全宋詞》中的頻次分布
雖然孤立地看每一首詩詞作品都是詩人、詞人的個體創(chuàng)作,但一個時代的作品匯集在一起,則能夠反映出整個時代相關(guān)的一些情況,通過統(tǒng)計《全唐詩》、《全宋詞》中“八音”的頻次分布,可以宏觀了解唐宋“八音”使用的異同。
1.1.2 唐詩中的“絲”與宋詞中的“竹”
從圖1、圖2中可以看出,絲類樂器在唐詩中出現(xiàn)的頻次最高,和唐詩的關(guān)系最為密切,而在宋詞中,出現(xiàn)頻次最高的樂器是竹類。
“絲”指的是彈拉弦的樂器,在“絲”類樂器中“琴”出現(xiàn)在1 593首唐詩中,“瑟”被寫入480首唐詩中?!度圃姟分杏嘘P(guān)“琴”、“瑟”的描寫分為三類:
首先,使用于男女愛情的描寫。例如“玉軫朱弦瑟瑟徽,吳娃徵調(diào)奏湘妃?!北磉_了“郎不歸”的愁情;其次,使用于送別分離的場景。陳子昂寫下“離堂思琴瑟,別路繞山川?!彪x別之情令人感慨歔欷;最后,使用于生活意趣的寄托。詩佛王維詩中的琴顯出禪意,如“獨坐幽篁里,彈琴復長嘯?!痹姽砝钯R筆下的琴則透著些許仙氣,如“九節(jié)菖蒲石上死,湘神彈琴迎帝子。”
“竹”指的是竹制吹奏樂器。在《全宋詞》中“簫”在536首詞中出現(xiàn),是“竹”類樂器中出現(xiàn)頻次最高的樂器。在宋詞中文人偏愛使用“簫”來造境,其一是造渾厚之境: 張先的“飛檻倚,斗牛近,響簫鼓、遠破重云”。“簫鼓”營造喜洋洋之境,又不乏宏大的氣勢;其二是造哀戚之境: 柳永的“豈知秦樓,玉簫聲斷,前事難重偶”。簫聲嗚咽,寄托哀婉凄怨之情思;其三是造離愁之境: 張炎的“十二小紅樓,人與玉簫何處?!蔽羧涨榫?,卻時過境遷,玉簫聲斷,徒添傷感[3]。
1.1.3 唐詩宋詞中的“石”
石類樂器在唐詩中出現(xiàn)的頻次為410次,而在宋詞中僅出現(xiàn)了14次。石類樂器在唐詩中的繁榮與唐代佛教的盛行關(guān)系密切,在宋詞中的冷門原因在于宋詞的文體特征。
自東漢以來,隨著佛教在中國的興盛,磬進入佛事作為法器也日漸興盛,到唐中達到空前的繁榮。詩人們通過“磬”反映佛教禪理、宮廷禮儀、山水田園[1]。
磬歷來主要作為禮樂樂器的特性,決定了其使用的局限性?!度卧~》中磬僅僅出現(xiàn)了14次,這與宋詞的文體特征有關(guān),宋詞是中國文學發(fā)展史上第一個抒寫艷思戀情的專門文體。宋詞的題材集中在描寫離愁別緒、風花雪月等方面。因此石類樂器在宋詞中出現(xiàn)的頻次較低。
將從《全唐詩》與《全宋詞》中抽取的含有“八音”的詩句、詞句以字為單位進行切分,然后使用哈爾濱工業(yè)大學的語言技術(shù)平臺(LTP)工具包進行詞性標注,最后抽取出其中的動詞與形容詞,并取頻次較高的前十個字。由于篇幅限制,僅挑選《全唐詩》“八音”所在句的形容詞表與《全宋詞》“八音”所在句的動詞表進行分析研究,如表2和表3所示。
表2 《全唐詩》“八音”所在句的形容詞表
注: “土”類與“木”類樂器抽取的形容詞不足十個,原因在于包含這兩類樂器的唐詩數(shù)量稀少。
從表2可以看出,與“竹”類樂器同現(xiàn)的頻次較高的三個形容詞分別是“清”、“悲”、“寒”,可見“竹”類樂器在唐詩中表達的情感是凄清、悲傷的。例如,李白的詩《春夜洛城聞笛》中寫道: “誰家玉笛暗飛聲,散入春風滿洛城。此夜曲中聞折柳,何人不起故園情。”笛曲《折柳曲》表達了送別時的哀怨和對故鄉(xiāng)的眷戀之情[5]。
表3 《全宋詞》“八音”所在句的動詞表
從表3可以發(fā)現(xiàn)在宋詞中與“八音”同現(xiàn)頻次較高的動詞多與樂器演奏動作相關(guān),如絲類樂器都為弦樂,與該類樂器同現(xiàn)頻次最多的動詞就是“彈”;竹類樂器都為管狀樂器,與該類樂器同現(xiàn)頻次最多的動詞就是“吹”。
主題挖掘的目的是從大規(guī)模無標記文本中自動挖掘出文本隱含的主題信息,錢鵬[6]等利用LDA模型對唐詩文本進行主題建模,并取得了不錯的效果。本文在利用LDA模型的基礎(chǔ)上,利用了另外一種主題建模的方法NMF進行對比研究,從而選擇出更適合詩詞文本的主題建模方法。
LDA(latent dirichlet allocation)全稱隱狄利克雷分配,是一種含有隱變量的概率圖模型,其中的隱變量就是主題(topic)。LDA模型的輸入為一系列由詞項(word)組成的文檔(document),輸出為給定主題的詞項分布P(word|topic)和給定文檔的主題分布P((topic|doc)。LDA模型假設給定主題的詞項分布與給定文檔的主題分布都服從多項分布,其參數(shù)分別記為θ、Φ。由于LDA模型的參數(shù)估計方法是最大后驗似然估計,多項分布的參數(shù)θ、Φ都服從其共軛先驗分布,狄利克雷分布,兩個狄利克雷分布的參數(shù)分別記為α、β。
NMF(Non-negative matrix factorization)全稱非負矩陣分解,是將一個非負矩陣V分解為另外兩個非負矩陣W、H的技術(shù),被廣泛應用于圖像處理、語音處理、文本挖掘等領(lǐng)域。在文本挖掘中H表示文檔詞頻矩陣,W表示文檔主題矩陣,V表示主題詞項矩陣。V、W、H矩陣的維度分別為n×m、n×k、k×m,其中n表示文檔數(shù)、m表示詞項數(shù)、k表示主題數(shù)。NMF模型的訓練目標為找到合適的W矩陣和H矩陣,使得WH與矩陣V最相近,本文采用的損失函數(shù)為基于KL距離的損失函數(shù),KL距離是信息論中的概念,用來刻畫兩個概率分布的相似程度,如式(1)所示。
(1)
主題一致性(topic coherence)是用來評價主題模型的一種指標,主題一致性越大,就表明主題模型的效果越好。主題一致性計算的是所有主題下前K個詞語的語義相似度的平均值。Aletras[7]等利用標準化互信息的方法來計算每個主題下每兩個詞語的語義相似度,隨著詞向量技術(shù)的興起,采用詞向量計算詞語語義相似度的方法取得了更好的效果[8],因此,本文采用的是基于詞向量的主題一致性TC-W2V,計算如式(2)所示。
(2)
其中cos(·)表示余弦相似度,vi、vj為詞向量,N為主題個數(shù),C表示詞向量組合數(shù)。
2.3.1 實驗設計
本文利用LDA和NMF兩種主題模型,分別對唐詩、宋詞兩類文檔集合進行主題建模。實驗采用的數(shù)據(jù)為從《全唐詩》和《全宋詞》中抽取出的包含有“八音”樂器關(guān)鍵字的句子。我們規(guī)定每個句子為一個文檔,抽取后,得到的唐詩數(shù)據(jù)集的規(guī)模為6 961,宋詞數(shù)據(jù)集的規(guī)模為3 445。
(1) 語料預處理: 由于現(xiàn)有的分詞工具對唐詩、宋詞的分詞效果較差,因此,我們把每個字作為主題模型中的一個詞項(word),每個文檔由句子中的所有字組成。最后,去除數(shù)據(jù)集中的停用字,以避免其對模型最終結(jié)果的影響。
(2) 文本特征表示: 本文采用了詞袋模型(Bag-of-words)和詞頻逆文檔頻(TF-IDF)兩種文本特征表示的方法。詞袋模型將文檔表示為維度為字典長度的向量,向量的值為字典中的每一個詞在該文檔中的詞頻。詞頻逆文檔頻的文本特征表示方法考慮到了文檔信息對詞頻的修正,其計算如式(3)~式(5)所示。
其中Nw表示詞w所在文檔的詞的個數(shù),D表示文檔總數(shù),Dw表示含有詞w的文檔數(shù)。
(3) 實驗設置: 實驗采用scikit-learn工具包求解LDA、NMF,采用gensim工具包訓練詞向量。LDA模型的訓練算法為在線變分EM算法,共軛先驗分布的參數(shù)α、β的值設置為0.001,算法的最大迭代次數(shù)為200。NMF模型的初始化方法為NNDSVD,該方法能有效地處理稀疏矩陣[9],損失函數(shù)設置為基于KL距離的損失函數(shù),算法的最大迭代次數(shù)為200。詞向量的維度設置為500,訓練算法為Skip-gram。LDA和NMF的主題數(shù)的取值范圍都設置為[5-30]。
2.3.2 實驗結(jié)果
本文對兩種特征(BOW、TF-IDF)和兩種模型(LDA、NMF)一一組合,形成四個實驗組。對每個實驗組都計算給定主題數(shù)下的主題一致性,最后記錄每個實驗組主題一致性的最高值,結(jié)果如表4、表5所示。
表4 唐詩中“八音”主題模型結(jié)果評價
表5 宋詞中“八音”主題模型結(jié)果評價
由上表可以看出,無論在唐詩還是宋詞數(shù)據(jù)集上,NMF+TF-IDF組合下的主題一致性都是最高的,所以,我們選擇NMF+TF-IDF組合下的主題模型進行主題建模。由此可知,NMF模型比LDA模型更適合對唐詩宋詞這種短文本進行主題建模。
在NMF+TF-IDF組合下,唐詩數(shù)據(jù)集的最優(yōu)主題個數(shù)為18,最優(yōu)主題一致性為0.257 2, 宋詞數(shù)據(jù)集的最優(yōu)主題個數(shù)為21,最優(yōu)主題一致性為0.559 0,主題個數(shù)與主題一致性的關(guān)系的折線圖如圖3、圖4所示。
圖3 唐詩“八音”主題模型最優(yōu)主題個數(shù)
圖4 宋詞“八音”主題模型最優(yōu)主題個數(shù)
2.4.1 《全唐詩》“八音”詩句主題聚類結(jié)果及分析
根據(jù)2.3中的實驗結(jié)果,《全唐詩》中有關(guān)“八音”的詩句可以聚成十八類,由于篇幅限制將其中效果較好的五類列于表6。
表6 《全唐詩》“八音”詩句五類主題聚類
根據(jù)聚類結(jié)果給上表五類總結(jié)主題分別是: 佛禪、邊塞、山水、酬贈、送別。第一類佛禪主題聚出的字與寺廟、僧侶、青燈等有關(guān),在這類主題下出現(xiàn)的樂器是“磬”,磬在佛教中的歷史悠久,古印度佛教中就有了磬,古書中記載: “樂,石有磬。今浮屠持銅缽,亦名磬?!?第二類邊塞主題聚出的字都與邊塞、戰(zhàn)爭有關(guān),在這類主題下出現(xiàn)的樂器是“鼓”和“鼙”。
2.4.2 《全宋詞》“八音”詞句主題聚類結(jié)果及分析
根據(jù)2.3的實驗結(jié)果,《全宋詞》中有關(guān)“八音”的詞句可以聚成21類,由于篇幅限制將其中效果較好的五類列于表7。
表7 《全宋詞》“八音”詩句五類主題聚類
根據(jù)聚類結(jié)果給上表五類總結(jié)主題分別是: 宴飲、歸隱、山水、邊塞、相思。第一類宴飲主題出現(xiàn)的樂器是“笙”,可見“笙”在宋時宴飲場合的重要性。在唐詩和宋詞中都出現(xiàn)了有關(guān)邊塞主題的聚類,縱向比較唐宋詩詞中有關(guān)“八音”的聚類發(fā)現(xiàn),在宋詞中邊塞主題聚類情感是“怨”、是“哀”,是“恨”,而唐詩中的聚類多是對于戰(zhàn)爭的客觀描述,這與唐宋的時代背景不無關(guān)系,唐詩中洋溢著盛唐的氣象與昂揚的風骨,而宋代歷經(jīng)動蕩與分裂,詞中對于戰(zhàn)爭的描寫多為流血漂櫓、家破人亡的慘狀。
根據(jù)王兆鵬[10-11]的研究成果,本文分別找出了唐、宋時期最著名的十大詩人、詞人的作品,并就其作品中“八音”使用情況,進行統(tǒng)計研究。為了克服作品數(shù)量的不同,無法就“八音”的頻次進行比較的問題,這部分將統(tǒng)計出的“八音”的頻次分別除以詩人、詞人作品數(shù)量,得到“八音”在詩人詞人作品中的頻率,并將頻率結(jié)果擴大一百倍(圖5)。
圖5 唐代代表詩人作品中“八音”的分布
從圖5中可以看出在唐代十大詩人作品中絲類樂器出現(xiàn)的均頻率較高,其中又以李白作品中的絲類樂器出現(xiàn)頻率最高。在李白的詩歌中, 絲類樂器中的各種樂器幾乎都出現(xiàn)過,例如, “趙瑟初停鳳凰柱,蜀琴欲奏鴛鴦弦”、“橫笛弄秋月,琵琶彈陌?!?、 “佳人當窗弄白日,弦將手語彈鳴箏”。
李白不僅擅長寫琴、瑟等絲類樂器,還能夠精湛的演奏。例如,《示金陵子》中寫道“ 金陵城東誰家子,竊聽琴聲碧窗城?!崩畎椎那俾暶烂睿鼓芪藖硗德?,可見李白琴藝之高,絕非一般人可比。因此李白作品中的絲類樂器出現(xiàn)頻率最高。[12]
從圖6中可以看出姜夔在其詞作中最擅長“八音”的使用,“八音”中的每一類樂器在其作品中的頻率基本都是最高,這與姜夔精湛的音樂才能不無關(guān)系。姜夔出生于書宦門第,受父輩和市井歌舞的熏陶,擅長詩詞音樂[13]。姜夔擅長、精通多種樂器,也是宋代十大代表詞人中在其作品中描寫樂器最多的詞人。
圖6 宋代代表詞人作品中“八音”的分布
3.2.1 Author-Topic-Model
Author-Topic-Model是融入作者信息的一種主題模型,是對傳統(tǒng)的LDA模型的修改[14]。Author-Topic-Model的輸入為加入作者信息的一系列文檔,Author-Topic-Model的輸出為給定主題的詞項分布P(word|topic)和給定作者的主題分布P(topic|author),假設這兩個分布服從多項分布,參數(shù)分別記為θ、Φ,其參數(shù)的共軛先驗分布服從狄利克雷分布,兩個狄利克雷分布的參數(shù)分別記為α、β。另外,Author-Topic-Model中還需要假定給定文檔的作者分布P(author|doc) 為均勻分布。Author-Topic-Model較為復雜,其生成文檔的過程用圖7所示算法描述。
圖7 生成文檔的過程算法圖
3.2.2 實驗設計
基于Author-Topic-Model的作者相似度計算需要Author-Topic-Model輸出給定作者的主題分布P(topic|author),每一個作者對應一個維度為主題數(shù)的主題偏好向量。因此,我們可以利用不同作者的主題偏好向量的相似度來衡量作者之間的相似度。本文采用的相似度計算公式為余弦距離公式,如式(6)所示。
(6)
本文利用gensim工具包求解Author-Topic-Model,在融入作者信息的唐詩、宋詞的主題模型上,分別計算唐代詩人之間的相似度、宋代詞人之間的相似度,由于篇幅限制,這里僅挑選部分具有代表性的結(jié)果列于表8、表9。
表8 十大詩人“八音”作者相似度計算舉例
表9 十大詞人“八音”作者相似度計算舉例
3.2.3 基于“八音”唐詩的唐代詩人相似度計算及分析
李商隱與元稹留存的詩作中膾炙人口的以愛情詩為主,風花雪月的愛恨離愁離不開樂器對氣氛的烘托與渲染,李商隱與元稹有著一段相似的婚姻經(jīng)歷,二人同樣是在意氣風發(fā)時以寒門學子的身份迎娶了大家閨秀,并且與妻子琴瑟相和度過了一段美好的婚姻生活,但不幸的是妻子都早早的離他們而去,因此李、元二人在愛情詩的題材的選取、情感的表達甚至于創(chuàng)作的結(jié)構(gòu)都存在相似的地方。
岑參是盛唐的邊塞詩人,盧綸雖為中唐詩人,其邊塞詩卻依舊是盛唐的氣象,雄壯豪邁。在他們的詩中,常見的景物是大漠、長云、旌旗等,常見的地名是樓蘭、關(guān)山等,常見的樂器是笛、琵琶、鼓等,意象選擇以及用字用語的相似使得二人在“八音”詩句中的相似度計算較高。
3.2.4 基于“八音”宋詞的宋代詞人相似度計算及分析
詞壇“飛將軍”辛棄疾代表了宋詞豪放派的高峰,周邦彥的詞則可認為是婉約詞派的集大成者。從上表可以看出似乎風馬牛不相及的兩人,其實在寫到“八音”的詞句創(chuàng)作上有頗多相似之處。
秦觀是蘇門四學士之一,詞的創(chuàng)作上或多或少受到了蘇軾的影響,劉辰翁詞作風格取法蘇辛而自成一體。秦觀、劉辰翁均向蘇詞學習,因此二人在創(chuàng)作上的相似度較高也就不足為奇。
本文通過對《全唐詩》和《全宋詞》中有關(guān)“八音”的詩句與詞句的抽取,展現(xiàn)了“八音”在唐詩、宋詞中的宏觀分布,發(fā)現(xiàn)唐詩中出現(xiàn)頻次最高的是絲類樂器,宋詞中出現(xiàn)頻次最高的是竹類樂器;使用基于NMF+TF-IDF的主題模型將《全唐詩》、《全宋詞》中有關(guān)“八音”的詩句分別聚成了十八類和二十一類,得到“笙”在宋代宴飲中是具有重要地位的樂器等結(jié)論;通過對“八音”所在詩詞句中動詞、形容詞的抽取,找到了唐詩中與“竹”類樂器同現(xiàn)頻次較高的三個情感詞分別是“清”、“悲”、“寒”,發(fā)現(xiàn)了宋詞中與“八音”同現(xiàn)頻次較高的動詞多與樂器演奏動作相關(guān);本文分別找出了唐、宋時期最著名的十大詩人、詞人的作品,并就其作品中“八音”使用情況,進行統(tǒng)計研究;還基于Author-Topic-Model進行了作者相似度的計算,得出了李商隱、元稹有關(guān)“八音”的詩作最相似等結(jié)論??傊?,本文通過計算機挖掘的方式為中國古典文學的研究提供了新的切入視角與分析方式。
在后續(xù)的工作中,希望進一步完善模型、改進算法,使其能夠具有更好的泛化性能,不僅能夠應用于詩詞“八音”的研究之中,還能在詩人關(guān)系挖掘和計算機自動理解詩詞等更加復雜的任務中發(fā)揮作用。