中文分词实验

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

中文分词实验

一、实验目的:

目的:了解并掌握基于匹配的分词方法,以及分词效果的评价方法。

实验要求:

1、从互联网上查找并构建不低于10万词的词典,构建词典的存储结构;

2、选择实现一种机械分词方法(双向最大匹配、双向最小匹配、正向减字最大匹配法等)。

3、在不低于1000个文本文件,每个文件大于1000字的文档中进行中文分词测试,记录并分析所选分词算法的准确率、分词速度。

预期效果:

1、平均准确率达到85%以上

二、实验方案:

1.实验平台

系统:win10

软件平台:spyder

语言:python

2.算法选择

选择正向减字最大匹配法,参照《搜索引擎-原理、技术与系统》教材第62页的描述,使用python语言在spyder软件环境下完成代码的编辑。

算法流程图:

Figure Error! No sequence specified.. 正向减字最大匹配算法流程

Figure Error! No sequence specified.. 切词算法流程算法伪代码描述:

3.实验步骤

1)在网上查找语料和词典文本文件;

2)思考并编写代码构建词典存储结构;

3)编写代码将语料分割为1500个文本文件,每个文件的字数大于1000字;

4)编写分词代码;

5)思考并编写代码将语料标注为可计算准确率的文本;

6)对测试集和分词结果集进行合并;

7)对分词结果进行统计,计算准确率,召回率及F值(正确率和召回率的

调和平均值);

8)思考总结,分析结论。

4.实验实施

我进行了两轮实验,第一轮实验效果比较差,于是仔细思考了原因,进行了第二轮实验,修改参数,代码,重新分词以及计算准确率,效果一下子提升了很多。

实验过程:

(1)语料来源:语料来自SIGHAN的官方主页

(/),SIGHAN是国际计算语言学会(ACL)

中文语言处理小组的简称,其英文全称为“Special Interest Group for

Chinese Language Processing of the Association for Computational

Linguistics”,又可以理解为“SIG汉“或“SIG漢“。SIGHAN为我们提供了一

个非商业使用(non-commercial)的免费分词语料库获取途径。我下载

的是Bakeoff 2005的中文语料。有86925行,2368390个词语。语料形

式:“没有孩子的世界是寂寞的,没有老人的世界是寒冷的。”

Figure Error! No sequence specified.. notepad++对语料文本的统计结果

(2)词典:词典用的是来自网络的有373万多个词语的词典,采用的数据结

构为python的一种数据结构——集合。

Figure Error! No sequence specified.. notepad++对词典文本的统计结果

(3)分割测试数据集:将原数据分割成1500个文本文件,每个文件的词数大于

1000。

Figure Error! No sequence specified.. 测试数据集分解截图

Figure Error! No sequence specified.. 其中某文件的形式

Figure Error! No sequence specified.. notepad++对其中一个测试文本的统计结果

(4)编写分词代码:采用python语言和教材上介绍的算法思路,进行编程。

(5)编写代码将语料标注为可计算准确率的文本:用B代表单词的开始字,

E代表结尾的字,BE代表中间的字,如果只有一个字,用E表示。例如:原数据是:“人们常说生活是一部教科书”

而我将它转化为了如下格式:

人 B

们 E

常 E

说 E

生 B

活 E

是 E

一 E

部 E

教 B

科 BE

书 E

(6)进行分词:使用之前编写的分词函数,载入文本,进行分词,将每个文

本结果输出到txt文本。

Figure Error! No sequence specified.. 分词结果文件

Figure 9. 测试数据的形式(文本截图)

Figure 10. 分词结果(文本截图)

用时17秒左右:

Figure 11. 运行时间

(7)对测试集和分词结果集进行合并:将测试集和分词结果集合并是为了进

行准确率,召回率等的计算。测试集和训练集都是下面的格式:人 B

们 E

常 E

说 E

生 B

活 E

是 E

一 E

部 E

教 B

科 BE

书 E

我将他们合并为下面的格式,第二列为测试集的标注,第三列为训练集的结果:

人 B B

们 E E

常 E E

说 E E

生 B B

活 E E

是 E E

一 E BE

部 E E

教 B B

科 BE BE

书 E E

(8)对分词结果进行统计,计算准确率P,召回率R及F值(正确率和召回

率的调和平均值),设提取出的信息条数为C,提取出的正确信息条数为CR, 样本中的信息条数O:

P=CR C

R=CR O

F=2×P×R P+R

计算结果如下:

(9)反思:平均准确率只有75.79%,为何分词效果这么差,没有达到我的预期效果

85%,经过思考和多次尝试才发现,原来是因为我的词典太大了,最大匹配分词效果对词典依赖很大,不是词典越大越好,还有就是我的词典和我的测试数据的相关性不大,于是我修改了词典,进行了第二轮测试。

相关文档
最新文档