NLP(三十三)利用CRF实现中文分词

本文介绍如何使用条件随机场(CRF)模型实现中文分词任务,并通过具体实例展示了分词的效果,包括模型训练、评估及预测过程。

  本文将会讲述如何利用CRF模型来实现中文分词。
  所谓中文分词,就是将连续的中文汉字序列按照一定的规范重新组合成词序列的过程。关于CRF模型的介绍以及CRF实现工具CRF++的使用方法,读者可以参考文章NLP入门(八)使用CRF++实现命名实体识别(NER)
  以下将详细讲述如何使用CRF++来实现中文分词。

语料选择

  中分分词的语料,这里选择人民日报分词语料和微软中文分词语料,语料的下载方式可以参看文章最后给出的Github地址。
  我们将语料加工成CRF++支持的格式,以句子迈向充满希望的新世纪——一九九八年新年讲话(附图片1张)为例,我们加工后的结果如下:

迈	n	B-Char
向	n	I-Char
充	n	B-Char
满	n	I-Char
希	n	B-Char
望	n	I-Char
的	n	B-Char
新	n	B-Char
世	n	B-Char
纪	n	I-Char
—	n	B-Char
—	n	I-Char
一	n	B-Char
九	n	I-Char
九	n	I-Char
八	n	I-Char
年	n	I-Char
新	n	B-Char
年	n	I-Char
讲	n	B-Char
话	n	I-Char
(	n	B-Char
附	n	B-Char
图	n	B-Char
片	n	I-Char
1	n	B-Char
张	n	B-Char
)	n	B-Char

这里需要稍作说明,即我们的标签体系采用最简单的BI体系,将词语的开头用B-Char标签表示,词语的中间和结尾用I-Char表示。
  语料总共约10w多个样本,我们将数据集分为训练集(train.txt)和测试集(predict.txt),比例为9:1。

模型训练

  我们对训练集进行训练,训练的CRF++的模板与文章NLP入门(八)使用CRF++实现命名实体识别(NER)
中一样。训练的命令如下:

crf_learn  -f 3 -c 4.0 template train.data model -t

  训练后的过程如下:
CRF模型训练过程

模型评估

  下面我们将借助序列评估模块seqeval对分词模型的预测能力进行评估。
  我们先用以下命令生成模型预测文件(crf_pred.txt):

crf_test -m model predict.txt > crf_pred.txt

  接着,我们使用如下脚本进行模型评估:

# -*- coding: utf-8 -*-
from seqeval.metrics import f1_score
from seqeval.metrics import precision_score
from seqeval.metrics import accuracy_score
from seqeval.metrics import recall_score
from seqeval.metrics import classification_report

with open("crf_pred.txt", "r", encoding="utf-8") as f:
    content = [_.strip() for _ in f.readlines()]

y_pred = []
y_true = []
for line in content:
    if line:
        y_pred.append(line.split("\t")[-1])
        y_true.append(line.split("\t")[-2])

print("acc
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值