程序員分析唐詩朋友圈:李白確是“負心漢”白居易是大V中的大V

古詩 白居易 李白 程序員 南方都市報 2017-04-05

數據讀唐詩

《中國詩詞大會》的走紅催生民間學習、研究古詩詞的熱潮。一個本職工作是數據分析的程序員也閒不住了,他用編程語言為工具,向我們展示了計算機對全唐詩的分析成果:唐朝詩人最喜歡的季節是春天,最鐘意的動物是龍、馬,最喜歡提及的地名是江南……

這不夠,他還要告訴你全唐詩中排名第一的“好基友”是哪兩位;初唐、盛唐、中唐、晚唐各時期詩壇社交網絡如何,分別產生了以誰為中心的“朋友圈”……李白啊李白,你到底是不是杜甫的負心人?數據告訴,是真的……

1

全唐詩作數量“無名氏”排第四

2017年2月26日,“前進四先生”終於在自己的微信公眾號“前進日誌”上貼出了《當我們在讀唐詩時,我們在讀什麼》。說起他的職業“航天工程師”,似乎和唐詩沒有任何關聯,日常工作圍著數據分析、寫程序轉,是標準的“程序員”。用“前進四先生”(以下簡稱“前進四”)的話來說:“這是一個非常嚴謹的行業,容不得半點差錯。”

能寫出這篇文章,和他另一個身份定位有關:古典詩詞愛好者。平日對詩詞抱有濃厚興趣,讀過不少相關書籍,在心情不好時喜歡讀詩的他和千千萬萬觀眾一樣,在春節期間關注到一檔綜藝節目《中國詩詞大會》。節目的熱度刺激了他的職業習慣:用數據分析遇到的各類問題,唐詩也包括在內。“前進四”對記者表示,用科技手段來分析文藝作品在學術界並不新鮮,其之前也讀過相關論文,如浙江大學徐永明《中國古典文學研究的幾種可視化途徑——以湯顯祖研究為例》。只不過這些文章多流傳在學術圈中,並沒有流傳開來。

“程序員”開始行動了。為分析唐朝詩歌,他先從網上找來一份全唐詩,其使用的版本共2609位作者,收錄42974首詩。通過Python(一種計算機程序設計語言)這種工具,他決定小試牛刀,分析唐詩中出現的字、詞,找找有哪些好玩的點。

第一個問題,唐朝詩人誰的作品數量最多?程序統計的結果前三名是:白居易(2643首)、杜甫(1151首)、李白(897首)。而位居第四的是NA(843首),即“無名氏”。“前進四”後來告訴南都記者,這個統計只侷限在全唐詩裡,存在的不足是各個作者流傳至今的詩詞數量不一,提醒讀者其中可能存在誤差:“比如全唐詩中白居易的詩最多,這是因為白居易生前自己編纂過文集,李杜則沒有,所以白的文章流傳到後世的就比李杜的多一些”。

2

“難道唐朝詩人也講龍馬精神”

接著,他用計算機統計全唐詩中常見的字、詞,例如出現最多的字、季節、顏色、植物、動物等詞彙分別是哪些。“前進四”稱,這些檢索十分簡單,只需要幾行代碼就可以實現;而檢索的關鍵詞是他本著對於詩歌常見意象的閱讀經驗想出來的。讓我們看看他得出的結論:唐詩中出現最多的字是“不”字;四季出現的頻率中,“春”和“秋”呈現出壓倒性的場面;顏色中,詩人用的最多的是“白”色;植物中,“鬆”“竹”最受詩人喜愛;動物中,“龍”“馬”出場次數高於其他種類,對此“前進四”開玩笑——“難道唐朝也講龍馬精神”?

至於以詞為單位的分析,他告訴記者,實際與字的分析原理相同,但藉助了THULAC這個分詞工具。“前進四”解釋,THULAC在分詞之後,還能同時得到詞的詞性(同時他提到,此分詞工具有缺陷。計算機之所以能分詞,是因為它從大量的人工分詞結果中學習了規律。THULAC是用現代語文分詞的材料訓練出來的,相應的,THULAC也就在現代語文材料分詞中表現良好,針對古代文獻沒那麼理想)。比如這個詞到底是形容詞,動詞還是名詞?THULAC的詞性劃分得非常細緻,其中就有地名詞性、時間詞性、處所詞性等,因此統計唐詩中出現的地名、時間、場景等也較為簡單。

根據“前進四”的統計,唐詩中最常出現的地名是“江南”和“長安”,他在文中如是說——“畢竟一個地方環境好,一個地方是首都,想必這兩個地方的房價一定也很貴。”那麼,什麼具體場景能引發詩人們的興致呢?門前、海上、江邊、樓上,“這就跟我們現在到景區門前要合影留念,到海邊、河邊、高樓上都要拍照發朋友圈是一個意思吧”。

