在《自然语言处理领域的两种创新观念》中,张俊林博士谈了两种创新模式:一种创新是研究模式的颠覆,另外一种创新是应用创新,前者需要NLP领域出现爱因斯坦式的革新人物,后者则是强调用同样的核心技术做不一样的应用。
在自然语言处理领域,多数创新都属于后者,譬如统计机器翻译,Brown就是学习和借鉴了贾里尼克将语音识别看成通信问题的思想,将信源信道模型应用到了机器翻译之中,从而开辟了SMT这一全新领域。而Nianwen Xue将词性标注的思想应用到中文分词领域,成就了字标注的中文分词方法(Chinese Word Segmentation as Character Tagging),同样取得了巨大的成功。这里曾通过节选黄昌宁老师和赵海博士在07年第3期《中文信息学报》上发表的《中文分词十年回顾》介绍了《基于字标注的中文分词方法》,因此还不太清楚这类方法的读者可以通过上述文章了解该方法的一些背景,本文的重点是实践。
既然基于字标注的中文分词方法是将中文分词当作词性标注的问题来对待,那么就必须有标注对象和标注集了。形象一点,从这个方法的命名上我们就可以推断出它的标注是基本的汉字(还包括一定数量的非汉字字符),而标注集则比较灵活,这些标注集都是依据汉字在汉语词中的位置设计的,最简单的是2-tag,譬如将词首标记设计为B,而将词的其他位置标记设计为I,那么“中国”就可以标记为“中/B 国/I”,“海南岛”则可以标记为“海/B 南/I 岛/I”,相应地,对于如下分好词的句子:
瓦西里斯 的 船只 中 有 40% 驶 向 远东 , 每个 月 几乎 都 有 两三条 船 停靠 中国 港口 。
基于2-tag(B,I)的标注就是:
瓦/B 西/I 里/I 斯/I 的/B 船/B 只/I 中/B 有/B 4/B 0/I %/I 驶/B 向/B 远/B 东/I ,/B 每/B 个/I 月/B 几/B 乎/I 都/B 有/B 两/B 三/I 条/I 船/B 停/B 靠/I 中/B 国/I 港/B 口/I 。/B
除了2-tag,还有4-tag、6-tag等,都是依据字在词中的位置设计的,本文主要目的是从实践的角度介绍基于字标注的中文分词方法设计,以达到抛砖引玉的作用,因此我们仅选用2-tag(B,I)标注集进行实验说明。
有了标注对象和标注集,那么又如何进行中文分词呢?仍以前面的句子为例,只不过这里还没有进行中文分词:
瓦西里斯的船只中有40%驶向远东,每个月几乎都有两三条船停靠中国港口。
首先,你需要将标注对象独立出来,事实上就是给每个字符加上空格:
瓦 西 里 斯 的 船 只 中 有 4 0 % 驶 向 远 东 , 每 个 月 几 乎 都 有 两 三 条 船 停 靠 中 国 港 口 。
其次,假设你已经训练好了一个字标注器,那么就直接给这些字进行标注吧:
瓦/B 西/I 里/B 斯/I 的/B 船/I 只/B 中/B 有/B 4/I 0/I %/I 驶/I 向/B 远/I 东/B ,/B 每/B 个/I 月/I 几/B 乎/I 都/B 有/I 两/B 三/B 条/B 船/I 停/B 靠/I 中/B 国/I 港/I 口/I 。/B
最后,需要你做得就是按照这两个标记的意思还原中文词,并且除去这些标记:
瓦西 里斯 的船 只 中 有40%驶 向远 东 , 每个月 几乎 都有 两 三 条船 停靠 中国港口 。
好了,这就是字标注方法的流程和分词结果,很遗憾,这个标注器的效果不太好,不过没关系,你可以设计更好的字标注器,英文词性标注的被老外研究的太充分了,什么HMM、TBL、最大熵、条件随机场、决策树等等等等,不仅仅是方法,连开源工具都给你提供,完全可以拿来主义。
那么又怎样拿来主义设计自己的字标注中文分词器呢?不知读者可记着Citar,不记得的话可以温习一下《HMM在自然语言处理中的应用一:词性标注6》,Citar是一个“Hidden Markov Model trigram POS tagger”,需要有标注好的语料来训练相应语言的词性标注器,其核心的HMM标注框架是不依赖于语言的,但是在处理未登录词时Citar是主要利用英文词缀信息进行标注的,因此其对于英文词性标注来说效果相对较好,对于其他语言,特别是中文这种没有词形变化的孤立语来说,其词性标注效果要打一点折扣。不过没关系,这里主要谈的是思想,而不是工程上的应用,因此暂时可以忽略这点影响,对于本文利用其所设计的字标注器来说,同样适用。
可是哪里有这样的训练语料呢?俗话说得好:自己动手,丰衣足食。虽然没有哪个组织提供这样的字标注语料库,但是我们有SIGHAN Bakeoff提供的icwb2-data,你完全可以利用自己熟悉的编程语言写一个前处理程序,将其转换为我们所需要的字标注训练语料库形式。下一节我们将以微软亚洲研究院提供的中文分词语料为例,利用Citar完成一个基于HMM trigram的字标注中文分词程序。
注:原创文章,转载请注明出处“我爱自然语言处理”:www.52nlp.cn
本文链接地址:https://www.52nlp.cn/中文分词入门之字标注法1
师兄的网站的确给我提供了很大的帮助,我研究的是日语方向的语言信息处理,希望网站再多加一些其他语种的知识,或者介绍一些其他国家的先进技术
[回复]
52nlp 回复:
7 1 月, 2010 at 23:53
呵呵,个人能力有限啊!
[回复]
为什么要分词?
分词的颗粒度和应用相关。 One fits all 的分词显然不是最优的,只是方便。 根据应用先定切分也不符合 Bayesian 原则。That's just my two cents.
[回复]
52nlp 回复:
15 1 月, 2010 at 19:45
这个问题我还没思考过,不过词应该是最小的有意义的单元,从自然语言处理的角度来看,不分词,很多问题都无法继续下去。
不同的应用中文分词的粒度肯定是不同的,这个问题好像很多人都在研究,这里只是初步的介绍,还未涉及到这个方面。
我觉得中文分词首先应该有一个基本的切分原则,具有普适性,然后在操作时根据应用场景具体问题具体对待。
对于中文分词,我没有深入的研究,上述回答并不一定准确。另外,何谓Bayesian原则?我有点不明白。
[回复]
Libin 回复:
17 1 月, 2010 at 05:47
分词应该是模型的一部分。求解的时候要考虑所有可能的分词。譬如说,GOOG不考虑切分并不是没有道理的。
[回复]
52nlp 回复:
17 1 月, 2010 at 10:49
基于语言模型n-gram方法的中文分词似乎考虑了每一个句子所有可能的分词情况;对GOOG的分词方法不了解,但是觉得应该不会完全忽略中文分词的。
1、2-tag、4-tag、6-tag标注集对分词效果有多大影响呢?
2、字标注思想是否可以直接把分词、词性标注、命名实体识别一起做了?
[回复]
52nlp 回复:
27 4 月, 2013 at 19:31
fandy也来凑人热闹啊,关于1,应该是有一定的正向效果,不过我好多年没看这方面的论文了,有点忘了,印象当年的4-tag加上一些辅助措施效果已经很不错了。关于2,应该是可以的,因为这些用的都是标注的思想,特别是分词和命名实体识别貌似可以打包的。
[回复]
[…] 大概4年前,这里写了两篇关于字标注中文分词的文章:中文分词入门之字标注法,文中用2-tag(B,I)进行说明并套用开源的HMM词性标注工具Citar(A simple Trigram HMM part-of-speech tagger)做了演示,虽然分词效果不太理想,但是能抛砖引玉,也算是有点用处。这次捡起中文分词,首先想到的依然是字标注分词方法,在回顾了一遍黄昌宁老师和赵海博士在07年第3期《中文信息学报》上发表的《中文分词十年回顾》后,决定这次从4-tag入手,并且探索一下最大熵模型和条件随机场(CRF)在中文分词字标注方法上的威力。这方面的文献大家可参考张开旭博士维护的“中文分词文献列表”。这里主要基于已有文献的思路和现成的开源工具做一些验证,包括张乐博士的最大熵模型工具包(Maximum Entropy Modeling Toolkit for Python and C++)和条件随机场的经典工具包CRF++(CRF++: Yet Another CRF toolkit)。 […]