网站制作网站模板,自己建个电影网站可以吗,产品推广方法有哪些,网站维护与建设考试楔子近些年来#xff0c;弘扬中华传统文化的现象级综艺节目不断涌现#xff0c;如《中国汉字听写大会》、《中国成语大会》、《中国谜语大会》、《中国诗词大会》等#xff0c;其背后的社会成因#xff0c;在于人们对中国文化中最精致文字的膜拜心理#xff0c;虽然浸淫于… 楔子近些年来弘扬中华传统文化的现象级综艺节目不断涌现如《中国汉字听写大会》、《中国成语大会》、《中国谜语大会》、《中国诗词大会》等其背后的社会成因在于人们对中国文化中最精致文字的膜拜心理虽然浸淫于层出不穷的网络语汇时时面临“语言荒漠”的窘境仍心向往之。上述节目中笔者最感兴趣的还是《中国诗词大会》---通过对诗词知识的比拼及赏析带动全民重温那些曾经学过的古诗词分享诗词之美感受诗词之趣从古人的智慧和情怀中汲取营养涵养心灵。由于在新浪微舆情从事的是语义分析产品方面的工作平时用到很多文本挖掘的方法。所以笔者想从文本数据挖掘的角度去“探索”全唐诗挑战一些不同场景下现代汉语和古汉语文本处理和分析的异同点锤炼自己的分析技能但更想做的是结合数据之美和诗歌之雅用跨界思维去发现一些有趣的东西。在这里笔者分析的语料是《全唐诗》它编校于清康熙四十四年1705年得诗四万八千九百余首。接下来笔者将使用多种文本挖掘方法来分析《全唐诗》。以下是本文的行文脉络0 文本预处理对于现代汉语的分词开源/免费的解决方案或工具很多开源的解决方案如Jieba、HanLp、StanfordNLP和IKAnalyzer等“傻瓜式”的免费操作工具的也有新浪微舆情的文本挖掘工具如果直接采用这些现代汉语分词工具对古诗词进行分词结果会是这样的然而对于古汉语文言文尤其是诗词的分词处理可没有这么简单因为单字词占古汉语词汇统计信息的80以上再加上古汉语微言大义字字千钧所以针对现代汉语的分词技术往往不适用于它。鉴于此种情况笔者采取的是逐字切分的处理方式同时去掉一些常见的虚词如“之”、“乎”、“者”、“也”。分词和去停用词处理如下所示 经过文本预处理后就可以进行文本挖掘中最常规的分析---字频统计看看《全唐诗》中出现最多的字有哪些。一、 字频分析唐诗常用高频字分析1.1全局高频字首先让我们来看看去掉这些虚词之后的全局高频字有哪些笔者这里展示的是TOP148。“人”字排行第一这体现了《说文解字》里所讲的“人天地之性最贵者也”说明唐诗很好的秉承了“以人为本”的中华文化。而后续的“山”、“风”、“月”、“日”、“天”、“云”、“春”等都是在写景的诗句里经常出现的意象。1.2典型意象分析所谓“意象”就是客观物象经过创作主体独特的情感活动而创造出来的一种艺术形象。简单地说意象就是寓“意”之“象”就是用来寄托主观情思的客观物象。在比较文学中意象的名词解释是---所谓“意象”简单说来可以说就是主观的“意”和客观的“象”的结合也就是融入诗人思想感情的“物象”是赋有某种特殊含义和文学意味的具体形象。简单地说就是借物抒情。比如“月”这个古诗词里常见的意象就有如下内涵表达思乡、思亲念友之情暗寓羁旅情怀寂寞孤独之感历史的见证今昔沧桑感冷寂、凄清的感觉清新感 。笔者在这里挑选的意象是关于季节和颜色的。物转星移几度秋---《全唐诗》中的季节统计“春”、“夏/暑”、“秋”、“冬”这4个字在《全唐诗》中出现的频次“春”字排行榜首“秋”字列第2位“夏”和“冬”出现的频次则要少1个量级在唐诗里伤春、惜春是常见的春诗题材代表性的作品有朱淑真《赏春》、杜甫《丽春》、韩愈《春雪》、张若虚《春江花月夜》等。也难怪在商代和西周前期一年只分为春秋二时后世也常以春秋作为一年的代称约定俗成由来已久这两个字的使用频率很高也就不足为奇了。万紫千红一片绿---《全唐诗》中的色彩笔者在这里找了51个古语中常用的颜色的单字注意是古汉语语境中的颜色称谓其中以红色系红、丹、朱、赤、绛等、黑色系暗、玄、乌、冥、墨等、绿色系绿、碧、翠、苍等及白色系白、素、皎、皓等为主这些颜色及其对应的字频如下表所示这里面“白”字的字频最高本意是“日出与日落之间的天色”笔者常见的有“白发”、“白云”、“白雪”常渲染出一种韶华易逝、悲凉的气氛名句如“白头搔更短浑欲不胜簪”、“白雪却嫌春色晚故穿庭树作飞花”、“君不见高堂明镜悲白发朝如青丝暮成雪”、 “白云一片去悠悠青枫浦上不胜愁”。将上述主要的色系综合统计一下得到下面的环形占比图其中绿色系的占比居多“绿”“碧”“苍”“翠”等大都用于写景“绿树”、“碧水”、“苍松”、“翠柳”等这些高频字从侧面反映出全唐诗中描写景物、寄情山水的诗句占比很大透露出平静、清新和闲适之感。二、 词汇探测唐诗中的常用双字词发现刚才笔者分析的是单字而汉语的语素大都是由单音节字表示即所谓的“一音一义”。当这些单音节语素能够独立应用的话就是词。古汉语中存在着许多单音节词这也就是文言文翻译中要经常把一个字翻译成现代汉语中的双音节词的原因。然而有些单音节语素不能够独立使用就不是词只能够是语素如“第-“、”踌-“、”- 们“。鉴于此笔者想发现一些唐诗中的常用双字词看看其中的成词规律是怎样的。笔者在这里选取共现次数超过10次的词汇并列出TOP200的共现双字词。关键操作步骤如下所示以下是TOP200的共现双字词从上面的双词探测结果中笔者可以发现如下6类成词规律:1复合式AB等于C:由两个字组成这两个字分别代表意义组成双音节的词这类词出现的频次最多。比如弟兄、砧杵、纪纲、捐躯、巡狩、犬吠。2重叠式AA等于A: 琅琅、肃肃、忻忻、灼灼。3叠音AA不等于A:琅琅单独拆开不能组其他词、的的拆开后的单字的词义不同等。4双声声母相同: 踌躇声母都是c分开各自无法组词、参差声母都是c、缅邈声母都是m。5叠韵韵母相同:噫嘻韵母是i、缭绕韵母是ao、妖娆韵母是ao等。6双音节拟声词:歔欷、咿哑等。三、语义网络分析发现唐诗中的常用“字眼”在这一部分笔者抽取的是上述高频字TOP148中的字的共现关系详细的原理介绍请参考笔者之前所写的博文《以虎嗅网4W文章的文本挖掘为例展现数据分析的一整套流程》、《以大秦帝国之崛起为例来谈大数据舆情分析和文本挖掘》。可以看到上述的语义网络可以分为3个簇群即橙系、紫系和绿系TOP148高频字中字体清晰可见字的近40个。圆圈的大小表示该字在语义网络中的影响力大小也就是“Betweenness Centrality中介核心性”学术的说法是“两个非邻接的成员间的相互作用依赖于网络中的其他成员特别是位于两成员之间路径上的那些成员他们对这两个非邻接成员的相互作用具有某种控制和制约作用”。在诗句中这些字常以“字眼”的形式呈现也就是诗文中精要的字。3类中橙系北、流、马、草、闲、孤、逢、云等紫系游、树、雨、回、笑、言、幽、清、白、野、行等绿系知、金、柳、难、愁、旧、仙、望、客。其中根据字的构成来看绿系簇群中的字大多跟送别好友有关。四、 字向量分析基于的Word2vec的关联字分析因为之前的文本预处理是按字来切分的所以这里进行的是基于Word2vec的字向量分析。基于Word2vec的字向量能从大量未标注的普通文本数据中无监督地学习到字向量而且这些字向量包含了字与字之间的语义关系正如现实世界中的“物以类聚类以群分”一样字可以由它们身边的字来定义。从原理上讲基于字嵌入的Word2vec是指把一个维数为所有字的数量的高维空间嵌入到一个维数低得多的连续向量空间中每个单字被映射为实数域上的向量。把每个单字变成一个向量目的还是为了方便计算比如“求单字A的同义字”就可以通过“求与单字A在cos距离下最相似的向量”来做到。相关案例可参看《作为一个合格的“增长黑客”你还得重视外部数据的分析》。下面是基于Word2vec的字向量模型原理示意图。下面笔者选取一些单字进行字向量关联分析展示如下与“梅”相关的字大致分为两类同属植物如醾、杏、梨、桃、榴、杨、柳、楝等和“梅”相关的意象如春梅、酴酒、梅花、梅枝、残梅、梅梢等。最相关的是“春”吟咏春梅在唐诗中极为常见贤相宋璟在东川官舍见梅花怒放于榛莽中归而有感作《梅花赋》其中独步早春自全其天赞赏梅花在早春中一枝独秀自己安于凌寒而开的天命。“静”字则跟它的同音字“净连带繁体一共出现三次即“净”、“淨”和“净””的相关度最大结合“坐”、“院”“梵”等字可联想到“净院”佛寺亦称“净宇”、凈觉谓心无妄念对境不迷这也说明在唐诗里最能体现静的还是在寺庙里参禅感悟佛法。笔者还想看看唐诗里经常出现的情绪即“悲”、“忧”、“愁”、“怒”、“惧”看看它们的相关字有哪些。这里就请读者自行分析笔者不做赘述。注意在这里得到的情绪相关字笔者将收集整理它们制成情绪词典用于后面的诗词情绪分类。五、 多维情绪分析发现唐诗中的“七情”王国维在《人间词话》里曾提到“境非独谓景物也喜怒哀乐亦人心中之一境界。故能写真景物、真感情者谓之有境界…”讲的是境与境界通用---写景亦可成境界言情亦可成境界因为景物是外在的世界情感是内在的世界。所以在这里笔者想分析一下全唐诗中诗词所表达出来的内在境界也就是内在情感为了丰富分析维度不采用简单的二元分析即“积极”和“消极”2种情绪而是7种细颗粒的情绪分类即悲、惧、乐、怒、思、喜、忧。根据上面获取到的字向量经过人工遴选后得到可以用于训练的“情绪字典”根据诗歌中常见的主题类别情绪类别分为悲愁、恸、痛、寡、哀、伤、嗟…惧谗、谤、患、罪、诈、惧、诬…乐悦、欣、乐、怡、洽、畅、愉…怒怒、雷、吼、霆、霹、猛、轰…思思、忆、怀、恨、吟、逢、期…喜喜、健、倩、贺、好、良、善…忧恤、忧、痾、虑、艰、遑、厄…笔者在这里采用的是基于LSTMLongShort-Term Memory长短期记忆网络的情绪分析模型。在这里我们会将文本传递给嵌入层Embedding Layer因为有数以万计的字词所以我们需要比单编码向量One-Hot Encoded Vectors更有效的表示来输入数据。这里笔者将使用上面训练得到的Word2vec字向量模型用预先训练的词嵌入Word Embedding来引入的外部语义信息做迁移学习Transfer Learning。以下是简要原理展示图为了取得更好的效果笔者采用最新的NestedLSTMConv1D的深度学习模型来做情绪判断它能较好的提炼文本里的特征和语序信息记住更长的语义依赖关系做出较为精确的情绪判断。其网络结构如下所示接着来试试实际的效果笔者随机测试了100句判断准确的有86条粗略的准确率估计是86%。当然这只是一次不太严谨的小尝试在真实的业务场景里这得花很多时间来做优化提高模型的准确率。下面是对《全唐诗》近5万首诗的情绪分析结果展示如下可能出乎很多人的意料代表大唐气象的唐诗应该以积极昂扬的情绪为主怎么会是“悲”、“思”、“忧”这样的情绪占据主流呢而 “喜”、“乐”这样的情绪却占据末流呢接下来笔者着重来分析下“悲”这个情绪占据主流的原因。从常见的唐诗写作题材上说带有“悲”字基调的唐诗较多也多出名诗佳句比如唐诗中常见的几种情结如”悲秋情结“、”别离情结“、”薄暮情结“和”悲怨情结“都体现出浓重的“悲情”色彩。古人云“悲愤出诗人”它点破了人的成就与所处的环境、心境有某种关系。就像司马迁所说“夫《诗》、《书》隐约者欲遂其志之思也。昔西伯拘羑里演《周易》孔子厄陈、蔡作《春秋》…大抵贤圣发愤之所为作也。此人皆意有所郁结不得通其道也…”回顾古今中外的著名的诗人和作家几乎无一不是曾有一段被排挤诽谤不得志和身处逆境之经历有些甚至还很悲惨。正是在这种悲难恶劣环境中才使得其奋发图强。重要的是唐诗中的“悲”不仅仅是做“儿女态”的悲更是具有超越时空、怜悯苍生以及同情至美爱情的大慈大悲。如下陈子昂的《登幽州台歌》“前不见古人后不见来者。念天地之悠悠独怆然而涕下。”从时间与空间两个角度把悲凉拉长了。 李白的《将进酒》中“君不见明镜高堂悲白发朝如青丝暮成雪”以及《梦游天姥吟留别》中“世间行乐亦如此古来万事东流水”让人唏嘘还有《长相思》第一首中“天长路远魂飞苦梦魂不到关山难。长相思摧心肝。” 杜甫的《登高》中“无边落木萧萧下不尽长江滚滚来。万里悲秋常作客百年多病独登台。”老病残躯孤苦无依独登台心中悲凉陡然而生。《石壕吏》中“老妪力虽衰请从吏夜归。急应河阳役犹得备晨炊”等句语言朴实但极具张力 白居易的《长恨歌》末尾“七月七日长生殿夜半无人私语时。在天愿作比翼鸟在地愿为连理枝。天长地久有时尽此恨绵绵无绝期。”相爱而不能相聚生死遗恨没有尽头六、 诗歌生成用深度循环神经网络自动写唐诗与上面情绪分析模型采用的内部原理一致这里采用的还是LSTM2层网络。上图是文本生成的简要原理图是基于字符字母和标点符号等单个字符串以下统称为字符进行模型构建也就是说我们的输入和输出都是字符。举个栗子假如我们有一个一句诗“胸中稳处即吾乡”我们想要基于这句诗来构建LSTM那么希望的到的结果是输入“胸”预测下一个字符为“中”输入“中”时预测下一个字符为“稳”…输入“吾”预测下一个字符为“乡”等等。由于其中的原理过于繁复涉及大量的code和数学公式故笔者仅展示生成的结果训练的语料即经过预处理的《全唐诗》。以“春雨”打头生成500字的诗词结果如下可以看见其中的诗词大都围绕着“春”来展开也就是打头的两个字引导了后续结果的生成这多亏了LSTM超强的“记忆能力”---记住了诗歌文本序列中的时空依赖关系。在生成的诗句中某些诗句还是蛮有意思的上下联间的意象有很强的相关性。下面是多次生成中产生的较优秀的诗句当然这是笔者认为的其中有些学习到了高阶的对仗技巧如下白鹭惊孤岛朱旗出晚流。笔者最喜欢的是这两句它们对仗工整“白鹭”-“朱旗”“孤岛”-“晚流”“惊”-“出”。这里体现出《人间词话》中的“无我之境” “无我之境以物观物故不知何者为我何者为物”也就是意境交融、物我一体的优美境界其中的 “惊”、“出”堪称字眼极具动感炼字绝妙七、 相似文本检索:用WMD查找相似诗词最后我们来看看诗歌的信息检索问题也就是笔者随意输入一句诗词然后机器会按照语义相似度在《全唐诗》中检索出若干句符合要求的诗词。谈到这里笔者不由得想起一个词---“射覆”射覆游戏早期的耍法主要是制谜猜谜和用盆盂碗等把某物件事先隐藏遮盖起来让人猜度。这两种耍法都是比较直接的。后来在此基础上又产生了一种间接曲折的语言文字形式的射覆游戏其法是用相连字句隐寓事物令人猜度若射者猜不出或猜错以及覆者误判射者的猜度时都要罚酒。唐浩明的长篇小说《张之洞》中有对射覆游戏的精彩描写宝竹坡突然对大家说我有一覆诸位谁可射中。不带大家做声他立刻说《左传》曰伯姬归于宋。射唐人诗一句。大家都低头想。 ...张之洞不慌不忙地念着白居易诗曰老大嫁作商人妇。如果对古文生疏大家可能很难将这两句联想起来但《张之洞》里接下来就有关于解谜的描述杨锐道“伯、仲、叔、季这是中国兄弟姊妹得排行序列。伯姬是鲁国的长公主排行老大。周公平定武庚叛乱后把商旧都周围地区封给商纣王的庶子启定国名为宋故宋国为商人后裔聚族之地。伯姬嫁到宋国不正是老大嫁作商人妇吗”大家可能会想如果是自己来思索的话不仅需要自己具备渊博的学识更要有疾如闪电的反应能力这个非极顶聪明之人不可试想机器来做可以做好吗能的话又会是如何操作这里笔者介绍基于WMDEarth Mover’s Distance的语义相似度算法与上面的情绪分析类似还有用到之前训练得到的字向量模型借助外部语义信息来应对同义不同字的情形。WMDEarthMover’s Distance是一种能使机器以有意义的方式结合文本的语义特征评估两个文本之间的“距离也就是文本间的相似度”的方法即使二者没有包含共同的词汇。它使用基于word2vec的词向量已被证明超越了k-近邻分类中的许多现有技术方法。以下是基于WMD的“射覆”的机器解上面两个句子没有共同的词汇但通过匹配相关单字WMD能够准确地测量两个句子之间的非相似性。该方法还使用了基于词袋模型的文本表示方法简单地说就是词汇在文本中的频率如下图所示。该方法的直觉是最小化2段文本间的“旅行距离traveling distance”换句话说该方法是将文档A的分布“移动”到文档B分布的最有效方式。简要的解释了相关原理后笔者紧接着展现最后的分析效果。由于对《妖猫传》中的那首线索式的《清平乐》印象深刻笔者让机器在《全唐诗》《全宋词》中查找与它相关性最大的TOP9诗词。结果如下查找的结果排行第一的是原句但有一个字不同(其实古语中“花”、“华”互通华字的繁体是会意字本意是“花”)略微差异导致相似度不为1.0。第二相似的是一首宋词林正大的《括酹江月七》其实这整首词可以作为李白《清平乐》的注解因为全篇都是对它的化用即将《清平乐》中的句、段化解开来增加了新的联想重新组合灵活运用对原诗的表达进行了情感上的升华。随后的两句诗词也是类似的情况只是相似度上略有差异罢了。紧接着是刚才机器生成的诗句看看与它内涵相近的诗句有哪些再看看笔者较为欣赏的2句名句机器很好的捕捉到了它们之间的相似语义关系即使词汇不尽相同但仍能从语义上检索相似诗句。写到这里关于《全唐诗》单独的文本挖掘已经完成但笔者又想到一个有趣的分析维度---从文本挖掘的角度来比较《全唐诗》、《全宋词》和《全元曲》之间用字的差异借助字这种基本符号来分析各自的文学艺术特征。八、 文本对比用Semiotic Squares比较《全唐诗》、《全宋词》和《全元曲》因为分析的对象涉及3个常规的二元对比分析方法难以得出有效的结论。因此笔者在这里跨界采用来自符号学领域的研究成果--- Semiotic Squares。“Semiotic Squares笔者译作‘符号方块’”是由知名符号学大师Greimas和Rastier发明是一种提炼式的对比分析Oppositional Analyses方法通过将给定的两个相反的概念/事例如 “生命Life”和“死亡Death”的分析类型通过‘或’、‘与’、‘非’的逻辑拓展到4类如“生命Life”、“死亡Death”、“生死相间也就是活死人The Living Dead”、“非生非死天使Angels”有时还可以拓展到8个或10个分析维度。以下是符号方块的结构示意图说明“”符号将2个词项组合成一个“元词项Metaterm”复合词Compound Term例如5是1和2的复合结果。Semiotic Squares的构成要素 Semiotic Squares主要包含以下2种元素我们正在避开方块的组成关系对立矛盾、互补或包含1词项TermsSemiotic Square 由4个词项组成:位置1 Term 1词项ATerm A位置 2Term 2词项BTerm B位置 3 (Term Not-2)非B词项Term Not-B位置 4 (Term Not-1)非A词项Term Not-ATerm A和TermB是相反的两个概念二者是对立关系这是“符号方块”的基础另外两项是通过对Term A和Term B取反而获得。2元词项 (Metaterms)Semiotic Square囊括6个元词项。这些元词项由上面的4个基础词项组合而成其中的绝大部分元词项已被命名。位置5 (Term 1 Term 2):复合词项Complex Term位置6 (Term 3 Term 4):中立词项Neutral Term位置7 (Term 1 Term 3):正向系Positive Deixis位置8 (Term 2 Term 4):负向系Negative Deixis位置9Term 1 Term 4):未命名Unnamed位置10Term 2 Term 3):未命名Unnamed下面以“男性”和“女性”这两个相对的概念来举个例子注意其中错综复杂的逻辑关系/类型。说完了分析的大致原理笔者这里就来实战一番与上述原始模型不同的是笔者在这里除了基本的二元对立分析外还新增了一个分析维度总体是关于《全唐诗》、《全宋词》和《全元曲》的三元文本对比分析。预处理前的文本是这样的预处理后是这样的形式用Semiotic Squares进行分析的结果如下图所示点击即可放大显示从上面呈现的TOP10高频字和象限区块左上角“唐诗”、右上角“宋词”和正下方“元曲”来看唐诗、宋词、元曲中出现的独有高频字依次是唐诗唯、馀、始、鸟、含、尔、昔、兹、忽、栖、川、旌、戎、秦…宋词阑、沈、匆、帘、浓、约、淡、觞、蕊、屏、凝、笙、瑶、柔…元曲哥、俺、咱、孩、姐、吃、哩、科、厮、拿、你、叫、呀、呵…从上面的关键字来看唐诗、宋词和元曲各自的特征很鲜明唐诗用字清澹高华、含蓄诗味较浓寄情山水和金戈铁马的特征明显可以联想到唐诗流派中典型的山水田园派和盛唐边塞诗它们大都反映大唐诗人志趣高远、投效报国的情怀。宋词所用的字体现出婉约、宛转柔美表现的多是儿女情长生活点滴这也难怪由于长期以来词多趋于宛转柔美人们便形成了以婉约为正宗的观念。元曲所用的字生活气息浓重通俗易懂、接地气、诙谐、洒脱和率真充分反映了其民间戏曲的特征这与蒙元治下的汉族知识分子被打压,很多文人郁郁不得志、转入到民间戏曲的创作中来有关。此外正上方的“复合”中表征的是三者皆常用的字即共性特征主要涉及写景如 “晴”、“幽”、 “溪”、“洲”、“霜”、“浦”、“露”、“碧”、“帆”、“峰”等和抒情等“怅”、“忆”、“寂”、“悠”等。下方的两个象限“Not 唐诗”和“Not 宋词”分别代表的“宋词元曲”、“唐诗元曲”三者之二的共性高频字中的两项也以此类推笔者在这里就不赘述了请读者朋友们亲自去挖掘里面的玄妙吧。 结语笔者非专业的诗歌研究者上面的分析也未必准确如果有分析不恰当的地方还请扶正。但是笔者是想通过分析唐诗来说下自己对于文本数据挖掘的看法 在数据分析中得出的数据结果只是“引子”和“线索”最重要的还是要靠人脑去分析结果借助所掌握的背景/业务知识和分析模型从文本的表层钻取到其深层去发现那些不能为浅层阅读所把握的深层意义挖掘其价值。参考资料1 数据来源《全唐诗》、《全宋词》、《全元曲》2 使用工具Excel、python及其相关库Gensim、Tensorflow、Keras、Jieba、Gephi3 维基百科“唐诗”词条https://zh.wikipedia.org/wiki/%E5%94%90%E8%AF%974 维基百科“意象”词条https://zh.wikipedia.org/wiki/%E6%84%8F%E8%B1%A15 汉语中字与词的关系知乎https://www.zhihu.com/question/235937556 王国维《人间词话》7 The Unreasonable Effectiveness of Recurrent Neural NetworksAndrej Karpathy blog, http://karpathy.github.io.8 Understanding LSTM NetworksColahhttp://colah.github.io/posts/2015-08-Understanding-LSTMs9 长篇小说《张之洞》唐浩明10 Semiotic-Square http://www.signosemio.com/greimas/semiotic-square.asp作者苏格兰折耳喵来源运营喵是怎样炼成的IDyymzylc