首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

风清气雅过新年,人工智能带你读唐诗

近几年,随着现代科技的发展,人们的生活节奏越来越快,“语言荒漠”的窘境不断扩大。《中国诗词大会》等弘扬中华传统文化的节目的出现,重新唤起了人们对中华文明的瑰宝——古诗的关注与向往。本文将通过一系列文本挖掘工具对《全唐诗》进行剖析,从文本挖掘这一角度对《全唐诗》进行全新解读。

作者:2018级应用统计专硕肖惠萍、蒋舟、刘佳欢

1、引言

古诗是中华文明的瑰宝,虽然人们在日常生活中不再吟诗作对,但随着《中国诗词大会》等节目的热播,大家对古诗的向往之情依旧高昂。《全唐诗》作为古典诗集的经典之作,更是受到了许多古诗爱好者和研究人员的广泛关注。但就目前来看,对《全唐诗》的研究多为语言学家从字句意象出发,从文学、民俗、文化等角度对其进行剖析。本文将运用文本挖掘工具,从数据挖掘这一全新的角度对《全唐诗》进行分析。本文主要工作如下:

字频分析:统计全局高频字,并剖析古诗典型意象,如季节、颜色等。

词汇探测:探测古诗常用双字词,并分析其成词规律。

关联字分析:基于Word2vec构建的字向量,分析古诗关联字。

语义网络:搭建字频前30高频字共现网络,并进行社区划分。

相似检索:基于WMD,度量诗句相似度,完成相似诗句检索。

情感分析:基于LSTM网络,完成古诗情感预测。

诗歌生成:基于LSTM网络,构建自动写诗模型,并搭建简易网页便于成果展示。

2、模型方法

2.1关联字分析—Word2vec

在自然语言处理中,要把自然语言交给计算机来处理,就需要先将自然语言数学化。Word2Vec(Word to Vector,字向量)即为一个将字转化成向量的工具。Word2vec为Tomas Mikolov在Google带领的研究团队创造。其采用分布式表征,在向量维数比较大的情况下,每一个词都可以用元素的分布式权重来表示。

将词表示为向量后,计算与字A 关联度最大的字,即转化为计算字A在cos距离下最相似的向量。图2.1-1为基于Word2vec的字向量模型原理示意图。

图2.1-1 基于Word2vec的字向量模型原理示意图

2.2相似检索—WMD

WMD(Word Mover’s Distance,词移距离)是Matt等人将EMD算法引入自然语言处理领域,将词嵌入与EMD(Earth Mover’s Distance,推土机距离)结合起来,以度量文档间的距离,进而计算语义相似度。

2.2.1 EMD

EMD是线性规划问题中运输问题的最优解。如图所示,P1到Pm表示m座工厂,工厂P1有重量为WPi的货物,Q1到Qn表示n座仓库,仓库Qj最大容量为WQj,Pi到Qj的距离为dij,所运货物重量为fij。如图2.2-1所示。

图2.2-1 EMD示意图

2.2.2 WMD

WMD的度量基于Word2vec和NBOW(Normalized Bag-of-words,归一化的词袋模型)。WMD图解如图2.2-2所示。

图2.2-2 WMD示意图

WMD算法通过求Word Travel Cost 来度量词i到词j的相似程度,这一度量使用在Word2vec向量空间中的欧氏距离,即

c(i,j)可理解为从词i移动到词j所付出的代价。

计算两文档的WMD距离即转化为一个大型的线性规划问题。

2.3语义网络—Fast Unfolding

在社交网络中,有些节点之间连接关系较为紧密,有些较为稀疏。可将联系较为紧密的部分视为一个社区,其内部节点连接比较紧密,通常具有一定的共同属性,而社区之间的连接比较稀疏。本文采用Fast Unfolding算法进行社区划分。

2.3.1模块度

模块度是Newman等人在2006年提出的度量社区划分优劣的概念。模块度越大,社区划分效果越好。化简后的模块度的计算公式如下:

2.3.2 Fast Unfolding

Fast Unfolding算法由Blondel等人在2008年提出,是进行社区划分的经典算法之一。Fast Unfolding 算法可分为两个阶段,其中第一阶段为Modularity Optimization(模块度优化),第二阶段为Community Aggregation(社区生成)。其具体步骤如下:

1st Pass: 1. 将节点分配在不同社区中,进行初始化。

2.尝试将每个节点分配在其临近的社区中,计算变化前后的模块度差值ΔQ,若模块度变大,即ΔQ>0,则说明此次尝试使得社区划分变优,接受此次变化,否则拒绝。

3.重复2直到网络的模块度不变为止。

2nd Pass: 构造新图。新图中的节点为第一阶段中划分出来的社区,继续进行迭代优化,直至收敛。

