程序員分析唐詩朋友圈:李白杜甫關係究竟如何?
2017年初綜藝節目《中國詩詞大會》的走紅不僅讓幾位優秀選手家喻戶曉,還間接催生民間朗誦、學習、研究古詩詞的熱潮。在這個背景下,一個本職工作是做數據分析的程序員也閑不住了,他用自己擅長的編程語言為工具,向我們展示了計算機對全唐詩的分析成果:
(原標題:程序員分析唐詩朋友圈:白居易最「大V」李白的確「負心」)
唐朝詩人最喜歡的季節是春天,最鐘意的動物是龍、馬,最喜歡提及的地名是江南……
這不夠,他還要告訴你全唐詩中排名第一的「好基友」是哪兩位;初唐、盛唐、中唐、晚唐各時期詩壇社交網路如何,分別產生了以誰為中心的「朋友圈」……程序員的文章發表後,引發不凡的閱讀量與回應,同時有人文領域的研究者指出其不足之處。高呼「代碼改變世界」操之過急,技術的進步帶給人文社科領域巨大的推力卻是不爭的事實:跨界研究有益亦有趣。
全唐詩作數量「無名氏」排第四
2017年2月26日,「前進四先生」終於在自己的微信公眾號「前進日誌」上貼出了《當我們在讀唐詩時,我們在讀什麼》。說起他的職業「航天工程師」,似乎和唐詩沒有任何關聯,日常工作圍著數據分析、寫程序轉,是標準的「程序員」。用「前進四先生」(以下簡稱「前進四」)的話來說:「這是一個非常嚴謹的行業,容不得半點差錯。」
能寫出這篇文章,和他另一個身份定位有關:古典詩詞愛好者。平日對詩詞抱有濃厚興趣,讀過不少相關書籍,在心情不好時喜歡讀詩的他和千千萬萬觀眾一樣,在春節期間關注到一檔綜藝節目《中國詩詞大會》。節目的熱度刺激了他的職業習慣:用數據分析遇到的各類問題,唐詩也包括在內。「前進四」對記者表示,用科技手段來分析文藝作品在學術界並不新鮮,其之前也讀過相關論文,如浙江大學徐永明《中國古典文學研究的幾種可視化途徑———以湯顯祖研究為例》。只不過這些文章多流傳在學術圈中,並沒有流傳開來。
「程序員」開始行動了。為分析唐朝詩歌,他先從網上找來一份全唐詩,其使用的版本共2609位作者,收錄42974首詩。通過Python(一種計算機程序設計語言)這種工具,他決定小試牛刀,分析唐詩中出現的字、詞,找找有哪些好玩的點。
第一個問題,唐朝詩人誰的作品數量最多?程序統計的結果前三名是:白居易(2643首)、杜甫(1151首)、李白(897首)。而位居第四的是NA(843首),即「無名氏」。「前進四」後來告訴南都記者,這個統計只局限在全唐詩里,存在的不足是各個作者流傳至今的詩詞數量不一,提醒讀者其中可能存在誤差:「比如全唐詩中白居易的詩最多,這是因為白居易生前自己編纂過文集,李杜則沒有,所以白的文章流傳到後世的就比李杜的多一些」。
「難道唐朝詩人也講龍馬精神」
接著,他用計算機統計全唐詩中常見的字、詞,例如出現最多的字、季節、顏色、植物、動物等辭彙分別是哪些。「前進四」稱,這些檢索十分簡單,只需要幾行代碼就可以實現;而檢索的關鍵詞是他本著對於詩歌常見意象的閱讀經驗想出來的。讓我們看看他得出的結論:唐詩中出現最多的字是「不」字;四季出現的頻率中,「春」和「秋」呈現出壓倒性的場面;顏色中,詩人用的最多的是「白」色;植物中,「松」「竹」最受詩人喜愛;動物中,「龍」「馬」出場次數高於其他種類,對此「前進四」開玩笑———「難道唐朝也講龍馬精神」?
至於以詞為單位的分析,他告訴記者,實際與字的分析原理相同,但藉助了THULAC這個分詞工具。「前進四」解釋,THULAC在分詞之後,還能同時得到詞的詞性(同時他提到,此分詞工具有缺陷。計算機之所以能分詞,是因為它從大量的人工分詞結果中學習了規律。THULAC是用現代語文分詞的材料訓練出來的,相應的,THULAC也就在現代語文材料分詞中表現良好,針對古代文獻沒那麼理想)。比如這個詞到底是形容詞,動詞還是名詞?THULAC的詞性劃分得非常細緻,其中就有地名詞性、時間詞性、處所詞性等,因此統計唐詩中出現的地名、時間、場景等也較為簡單。
根據「前進四」的統計,唐詩中最常出現的地名是「江南」和「長安」,他在文中如是說———「畢竟一個地方環境好,一個地方是首都,想必這兩個地方的房價一定也很貴。」那麼,什麼具體場景能引發詩人們的興緻呢?門前、海上、江邊、樓上,「這就跟我們現在到景區門前要合影留念,到海邊、河邊、高樓上都要拍照發朋友圈是一個意思吧」。
更進一步,通過word2vec這個工具,實現詞到向量的轉換,即所有詞可轉換成一長串數字。由此,計算機以數字之間的相似度可以簡單分析詩句中詞與詞之間的關聯。「前進四」向記者解釋,這個轉化過程非三言兩語能說清楚。粗略來講,不同詞的上下文是不一樣的,但是又有一定的相關性。比方說「蘋果」和「梨」,這兩個詞出現的語境應該會很相似,比如:「我們去水果店買蘋果/梨吧」,「午飯後再吃個蘋果/梨」。在這兩個句子中,蘋果和梨都是可以互換的詞。而「蘋果」和「貓」就基本不可能出現在相同的上下文語境中。計算機通過分析每個詞上下文出現的詞,最後可以每個詞轉換為一串數字。上下文比較接近的詞,這串數字就比較接近。
以此手段,「前進四」找出了與「寂寞」關聯密切的10個詞:唯有、今夜、搖落、悵望、故國、伴、惆悵、深春、明日、旅。他在文中這樣寫道:「能看出來,詩人們往往在春日的深夜裡,在樹葉搖落的季節里,在旅途中,懷念故國的時候,最容易寂寞。這也難怪,我寫完上個句子,都感覺有點寂寞了呢。」
最熱烈「基友」:陸龜蒙和皮日休
3月12日,「前進四」又貼出另一篇分析成果《計算機告訴你,唐朝詩人之間的關係到底是什麼樣的》,超高的閱讀量讓他感到驚訝:「最初只是為了好玩,沒想到有這麼多人喜歡。」他告訴記者,這篇文章寫的時候其實很隨意,遠沒有之前寫數學類文章那麼認真。如果能知道有這麼大的傳播度,就會更加認真些。
這篇文章,他把關注焦點放在詩人身上,試圖理清兩個詩人以至於多個詩人間的關係。如何解決呢?藉助全唐詩,他把「關係」簡化為「引用關係」,即詩的標題和正文中只要提到過對方,那麼兩者之間的引用關係加1。一首詩如果提到多次對方,只算一次引
用。「前進四」對記者說,「這種引用關係的分析只是大體上的分析。如果要認真分析兩位詩人之間的關係,勢必要按年代順序來分析兩者之間的唱和作品,這工作量有點大,並且不是我擅長的內容」。計算機無法對引用的詩做細微的情感分析,因此文中的詩壇「社交網路」「朋友圈」都只是以「引用關係」為依託。
全唐詩共2000多名作者,詩人的別稱又很多,比如杜甫字子美,按排行稱為杜二,按官職稱為杜工部。為了讓他們對號入座、不重複、不遺漏,「前進四」使用CBDB(中國歷代人物傳記資料庫,系統性收錄中國歷代名人傳記資料)查詢詩人的主要信息及別名,排除年代不符的重名,手動補充遺漏部分。由於把全唐詩所有詩人關係都理出來會很亂,藉助CBDB來的篩選,「前進四」將762位詩人納入社交網路的關心範圍。
範圍既定,程序運行。首先,看一下著名的李白與杜甫。全唐詩中,杜甫寫了12首與李白有關的詩,李白則只有3首與杜甫有關的詩。雖然「前進四」也調侃「李白這種朋友確實差勁了一點」,但對於近來網上流傳的李杜二人的段子,他覺得「看看笑笑就好」。「前進四」表示,杜甫寫李白的詩多,一方面因為李白是長輩,比杜甫大了十來歲,成名時間也早得多,更多的是因為杜甫和李白的性格不同:李白飄逸,杜甫深情。
那麼,唐代詩人間的唱和互動以哪兩人最為頻繁呢?排名第一的是晚唐時期陸龜蒙和皮日休,堪稱「絕對的好基友」。兩人互相提到對方的次數均達百次以上,常年酬唱的成果被集成唱和詩集《松陵集》,文學史上也留下「皮陸」的美名。
並列排名第二的則是白居易和劉禹錫、白居易和元稹。白居易與元稹是文學史上聞名的「元白」二人組,關係之親密自不待言;白居易和劉禹錫同年(772年)出生,從政道路都是「各種被貶謫」。白居易得知劉禹錫去世的消息後,還寫下了悼亡的千古名詩:四海齊名白與劉,百年交分兩綢繆。同貧同病退閑日,一死一生臨老頭。
白居易是「大V中的大V」
另外,從排名前三十的引用關係來看,白居易還與李逢吉、崔玄亮、李建、李紳等名字相連次數很多。「前進四」稱,白居易絕對是唐朝詩人朋友圈中的明星,是「大V中的大V」。
兩人間關係有了排名,「前進四」利用ECharts將前一百名引用關係圖示化,得到詩人們的社交網路圈。依據引用度的強弱,關係圖顯示出了唐朝詩人的兩個大型朋友圈:盛唐杜甫-李白朋友圈、中唐白居易朋友圈。
對於白居易這個「社交核心」,「前進四」向南都記者解釋,社交網路圈的核心人物,就是與其他文人發生聯繫比較多,並且在文壇上有一定名望的人。白居易是其中典型,白與其同時代的其他文人都有聯繫,並且是當時的詩壇領袖。
除此之外,從初唐、盛唐、中唐、晚唐分階段看,初唐詩人中關係最好的是宋之問和沈銓期,兩位正是宮廷詩人的代表,確定了近體詩的格律,史稱「沈宋」;晚唐詩人的社交網路比較散亂,沒有明顯的核心。其中最重要的就是李商隱和杜牧,文學史也以「小李杜」認證。
跨界迴響
「這個數據統計很有趣但還流於簡單」
以「前進四」這個程序員的思維,計算機不僅可以分析唐詩,還可以解剖其他時代的文獻,梳理時代人物關係。當然前提是這種分析需要「對當時的時代有一定的了解」。伴隨著計算機技術的發展和古典文獻的數字化進程,他對做出中國歷史人物關係圖的願景抱有期待。
就程序員的思路,南都記者請教了一位人文領域研究者劉銳。劉銳現在香港教育大學中國語言學系做辭彙語義學、語料庫語言學方面的研究。他評價兩篇文章稱:這種文理之間、文科和工程科學之間的跨界,在大眾看來還比較新奇,想必這和教育體制的文理分科在大眾中形成的觀念有關。這樣的文章雖然算不上學術研究(其實很多是程序員的「練筆之作」),但是對於向大眾普及文理合流、文理相通的觀念很有幫助。由此可以看到跨界和學術走入生活的趨勢。通過一些計算機技術,從宏觀的方面揭示詩詞歌曲的特點,並通過現代人熟知的一些概念表達出來,比如「社交網路」、朋友圈等,能夠引發大眾對現象的思考,和對學術的興趣。
劉銳告訴南都記者,之前他看過另一篇很火的文章《我分析了42萬字的歌詞,為了搞清楚民謠歌手們在唱些什麼》,是用計算機方法分析歌詞。相比之下,「前進四」的文章所用材料數量更大,分析較為嚴謹。不過,就學術研究而言,失之簡單。做詩歌研究繞不過文學史。詩人社交網路、詩壇核心,考量的維度很多,「除了詩歌的互引,還比如各種史料記載的詩人交遊的情況,詩人對文學風格的影響,貢獻等。如果文章根據製圖得出結論後再查查文學史,若能互相印證,會更有說服力」。
同時他認為,基於字詞統計的方法是語言學中常用的方法,比如漢語中哪些是常用詞,就用統計方法加一些語言學原理來確定。但是「前進四」的字詞統計還是流於簡單。「詩歌精細的意義不說,單說這個字詞統計沒有考慮到多義詞、多義字的情況,這就不是很可靠了。而且他用的分詞軟體是不是適用於古漢語呢?古今漢語的分詞是非常不同的」。
劉銳表示,整體而言他很樂見這種「跨界研究」。據他介紹,學術領域有一門計算語言學,專門用計算機研究語言。由此能驗證出不少有趣的結論,最著名的便是「齊普夫定律」。此定律有點像所謂的「二八定律」,是最省力法則在語言中的體現。
他山之石
「數據挖掘」
在歷史研究中大有可為
實際上,程序員的這次「跨界」也得到不少人文領域讀者的關注。「有些不會寫代碼的朋友,他們想知道有沒有現成的工具可以對其他文獻進行分析」;還有一些讀者和「前進四」交流對話,由此他聽說了數字史學(digital history)這一概念,才明白自己的文章用計算機分析、展示歷史,可以算作「數字史學」的範疇。
「前進四」口中的數字史學,據南京大學歷史系王濤的論文《挑戰與機遇:「數字史學」與歷史研究》介紹,早在上個世紀90年代就有了這一概念。信息技術革命與「大數據」時代的到來,為史學研究史料整理、分析思路造成了不小的衝擊。論文認為,計算機「數據挖掘」的特長在歷史研究中大有可為。王濤提到,2007年開始,哈佛大學由谷歌公司支持,藉助電腦「閱讀」百萬計電子書,利用n-grams分析書籍中出現的重要辭彙,獲悉不少有趣的結果。例如,對著名歷史人物的成名過程有了定量的描述,而且發現成名的準備期從20世紀中期開始變得越來越短;對歷史上出現的瘟疫流行路線有了清晰的描繪;主流文化對技術進步的接納,在19世紀初平均需要66年,而在1880—1920年間,則只需27年。
無論是「計算語言學」還是「數字史學」,離普通人還是有些距離。不過,善用搜索工具、用程序處理人文,總能帶給你意想不到的結論。畢竟,依照計算機分析,現代民謠歌手在歌詞中最喜歡春天,最愛念叨「南方」,和全唐詩中詩人的偏愛有那麼一絲接近呢。
采寫:南都記者 馬輝


