本文将会讲述如何利用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
训练后的过程如下:

模型评估
下面我们将借助序列评估模块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

本文介绍如何使用条件随机场(CRF)模型实现中文分词任务,并通过具体实例展示了分词的效果,包括模型训练、评估及预测过程。
利用CRF实现中文分词&spm=1001.2101.3001.5002&articleId=109168755&d=1&t=3&u=ac9fed2833984e21b90c9b09087a0b70)
3万+

被折叠的 条评论
为什么被折叠?



