Aug 10

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

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

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

查看更多 »

Jan 5

    这篇文章是漫话中文分词算法的续篇。在这里,我们将紧接着上一篇文章的内容继续探讨下去:如果计算机可以对一句话进行自动分词,它还能进一步整理句子的结构,甚至理解句子的意思吗?这两篇文章的关系十分紧密,因此,我把前一篇文章改名为了《漫话中文自动分词和语义识别(上)》,这篇文章自然就是它的下篇。我已经在很多不同的地方做过与这个话题有关的演讲了,在这里我想把它们写下来,和更多的人一同分享。

    什么叫做句法结构呢?让我们来看一些例子。“白天鹅在水中游”,这句话是有歧义的,它可能指的是“白天有一只鹅在水中游”,也可能指的是“有一只白天鹅在水中游”。不同的分词方案,产生了不同的意义。有没有什么句子,它的分词方案是唯一的,但也会产生不同的意思呢?有。比如“门没有锁”,它可能是指的“门没有被锁上”,也有可能是指的“门上根本就没有挂锁”。这个句子虽然只能切分成“门/没有/锁”,但由于“锁”这个词既有可能是动词,也有可能是名词,因而让整句话产生了不同的意思。有没有什么句子,它的分词方案是唯一的,并且每个词的词义也都不再变化,但整个句子仍然有歧义呢?有可能。看看这句话:“咬死了猎人的狗”。这句话有可能指的是“把猎人的狗咬死了”,也有可能指的是“一只咬死了猎人的狗”。这个歧义是怎么产生的呢?仔细体会两种不同的意思后,你会发现,句子中最底层的成分可以以不同的顺序组合起来,歧义由此产生。

查看更多 »

Dec 29

     据说,爱出题也是 Geek 的一种特征。这几天在做语言工程课的期末大作业时,再一次见识了汉语里各种诡异的语法规则,然后突然想到了这样一种好玩的题型,于是竟然暂时放下手中的作业,花时间编了几个这样的题目来(感谢 Geek 小美女 localhost_8080 的帮助)。
    下面的每一组词中,前五个词都具有某种共同的性质,这种性质是后面五个词都不具有的。你能猜出每组词所对应的那个性质吗?

      (1) 反复、高兴、磨蹭、说笑、许多 | 地震、动静、金黄、巨大、雕刻
      (2) 鱼、路、船、裙子、短信 | 山、剑、伞、文章、水母
      (3) 锁、画、挂钩、标志、爱好 | 钟、鞋、密码、学问、照片
      (4) 腿、门、气味、鱼刺、笔记本 | 手、电、建筑、铅笔、地球仪
      (5) 车、地、桌子、屁股、筷子 | 水、胃、位置、大陆、晚餐

查看更多 »

Mar 10

    记得第一次了解中文分词算法是在 Google 黑板报 上看到的,当初看到那个算法时我彻底被震撼住了,想不到一个看似不可能完成的任务竟然有如此神奇巧妙的算法。最近在詹卫东老师的《中文信息处理导论》课上再次学到中文分词算法,才知道这并不是中文分词算法研究的全部,前前后后还有很多故事可讲。在没有建立统计语言模型时,人们还在语言学的角度对自动分词进行研究,期间诞生了很多有意思的理论。

    中文分词的主要困难在于分词歧义。“结婚的和尚未结婚的”,应该分成“结婚/的/和/尚未/结婚/的”,还是“结婚/的/和尚/未/结婚/的”?人来判断很容易,要交给计算机来处理就麻烦了。问题的关键就是,“和尚未”里的“和尚”也是一个词,“尚未”也是一个词,从计算机的角度看上去,两者似乎都有可能。对于计算机来说,这样的分词困境就叫做“交集型歧义”。

    有时候,交集型歧义的“歧义链”有可能会更长。“中外科学名著”里,“中外”、“外科”、“科学”、“学名”、“名著”全是词,光从词库的角度来看,随便切几刀下去,得出的切分都是合理的。类似的例子数不胜数,“提高产品质量”、“鞭炮声响彻夜空”、“努力学习语法规则”等句子都有这样的现象。在这些极端例子下,分词算法谁优谁劣可谓是一试便知。

查看更多 »

Jun 5

有时候会觉得日文很有喜感,印象最深的就是第一次听说“努力学习”在日文中写作“一生悬命勉强”时,真把我笑得前俯后仰。今天网上闲逛,偶入一日文数学网站,惊奇地发现里面的大多数日文数学名词我都能看懂,并且依旧给人带来一种新奇的陌生感:“多边形”叫做“多角形”,“梯形”叫做“台形”,“切线”叫做“接线”,等等。于是我想到了下面这个有趣的游戏:我在日文 Wikipedia 中挑选了一些词汇,看看大家能否猜得到它们的意思。括号里的数字表明对应的汉语名词有几个字。

