星期六, 十二月 03, 2011

杂议文化与宗教

世界末日
2012年快到了,受到电影《2012》的影响,世界末日又成了大伙茶余饭后的谈资。回想起来,不算太久的一段时间内,我们已经面对了若干个“世界末日”了:1982年的九星连珠,1999年的行星大十字,2012年的玛雅预言。似乎每隔十来年,就有一个“末日”诞生,好让大家津津乐道。这不得不让人好奇,到底是什么让人相信世界末日的存在呢?
那些末日预言大部分来自西方,我们也能很自然地联想到基督教中的末日审判:在未来的某一天,世界发生灾难,基督再临,信神的人得到救赎,其他人受到惩罚。其实不光基督教,众多宗教教义中都有世界末日说:犹太教中弥赛亚再临,拯救上帝的选民;伊斯兰教中死者复活,接受真主的审判;佛教中弥勒佛降世,度化信众脱离生死轮回。末日审判是基督教,犹太教,伊斯兰教的基本教义,信徒在末日恐惧中期盼神的帮助,深化对神的景仰。这些教义大都把世界末日描述得极其惨烈,唯有神能拯救人类于水火,神也一定会拯救信仰祂的人。信徒在神那里获得了希望,神在信徒那里巩固了地位。所以,一旦有任何关于世界末日的蛛丝马迹,信徒们自然不会错过。

中国的传统宗教
影响古代中国两大宗教就是佛教和道教了。佛教是印度的舶来品,道教则是由道家思想衍生的本土宗教。这两门宗教各自成体系,在发展中又彼此交融,在民间又有很多传说和故事把它们联系在一起。在《西游记》里面,孙悟空本是道教出身,大闹了道教玉皇大帝的天宫,玉皇大帝向释迦佛祖求援,悟空被佛祖压在五行山下五百年后,拜唐僧入佛门,取真经后成佛。故事中唐僧师徒遇难时,佛门道门都来帮忙,亲如一家。这就让人不禁要问,为啥在西方不同宗教冲突不断,在中国宗教却能彼此交融?
首先要指出的是,在中国皇权最大,皇权不需要借助宗教力量打击异己。宗教为了发展必须迎合皇权,谁要在下面惹事,皇帝肯定不干。其次,大部分中国老百姓信奉实用主义,即便有意识形态的纷争,也是谁上台,支持谁。中国历史上时而兴佛,时而兴道,人们信着信着也就弄混了。第三,佛教和道教代表的两类希望并不冲突,恰好互补:有能力的人,像皇帝,显贵从道教炼丹,求长生不老;没能力的老百姓,失意人士从佛教,求来生多福。有能力的和没能力的互相流动,所以佛教和道教都有受众,可以互通有无。

中国传统文化和世界末日
前面说过,佛教里面也有弥勒拯世的末日说,但算不上基本教义(佛教的基本教义是因果报应,六道轮回),而且预言的还是五十六亿年后的事情。似乎中国传统文化中少有末世的危机感,我猜可能有这么两个原因。一个是中国文化核心区少有火山爆发,海啸,大洪水这类自然灾害,老百姓对“世界末日”的直观印象不多。另一个是中国皇权至上,会杜绝下面的“妖言惑众”。实际上,在中国历史上,皇权不稳,乃至朝代更迭的时候,不乏有人宣称自己是“救世主”,比如陈胜吴广的“大楚兴陈胜王”揭开了秦帝国灭亡的序幕;元末明初,白莲教宣称“弥勒降生,明王出世”造就了朱元璋的“明”帝国。但是在国家强盛的时候则鲜有末世说。朱元璋当了天子后就取缔了白莲教。
在西方,由于教会势力强大,没有人敢触碰末世说这一基本教义,导致了隔三差五就会有人预言世界末日的现象。而人们对末日英雄的盼望兴许也是西方个人英雄主义的来由吧。

星期五, 十月 28, 2011

训练英语Wikipedia的语言模型

Wikipedia是一个非常有价值的语言资源,许多人都根据自己的需要,对其加工整理。这里要介绍的是我用英文Wikipedia训练语言模型的经历。
网上有人做过类似的事情,正好拿来借鉴一下。

