目录
一、CRF简介
Conditional Random Field:条件随机场,一种机器学习技术(模型)
CRF由John Lafferty最早用于NLP技术领域,其在NLP技术领域中主要用于文本标注,并有多种应用场景,例如:
- 分词(标注字的词位信息,由字构词)
- 词性标注(标注分词的词性,例如:名词,动词,助词)
- 命名实体识别(识别人名,地名,机构名,商品名等具有一定内在规律的实体名词)
本文主要描述如何使用CRF技术来进行中文分词。
CRF VS 词典统计分词
- 基于词典的分词过度依赖词典和规则库,因此对于歧义词和未登录词的识别能力较低;其优点是速度快,效率高
- CRF代表了新一代的机器学习技术分词,其基本思路是对汉字进行标注即由字构词(组词),不仅考虑了文字词语出现的频率信息,同时考虑上下文语境,具备较好的学习能力,因此其对歧义词和未登录词的识别都具有良好的效果;其不足之处是训练周期较长,运营时计算量较大,性能不如词典分词
CRF VS HMM,MEMM
- 首先,CRF,HMM(隐马模型),MEMM(最大熵隐马模型)都常用来做序列标注的建模,像分词、词性标注,以及命名实体标注
- 隐马模型一个最大的缺点就是由于其输出独立性假设,导致其不能考虑上下文的特征,限制了特征的选择
- 最大熵隐马模型则解决了隐马的问题,可以任意选择特征,但由于其在每一节点都要进行归一化,所以只能找到局部的最优值,同时也带来了标记偏见的问题,即凡是训练语料中未出现的情况全都忽略掉
- 条件随机场则很好的解决了这一问题,他并不在每一个节点进行归一化,而是所有特征进行全局归一化,因此可以求得全局的最优值。
CRF分词原理
1. CRF把分词当做字的词位分类问题,通常定义字的词位信息如下:
- 词首,常用B表示
- 词中,常用M表示
- 词尾,常用E表示
- 单子词,常用S表示
2. CRF分词的过程就是对词位标注后,将B和E之间的字,以及S单字构成分词
3. CRF分词实例:
- 原始例句:我爱北京天安门
- CRF标注后:我/S 爱/S 北/B 京/E 天/B 安/M 门/E
- 分词结果:我/爱/北京/天安门
CRF命名实体识别
基于CRF的命名实体识别实质上也是把它看做一个序列标注问题。
基本思路是:先进行分词,然后对人名、简单地名和简单组织名进行识别,最后识别复合地名和复合组织名。
用CRF进行命名实体识别属于有监督学习。需要大批已标注的语料对模型参数进行训练。
二、CRF++工具包
上面介绍了CRF技术思想以及如何用于分词,下面将介绍如何在实际开发中使用CRF进行分词工作。目前常见的CRF工具包有pocket crf, flexcrf 和crf++,目前网上也有一些它们3者之间的对比报告,个人感觉crf+