从头开始编写基于隐含马尔可夫模型HMM的中文分词器之一 - 资源篇

来源:互联网 发布:修改php源码 编辑:程序博客网 时间:2024/05/16 18:38

首先感谢52nlp的系列博文(http://www.52nlp.cn/),提供了自然语言处理的系列学习文章,让我学习到了如何实现一个基于隐含马尔可夫模型HMM的中文分词器。


在编写一个中文分词器前,第一步是需要找到一些基础的词典库等资源,用以训练模型参数,并进行后续的结果评测,这里直接转述52nlp介绍的“中文分词入门之资源”:

原文地址:http://www.52nlp.cn/%E4%B8%AD%E6%96%87%E5%88%86%E8%AF%8D%E5%85%A5%E9%97%A8%E4%B9%8B%E8%B5%84%E6%BA%90

这里我从http://sighan.cs.uchicago.edu/bakeoff2005/下载icwb2-data.zip词库做模型训练与后续评测使用。


作为中文信息处理的“桥头堡”,中文分词在国内的关注度似乎远远超过了自然语言处理的其他研究领域。在中文分词中,资源的重要性又不言而喻,最大匹配法等需要一个好的词表,而基于字标注的中文分词方法又需要人工加工好的分词语料库。所以想研究中文分词,第一步需要解决的就是资源问题,这里曾经介绍过“LDC上免费的中文信息处理资源”,其中包括一个有频率统计的词表,共计44405条,就可以作为一个不错的中文分词词表使用。而一个好的人工分词语料库,需要很大的人力物力投入,所以无论研究还是商用往往需要一定的费用购买,好在SIGHAN Bakeoff为我们提供了一个非商业使用(non-commercial)的免费获取途径,以下将介绍SIGHAN Bakeoff及相关的中文分词入门资源。
  SIGHAN是国际计算语言学会(ACL)中文语言处理小组的简称,其英文全称为“Special Interest Group for Chinese Language Processing of the Association for Computational Linguistics”,又可以理解为“SIG汉“或“SIG漢“。而Bakeoff则是SIGHAN所主办的国际中文语言处理竞赛,第一届于2003年在日本札幌举行(Bakeoff 2003),第二届于2005年在韩国济州岛举行(Bakeoff 2005), 而2006年在悉尼举行的第三届(Bakeoff 2006)则在前两届的基础上加入了中文命名实体识别评测。目前SIGHAN Bakeoff已成功举办了6届,其中Bakeoff 2005的数据和结果在其主页上是完全免费和公开的,但是请注意使用的前提是非商业使用(non-commercial):

  The data and results for the 2nd International Chinese Word Segmentation Bakeoff are now available for non-commercial use.

  在Bakeoff 2005的主页上,我们可以找到如下一行:“The complete training, testing, and gold-standard data sets, as well as the scoring script, are available for research use”,在这一行下面提供了三个版本的icwb2-data。下载解压后,通过README就可以很清楚的了解到它包含哪些中文分词资源,特别需要说明的是这些中文分词语料库分别由台湾中央研究院(Academia Sinica)、香港城市大学(City University of Hong Kong)、北京大学(Peking University)及微软亚洲研究院(Microsoft Research)提供,其中前二者是繁体中文,后二者是简体中文,以下按照README简要介绍icwb2-data:

1) 介绍(Introduction):
  本目录包含了训练集、测试集及测试集的(黄金)标准切分,同时也包括了一个用于评分的脚本和一个可以作为基线测试的简单中文分词器。(This directory contains the training, test, and gold-standard data used in the 2nd International Chinese Word Segmentation Bakeoff. Also included is the script used to score the results submitted by the bakeoff participants and the simple segmenter used to generate the baseline and topline data.)

2) 文件列表(File List)
  在gold目录里包含了测试集标准切分及从训练集中抽取的词表(Contains the gold standard segmentation of the test data along with the training data word lists.)
  在scripts目录里包含了评分脚本和简单中文分词器(Contains the scoring script and simple segmenter.)
  在testing目录里包含了未切分的测试数据(Contains the unsegmented test data.)
  在training目录里包含了已经切分好的标准训练数据(Contains the segmented training data.)
  在doc目录里包括了bakeoff的一些指南(Contains the instructions used in the bakeoff.)

3) 编码(Encoding Issues)
  文件包括扩展名”.utf8”则其编码为UTF-8(Files with the extension “.utf8″ are encoded in UTF-8 Unicode.)
  文件包括扩展名”.txt”则其编码分别为(Files with the extension “.txt” are encoded as follows):
  前缀为as_,代表的是台湾中央研究院提供,编码为Big Five (CP950);
  前缀为hk_,代表的是香港城市大学提供,编码为Big Five/HKSCS;
  前缀为msr_,代表的是微软亚洲研究院提供,编码为 EUC-CN (CP936);
  前缀为pku_,代表的北京大学提供,编码为EUC-CN (CP936);
  EUC-CN即是GB2312(EUC-CN is often called “GB” or “GB2312″ encoding, though technically GB2312 is a character set, not a character encoding.)