其过程可表示成如图2.3-1所示。

2.3.3中介中心性

中介中心性度量的是一个节点担任其他两个节点最短路径媒介的次数,是衡量该节点在网络中影响力大小的重要因素。在文本数据中,中介中心性大的词可视为该段文本的精要字。其公式表示如下:

2.4情感分析—LSTM

本文情感分析基于LSTM网络(Long Short-Term Memory,长短期记忆网络),同时由于可获得的标注数据较少,故采用迁移学习的方法来缓解标注数据过少这一问题。

2.4.1 LSTM网络结构

LSTM是由Hochreiter 和 Schmidhuber 在1997年提出的,目的是解决RNN网络的长期依赖问题。LSTM的结构示意图如图2.4-1所示。

图2.4-1 LSTM结构示意图

其通过遗忘门、输入门、输出门三个门结构来实现对信息的保护和控制。

2.4.2迁移学习

迁移学习的定义为给定源领域Ds和源领域任务Ts,目标领域DT和目标领域任务TT,利用Ds和Ts的知识来提高DT中预测函数的性能。其目标是将从一个环境中学到的知识用来帮助新环境中的学习任务。

由于标注数据较少,本文受Radford等人对无监督情感神经元研究的启发,采用迁移学习的方法将从大规模数据集中训练好的LSTM网络迁移到少量的标注数据中,再使用整个模型进行预测。

2.4.3网络结构

情感分析模型的简要网络结构图如图2.4-2所示。

图2.4-2 情感分析模型简要网络结构

对于Embedding Layer(嵌入层),本文基于Word2vec字向量模型完成文本嵌入。嵌入层之后 LSTM层,最后连接Softmax(分类层)作为输出层完成分类任务。Softmax公式为:

2.5诗歌生成—LSTM

基于字符的文本生成步骤可总结为:

1.将一个长文本序列依次输入到循环神经网络。

2.对于给定前缀序列的序列数据,对序列中将要出现的下一个字符的概率分布建立模型。

3.每次产生一个新的字符

本部分采用两层LSTM网络叠加,以增加模型预测的准确性。图为诗歌生成模型的简要网络结构图。

图2.5-1 诗歌生成模型简要网络结构

3 实验结果

3.1数据介绍

唐代是我国古代诗歌发展的鼎盛时期,本文选取收录唐诗较全的《全唐诗》进行文本分析。该诗集于康熙四十四年(1705年)由彭定求、曹寅等人奉旨编校刊刻,得诗四万八千九百余首,凡二千二百余人,共900卷,目录12卷,是迄今为止古典诗集中篇幅最大的一部。

由于古代诗歌与现代汉语的语言特点十分不同,古诗中往往单个字眼就蕴涵着无尽的意味,故本文在文本预处理时采用逐字切分的方式,将诗句切分为单个字的形式,同时去掉了而、何、乎、乃、其、且等34个无实际含义的虚词。

3.2实验设计及结果

3.2.1字频分析

3.2.1.1全局高频字

在去掉无实际意义的虚词后,本文进行了字频统计,表3.2.1-1列出了排名前50的全局高频字。

表3.2.1-1 TOP50高频字字频

由表3.2.1-1可知,在《全唐诗》中出现频率最高的字是“人”,正所谓“人,天地之性最贵者也”。唐诗很好的秉承了“以人为本”这一概念。大部分诗歌的写作意图就在于体现个人志向、抒己胸臆。同时古诗也经常描写人之间的关系,如“故人”这一词便经常出现在诗句中。另外,“人”也经常作为画面中的一部分用于烘托气氛,如“路上行人欲断魂”、“万径人踪灭”等等。

借景抒情是我国古代诗歌最常用的表现手法,诗人或在诗歌的前部分写景以为后文言志做铺垫,或全诗描写景物以隐晦表达心情、阐述观点。总之,景物占据了诗歌意象的大部分。因此,不难理解, “山”、“风”、“月”、“云”、“花”、“春”、“水”等等景物意向出现的词频仅次于“人”。

将前120个高频字绘制成词云如图3.2.1-1所示。

图3.2.1-1 T120高频字词云

3.2.1.2季节意象

本文统计了“春”、“夏”、“秋”、“冬”四个季节意象在《全唐诗》中出现的频次。统计结果如表3.2.1-2所示。

表3.2.1-2 季节意象字频

“春”字频最高,“秋”次之,而“夏”、“冬”比其则要少一个量级。

诗人常有伤春悲秋情结,春秋也是山水诗、田园诗等写景诗最常选的两季,如“空山新雨后,天气晚来秋”,故而春秋二字位于前列也不足为奇。春也是万物复苏之季,因此诗人也常描绘欣欣向荣、蓬勃生机的春景图,如有“孤篇横绝全唐”之称的《春江花月夜》中“春江潮水连海平,海上明月共潮生”一句,再如“最是一年春好处,绝胜烟柳满皇都”。