※三星擬投資近90億美元擴大OLED屏幕生產
※英國教育部宣布部署Surface Book和Surface Pro 4
※曾叫囂「最顛覆」手機 然而WhartonBrooks只交出了這樣的答案
※[圖]黑莓KEYOne全球發貨時間推遲
TAG:cnbeta |
※如何勾搭程序員?
※孫宏斌:賈躍亭辭職是必要的程序 不想做樂視董事長
※程序員幽默六則:丁丁歷險記
※程序員如何暴富?
※孫宏斌談賈躍亭辭職:這是非常必要的程序
※王寶強的律師接手程序員自殺案,網友呼籲順便把李雨桐薛之謙案接了
※程序猿為什麼找不到女朋友?爆笑程序員
※猿哥:程序猿,如何問問題?
※如果老婆和女朋友她們是程序……
※傻眼!鹿晗關曉彤公布戀情,淘寶的程序員也跟著「失戀了」?
※王垠:如何掌握所有的程序語言
※孫宏斌:賈躍亭辭職是必要程序 融創:媒體存在誤讀
※程序員很悶騷嗎?老張,我想為你寫首詩!
※程序員如何寫好簡歷
※天才程序員求伯君
※程序員都是如何「斗圖」的
※程序員之死:是翟欣欣太壞,還是程序猿太渣?
※趣圖:我和程序員老手結對編程
※知道你的程序猿、碼農男友每天都在幹什麼嗎?