4) 评分(Scoring)
  评分脚本“score”是用来比较两个分词文件的,需要三个参数(The script ‘score’ is used to generate compare two segmentations. The script takes three arguments):
  1. 训练集词表(The training set word list)
  2. “黄金”标准分词文件(The gold standard segmentation)
  3. 测试集的切分文件(The segmented test file)
 
  以下利用其自带的中文分词工具进行说明。在scripts目录里包含一个基于最大匹配法的中文分词器mwseg.pl,以北京大学提供的人民日报语料库为例,用法如下:
  ./mwseg.pl ../gold/pku_training_words.txt < ../testing/pku_test.txt > pku_test_seg.txt
  其中第一个参数需提供一个词表文件pku_training_word.txt,输入为pku_test.txt,输出为pku_test_seg.txt。
  利用score评分的命令如下:
  ./score ../gold/pku_training_words.txt ../gold/pku_test_gold.txt pku_test_seg.txt > score.txt
  其中前三个参数已介绍,而score.txt则包含了详细的评分结果,不仅有总的评分结果,还包括每一句的对比结果。这里只看最后的总评结果:


= SUMMARY:
=== TOTAL INSERTIONS: 9274
=== TOTAL DELETIONS: 1365
=== TOTAL SUBSTITUTIONS: 8377
=== TOTAL NCHANGE: 19016
=== TOTAL TRUE WORD COUNT: 104372
=== TOTAL TEST WORD COUNT: 112281
=== TOTAL TRUE WORDS RECALL: 0.907
=== TOTAL TEST WORDS PRECISION: 0.843
=== F MEASURE: 0.874
=== OOV Rate: 0.058
=== OOV Recall Rate: 0.069
=== IV Recall Rate: 0.958
### pku_test_seg.txt 9274 1365 8377 19016 104372 112281 0.907 0.843 0.874 0.058 0.069 0.958

  说明这个中文分词器在北大提供的语料库上的测试结果是:召回率为90.7%,准确率为84.3%,F值为87.4%等。
  SIGHAN Bakeoff公开资源的一个重要意义在于这里提供了一个完全公平的平台,任何人都可以拿自己研究的中文分词工具进行测评,并且可以和其公布的比赛结果对比,是驴子是马也就一目了然了。

下面是我自己实现的中文分词器在msra的测试集上的分词效果:

=== SUMMARY:=== TOTAL INSERTIONS:   7303=== TOTAL DELETIONS:    4988=== TOTAL SUBSTITUTIONS:        15988=== TOTAL NCHANGE:      28279=== TOTAL TRUE WORD COUNT:      106873=== TOTAL TEST WORD COUNT:      109188=== TOTAL TRUE WORDS RECALL:    0.804=== TOTAL TEST WORDS PRECISION: 0.787=== F MEASURE:  0.795=== OOV Rate:   0.026=== OOV Recall Rate:    0.402=== IV Recall Rate:     0.815###     msr_test_result.txt     7303    4988    15988   28279   106873  109188  0.804   0.787   0.795   0.026   0.402   0.815

分词效果如下,个人感觉对于一个花三小时实现的程序来说,效果还不错 大笑

而/大量/“/看/图学/计算机/”/教材/的/出现/,/和/蔡志忠/的/漫画/诸子/相映/成趣/,/掀起/了/一股/成人/“/看/图识/字/”/的/出版潮/,/到/后/来竟/说/不清/是/谁/影响/了/谁/。/words.length=38   timecost:0在/日常/生活/中/,/像/“/软件/”/、/“/硬件/”/、/“/死/循环/”/一类/的/新词/充实/了/我们/的/语言库/。/words.length=74   timecost:0而/计算/机造/词/功能/的/运用/,/形成/了/一种/被/称为/“/语词/传染/”/的/新/现象/:/如果/有人/在/电脑/里/造出/了/一个/错误/的/词/,/所有/使用/该/电脑/的/人/都/会出/现同/一/错误/,/而且/防不/胜防/。/words.length=35   timecost:0至于/计算机/的/使用/对/学生/书法/、/笔顺/、/发音/的/影响/,/更/是/教育/学家/关心/的/话题/。/words.length=56   timecost:0再往/远些/看/,/随着/汉字识别/和/语音识别技术/的/发展/,/中文/计算/机用/户/将/跨越/语言/差异/的/鸿沟/,/在/录入/上/走向/中西/文求/同/的/道路/。/words.length=35   timecost:0而/计算机/翻译/系统/与/现代/汉语/分析/相辅/相成/,/正/推动/着/人工/智能/科学/的/前进/…/…/words.length=68   timecost:0每/跨过/一道/障碍/,/人们/都会/发现/一片/新/的/开阔/地/,/每/经过/一次/剧烈/的/碰撞/,/都/将/激起/一团/耀眼/的/火花/,/这/就/是/崭新/的/计算机/技术/和/古老/的/中华/文化/的/对话/。/