图3.2.1-2更加直观的展示了春夏秋冬四个季节意象的占比情况。

图3.2.1-2 季节意象分布饼图

3.2.1.3颜色意象

写景诗是古诗的一个重要组成部分,不论是借景抒情还是单纯写景,景物描写在诗歌中都有着举足轻重的地位。颜色又是景物描写中的重要因素,不同色调的画面往往会映射出不同的情感基调。本文对古诗中常使用的表示颜色的字眼进行了字频统计,并将其按色系分为五类,字频较低的归为其他,结果如表3.2.1-3所示。

表3.2.1-3 颜色意象字频

“白”位居榜首,其原因为大部分颜色意象多用于写景状物,如典型的以色写景的诗句“两个黄鹂鸣翠柳,一行白鹭上青天。”“白”还常与其他字一起组成意象,常见的有“白头”、“白首”、“白发”等,渲染一种韶华易逝、悲凉忧伤的气氛,如“高堂明镜悲白发,朝如青丝暮成雪”,再如“白头搔更短,浑欲不胜簪”等。

各颜色意象分布占比如图3.2.1-3所示。

图3.2.1-3 颜色意象分布饼图

3.2.2词汇探测

古诗以语言精炼著称,通常一个运用精妙的字眼便能表达无尽的意味。但有时古诗中也有一些双字词出现,本文将在此部分探测古诗中双字词的成词规律。

本文统计了《全唐诗》中双字词的词频,表3.2.2-1列出了出现频率位于前50的双字词及其词频。

表3.2.2-1 TOP50双字词词频

总结这些双字词的成词规律,可大致分为三类:复合词、叠字词、双声叠韵词。复合词指成词的两个单字虽均可单独表达含义,但其意义远不如双音节词清晰,这类词一般在现代汉语中依然沿用,如排名靠前的“万里”、“千里”、“今日”、“明月”、“相思”等。大多数复合词很难用单字替代,故而使用复合词一般是为了表意准确。叠字词如“悠悠”、“迢迢”、“茫茫”等。双声词是指组成词语的两个单字的声母相同,叠韵词为其韵母相同,如“踌躇”、“参差”、“逍遥”。叠音词和双声叠韵词的使用多为增强可读性或押韵用,如“白云一片去悠悠,青枫浦上不胜愁”、再如“白浪茫茫与海连,平沙浩浩四无边”等。

3.2.3关联字分析

古诗中的字虽然通常以单字的形式出现,但字与字之间也存在着一定的关联。本部分基于Word2vec字向量模型,将诗句中的字表示成为向量的形式,通其余弦相似度来度量字与字之间的相似度。

本文查询了四组古诗中常见的表意相近的字眼,结果为:“晴”与“霁”关联度为0.6973,“夏”与“暑”关联度为0.5551,“花”与“红”关联度为0.5177,“悲”与“思”关联度为0.4292。“霁”表示雨后或雪后转晴,与“晴”字的含义基本完全相同,关联度高达0.6973。“夏”与“暑”虽含义相近,但“夏”多出现在描写夏日美景中,“暑”则通常用于表达夏日燥热。“红”虽有“花”的意思,但同时也常用来单纯表示颜色,如“开畦分白水,间柳发红桃”。“悲”与“思”关联度相对较低,其原因为引起诗人“悲”这一情感的原因除“思”外仍有很多,如家仇国恨、触景而悲等等。

查询“风”、“行”、“悲”的关联度排名前十的字,结果分别列于表3.2.2-3、表3.2.2-4、表3.2.2-5中。

3.2.4语义网络

本文选取字频排名位于前30的高频字构建共现网络,并运用Fast Unfolding算法将其划分为三个社区。共现网络图如图3.2.4-1所示。

图3.2.4-1 TOP30高频字共现网络图

图中圆圈的大小代表中介中心性,可视为其在此网络中的影响力大小。可以看出,在高频字共现网络中,影响力最大的依然是“人”字。

图中每种颜色代表一个社区。每个社区所含成员如表3.2.4-1所示。

表3.2.4-1 TOP30高频字社区划分

其中,橙色社区中的成员多为写景常用字眼;绿色社区中的空、清、归在诗中通常用于渲染悲伤凄凉的气氛,常用于送别诗、思乡诗、思念诗中;紫色社区中的成员以“人”为中心,多为人文题材的相关字眼。

3.2.5相似检索