第一步
下载Wikipedia的压缩数据,并解压
http://download.wikimedia.org/enwiki/latest/enwiki-latest-pages-articles.xml.bz2
第二步
从xml格式的数据中抽取正文。
网上可用的抽取Wikipedia正文的工具有很多,我也尝试了不少,不过感觉最好的是意大利人的这个
http://medialab.di.unipi.it/wiki/Wikipedia_Extractor
这个python脚本忽略掉Wikipedia中的表格,注释等信息,而专注于正文文本,稍作修改后,刚好适用于训练语言模型。
下载脚本
找到line 52
prefix = 'http://it.wikipedia.org/wiki/'
替换成
prefix = 'http://en.wikipedia.org/wiki/'
找到line 413
return '%s' % (get_wiki_document_url(document_title, ''), link_text)
替换成
return link_text
然后到工作目录下执行

mkdir extracted
python /path/to/software/WikiExtractor.py -b 500M -o extracted < /path/to/Wikipedia/dump/enwiki-latest-pages-articles.xml > extract.log 2>&1 &

就可以在extracted目录下得到一个个抽取出来的大小不超过500M的Wikipedia正文了。如果你的机器内存够大,可以不用设置文件大小上限,直接生成一个Wikipedia正文文件。为了后面叙述方便,这里把所生成的所有正文都重定向到一个文件wiki.xml中去。所生成的文件格式大概如下
<doc id="12" url="http://en.wikipedia.org/wiki/Anarchism">
Anarchism.
Anarchism is a political philosophy which considers the ...
</doc>

<doc id="25" url="http://en.wikipedia.org/wiki/Autism">
Autism.
Autism is a disorder of neural development ...
</doc>
...
接下来就可以用这个文本中的内容训练Wikipedia的语言模型了。


第三步
训练语言模型需要把文本切成一个个单元,术语叫做tokenize。我用了统计机器翻译中的一个比较典型的tokenizer(地址)。
把它下载并解压到工作目录后可以看到这个工具包里面包含两个部分:
split-sentences.perl负责将整段的文字切分成一个个句子;
tokenizer.perl负责将句子切分成一个个token。
可以通过执行下面的命令完成tokenize工作:
perl /path/to/tools/split-sentences.perl -l en < extracted/AA/wiki.xml | perl /path/to/tools/tokenizer.perl -l en > extracted/AA/wiki.tok 2>&1 &
其中wiki.tok就是分好tokens的结果。下面介绍用srilm工具包训练语言模型的操作步骤。
第四步
训练语言模型,有若干比较有名的工具包可用。比如srilmirstlm等等。这里我们用srilm来训练语言模型。下载并编译后,执行下面的命令,就可以得到语言模型了。
/path/to/srilm/bin/i686-m64/ngram-count -order 3 -interpolate -kndiscount -unk -text extracted/AA/wiki.tok -lm extracted/AA/wiki.lm > log.out 2>&1 &
这里我们训练了一个trigram的语言模型wiki.lm。查看这个文件格式如下:

head extracted/AA/wiki.lm
\data\
ngram 1=13881548
ngram 2=103081137
ngram 3=91614070
\1-grams:
-3.464225 ! -1.217958
-1.898412 " -0.8756708
-8.841018 "*" -0.1168323
...
也就是说,一共得到了13881548个unigram,103081137个bigram,91614070个trigram。
要预测一个句子由这个语言模型生成的概率可以用下面的命令,假设目标句子保存在sent.txt中。
/path/to/srilm/bin/i686-m64/ngram -lm extracted/AA/wiki.lm -ppl sent.txt
也可以看一下由这个语言模型随机生成的句子是什么样的,命令如下
/path/to/srilm/bin/i686-m64/ngram -lm extracted/AA/wiki.lm -gen 10 > gen_sent.txt
就会在gen_sent.txt中得到随机生成的10个句子。
更多好玩的东西有待进一步开发。

星期四, 十月 08, 2009

歌词

If I were a painting
作词:Skip Ewing; Don Sampson
翻译:心虫
修改:astro
演唱:Clinton Gregory

If I were a painting 假若我是一幅画
Captured on canvas 俘获在帆布里
Alone in the portrait I would stand 肖像中茕茕孑立
And brush strokes bold 笔锋突兀
Yet soft as a whisper 却温婉若耳边低语
The work of a feminine hand 这纤纤之手的杰作啊
Caught in a still life 囚禁着静止的生命
Surrounded by shadows 阴影缭绕
And lost in a background of blue 又在一片幽兰中失迷
If I were a painting 假若我是一幅画
My price would be pain 代价便是楚戚
And the artist would have to be you 而作者定然是你
I imagine the colors 我猜那色彩
Would all run together 会融到一起
If you ever allowed me to cry 只要你允我哭泣
So don't paint the tears 哦,请别画那泪水
Just let me remember me 就让我把自己印记
Without you in my eyes 就当我的眼中没你
It's only the frame 若不是有画框
That holds me together 还在四周环抱
Or else I would be falling apart 我早已分崩离析
If I were a painting 假若我真的是一幅画啊
Then I wouldn't feel 我就不会有感觉
And you wouldn't be breaking my heart 也不会为你心碎难已

