CRF即条件随机场在前面的博客中提到过,这次做一个实验“基于 CRF 的中文命名实体识别模型实现”,首先需要掌握的是了解实体识别,这在前面的“知识图谱每日阅读(二)”中有详细介绍,条件随机场在知识图谱每日阅读(三)”中有详细介绍,需要更深入了解可以读一些条件随机场的论文。
下面开始进行“基于 CRF 的中文命名实体识别模型实现”的实验:
一、环境支持:
python3.6
sklearn_crfsuite 库 ——使用pip install sklearn_crfsuite安装
本人使用的pycharm编辑器,直接在命令行中运行也可以。
二、实验步骤:
1、语料预处理
语料使用的是《人民日报》1980年1月份的,在文末github上可下载。
语料库词性标记中,对应的实体词依次为 t(时间)、nr(人名)、ns(地名)、nt(机构团体)。对语料需要做以下处理:
(1)将语料全角字符统一转为半角;(在自然语言处理过程中,全角、半角的的不一致会导致信息抽取不一致,因此需要统一。)
全角字符unicode编码从65281~65374 (十六进制 0xFF01 ~ 0xFF5E)
半角字符unicode编码从33~126 (十六进制 0x21~ 0x7E)
(2)合并语料库分开标注的姓和名,例如:温/nr 家宝/nr;
(3)合并语料库中括号中的大粒度词,例如:[国家/n 环保局/n]nt;
(4)合并语料库分开标注的时间,例如:(/w 一九九七年/t 十二月/t 三十一日/t )/w。
代码实现:
1.引入需要用到的库
import re
import sklearn_crfsuite
from sklearn_crfsuite import metrics
from sklearn.externals import joblib
re模块主要是正则表达式,负责匹配查找等。
sklearn_crfsuite主要是训练模型等。
metrics包为序列分类任务提供了一些有用的度量,像F1分数等。
joblib包用于将训练的模型加载和保存。
2.创建CorpusProcess类用于语料预处理:
class CorpusProce