更進一步,通過word2vec這個工具,實現詞到向量的轉換,即所有詞可轉換成一長串數字。由此,計算機以數字之間的相似度可以簡單分析詩句中詞與詞之間的關聯。“前進四”向記者解釋,這個轉化過程非三言兩語能說清楚。粗略來講,不同詞的上下文是不一樣的,但是又有一定的相關性。比方說“蘋果”和“梨”,這兩個詞出現的語境應該會很相似,比如:“我們去水果店買蘋果/梨吧”,“午飯後再吃個蘋果/梨”。在這兩個句子中,蘋果和梨都是可以互換的詞。而“蘋果”和“貓”就基本不可能出現在相同的上下文語境中。計算機通過分析每個詞上下文出現的詞,最後可以每個詞轉換為一串數字。上下文比較接近的詞,這串數字就比較接近。

以此手段,“前進四”找出了與“寂寞”關聯密切的10個詞:唯有、今夜、搖落、悵望、故國、伴、惆悵、深春、明日、旅。他在文中這樣寫道:“能看出來,詩人們往往在春日的深夜裡,在樹葉搖落的季節裡,在旅途中,懷念故國的時候,最容易寂寞。這也難怪,我寫完上個句子,都感覺有點寂寞了呢。”

3

最熱烈“基友”:陸龜蒙和皮日休

3月12日,“前進四”又貼出另一篇分析成果《計算機告訴你,唐朝詩人之間的關係到底是什麼樣的》,超高的閱讀量讓他感到驚訝:“最初只是為了好玩,沒想到有這麼多人喜歡。”他告訴記者,這篇文章寫的時候其實很隨意,遠沒有之前寫數學類文章那麼認真。如果能知道有這麼大的傳播度,就會更加認真些。

程序員分析唐詩朋友圈:李白確是“負心漢”白居易是大V中的大V

這篇文章,他把關注焦點放在詩人身上,試圖理清兩個詩人以至於多個詩人間的關係。如何解決呢?藉助全唐詩,他把“關係”簡化為“引用關係”,即詩的標題和正文中只要提到過對方,那麼兩者之間的引用關係加1。一首詩如果提到多次對方,只算一次引用。“前進四”對記者說,“這種引用關係的分析只是大體上的分析。如果要認真分析兩位詩人之間的關係,勢必要按年代順序來分析兩者之間的唱和作品,這工作量有點大,並且不是我擅長的內容”。計算機無法對引用的詩做細微的情感分析,因此文中的詩壇“社交網絡”“朋友圈”都只是以“引用關係”為依託。

全唐詩共2000多名作者,詩人的別稱又很多,比如杜甫字子美,按排行稱為杜二,按官職稱為杜工部。為了讓他們對號入座、不重複、不遺漏,“前進四”使用CBDB(中國曆代人物傳記資料庫,系統性收錄中國曆代名人傳記資料)查詢詩人的主要信息及別名,排除年代不符的重名,手動補充遺漏部分。由於把全唐詩所有詩人關係都理出來會很亂,藉助CBDB來的篩選,“前進四”將762位詩人納入社交網絡的關心範圍。

範圍既定,程序運行。首先,看一下著名的李白與杜甫。全唐詩中,杜甫寫了12首與李白有關的詩,李白則只有3首與杜甫有關的詩。雖然“前進四”也調侃“李白這種朋友確實差勁了一點”,但對於近來網上流傳的李杜二人的段子,他覺得“看看笑笑就好”。“前進四”表示,杜甫寫李白的詩多,一方面因為李白是長輩,比杜甫大了十來歲,成名時間也早得多,更多的是因為杜甫和李白的性格不同:李白飄逸,杜甫深情。

那麼,唐代詩人間的唱和互動以哪兩人最為頻繁呢?排名第一的是晚唐時期陸龜蒙和皮日休,堪稱“絕對的好基友”。兩人互相提到對方的次數均達百次以上,常年酬唱的成果被集成唱和詩集《鬆陵集》,文學史上也留下“皮陸”的美名。

並列排名第二的則是白居易和劉禹錫、白居易和元稹。白居易與元稹是文學史上聞名的“元白”二人組,關係之親密自不待言;白居易和劉禹錫同年(772年)出生,從政道路都是“各種被貶謫”。白居易得知劉禹錫去世的消息後,還寫下了悼亡的千古名詩:四海齊名白與劉,百年交分兩綢繆。同貧同病退閒日,一死一生臨老頭。

4

白居易是“大V中的大V”

另外,從排名前三十的引用關係來看,白居易還與李逢吉、崔玄亮、李建、李紳等名字相連次數很多。“前進四”稱,白居易絕對是唐朝詩人朋友圈中的明星,是“大V中的大V”。

兩人間關係有了排名,“前進四”利用ECharts將前一百名引用關係圖示化,得到詩人們的社交網絡圈。依據引用度的強弱,關係圖顯示出了唐朝詩人的兩個大型朋友圈:盛唐杜甫-李白朋友圈、中唐白居易朋友圈。