星期日, 五月 17, 2009

读书破万卷

阅读文献是科研工作者的家常便饭,也是一项基本功。在修炼这项基本功的过程中有些体会,暂且搁在这里,权当到此一游的印记 吧。
阅读有个从量变到质变的过程。刚开始接触某个领域的时候,对其中的名词、说法、套路之类的东西比较陌生,随着阅读量的增大,那些频繁出现的内容便刻画了该领域经常关注的对象。于是重点浮出水面,脉络开始清晰,对领域的结构也逐渐有了认识。而后的阅读便在这一框架下得到加速:大部分文章是对已有知识的重新组合。因此在外行看来眼花缭乱的热闹在内行眼里其新颖程度仅是门道的那一部分。知识体系的构建是靠阅读量的积累磨练出来的。就好比统计样本必须足够充分才能从中推断出可靠信息。在小样本集上推断则非常困难,得到的“创新”也常常是经不起推敲的。
一般来说,学习的过程是由浅入深,由表及里,由此及彼,由点到面而层层递进的过程,最终达到举一反三,触类旁通的境界。
在阅读选材方面,对于一个想深入研究某个领域而时间又相对充裕的人来说,最好先读教材,再读专著,进而读期刊和会议文章。这四类材料各有特点,其中,教材的覆盖面最为全面,而且由于其教学目的,教材的可读性最好。另外,教材中的内容一般都是被公认的和最具权威性的知识,经过了时间的考验才被慎重地选择进入课堂。因此,在这四类读物当中,教材的可信度最高。然而教材也面临诸如篇幅和学时等方面的限制,内容深度与新颖程度可能不够,专著则弥补了这方面的不足。专著一般出现在一个子领域的研究初步成熟的阶段,往往是近年研究工作的集中总结,其内容多数经过了验证并具有一定代表性。通过读专著能感受到这个领域研究兴趣的变迁。期刊与前两者的区别在于,期刊中的文章立足于领域前沿,是文章作者亲身探索的结果,着重于突出其内容自身,为原创性工作,而教材和专著中内容多为作者转述他人工作,在这一点上,会议文章和期刊文章比较相似。但会议文章也有自己的特点,它以交流新思路为目的,其工作不必足够完整,一个初步的结果即可以在会议上讨论,可见会议文章的最大特点就是观点新。由于审稿周期短,甚至还可能有错误。学者们也是希望通过会议上的交流,探讨已有成果,启发新思路。往往一项研究开始于某次会议上的讨论,并在下次或下几次会议上进行检验,最终以期刊文章的形式发表。这也是为什么有经验的科研人员一般比较关注会议的原因。一般来说,会议文章相对较杂,其内容重点在于新思路而往往将基础知识一带而过,对于科研新手而言难于依靠阅读会议文章进行系统学习。科研成手则有一定的判断能力,会辨别文章中哪些可取,哪些不成熟,哪些被夸大,哪些是错误,能够做到去粗取精,去伪存真。因此对于入门者来说,一个比较合适的套路是从教材起步,逐渐掌握领域内的知识,打好基础再去创新。

星期二, 五月 05, 2009

Topic Models阅读心得


