中国高等教育学会语文教育专业委小学语文教学法研究中心副秘书长管季超创办的公益服务教育专业网站 TEl:13971958105

教师之友网

 找回密码
 注册
搜索
查看: 102|回复: 3
打印 上一主题 下一主题

理科男生制作宋词密码 3秒钟可“作诗赋词”

[复制链接]
跳转到指定楼层
1#
发表于 2012-1-2 12:53:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
理科男生制作宋词密码 3秒钟可“作诗赋词”
转载▼


你羡慕那些出口就会吟诗的文人吗?现在可以不用再羡慕他们了!因为有一位理科生“yixuan”闲来无事,把《全宋词》拿出来“捣鼓”,算出了其中的99个高频词汇。熟记这些高频词,你就可以随性所欲进行创作了!你还可以用“无序”的数字来创造一首“美妙绝伦”的宋词,圆周率也可以哦!
频率分析算出宋词高频词
署名为“yixuan”的网友在个人博客里写道:“突然想看看宋词里面什么样的意象是最常见的,比如可以做个频率分析什么的。当然文本挖掘需要分词,我没法在其中花太多时间,于是想出了一个土办法。宋词的句子都很短,如果穷举可能的字的组合的话并不是太多,况且最常见的词语一般是两三个字,这样可能的组合就更少了。 ”比如“犹解嫁东风”这句话,可能的二字组合是 “犹解”“解嫁”“嫁东”“东风”,三字组合是“犹解嫁”“解嫁东”“嫁东风”,词的字数越多,可能的组合就越少。如果把每句话可能的字的组合都列举出来,就可以整体统计频率了。”大家一致分析这位网友一定是个理科生。
随后,“yixuan”贴出了他算出来的高频词,排在前面的分别是:1.14852.东风(1382)3.何处(1230)4.人间(1202)5、风流(857)6、归去(812)7.春风(802)8.西风(779)9.归来(771)10.江南(765)……至于为什么第一名是数字,他解释:“排在第一的是无效字符,这跟数据源有关。 ”这个结果一出来,一位网友就一语道破了 “玄机”,“原来,最流行的宋词就是‘东风何处在人间’啊! ”
生日数字也能改编成诗词
还有更绝的呢!署名为“达芬奇的鸡蛋”的果壳网友不知怎么地,就想到了拿大家都会背一点的圆周率进行创作,两个数字一断,对照高频词表,一首“华丽丽”的词就出来了!还附上了说明,特别像模像样。
看完这首诗,网友们一边膜拜,一边自己的创作灵感也被打开了。 “丘寒”留言道:“试着用某个号码创作了一首:天上相思,芳草年年,昨夜江南,回首一笑多情。 ”“零Ronnie”很有创作激情:“我的生日:年年江上,江南春风;我的手机号:明月芳草去年,江南阑干归去……还真挺上口的!我也能做诗人了哈哈! ”
理科宅男欢呼消灭文科生
可是这么一来,文科生又不淡定了,一群文科生跳起来反击。 “雯名霞迩”大叫:“统统拖出去,斩了!这让学中文的人情何以堪啊! ”“Rockfish”代表理科生还击:“理科宅男们消灭文科生的日子到来了!拿起你的计算器,消灭文艺青年吧! ”“可可”童鞋呼唤:“就让科技小清新来得更猛烈些吧! ”
还有一群网友七嘴八舌讨论着。“沌世界”淡定地说:“不知宋词的粉丝看了是不是有一种偶像破灭的感觉。”“家杰仕”童鞋也总结道:“文艺男女已经阻止不了技术宅作诗了! ”
网友制作的宋词高频词汇和数字代码
1空 21一笑 41深处 61一片 81不是
2东风 22黄昏 42时节 62桃李 82时候
3何处 23当年 43平生 63人生 83肠断
4人间 24天涯 44凄凉 64十分 84富贵
5风流 25相逢 45春色 65心事 85蓬莱
6归去 26芳草 46匆匆 66黄花 86昨夜
7春风 27尊前 47功名 67一声 87行人
8西风 28一枝 48一点 68佳人 88今夜
9归来 29风雨 49无限 69长安 89谁知
10江南 30流水 50今日 70东君 90不似
11相思 31依旧 51天上 71断肠 91江上
12梅花 32风吹 52杨柳 72而今 92悠悠
13千里 33风月 53西湖 73鸳鸯 93几度
14回首 34多情 54桃花 74为谁 94青山
15明月 35故人 55扁舟 75十年 95何时
16多少 36当时 56消息 76去年 96天气
17如今 37无人 57憔悴 77少年 97惟有
18阑干 38斜阳 58何事 78海棠 98一曲
19年年 39不知 59芙蓉 79寂寞 99月明
20万里 40不见 60神仙 80无情 100往事
■网友习作
《清平乐圆周率》π=3.1415926……
(1415)回首明月,
(一看就是抒情诗)
(9265)悠悠心事空,
(果然,貌似失恋了)
(358979)故人谁知寂寞。
(触景生情)
(323846)风吹斜阳匆匆,
(回忆那天下午的艳遇)
(264338)芳草平生斜阳,
(平生见过最美的太阳和芳草,都是因为那里有你的身影)
(327950)风吹寂寞今日。
(到现在就剩我自己)
(288419)一枝富贵年年,
(好花美丽年年开,好景宜人不常在)
(716939)断肠长安不知。
(我的思念远方的你可知道)
(注:诗词后为网友配的说明)
《如梦令根号二》=1.41421356……
(414213)深处时节千里,
(562373)消息当年鸳鸯。
(0950)归来今日,
(488016)一点无情多少。
(8888)今夜,今夜
(724209)而今时节归来。
■相关链接
都来为自己作首词
如果你是1983年1月20日生的,对照编号,你的生日词可以是:“年年肠断,(空)万里。 ”也可以换一种排法,变成“19,8,31,20”也就是:“年年西风,依旧万里。 ”或者其他排法均可。如果你觉得这样还是不过瘾,可以再精确到小时、分、秒。
除了用生日作词,手机号、身份证号码都可以成为创作的素材,快来一起吟诗赋词吧!
2#
 楼主| 发表于 2012-1-3 15:25:32 | 只看该作者