《中国诗词大会》中的飞花令环节令观众可谓印象深刻。与之类似的诗词游戏还有很多,如双飞燕、射覆等。其核心规则均为通过给出的条件来寻找与之相似的诗句,这对于诗词积累相对较少的普通人来说是十分困难的,那么把这一任务交给机器来做将表现如何?本部分基于WMD评估两个诗句间的距离,以度量诗句间的相似程度。

首先检索诗仙李白的经典之作《清平乐》“云想衣裳花想容,春风拂槛露华浓。若非群玉山头见,会向瑶台月下逢”。表3.2.5-1列出了去除原诗以及与原诗通假的诗句后相似度排名前四的诗句。

表3.2.5-1 《清平乐》相似检索TOP4

这四句诗的写景风格总体来说都是馥郁浓烈的,且都包含了“春”或“花”这一主题,与《清平乐》所描写的内容和抒发的情感大致相同。

本文又检索了苏轼的《江城子·乙卯正月二十日夜记梦》中最为经典的两句诗“十年生死两茫茫,不思量,自难忘。千里孤坟,无处话凄凉”,以及杜甫的《登高》中的两句“无边落木萧萧下,不尽长江滚滚来。万里悲秋常作客,百年多病独登台”。检索结果分别列于表3.2.5-2、表3.2.5-3。

表3.2.5-2 《江城子》相似检索TOP4

表3.2.5-3 《登高》相似检索TOP4

检索结果依旧表现不错,《江城子》对应检索出的四首诗均表现了凄凉悲切之情。特别是第二首孟郊的《吊李元宾坟》与第三首白居易的《梦亡友刘太白同游彰敬寺》,这两首诗均为悼亡诗,不仅“凄”、“冥”、“孤”、“死生”、“魂魄”等字眼与原诗极为形似,其主旨与表达的情感也与原诗一致。

《登高》对应检索出的四首诗所写之景皆为秋物,均表达了客居他乡的诗人对家乡的绵绵忧思。其中第二首为崔国辅所作的《九月九日》,与原诗《登高》的题材更是完全契合。

3.2.6情感分析

由于《全唐诗》语料的特殊性,目前并无完整的《全唐诗》情感分析语料库供本文使用。

为解决标注数据过少的问题,本文首先通过机器与人工相结合的方式,利用Bosonnlp情感机器人结合人工检查,为10%的数据做了标注。但相对《全唐诗》的近五万首诗来说,标注数据比例依旧过小。本文受到Radford等人的论文《Learning to Generate Reviews and Discovering Sentiment》启发,通过迁移学习的方式,以半监督的方式完成情感分析模型的构建。首先搭建LSTM网络,实现预测下一字符的功能。之后,将训练好的模型迁移到标注数据上。最后,使用整个网络模型进行情感预测。

情感分析结果如图3.2.6-1所示。

图3.2.6-1 正负面情感占比情况

结果显示,表达正面情绪的诗歌为大多数,占总体的76%。本文分析其原因有三:其一,唐代处于我国古代经济发展最为鼎盛的时期,在“大唐盛世”这一背景下,诗人自然会创作出积极昂扬的诗句,如“长风破浪会有时,直挂云帆济沧海”;其二,对于占诗歌比例极重的写景诗,不管是山水田园诗,如“明月松间照,清泉石上流”,还是本身就为描写壮阔之景的诗句,如“春江潮水连海平,海上明月共潮生”,表达的均为正面情感。其三,《全唐诗》开篇便为帝王、王妃的作品,乐章、乐府次之。帝王、王妃作为统治阶级,诗歌表达情感多为积极正面,而乐章、乐府诗的题材多为天子、神灵、祭祀等,其中很多并无具体含义,仅为描写场面的壮阔和对神灵的膜拜,故也多判定为积极情感。

3.2.7诗歌生成

首先,对文本数据进行预处理,去掉特殊字符以及过长和过短的诗句,并加上前缀和后缀,同时进行文本向量化处理。

训练时,本文将Batchsize取为128,Epoch取为50。另外,在创作诗句时,为防止每次建立相同的诗句,故添加随机扰动,取随机采样预测可能性高的字符之一作为下一个字符的输入。

表3.2.7-1所示为三个自动生成诗歌示例。具体诗歌生成网页示例见附录网盘链接。

表3.2.7-1 自动写诗示例

虽然生成的诗句中仍然有语义不清、对仗不齐等问题,但其中也不乏“花共平津久,只怕青林人”等佳句,此句可解读为“有花常在平津两地盛开,她只愿在无人之处独自开放,请喜爱翠林不懂赏花之人不要打扰”,此句可视为借花暗喻一个优雅且清高女子的形象,也可视为描写春景之句。

文章结束了,你看懂了多少?欢迎继续讨论,我们一起学习~

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190205G0KV8J00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券