电脑的中文处理业界有很多广为流传似是而非的迷思。在今后的随笔系列中,准备提出来分别讨论。 迷思之一:切词(又叫分词,word segmentation)是中文(或东方语言)处理特有的前提,因为中文书写不分词。 切词作为中文处理的一个先行环节,是为了模块化开发的方便,这一点不错。但它根本就不特有。 任何自然语言处理都有一个先行环节,叫 tokenization,就是把输入的字符串分解成为词汇单位:无论何种书面语,没有这个环节,辞典的词汇信息就无以附着,在词汇类别的基础上的有概括性的进一步句法语义分析就不能进行。中文切词不过是这个通用的 tokenization 的一个案例而已,没有什么“特有”的问题。 有说:中文书写不分词,汉字一个挨一个,词之间没有显性标识,而西文是用 space(空白键)来分词的,因此分词是中文处理的特有难题。 这话并不确切,语言学上错误更多。具体来说: 1 单字词没有切分问题:汉语词典的词,虽然以多字词为多数,但也有单字词,特别是那些常用的功能词(连词、介词、叹词等)。对于单字词,书面汉语显然是有显性标志的,其标志就是字与字的自然分界(如果以汉字作为语言学分析的最小单位,语言学上叫语素,其 tokenization 极其简单:每两个字节为一个汉字),无需 space. 2 多字词是复合词,与其说“切”词,不如说“组”词:现代汉语的多字词(如:利率)是复合词,本质上与西文的复合词(e.g. interest rate)没有区别,space 并不能解决复合词的分界问题。事实上,多字词的识别既可以看成是从输入语句(汉字串)“切”出来的,也可以看成是由单字组合抱团而来的,二者等价。无论中西,复合词抱团都主要靠查词典来解决,而不是靠自然分界(如 space)来解决(德语的名词复合词算是西文中的一个例外,封闭类复合词只要 space 就可以了,开放类复合词则需要进一步切词,叫 decompounding)。如果复合词的左边界或者右边界有歧义问题(譬如:“天下” 的边界可能歧义, e.g. 今天 下 了 一 场 雨;英语复合副词 in particular 的右边界可能有歧义:e.g. in particular cases),无论中西,这种歧义都需要上下文的帮助才能解决。从手段上看,中文的多字词切词并无任何特别之处,英语 tokenization 用以识别复合词 People's Republic of China 和 in particular 的方法,同样适用于中文切词。 咱们换一个角度来看这个问题。根据用不用词典,tokenization 可以分两种。不用词典的tokenization一般被认为是一个比较trivial的机械过程,在西文是见space或标点就切一刀(其实也不是那么trivial因为那个讨厌的西文句点是非常歧义的)。据说汉语没有space,因此必须另做一个特有的切词模块。其实对英语第一种tokenization,汉语更加简单,因为汉字作为语素(morpheme)本身就是自然的切分单位,一个汉字两个字节,每两个字节切一刀即可。理论上讲,词法句法分析完全可以直接建立在汉字的基础之上,无需一个汉语“特有”的切词模块。Note that 多数西文分析系统在Tokenization和POS以后都有一个chunking的模块,做基本短语抱团的工作(如:Base NP)。中文处理通常也有这么一个抱团的阶段。完全可以把组字成词和组词成短语当作同质的抱团工作来处理,跳过所谓的切词。 Chunking of words into phrases are by nature no different from chunking of morphemes (characters) into words. Parsing with no “word segmentation” is thus possible. 当然,在实际操作层面上看,专设一个切词模块有其便利之处。 再看由词典支持的tokenization, 这种 tokenization 才是我们通常讲的切词,说它是中文处理特有的步骤,其实是误解,因为西文处理复合词也一样用到它。除了实验室的 toy system,很难想象一个像样的西文处理系统可以不借助词典而是指望抽象规则来对付所有的复合词:事实上,对于封闭类复合词,即便抽象的词法规则可以使部分复合词抱团,也不如词典的参与来得直接和有益,理由就是复合词的词典信息更少歧义,对于后续处理更加有利。汉语的复合词“利率”与英语的复合词 “interest rate” 从本质上是同样的基于词典的问题,并没有什么“特有”之处。 【相关博文】 《 立委科普: 应该立法禁止分词研究 :=) 》 【置顶:立委科学网博客NLP博文一览(定期更新版)】
《立委随笔:汉语自动断词 “一次性交500元”》 (2824 bytes) Posted by: 立委 Date: April 27, 2007 10:56PM 请教一下立委,这过滤词的语法能提高吗。 (15409) Posted by: oztiger Date: July 12, 2006 11:03PM 我初看xj这帖子,很不明白 北大法学院 怎么会变成 北 大法 学院,想想又挺好笑。然后想是否xj毕竟不是专业的,可能过滤法不够智能。特意用百度去搜北大法学院,竟然死掉,看来网上长城也没解决这个问题。 正好就近就是一个专家,问问老李有没有现成的code识别中文字词断句。 说真的看来老李的专业前景无限。我不是说老李去帮网上长城打补丁,只是想想正火的data mining里面肯定也要解决这个问题,不然搜出来意思都变了 ===================================================================== 这是切分歧义问题。目前汉语自动分词的水平可以解决 (15421) Posted by: liwei999 Date: July 13, 2006 01:30AM 90%以上这样的歧义区分问题。现成的code应该有,不过往往很笨重,overhead不小,不是很容易integrate。 My friend Dr Guo has a demo Chinese tokenizer at: He is an expert in this area. 比如: Chinese Tokenization Demo Enter a Chinese string and hit the Run button, then tell me how I can do better for you! Input 很 不 明 白 北 大 法 学 院 怎 么 会 变 成 法 轮 大 法 的 大 法 Output 很 不 会 变 成 的 大 法 ===================================================================== 涨了见识。 (15422) Posted by: oztiger Date: July 13, 2006 02:11AM 我是什么都想知道一下,真翻开论文看了几段又懒了,但总算知道了一下目前解决这种问题的思路。他能把‘结合成分子’正确断出来不容易。 不过你跟他反馈一下,我让他的程序断‘一次性交500元’(不准笑!正经的科学研究),结果是 一 次 性 交 5 0 0 元,跟我的原意不符。 另外网上长城为什么不采用你们这样的最新技术之类的,他们把北大/法学院当成大/法来屏蔽还是挺落后的。可是我用google搜大/法,第八个网页就已经是北大/法学院了,怎么他们的算法也那么差? ====================================================================== 没有断错呀,至少把最常见的意思断出来了。 (15423) Posted by: liwei999 Date: July 13, 2006 02:34AM 引用: oztiger 不过你跟他反馈一下,我让他的程序断‘一次性交500元’(不准笑!正经的科学研究),结果是 一 次 性 交 5 0 0 元,跟我的原意不符。 你真开玩笑,程序又不是道德法官,怎么知道这个年头还会碰上你这么一个正人君子并揣摩出你的原意呢(何况是不是原意也很难说,又不是你肚子里面的蛔虫)。他的程序是以统计为基础的,从统计上说,你的“原意”绝对是少数派,在 threshold 以下,机器学不出来。 ===================================================================== 是有小毛病 (15424) Date: July 13, 2006 02:56AM 如 input 一次性交款500元 Output 一 次 性 交 款 5 0 0 元 但 Input 一次性交费500元 Output 性 交 费 5 0 0 元 立委按: 其实 “ 一 次 性 交 款 5 0 0 元” 也合乎汉语语法。 【补记】原作者反馈: PS. 一 次 性 交 5 0 0 元 一 次 性 交 款 5 0 0 元 性 交 费 5 0 0 元 I never responded to this. Actually please notice that I have a space between 性 and 交. Furthermore, please notice the difference between the last one (where I have 性 and the first two. What behind is, I have the assumption (a truth I think) that ALL (well, except for 葡萄, 玻璃 and the like) multi-character 'words' are ambiguous (so-called hidden ambiguity) and hence have to be handled with dictionary at 'application' time ( 在‘用’字上狠下功夫 ). This is consistent with your 词汇主义 and your rule-of-thumb keeping ambiguity untouched. I actually pushed that one step further by keeping ambiguity only one level (that is, you only need to look ONE level deeper). This is consistent with your 自底而上 but more concrete/specific -- whenever I see potential ambiguity at my level, I keep them there (as in 性 交 and then 断链. I mean I agree with you fully. And by today if I have a bit more added info in dictionary, I think I can do 'shallow parsing' better. 很 不 会 变 成 的 大 法 At that time I have entity but no event. Fun to talk about these! 【置顶:立委科学网博客NLP博文一览(定期更新版)】