對於白居易這個“社交核心”,“前進四”向南都記者解釋,社交網絡圈的核心人物,就是與其他文人發生聯繫比較多,並且在文壇上有一定名望的人。白居易是其中典型,白與其同時代的其他文人都有聯繫,並且是當時的詩壇領袖。

除此之外,從初唐、盛唐、中唐、晚唐分階段看,初唐詩人中關係最好的是宋之問和沈銓期,兩位正是宮廷詩人的代表,確定了近體詩的格律,史稱“沈宋”;晚唐詩人的社交網絡比較散亂,沒有明顯的核心。其中最重要的就是李商隱和杜牧,文學史也以“小李杜”認證。

跨界迴響

“這個數據統計很有趣 但還流於簡單”

以“前進四”這個程序員的思維,計算機不僅可以分析唐詩,還可以解剖其他時代的文獻,梳理時代人物關係。當然前提是這種分析需要“對當時的時代有一定的瞭解”。伴隨著計算機技術的發展和古典文獻的數字化進程,他對做出中國歷史人物關係圖的願景抱有期待。

就程序員的思路,南都記者請教了一位人文領域研究者劉銳。劉銳現在香港教育大學中國語言學系做詞彙語義學、語料庫語言學方面的研究。他評價兩篇文章稱:這種文理之間、文科和工程科學之間的跨界,在大眾看來還比較新奇,想必這和教育體制的文理分科在大眾中形成的觀念有關。這樣的文章雖然算不上學術研究(其實很多是程序員的“練筆之作”),但是對於向大眾普及文理合流、文理相通的觀念很有幫助。由此可以看到跨界和學術走入生活的趨勢。通過一些計算機技術,從宏觀的方面揭示詩詞歌曲的特點,並通過現代人熟知的一些概念表達出來,比如“社交網絡”、朋友圈等,能夠引發大眾對現象的思考,和對學術的興趣。

劉銳告訴南都記者,之前他看過另一篇很火的文章《我分析了42萬字的歌詞,為了搞清楚民謠歌手們在唱些什麼》,是用計算機方法分析歌詞。相比之下,“前進四”的文章所用材料數量更大,分析較為嚴謹。不過,就學術研究而言,失之簡單。做詩歌研究繞不過文學史。詩人社交網絡、詩壇核心,考量的維度很多,“除了詩歌的互引,還比如各種史料記載的詩人交遊的情況,詩人對文學風格的影響,貢獻等。如果文章根據製圖得出結論後再查查文學史,若能互相印證,會更有說服力”。

同時他認為,基於字詞統計的方法是語言學中常用的方法,比如漢語中哪些是常用詞,就用統計方法加一些語言學原理來確定。但是“前進四”的字詞統計還是流於簡單。“詩歌精細的意義不說,單說這個字詞統計沒有考慮到多義詞、多義字的情況,這就不是很可靠了。而且他用的分詞軟件是不是適用於古漢語呢?古今漢語的分詞是非常不同的”。

劉銳表示,整體而言他很樂見這種“跨界研究”。據他介紹,學術領域有一門計算語言學,專門用計算機研究語言。由此能驗證出不少有趣的結論,最著名的便是“齊普夫定律”。此定律有點像所謂的“二八定律”,是最省力法則在語言中的體現。

他山之石

“數據挖掘”在歷史研究中大有可為

實際上,程序員的這次“跨界”也得到不少人文領域讀者的關注。“有些不會寫代碼的朋友,他們想知道有沒有現成的工具可以對其他文獻進行分析”;還有一些讀者和“前進四”交流對話,由此他聽說了數字史學(digital history)這一概念,才明白自己的文章用計算機分析、展示歷史,可以算作“數字史學”的範疇。

“前進四”口中的數字史學,據南京大學歷史系王濤的論文《挑戰與機遇:“數字史學”與歷史研究》介紹,早在上個世紀90年代就有了這一概念。信息技術革命與“大數據”時代的到來,為史學研究史料整理、分析思路造成了不小的衝擊。論文認為,計算機“數據挖掘”的特長在歷史研究中大有可為。王濤提到,2007年開始,哈佛大學由谷歌公司支持,藉助電腦“閱讀”百萬計電子書,利用n-grams分析書籍中出現的重要詞彙,獲悉不少有趣的結果。例如,對著名歷史人物的成名過程有了定量的描述,而且發現成名的準備期從20世紀中期開始變得越來越短;對歷史上出現的瘟疫流行路線有了清晰的描繪;主流文化對技術進步的接納,在19世紀初平均需要66年,而在1880—1920年間,則只需27年。

無論是“計算語言學”還是“數字史學”,離普通人還是有些距離。不過,善用搜索工具、用程序處理人文,總能帶給你意想不到的結論。畢竟,依照計算機分析,現代民謠歌手在歌詞中最喜歡春天,最愛念叨“南方”,和全唐詩中詩人的偏愛有那麼一絲接近呢。

採寫:南都記者 馬輝

相關推薦

推薦中...