命名实体识别(NER)的作用:关系抽取、事件抽取、知识图谱(分构建和应用两个方向,构建目前人工干预还是需要很多)、问答系统、机器翻译…
通用实体分类:人名、地名、组织机构名、日期时间、专用名词
学术上的分类:
- 三大类:实体类、时间类、数字类
- 七小类:人名、地名、组织机构名、时间、日期、货币、百分比
相关算法
早期:基于字典,基于规则
传统ML:HMM MEMM CRF
DL: RNN-CRF CNN-CRF
学术界近期方法:注意力模型,迁移学习,半监督学习 —— 有时间了解下
BiLSTM + CRF
从双向神经网络输出的结果为什么还要经过CRF的处理?—— 输出的是一系列标签的概率,而且每个字之间是相互独立的,利用CRF的条件转移概率矩阵,可以改善输出结果
本次主要学习实体抽取前对中文字的词性标注后的编码转换,这是进行更深入信息抽取的基础工作
加载数据
获取训练数据集:采用github上的中文NER数据
数据导入
1 | def load_sentences(path): |
首先检查是否为BIO编码格式,如
1 | 开 O |
BIO检验
先进行检验,如果不符合,做相应的处理进行转换
1 | def check_bio(tags): |
转为BIOES格式
然后将BIO格式转为BIOES格式
1 | def bio_to_bioes(tags): |
综合处理
1 | def update_tag_scheme(sentences, tag_scheme): |