趣题:测量两根木棒长度的更优方案

    这道题出自 Fifty Challenging Problems in Probability 一书中的第 49 个问题(有趣的是,这本书里其实一共有 56 个问题)。假设你有一个长度测量工具。在测量实际长度为 L 的物体时,由于不可避免的误差,你将会得到一个平均值为 L ,方差为 σ2 的随机结果。现在有两根长度未知的木棒,你需要用两次测量得出每根木棒的长度,使得所得结果的误差尽可能的小。除了分别测量每根木棒的长度以外,还有没有什么更好的方案?

Read more…

互联网时代的社会语言学:基于SNS的文本数据挖掘

    今年上半年,我在人人网实习了一段时间,期间得到了很多宝贵的数据,并做了一些还算有意义的事情,在这里和大家一块儿分享。感谢人人网提供的数据与工作环境,感谢赵继承博士、詹卫东老师的支持和建议。在这项工作中,我得到了很多与众人交流的机会,特别感谢 OpenParty 、 TEDxBeijing 提供的平台。本文已发表在了《程序员》杂志,分上下两部分刊于 2012 年 7 月刊和 8 月刊,在此感谢卢鸫翔编辑的辛勤工作。由于众所周知的原因,《程序员》刊出的文章被和谐过(看到后面大家就自动地知道被和谐的内容是什么了),因而我决定把完整版发在 Blog 上,同时与更多的人一同分享。对此感兴趣的朋友可以给我发邮件继续交流。好了,开始说正文吧。

    作为中文系应用语言学专业的学生以及一名数学 Geek ,我非常热衷于用计算的方法去分析汉语资料。汉语是一种独特而神奇的语言。对汉语资料进行自然语言处理时,我们会遇到很多其他语言不会有的困难,比如分词——汉语的词与词之间没有空格,那计算机怎么才知道,“已结婚的和尚未结婚的青年都要实行计划生育”究竟说的是“已/结婚/的/和/尚未/结婚/的/青年”,还是“已/结婚/的/和尚/未/结婚/的/青年”呢?这就是所谓的分词歧义难题。不过,现在很多语言模型已经能比较漂亮地解决这一问题了。但在中文分词领域里,还有一个比分词歧义更令人头疼的东西——未登录词。中文没有首字母大写,专名号也被取消了,这叫计算机如何辨认人名地名之类的东西?更惨的则是机构名、品牌名、专业名词、缩略语、网络新词等等,它们的产生机制似乎完全无规律可寻。最近十年来,中文分词领域都在集中攻克这一难关。自动发现新词成为了关键的环节。

    挖掘新词的传统方法是,先对文本进行分词,然后猜测未能成功匹配的剩余片段就是新词。这似乎陷入了一个怪圈:分词的准确性本身就依赖于词库的完整性,如果词库中根本没有新词,我们又怎么能信任分词结果呢?此时,一种大胆的想法是,首先不依赖于任何已有的词库,仅仅根据词的共同特征,将一段大规模语料中可能成词的文本片段全部提取出来,不管它是新词还是旧词。然后,再把所有抽出来的词和已有词库进行比较,不就能找出新词了吗?有了抽词算法后,我们还能以词为单位做更多有趣的数据挖掘工作。这里,我所选用的语料是人人网 2011 年 12 月前半个月部分用户的状态。非常感谢人人网提供这份极具价值的网络语料。

Read more…

汉字地图第二版

    去年年初的时候,我曾经发布过某专业课期末作业研究过程中带来的一个有趣的副产品:汉字的字义网络图。不过,当时我是直接调用的 Mathematica 的相关函数,函数几乎不能调整参数,并且也无法处理边上权重不同的情况。最近在研究引力斥力绘图算法,突然想到把当时的数据重新画一张图。于是就有了汉字地图第二版(点击小图看大图):

   

Read more…

无聊小制作:“数词+非数词+数词+非数词”的出现频数

    昨天和同事聊到,汉语还真是奇怪,有“四分五裂”,有“五颜六色”,也有“七上八下”,但好像从没听说过六什么七什么的。于是想到,在汉语中,“数词 + 非数词 + 数词 + 非数词”的短语是怎样分布的呢?回到家后立即用 Mathematica 做了一个柱状图,绘出了九九八十一种数词短语模式在大规模真实语料中的出现频数。注意,这里统计的是总的出现频数,重复出现也会计算在内。另外,这是一个简单而机械的统计过程,因而 “三人一组”、“七天七夜”之类的非成语也被算了进来。

      

    嗯,对,没有任何意义,纯属无聊之作。

无聊小研究:各种文体中出现频率最高的四字词

今天,我拿到了梦寐以求的大规模中文语料库,总大小超过 1 G ,覆盖了各个时代各种文体的中文资料。有了这个语料库后,我便能完成很多早就想做的事情,比方说,统计各种文体中出现频率最高的四字词。给定一段文本后,基本的统计过程如下:

  1. 统计所有连续四字的出现频数;
  2. 按频数对所有四字组合从高到低排序;
  3. 删掉所有包含非汉字字符(比如数字、标点)的四字组合;
  4. 删掉明显不成词或者不成词组的四字组合(这一步有人为因素,因此下面的数据并不是 100% 客观的);
  5. 列出频数最高的 10 个四字词。

所选用的统计对象基本上都是数十万字的篇幅,所有步骤都是用 Mathematica 实现的。下面是结果:
Read more…