笔记转载于GitHub项目:https://github.com/NLP-LOVE/Introduction-NLPhtml
命名实体python
文本中有一些描述实体的词汇。好比人名、地名、组织机构名、股票基金、医学术语等,称为命名实体。具备如下共性:git
命名实体识别github
识别出句子中命名实体的边界与类别的任务称为命名实体识别。因为上述难点,命名实体识别也是一个统计为主、规则为辅的任务。正则表达式
对于规则性较强的命名实体,好比网址、E-mail、IBSN、商品编号等,彻底能够经过正则表达式处理,未匹配上的片断交给统计模型处理。算法
命名实体识别也能够转化为一个序列标注问题。具体作法是将命名实体识别附着到{B,M,E,S}标签,好比, 构成地名的单词标注为“B/ME/S- 地名”,以此类推。对于那些命名实体边界以外的单词,则统一标注为0 ( Outside )。具体实施时,HanLP作了一个简化,即全部非复合词的命名实体都标注为S,再也不附着类别。这样标注集更精简,模型更小巧。ide
命名实体识别实际上能够看做分词与词性标注任务的集成: 命名实体的边界能够经过{B,M,E,S}肯定,其类别能够经过 B-nt 等附加类别的标签来肯定。性能
HanLP内部提供了语料库转换工序,用户无需关心,只须要传入 PKU 格式的语料库路径便可。学习
以前咱们就介绍过隐马尔可夫模型,详细见: 4.隐马尔可夫模型与序列标注网站
隐马尔可夫模型命名实体识别代码见(自动下载 PKU 语料库): hmm_ner.py
https://github.com/NLP-LOVE/Introduction-NLP/tree/master/code/ch08/hmm_ner.py
运行代码后结果以下:
华北电力公司/nt 董事长/n 谭旭光/nr 和/c 秘书/n 胡花蕊/nr 来到/v 美国纽约/ns 现代/ntc 艺术/n 博物馆/n 参观/v
其中机构名“华北电力公司”、人名“谭旭光”“胡花蕊”所有识别正确。可是地名“美国纽约现代艺术博物馆”则没法识别。有如下两个缘由:
对于第一个缘由,只能额外标注一些语料。对于第二个缘由能够经过切换到更强大的模型来解决。
以前咱们就介绍过感知机模型,详细见: 5.感知机分类与序列标注
感知机模型词性标注代码见(自动下载 PKU 语料库): perceptron_ner.py
https://github.com/NLP-LOVE/Introduction-NLP/tree/master/code/ch08/perceptron_ner.py
运行会有些慢,结果以下:
华北电力公司/nt 董事长/n 谭旭光/nr 和/c 秘书/n 胡花蕊/nr 来到/v [美国纽约/ns 现代/ntc 艺术/n 博物馆/n]/ns 参观/v
与隐马尔可夫模型相比,已经可以正确识别地名了。
以前咱们就介绍过条件随机场模型,详细见: 6.条件随机场与序列标注
条件随机场模型词性标注代码见(自动下载 PKU 语料库): crf_ner.py
https://github.com/NLP-LOVE/Introduction-NLP/tree/master/code/ch08/crf_ner.py
运行时间会比较长,结果以下:
华北电力公司/nt 董事长/n 谭旭光/nr 和/c 秘书/n 胡花蕊/nr 来到/v [美国纽约/ns 现代/ntc 艺术/n 博物馆/n]/ns 参观/v
获得告终果是同样的。
各个命名实体识别模块的准确率如何,并不是只能经过几个句子主观感觉。任何监督学习任务都有一套标准化评测方案,对于命名实体识别,按照惯例引入P、R 和 F1 评测指标。
在1998年1月《人民日报》语料库上的标准化评测结果以下:
模型 | P | R | F1 |
---|---|---|---|
隐马尔可夫模型 | 79.01 | 30.14 | 43.64 |
感知机 | 87.33 | 78.98 | 82.94 |
条件随机场 | 87.93 | 73.75 | 80.22 |
值得一提的是,准确率与评测策略、特征模板、语料库规模息息相关。一般而言,当语料库较小时,应当使用简单的特征模板,以防止模型过拟合;当语料库较大时,则建议使用更多特征,以期更高的准确率。当特征模板固定时,每每是语料库越大,准确率越高。
以上咱们接触的都是通用领域上的语料库,所含的命名实体仅限于人名、地名、机构名等。假设咱们想要识别专门领域中的命名实体,这时,咱们就要自定义领域的语料库了。
标注领域命名实体识别语料库
首先咱们须要收集一些文本, 做为标注语料库的原料,称为生语料。因为咱们的目标是识别文本中的战斗机名称或型号,因此生语料的来源应当是些军事网站的报道。在实际工程中,求由客户提出,则应当由该客户提供生语料。语料的量级越大越好,通常最低很多于数千个句子。
生语料准备就绪后,就能够开始标注了。对于命名实体识别语料库,若以词语和词性为特征的话,还须要标注分词边界和词性。不过咱们没必要从零开始标注,而能够在HanLP的标注基础上进行校订,这样工做量更小。
样本标注了数千个以后,生语料就被标注成了熟语料。下面代码自动下载语料库。
训练领域模型
选择感知机做为训练算法(自动下载 战斗机 语料库): plane_ner.py
https://github.com/NLP-LOVE/Introduction-NLP/tree/master/code/ch08/plane_ner.py
运行结果以下:
下载 http://file.hankcs.com/corpus/plane-re.zip 到 /usr/local/lib/python3.7/site-packages/pyhanlp/static/data/test/plane-re.zip 100.00%, 0 MB, 552 KB/s, 还有 0 分 0 秒 米高扬/nrf 设计/v [米格/nr -/w 17/m PF/nx]/np :/w [米格/nr -/w 17/m]/np PF/n 型/k 战斗机/n 比/p [米格/nr -/w 17/m P/nx]/np 性能/n 更好/l 。/w [米格/nr -/w 阿帕奇/nrf -/w 666/m S/q]/np 横空出世/l 。/w
这句话已经在语料库中出现过,能被正常识别并不意外。咱们能够伪造一款“米格-阿帕奇-666S”战斗机,试试模型的繁华能力,发现依然可以正确识别。
HanLP何晗--《天然语言处理入门》笔记:
https://github.com/NLP-LOVE/Introduction-NLP
项目持续更新中......
目录
章节 |
---|
第 1 章:新手上路 |
第 2 章:词典分词 |
第 3 章:二元语法与中文分词 |
第 4 章:隐马尔可夫模型与序列标注 |
第 5 章:感知机分类与序列标注 |
第 6 章:条件随机场与序列标注 |
第 7 章:词性标注 |
第 8 章:命名实体识别 |
第 9 章:信息抽取 |
第 10 章:文本聚类 |
第 11 章:文本分类 |
第 12 章:依存句法分析 |
第 13 章:深度学习与天然语言处理 |
原文出处:https://www.cnblogs.com/mantch/p/12300263.html