计算机也能写宋词:科学终结意象构思?


来源:果壳网 作者:解名缰



点绛唇:人静风清,兰心蕙性盼如许。夜寒疏雨,临水闻娇语。佳人多情,千里独回首。别离后,泪痕衣袖,惜梦回依旧。——一台计算机
计算机也能写宋词?这是怎么做到的?其实如果仔细观察,你会发现这篇大作中每个意象也经常出现在“正品宋词”中。没错,实际上它正是通过分析《全宋词》,把句子打碎成词语,并归纳出宋词中的高频词汇,再按宋词格式“创作”而成。
显然,其中极为重要的是第一步,这种逆向操作叫做分词,分词的方法有很多,并且被广泛研究,然而它却不仅仅限于用在自动作词上。分词有哪些方法,又有什么用呢?
分词:究竟有多简单?或者多难?
在英语中,分词是一项相对比较简单的工作,因为词与词之间有天然的分隔符,只需要照顾到单复数(比如apple / apples, bus / buses, woman / women )、时态(比如write / wrote / writing )等词类变形,就能将有相同指代的词语汇总成同一个单元。此外要注意同形异义词,如lay (躺下/位于/下蛋),但总的来说词与词之间还是有很明显的界限的。
而中文则有显著不同,由于汉语比较奇妙,同一个句子有可能会有不同的词语划分方式,比如“乒乓球/拍卖/完/了” 和“乒乓/球拍/卖/完/了”,所以中文的分词是一项艰巨而复杂的工程。
虽然如此,也存在一种简单暴力的划分办法,那就是穷举句子的所有连续二字组合,然后整体统计频率。这种办法对于宋词来说比较取巧,这是因为宋词本身句子较短,而且词语的长度有限;对于更一般化的文本,这种暴力拆解就并不适用了,一方面是计算量太大,另一方面是精度太低。
那么,对于一般的情况而言,词语的切分都有哪些办法?在此向大家简单介绍两种较容易理解和常用的方法。
3#
 楼主| 发表于 2012-1-3 15:25:59 | 只看该作者
最大匹配法

在诸多复杂的分词方法中,最大匹配法(Maximum Matching,简称MM)是最简单直接的一种。它需要事先给定一个词库作为词典,然后从左到右匹配尽可能长的词语。举个例子,假设我们的词典里只有“计算机、超越、人脑”这三个词,对于“计算机会超越人脑吗”这句话,最大匹配法的计算过程是这样的:

1、 创建指针A 并将它置于句子的最开始位置:A计算机会超越人脑吗;
2、 由于词典中最长的词语长度为3,所以创建新指针B,置于A 后的三个单位:A计算机B会超越人脑吗;
3、 检验A 和B 之间的字符串是否在词典中,如果在,就将A 移动到B 的位置, B 相应地往后移(直至移到句子末尾):计算机/A会超越B人脑吗;
4、 而如果A 和B 之间的字符串不在词典中,就将B 不断左移,直到能够有词语匹配或与A的距离为1 (也就是A、B 之间没有匹配的词语,用单字切分),我们的例子在第一次切分后就属于这种情况,所以再次操作的结果就是:计算机/A会B超越人脑吗;
5、 重复步骤3 或4,直到A 移动到句子末尾:计算机/会/超越/人脑/吗。
这种算法非常高效和简便,同时可以避免“计算/机会/超越/人脑/吗”这种切分方式(即便计算机和机会两个词同时在词典中)。但它的缺点也是很明显的,比如之前的“乒乓球拍卖完了”,就很可能被切分成“乒乓球/拍卖/完了”。为了消除这种歧义,人们也不断提出了一些改进算法,比如逆向匹配法,双向匹配法等等。
最大概率法
但是我们可以换一个角度来看待这种歧义问题。对于两种切分方式,“乒乓/球拍/卖/完/了”和“乒乓球/拍卖/完/了”,我们会认为前者更合理,因为通常乒乓球和拍卖不太可能联系在一起。也就是说,后者在语料库中出现的概率会比较小。所以,如果同一个句子出现若干种不同的划分,我们就希望找到可能出现概率最大的那个。
为了表述简便,这里用{A1, A2, A3, A4, A5} 和{B1, B2, B3, B4} 来分别表示{乒乓,球拍,卖,完,了} 和{乒乓球,拍卖,完,了} ,我们的任务是比较P(A1, A2, A3, A4, A5) 和P(B1, B2, B3, B4) 的大小。
根据条件概率公式,有
P(A1, A2, A3, A4, A5) = P(A1) P(A2|A1) P(A3|A1, A2) P(A4|A1, A2, A3) P(A5 | A1, A2, A3, A4)
其中P(A1) 表示A1 在语料库中出现的概率,P(A2|A1) 表示当上一个词语是A1时,在它后面A2 出现的概率,类似的, P(A3|A1, A2) 表示当前面两个词语是A1 和A2 时下一个词语是A3 的概率,等等……
但是我们发现,当句子很长时,这个概率表达式的尾巴会越来越长,给计算带来很大的麻烦,所以一般采用马尔可夫链(Markov Chain)的假设。
在马尔可夫链假定下,我们认为下一个词出现的概率只与前一个词有关,也就是说,在给定前文时,“卖”出现的概率只与紧接着的“球拍”有关,而与“乒乓”无关。有了这个假定,之前的概率就简化为
P(A1, A2, A3, A4, A5) = P(A1) P(A2|A1) P(A3|A2) P(A4|A3) P(A5|A4)
这就大大减小了计算量。在利用这个模型时,需要先对一个很大的语料库进行分析,这被称为“训练”的过程,其意义就在于把任意两个词语之间关联的概率都计算出来。当然在实际操作中,还牵涉到很多其他非常复杂细节,在此就不一一细说了。
4#
 楼主| 发表于 2012-1-3 15:26:31 | 只看该作者
自动作词:离我们有多遥远?

分词完成后,词频的统计就是小事一桩了。之前有人把宋词的高频词语统计表发到网上,一时间几乎每个理科生都能写宋词了。就技术层面而言,大部分自动作诗词的尝试都是在“高频——关联”这样的框架下完成的。即给定一个词语,搜索与之关联度较大的另外一批词作为候选集合,再通过预先设定好的准则进行筛选。