5/5/09
1.为什么要提出Topic Model?
我们在处理样本时需要提取特征,究竟什么是好的特征呢。有些时候,我们提取的特征只是对已观察到的样本具有良好的解释,但对于未知样本则无能为力,形成过拟合现象。这一问题的原因可能是所抽取的特征原问题的本质特征,而是一些“巧合”:刚好这些“巧合”的特征和样本的类别或者待考查的解释相一致,而问题的本质特征则被淹没在大量的这些“巧合”特征当中了。举个例子,去养鸡场考察和产蛋有关的特征,收集到如饲料配比,光照强度,湿度,温度,放养密度,鸡龄,羽毛颜色,鸡爪长度等特征,得到一个模型,但这组特征却无法解释另一个养鸡场的鸡从不下蛋的原因。真正的原因是,这些不下蛋的鸡都是公鸡,而统计数据的那个养鸡场的鸡都是母鸡!鸡的性别这一特征还是相对明显的,实际问题中还有许多特征无法直接观测得到,而这些特征又是很有用的——它们的分布相对稳定,与待考查的量的关系也比较稳定,并且受到采样数据集的影响较小,但对所考察目标的影响较大。如何找到这些隐含的特征就是Topic Model的主要目标。
2.Topic如何起作用?
画家在画油画时需要用到多种色彩,但绝大多数用到的色彩是不能直接找到对应的颜料的——因为颜色的数量是无穷多的。画家们对此并非无能为力,他们可以通过用已有的颜料搭配混合的方式调出所需要的各种颜色。在文本处理领域,可以做如下类比:将一个document看成是一幅模糊的油画,这幅画只有一个颜色,是由一些元素颜料按照一定配比混合而成的。比较两个document是否相似,就可以比较这对应的两幅画的颜色是否相似。下面将问题进一步简化,将不同长度的document看成是不同容量的盆,document中的word看成是盆中盛的彩色小球,每个小球上标记出所对应的word,每种颜色代表一个topic。前面所说的一幅油画相当于这里面的一个盆,要比较两个document是否相似,就是要比较这两个盆中颜色的分布是否相似。不幸的是,对文章的topic来说,计算机都是色盲——topic是隐含变量,不能直接观测得到。
3.怎样推断Topic?
色盲也可以知道交通红绿灯变色了没有——可以观察其他人的行为。这里用到了一个先验假设:其他人遵从交通规则且能分辨红绿。回到原问题上,我们也可以做一个假设:一个document中的topic分布会倾向于集中到某几个topic上——正如绘画调色时,一般只用到几种颜料来调色而非将所有颜料都用到一样。根据这条假设可以得知,经常同时出现在不同的document中的词更有可能来自于同一个topic;一个词在不同topic上的分布也尽可能集中于少数几个topic上。接下来,可以采用EM算法:先随机初始化一组分布,然后迭代式调整参数,使得topic的分布在word上和在document上都尽可能符合先验假设及观测数据。
4.杂感
潜在变量或隐含变量在平时也经常被提到,这些变量不能或不便被直接观察到,但如果假设其存在,则会比较方便地解释一些复杂现象。比如阴阳、五行、八卦等等都是些潜在变量,只不过这些潜在变量并不总是奏效。但另一组潜在变量带来了科学上的发现——化学元素。化学元素的发现也是通过假设潜在变量的存在并经过实证而得到的。此外还有海王星的发现。由于天王星的轨道并不符合预先的计算,但是通过引入一个假想的大行星就比较好解释观测与理论不符的现象了,结果通过在计算得到的相应位置上的观测,果然发现了一个新的大行星——海王星。

星期一, 十二月 15, 2008

读道德经 观噭(2)

天下皆知美为美 恶已 皆知善 訾不善矣 有无之相生也 难易之相成也 长短之相形也 高下之相盈也 意声之相和也 先后之相随 恒也 是以圣人居无为之事 行不言之教 万物作而弗始也 为而弗志也 成功而弗居也 夫惟弗居 是以弗去

天下的人都是知道什么是美、恶的,也都知道什么是善和不善的。
有和无是相对而产生的,难和易是相对而形成的,长和短是相对而比较出来的,高和下是相对而开出来的,要表达的意思和用来表达的话语是共生的,先和后的概念也是相对才有的。
这些相对的道理亘古不变,都摆在那里。这就是为什么圣人做事而不是造事,教化他人不需用言语的原因。
万物运行并没有一个开始(所谓开始,不过是之前的一个结束的后继),创生之时并没有记载,达到一定阶段也不会停留在那里不动。只有不停息才能够不消亡。

星期日, 十二月 14, 2008

读道德经 观眇(1)

最近在读道德经,这里写一点我的理解。


道 可道也 非恒道也 名 可名也 非恒名也 无 名万物之始也 有 名万物之母也 故恒无欲也 以观其眇 恒有欲也 以观其所噭 两者同出 异名同谓 玄之有玄 众眇之门

道,事物运动发展的规律。名,表示事物的方式。
道的规律是可以找到的,而这规律又不是一成不变的。
名也是可以表示出来的,但这表达也是变化不定的(不同地方,不同语言的人对同一事物的表达是不同的)。
(我想开篇这两句话的意思是告诉人们不要教条,而要因时因地制宜。)
要表达的万物开始的时候都是没有名的;但这些万物又都是存在的。所以它们既“无”又“有”。
要观察事物的细微的本质,就要毫无偏见,抛开以往“名”的影响,不要有先验的东西在里面。
但如果要研究对事物表达的范畴问题,又需要了解业已存在的东西,以厘清条理。
道和名,一个代表实体,一个代表对实体的抽象;一个是内容,一个是形式。两者的本源是一致的,指称不一样而已。这道理深刻悠远,是理解万物众多细微本质的出发点。