pre = "0 0 B_SONG I_SONG I_SONG 0 B_SONG I_SONG I_SONG 0 0 B_SINGER I_SINGER I_SINGER 0 O O O B_ALBUM I_ALBUM I_ALBUM O O B_TAG I_TAG I_TAG O"
true = "0 0 B_SONG I_SONG I_SONG 0 0 0 0 0 0 B_SINGER I_SINGER I_SINGER 0 O O O B_ALBUM I_ALBUM I_ALBUM O O B_TAG I_TAG I_TAG O" # x = x.split()
tags = [("B_SONG","I_SONG"),("B_SINGER","I_SINGER"),("B_ALBUM","I_ALBUM"),("B_TAG","I_TAG")] def _find_tag(labels,B_label="B_SONG",I_label="I_SONG"):
result = []
if isinstance(labels,str):
labels = labels.strip().split()
labels = ["O" if label =="0" else label for label in labels]
# print(labels)
for num in range(len(labels)):
if labels[num] == B_label:
song_pos0 = num
if labels[num] == I_label and labels[num-1] == B_label:
lenth = 2
for num2 in range(num,len(labels)):
if labels[num2] == I_label and labels[num2-1] == I_label:
lenth += 1
if labels[num2] == "O":
result.append((song_pos0,lenth))
break
return result def find_all_tag(labels): result = {}
for tag in tags:
res = _find_tag(labels,B_label=tag[0],I_label=tag[1])
result[tag[0].split("_")[1]] = res
return result def precision(pre_labels,true_labels):
'''
:param pre_tags: list
:param true_tags: list
:return:
'''
pre = []
if isinstance(pre_labels,str):
pre_labels = pre_labels.strip().split()
pre_labels = ["O" if label =="0" else label for label in pre_labels]
if isinstance(true_labels,str):
true_labels = true_labels.strip().split()
true_labels = ["O" if label =="0" else label for label in true_labels] pre_result = find_all_tag(pre_labels)
for name in pre_result:
for x in pre_result[name]:
if x:
if pre_labels[x[0]:x[0]+x[1]] == true_labels[x[0]:x[0]+x[1]]:
pre.append(1)
else:
pre.append(0)
return sum(pre)/len(pre) def recall(pre_labels,true_labels):
'''
:param pre_tags: list
:param true_tags: list
:return:
'''
recall = []
if isinstance(pre_labels,str):
pre_labels = pre_labels.strip().split()
pre_labels = ["O" if label =="0" else label for label in pre_labels]
if isinstance(true_labels,str):
true_labels = true_labels.strip().split()
true_labels = ["O" if label =="0" else label for label in true_labels] true_result = find_all_tag(true_labels)
for name in true_result:
for x in true_result[name]:
if x:
if pre_labels[x[0]:x[0]+x[1]] == true_labels[x[0]:x[0]+x[1]]:
recall.append(1)
else:
recall.append(0)
return sum(recall)/len(recall) def f1_score(precision,recall): return (2*precision*recall)/(precision+recall) if __name__ == '__main__':
precision = precision(pre,true)
recall = recall(pre,true)
f1 = f1_score(precision,recall)
print(precision)
print(recall)
print(f1)

  

