随笔中文分词 | 给 CRF 方法加点料,F 值提高了 1~2 个百分点
Posted 九州语言网
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了随笔中文分词 | 给 CRF 方法加点料,F 值提高了 1~2 个百分点相关的知识,希望对你有一定的参考价值。
由于近期要做些与词典相关的工作,所以初步调研了一下中文分词方法和工具,发现基于字位标注的 CRF 方法效果不错,特别是对未登录词有着较强的自适应能力,更重要的简便易用,容易上手。本文简要记录笔者采用 CRF++ 工具训练中文分词模型的初步实验过程及其效果。
一、数据资源
backoff 2005提供了 4 套文本语料,可用于训练和评测中文分词系统。笔者在实验过程中使用了其中的 MSR 和 PKU 语料库。
MSR 语料库主要包括:
训练语料(文本文件):msr_training.utf8
训练词典(文本文件):msr_training_words.utf8
测试语料(文本文件):msr_test_gold.utf8
PKU 语料库主要包括:
训练语料(文本文件):pku_training.utf8
训练词典(文本文件):pku_training_words.utf8
测试语料(文本文件):pku_test_gold.utf8
二、训练模型
在对原始文本语料进行一些预处理并转成 CRF++ 工具所需的数据格式之后,笔者采用编译后的 CRF++(0.58,win32)工具执行模型训练和切分测试等过程。
目前笔者采取的是 4 字位标记,即 S(单字词)、B(多字词的词首位置)、M(多字词的中间位置)、E(多字词的词末位置),并测试了 2 套不同的训练模板,分别记为 T0 和 T5 ,由于在 T5 模板中需要增加与词典相关的基础信息,与之相对应的,笔者测试了 4 套不同的词典:
W-MSR,即 msr_training_words.utf8
W-PKU,即 pku_training_words.utf8
W-XH7,即《现代汉语词典》第七版
W-MIX,《现代汉语词典》第七版加上 W-MSR 词典和 W-PKU 词典中的部分词条,筛选 W-MSR 和 W-PKU 词条时主要基于以下三个条件:不超过 4 个字符,词条中不包含非汉字的其他字符,在训练语料中出现的频数不小于 3 次。
T0 模板的数据内容如下:
# Unigram
U001:%x[-2,0]
U002:%x[-1,0]
U003:%x[0,0]
U004:%x[1,0]
U005:%x[2,0]
U006:%x[-1,0]/%x[0,0]
U007:%x[0,0]/%x[1,0]
U008:%x[-2,0]/%x[-1,0]/%x[0,0]
U009:%x[-1,0]/%x[0,0]/%x[1,0]
U010:%x[0,0]/%x[1,0]/%x[2,0]
U011:%x[0,0]/%x[1,0]/%x[2,0]/%x[3,0]
# Bigram
B
T5 模板的数据内容如下:
# Unigram
U001:%x[-2,0]
U002:%x[-1,0]
U003:%x[0,0]
U004:%x[1,0]
U005:%x[2,0]
U006:%x[-1,0]/%x[0,0]
U007:%x[0,0]/%x[1,0]
U008:%x[-2,0]/%x[-1,0]/%x[0,0]
U009:%x[-1,0]/%x[0,0]/%x[1,0]
U010:%x[0,0]/%x[1,0]/%x[2,0]
U011:%x[0,0]/%x[1,0]/%x[2,0]/%x[3,0]
UA00:%x[-3,1]
UA01:%x[-2,1]
UA02:%x[-1,1]
UA03:%x[0,1]
UA04:%x[1,1]
UA05:%x[2,1]
UA06:%x[3,1]
UA07:%x[-3,1]/%x[-2,1]
UA08:%x[-2,1]/%x[-1,1]
UA09:%x[-1,1]/%x[0,1]
UA10:%x[0,1]/%x[1,1]
UA11:%x[1,1]/%x[2,1]
UA12:%x[2,1]/%x[3,1]
UA13:%x[-3,1]/%x[-2,1]/%x[-1,1]
UA14:%x[-2,1]/%x[-1,1]/%x[0,1]
UA15:%x[-1,1]/%x[0,1]/%x[1,1]
UA16:%x[0,1]/%x[1,1]/%x[2,1]
UA17:%x[1,1]/%x[2,1]/%x[3,1]
UA18:%x[-3,1]/%x[-2,1]/%x[-1,1]/%x[0,1]
UA19:%x[-2,1]/%x[-1,1]/%x[0,1]/%x[1,1]
UA20:%x[-1,1]/%x[0,1]/%x[1,1]/%x[2,1]
UA21:%x[0,1]/%x[1,1]/%x[2,1]/%x[3,1]
UA22:%x[-2,1]/%x[-1,1]/%x[0,1]/%x[1,1]/%x[2,1]
UB00:%x[-3,2]
UB01:%x[-2,2]
UB02:%x[-1,2]
UB03:%x[0,2]
UB04:%x[1,2]
UB05:%x[2,2]
UB06:%x[3,2]
UB07:%x[-3,2]/%x[-2,2]
UB08:%x[-2,2]/%x[-1,2]
UB09:%x[-1,2]/%x[0,2]
UB10:%x[0,2]/%x[1,2]
UB11:%x[1,2]/%x[2,2]
UB12:%x[2,2]/%x[3,2]
UB13:%x[-3,2]/%x[-2,2]/%x[-1,2]
UB14:%x[-2,2]/%x[-1,2]/%x[0,2]
UB15:%x[-1,2]/%x[0,2]/%x[1,2]
UB16:%x[0,2]/%x[1,2]/%x[2,2]
UB17:%x[1,2]/%x[2,2]/%x[3,2]
UB18:%x[-3,2]/%x[-2,2]/%x[-1,2]/%x[0,2]
UB19:%x[-2,2]/%x[-1,2]/%x[0,2]/%x[1,2]
UB20:%x[-1,2]/%x[0,2]/%x[1,2]/%x[2,2]
UB21:%x[0,2]/%x[1,2]/%x[2,2]/%x[3,2]
UB22:%x[-2,2]/%x[-1,2]/%x[0,2]/%x[1,2]/%x[2,2]
UC00:%x[-3,3]
UC01:%x[-2,3]
UC02:%x[-1,3]
UC03:%x[0,3]
UC04:%x[1,3]
UC05:%x[2,3]
UC06:%x[3,3]
UC07:%x[-3,3]/%x[-2,3]
UC08:%x[-2,3]/%x[-1,3]
UC09:%x[-1,3]/%x[0,3]
UC10:%x[0,3]/%x[1,3]
UC11:%x[1,3]/%x[2,3]
UC12:%x[2,3]/%x[3,3]
UC13:%x[-3,3]/%x[-2,3]/%x[-1,3]
UC14:%x[-2,3]/%x[-1,3]/%x[0,3]
UC15:%x[-1,3]/%x[0,3]/%x[1,3]
UC16:%x[0,3]/%x[1,3]/%x[2,3]
UC17:%x[1,3]/%x[2,3]/%x[3,3]
UC18:%x[-3,3]/%x[-2,3]/%x[-1,3]/%x[0,3]
UC19:%x[-2,3]/%x[-1,3]/%x[0,3]/%x[1,3]
UC20:%x[-1,3]/%x[0,3]/%x[1,3]/%x[2,3]
UC21:%x[0,3]/%x[1,3]/%x[2,3]/%x[3,3]
UC22:%x[-2,3]/%x[-1,3]/%x[0,3]/%x[1,3]/%x[2,3]
UD00:%x[-1,0]/%x[-1,2]
UD01:%x[0,0]/%x[0,2]
UD02:%x[1,0]/%x[1,2]
# Bigram
B
与 T0 模板配套的训练数据举例如下:
例句:迈向 充满 希望 的 新 世纪 —— 一九九八年 新年 讲话 ( 附 图片 1 张 )
迈 B
向 E
充 B
满 E
希 B
望 E
的 S
新 S
世 B
纪 E
— B
— E
一 B
九 M
九 M
八 M
年 E
新 B
年 E
讲 B
话 E
( S
附 S
图 B
片 E
1 S
张 S
) S
与 T5 模板配套的训练数据举例如下:
例句:迈向 充满 希望 的 新 世纪 —— 一九九八年 新年 讲话 ( 附 图片 1 张 )
迈 P000 SS HZI B
向 P000 SS HZI E
充 P200 BB HZI B
满 P002 EE HZI E
希 P200 BB HZI B
望 P002 EE HZI E
的 P000 SS HZC S
新 P000 SS HZI S
世 P200 BB HZI B
纪 P002 EE HZI E
— P000 SS NON B
— P000 SS NON E
一 P000 BB HSZ B
九 P000 MM HSZ M
九 P000 MM HSZ M
八 P000 EE HSZ M
年 P000 SS HZI E
新 P200 BB HZI B
年 P002 EE HZI E
讲 P200 BB HZI B
话 P002 EE HZI E
( P000 SS NON S
附 P000 SS HZI S
图 P200 BB HZI B
片 P002 EE HZI E
1 P000 SS NUM S
张 P000 SS HZI S
) P000 SS NON S
与 T0 模板只需 2 列训练数据相比,T5 模板所需的训练数据一共有 5 列,多出了中间 3 列与词典相关的内容(可通过查词典方式获得相应数据)。
其中,第二列数据中的后三位数字分别表示当前字符的成词情况:
1. 第一位数字是指以当前字符为起点,往下数多少个字符(不超过4)能够形成一个词典词,如“充”字与其下面的“满”字构成一个词典词,则“充”字的该值记为 2。如果往下数的 2 个字符能够成词、3 个字符也能成词、4 个字符还能成词,则将这些数字累加起来。该位置最大值为 9,即 2+3+4,最小值为 0。另外 7(3+4)、6(2+4)、5(2+3)、4(4)、3(3)、2(2) 也均有可能;
2. 第二位数字是指当前字符在上下文中是否处于一个三字词或四字词的中间位置,如果处于三字词的中间位置则记为 2,如果处于四字词的 2 号字位置则记为 3,如果处于四字词的 3 号字位置则记为 4。如果当前字符在上下文中既处于三字词的中间位置,又处于四字词的中间位置,则将其数字相加起来;
3. 第三位数字是指以当前字符为起点,往上数多少个字符(不超过4)能够形成一个词典词,如“满”字与其上面的“充”字构成一个词典词,则“满”字的该值记为 2。如果往上数的 2 个字符能够成词、3 个字符也能成词、4 个字符还能成词,则将这些数字累加起来。该位置最大值为 9,即 2+3+4,最小值为 0。另外 7(3+4)、6(2+4)、5(2+3)、4(4)、3(3)、2(2) 也均有可能;
第三列数据中的“SS、BB、EE、BM、EM”之类表示利用词典数据进行最大匹配分词后所得到的字位标记符号,第一个字符标记正序最大匹配分词后所得到的字位,第二个字符标记逆序最大匹配分词后所得到的字位。
第四列数据是对当前字符的简单分类,如汉字、数字、标点、英文等等。
最后一列是基于人工分词所得到的字位标记符号。
在训练不同分词模型时,crf_learn.exe 工具均采用了以下参数:“-f 3 -c 4”,其他参数暂未测试。
三、分词效果
利用不同的分词模型分别对 MSR 和 PKU 测试语料进行自动分词处理,并采用 score.pl 脚本对分词结果进行分析,通过比对这 2 套测试语料的人工分词结果,得到相应的 F 值以反映各个分词模型的效果。具体数据如下表所示。
表1:不同分词系统的 F 值数据
从上表数据可以看出,在利用了词典数据之后,基于 T5 模板的分词模型取得了相对较好的分词效果。例如,采用《现代汉语词典》第七版(W-XH7)作为基础词典,并基于 T5 模板训练相应的分词模型,针对 PKU 测试语料所取得的 F 值最好结果为 0.950,针对 MSR 测试语料所取得的 F 值最好结果为 0.975。
更为重要的是,若采用 W-XH7 或 W-MIX 词典,在增加词典信息之后的分词模型都取得了明显的提升作用,T5 明显优于 T0,大多具有 1~2 个百分点的提升效果。这表明,在字位模型的基础上,进一步增加与字相关的词典信息对于中文分词系统来说是有意义的。
如何进一步优化训练模板,进一步有效利用基础词典信息,还有待进一步实验,或许还会有惊喜。
以上是关于随笔中文分词 | 给 CRF 方法加点料,F 值提高了 1~2 个百分点的主要内容,如果未能解决你的问题,请参考以下文章