但这样的方法显然比较简陋。相比之下,有人研究了更高级的方法,例如有一篇名为一种宋词自动生成的遗传算法及其机器实现的论文就采用填词的思想:给定一个词牌,就相应地给出了格律、押韵和平仄等硬性要求,将满足要求的词语填入相应的句法中,再通过一系列评价指标计算每个填词组合的“得分”,最后利用遗传算法计算出“得分”最高的填词方案。
以“清平乐”这个词牌为例,其填词约束为
*0 / *1, *1 / 0 / 01. *1 / *0 / 0 / 11, *1 / *0 / *1.*0 / *1 / 00, *0 / *1 / 00. *1 / *0 / *1, *0 / *1 / 00.
其中0 表示平声, 1 表示仄声, * 表示两者皆可, / 是词语的分割。可以看到,对于“清平乐”这个词牌,实际上就是要将24 个词填入相应的空档中,其中第一个词以平声结尾,第二个词以仄声结尾,第四个词是一个平声单字……此外如果再考虑押韵,那么搜索的词语空间又会进一步减小。
在给定了一种填词方案后,就可以构造这种方案的评分体系。上述的论文从四个方面(句法合法性、主题相关性、词句搭配的适当性、风格和情感统一性)考虑,最后得到一个综合加权的指标。因此,自动作词的过程就抽象为了一个高维的最优化问题,即试图找到一种填词的组合,使得最终这个加权指标达到最大。
这篇论文的一个亮点在于使用了遗传算法作为主要的优化方法。遗传算法的细节比较复杂,在自动作词这一特定问题中,其主要思想是:
1、 随机生成若干个满足约束条件(格律、押韵等)的填词方案;
2、 选取其中较优的一些结果作为父代,然后利用遗传算法中的交叉和变异操作,从父代来生成子代。换言之,就是在已有的填词方案基础上生成新的填词方案;
3、 不断进行评判和迭代,直到跳出循环。
遗传算法的好处在于其算法的不确定性和可变异性,这是受生物的进化得到启发而发展起来的。虽然遗传算法作出的算词像模像样(例如本文开头的例子),但需要说明的是,遗传算法本质上是一个最优化算法,因此填词的好坏仍然与词库和评价指标直接相关。从某种意义上说,计算机作词实际上是利用已有的词库进行组合,而不是创造。
无论如何,一个丰富而优秀的词库仍然是有意义的——对于电脑来说,这是它进行“创作”的基石;对于人来说,它至少能告诉读者以往词人常用的意象是什么,从而提供一些创作上的灵感(当然不应该是词作本身)。
词频统计:另有他用
分词和词频统计的作用当然不只“自动作词”这么局限。举个简单的例子,大家几乎每天都要用到的搜索引擎就是分词的直接应用者。当你输入一串连续的词语时,搜索引擎就是先将它打碎然后再进行匹配的。
事实上,分词只是万里长征的第一步。在数据挖掘领域,我们经常用“文本挖掘”这个术语来指代文本数据提取、分析以及得出有用结论的过程,其操作的基本单元往往是一篇完整的文档,比如一个页面、一份报告等。在取得了文本的分词之后,我们就可以构造“文档——词频”矩阵,找出每篇文档对应的各个词语的词频,然后利用这个矩阵进行文档的分类、聚类等操作。例如,虽然Google本身不提供新闻,但是它可以从网络上自动抓取,然后根据文档的特征划分到适当的类别中。
文档分类的另外一个应用是文本作者的鉴定。例如日本同志社大学的金明哲教授曾利用文档分类方法来辨别若干有争论的小说的作者,甚至还在日本一起刑事案件中对“匿名信是否是犯罪嫌疑人所写”为警方提供了参考证明。
本文作者半年前在自己的博客中就统计了宋词中常用的意象。类似有趣的统计学研究,作者和他的朋友们一直在“统计之都” 这个网站上不断进行着,有兴趣尤其是相关专业的朋友,快来这里看看吧。
参考资料:
[1] 一种宋词自动生成的遗传算法及其机器实现
[2] lewutian: 中文分词算法总结
[3] ICTCLAS汉语分词系统
[4] 李舰,第三届R语言会议: R与文本挖掘——文本挖掘简介与系统实现
[5] 《文本数据统计科学的现状与展望》,金明哲,学术讲座
您需要登录后才可以回帖 登录 | 注册

本版积分规则


QQ|联系我们|手机版|Archiver|教师之友网 ( [沪ICP备13022119号]

GMT+8, 2024-9-22 16:40 , Processed in 0.081233 second(s), 26 queries .

Powered by Discuz! X3.1 Licensed

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表