=== 数学篇 ===
1. 自乗 (2)
2. 確率 (2)
3. 合同 (2)
4. 二進法 (3)
5. 放物線 (3)
6. 背理法 (3)
7. 暗号理論 (3)
8. 天井関数 (5)
9. 数理論理学 (4)
10. 可付番集合 (4)
11. 鳩の巣原理 (4)
12. 半順序関係 (4)
13. 位相幾何学 (3)
14. 連続体仮説 (5)
15. 排他的論理和 (2)
16. 双子素数の予想 (6)
17. ユークリッド原論 (4)
18. 一対一上への写像 (4)
19. 平方剰余の相互法則 (5)
20. ゲーデルの不完全性定理 (8)

查看更多 »

May 26

    大家都知道,幻方是这样一种数字游戏,将 1 到 n^2 这 n^2 个数填入 n×n 的方阵中之后,每行、每列及两条对角线上的数字之和都相同。作为一个古老的数学游戏,幻方的生命力极强,直到现在数学家们还在寻找满足各种奇怪性质的幻方。更有意思的是,这神奇的数字方阵后来竟也发展成了文字游戏。人们发现,在 4×4 的方阵中填入以下字母,每行每列都是一个单词:

C A R D
A R E A
R E A R
D A R T

    这样的字母方阵就被称为“文字幻方” (word square) 。

    最近本人对文字游戏尤其感兴趣,心头开始思考起这么一个问题:是否有可能在方阵中填入汉字,让每行每列都是一个词语呢?看着电脑桌面上放着上次寻找 中文 piphilology 的词库,我就又手痒了,于是花了一下午的时间,利用 Mathematica 对汉字幻方作了一些搜索。下面和大家分享一下我得到的结果。

查看更多 »

Jan 14

    语言统计分析期末大作业要求我们统计全唐诗中的对偶字,并用所得到的统计结果反过来评判出对仗最工整的诗句。我在数据处理过程中突然想到,鉴于互成对偶的两个字之间有一定的语义联系,我们便有了一个庞大的汉字语义关联库;如果把所有汉字之间的关联画成一张图会是什么样子呢?于是我用 Mathematica 7 提出了全唐诗中处在对偶位置上的所有字对,得到了 464448 个可能的对偶关系;再利用一些算法得到了最稳定、最常用的 2000 个对偶关系,把它们都描绘在一张大图上,于是便有了上面的这个图。点击这里查看高清无码大图,1600x1600 像素。可以看到,有语义关联的汉字自动地聚合到了一起。

查看更多 »

Nov 19

    在翻看现代汉语笔记时,我突然惊奇地发现,在语言文字中大量使用“他妈的”能够非常有效地避免歧义现象,提高语言交际的效率。
    让我们来看看这个句子:“今年的考题跟去年一样”。假设你想要在这句话里面加一个“他妈的”,在通常情况下(不强调句中的任何成份时),你应该加在哪里?嗯,不错,大家通常都会说,“今年的考题跟去年他妈的一样”。但是,再看看这个句子:“他很狡猾,跟狐狸一样”。同样在这里插入一句“他妈的”,你又会加在哪里呢?相信大多数人都会说,“他很狡猾,跟他妈的狐狸一样”。同样是“跟……一样”的结构,为什么“他妈的”插入的位置就不一样呢?其根本原因就在于,两个句子看似相同,但具体结构是不一样的。当表示A和B完全相同时,说“跟B一样”指的是“和B是一个样”,其结构是“跟B”加上“一样”;当表示A与B具有相似性时,说“跟B一样”指的是“好像B的样子”,其结构是“跟”加上“B一样”。因此,在这两个划分不同的结构间插入“他妈的”,位置也理所当然的不一样了。当“A跟B一样”表示相同时,我们往往说“A跟B他妈的一样”,重音在“一样”上;但当“A跟B一样”表示相似时,我们往往说“A跟他妈的B一样”,重音在B上。
    现在,考虑这个句子:“今年的考题跟作业题一样”。这就有歧义了——是说今年的考题真的用了作业里的题呢,还是仅仅是比喻这次考题简单得像作业题?这时,“他妈的”就派上用场了。我们可以在句子间加入“他妈的”来区别:

      今年的考题跟作业题他妈的一样 (指与作业题相同)
      今年的考题跟他妈的作业题一样 (暗指考题太简单)

查看更多 »

« 更早的日志