NER命名实体识别,实体级level的评估,精确率、召回率和F1值的更多相关文章

  1. 基于BERT预训练的中文命名实体识别TensorFlow实现

    BERT-BiLSMT-CRF-NERTensorflow solution of NER task Using BiLSTM-CRF model with Google BERT Fine-tuni ...

  2. 神经网络结构在命名实体识别(NER)中的应用

    神经网络结构在命名实体识别(NER)中的应用 近年来,基于神经网络的深度学习方法在自然语言处理领域已经取得了不少进展.作为NLP领域的基础任务-命名实体识别(Named Entity Recognit ...

  3. NLP入门(五)用深度学习实现命名实体识别(NER)

    前言   在文章:NLP入门(四)命名实体识别(NER)中,笔者介绍了两个实现命名实体识别的工具--NLTK和Stanford NLP.在本文中,我们将会学习到如何使用深度学习工具来自己一步步地实现N ...

  4. NLP入门(四)命名实体识别(NER)

      本文将会简单介绍自然语言处理(NLP)中的命名实体识别(NER).   命名实体识别(Named Entity Recognition,简称NER)是信息提取.问答系统.句法分析.机器翻译等应用领 ...

  5. 【神经网络】神经网络结构在命名实体识别(NER)中的应用

    命名实体识别(Named Entity Recognition,NER)就是从一段自然语言文本中找出相关实体,并标注出其位置以及类型,如下图.它是NLP领域中一些复杂任务(例如关系抽取,信息检索等)的 ...

  6. 2. 知识图谱-命名实体识别(NER)详解

    1. 通俗易懂解释知识图谱(Knowledge Graph) 2. 知识图谱-命名实体识别(NER)详解 3. 哈工大LTP解析 1. 前言 在解了知识图谱的全貌之后,我们现在慢慢的开始深入的学习知识 ...

  7. 命名实体识别(NER)

    一.任务 Named Entity Recognition,简称NER.主要用于提取时间.地点.人物.组织机构名. 二.应用 知识图谱.情感分析.机器翻译.对话问答系统都有应用.比如,需要利用命名实体 ...

  8. NLP入门(八)使用CRF++实现命名实体识别(NER)

    CRF与NER简介   CRF,英文全称为conditional random field, 中文名为条件随机场,是给定一组输入随机变量条件下另一组输出随机变量的条件概率分布模型,其特点是假设输出随机 ...

  9. 『深度应用』NLP命名实体识别(NER)开源实战教程

    近几年来,基于神经网络的深度学习方法在计算机视觉.语音识别等领域取得了巨大成功,另外在自然语言处理领域也取得了不少进展.在NLP的关键性基础任务—命名实体识别(Named Entity Recogni ...

随机推荐

  1. lvs + keepalived + gninx 高性能负载均衡

    1,nginx 作为负载均衡器,在应用层实现了负载均衡和反向代理,在分布式集群中,能够有效的去处理大数据量,高访问的应用.但是,如果nginx 服务挂了怎么办? 为此,可以实现两台nginx或者多台n ...

  2. 码云上开源JAVA项目收藏

    一. 个人学习项目 1. BootDo面向学习型的开源框架 (可以当做 管理台脚手架) BootDo是高效率,低封装,面向学习型,面向微服的开源Java EE开发框架. BootDo是在SpringB ...

  3. 关于k12领域Lucene.net+pangu搜索引擎设计开发的一些回顾

    在中国最大的教育资源门户网站两年期间, 黄药师负责学科网搜吧的设计与开发…正好赶上了公司飞速发展的阶段.. 作为专注于k12领域内容与服务的互联网公司的一员,同时整个公司又在积极提升用户体验的氛围中, ...

  4. 《Python Enhancement Proposal #8》要点 学习摘录

    <Python Enhancement Proposal #8> (8号python增强提案)又叫PEP8,他针对的python代码格式而编订的风格指南. 空白 使用space来表示缩进, ...

  5. 解决VS项目程序运行完就自动关闭窗口

    VS的程序运行完会关闭窗口,需要设置工程属性 笔者虽然是Java开发者,但是学习用到了C++与C语言,之前使用的是dev与codeblock并没有这个情况,那么如何解决 首先你有这个hello,wor ...

  6. touch多点触摸事件

    touch--单点 targetTouches. changeTouches 多点: targetTouches--当前物体上的手指数 *不同物体上的手指不会互相干扰 不需要做多点触摸的时候---平均 ...

  7. django-filter的基本使用

    django-filter 查询 创建model和视图 from django.db import models # Create your models here. class Student(mo ...

  8. golang+docker 进入镜像测试本地通信

    首先进入docker镜像: docker-compose exec 镜像 sh //进入镜像 然后添加curl命令 apk add curl 最后在使用 curl  -d  localhost:809 ...

  9. matplotlib BboxBase类

    2020-04-07 17:24:12  --Edit by yangray BboxBase 是 TransformNode 的子类, 同时它是所有 bounding box(平行四边形限位框) 的 ...

  10. MyBatis-Plus使用小结

    官网: https://mybatis.plus/ https://gitee.com/baomidou/mybatis-plus https://github.com/baomidou/mybati ...