首页 > 其他分享 >NER-命名实体识别 入门解读

NER-命名实体识别 入门解读

时间:2024-10-13 12:50:05浏览次数:10  
标签:入门 模型 实体 context ORG 识别 NER 标注

NER在NLP领域算一个非常基础的问题,可以广泛应用于信息抽取、搜索引擎优化、情感分析、问答系统、推荐系统、市场营销等领域。主要方法有sequence labeling(序列标注)、interval prediction(区间预测)和question answering(问答)三种方法。

写在前面:刚入门NER时,读一些顶会的最新文章存在困难,在学习基础知识时整理了一些内容并加上了个人理解,可能也只适合初学者,如有不对之处,欢迎批评指正。


目录

一、序列标注

二、区间预测

三、问答方法


一、序列标注

        将NER任务转换为序列标注问题,首先需要有一个数据集定义输入输出的格式,例如输入分词后的结果【“张三”,“在”,“北京”,“大学”,“读书”】,采用BIO序列标注法输出标签为【“B-PER”,"O","B-ORG","I-ORG","O"】,B代表实体的开始,I代表实体的一部分,O表示非实体部分。其余还有BIOES等标注方法。

        然后采用词向量嵌入作为选择的特征输入给模型,词向量因为具有语义相关性,例如“国王”和“王后”的词向量更相近,而和“苹果”的向量相距较远,因此能帮助识别实体类型,且和独热编码比起来拥有稠密的分布,能节省计算资源而广泛使用。

        词向量的训练方式主要有Word2Vec和GloVe,由于有些词具有多种语义因此还可以融合上下文信息。最后选择模型,之前的主要是统计模型:HMM(隐马尔可夫模型)和CRF(条件随机场),后来发展为深度学习模型:CNN、LSTM,再后来是预训练模型例如BERT,最后将词向量和标签喂给模型训练,就能实现输入一个句子模型输出其中的实体和实体类型。

        By the way,说下为什么需要标注"B-PER"而不能直接写“PER”(这是我当时的疑惑),这样做主要是为了区分什么是同一实体,什么是不同实体,例如【“清华”,“大学”,“在”,“北京”,“大学”,“旁边”】,如果正常的话我们标注为【“B-ORG”,“I-ORG”,"O","B-ORG","I-ORG","O"】,如果追求方便直接标实体类型的话就成了【“ORG”,“ORG”,“O”,“ORG”,“ORG”,“O”】不知道前两个实体是一个实体,后两个实体是另一个实体。

        序列标注的关键就是为输入文本的每一个token分配一个标签。

二、区间预测

        区间预测方法和序列标注方法在流程上具有很多的相似之处,最大的不同是在数据集标注上,区间预测给出了实体的区间范围,下面是一个例子

输入文本:"Barack Obama was born in Hawaii."

输出标签:

{
  "Barack Obama": {"type": "PERSON", "span": ["0", "12"]},
  "Hawaii": {"type": "LOCATION", "span": ["25", "31"]}
}

        标注方法是两种方法的主要不同,在词向量嵌入和模型训练方面基本一致,在输出和损失函数选择方面根据情况可能略有不同。序列标注的方法更适合一些细粒度的标注,而区间方法对于一些重叠实体更灵活

三、问答方法

        使用问答(QA)方法解决命名实体识别(NER)任务是一种新颖的思路,提出问题的个数是N*T,N个句子,T种实体类型。

文本问题答案
"Barack Obama was born in Hawaii.""文本中提到的是什么人名?""Barack Obama"
"Barack Obama was born in Hawaii.""文本中提到的是什么地点?""Hawaii"

        输入表示:question+text,另外[CLS] 和 [SEP] 是在许多基于 Transformer 的自然语言处理模型(如 BERT)中使用的特殊标记。它们的作用分别是提示整体的开始以及分隔中间文本。在具体使用中可以这样使用:[CLS]文本中提到的人名是什么[SEP]张三在北京大学读书。

        模型选择:可以使用预训练的问答模型,如BERT、RoBERTa、ALBERT等,或构建一个新的QA模型。模型的选择应根据具体任务和数据集的特点来定。

        个人实际上感觉就是加了个prompt,向训练好的LLM直接提问得到答案,自己需要做的就是一些微调,严格来说不能是一个独立的方法,下面是一个demo。

import os

# 设置模型缓存路径,默认在C盘Users/用户名/.cache
os.environ["TRANSFORMERS_CACHE"] = "D:\\transformers_cache"  # Windows

from transformers import pipeline

# 现在可以使用 pipeline加载问答模型
qa_pipeline = pipeline("question-answering")

# 输入文本
context = """
Tom has lived in Canada for three years.
"""

# 需要识别的实体
questions = [
    "What is the preson name in the context",
    "What is the location in the context",
    "What is the time in the context"

]
# 执行问答
for question in questions:
    result = qa_pipeline(question=question, context=context)
    print(f"Q: {question}\nA: {result['answer']}\n")

执行代码前,确保安装了pytorch和transformers库

输出结果

Q: What is the preson name in the context
A: Tom

Q: What is the location in the context
A: Canada

Q: What is the time in the context
A: three years

以上就是今天要讲的内容,本文仅仅简单介绍了解决NER任务的三种传统重要方法,后续会针对这三种传统NER方法的缺点解读一些改进方法的文章。

标签:入门,模型,实体,context,ORG,识别,NER,标注
From: https://blog.csdn.net/weixin_72032564/article/details/142771188

相关文章

  • 使用 OCaml 进行基础图像识别
    OCaml是一门强类型的函数式编程语言,以其高效的编译器和灵活的表达能力著称。虽然OCaml不像Python等语言在图像处理和识别领域被广泛应用,但它的模块化特性和强大的标准库使其能够完成相关任务。本文将介绍如何在OCaml中实现基础图像处理和识别。OCaml的优势OCaml拥有静......
  • 使用 Lua 进行基础图像识别
    Lua是一门轻量级的嵌入式编程语言,常用于游戏开发、嵌入式系统和快速原型设计。虽然Lua并不像Python那样有大量用于图像处理的库,但借助扩展库和C语言接口,Lua也能用于实现基础的图像识别任务。本文将介绍如何使用Lua实现图像识别中的基本步骤,包括图像加载、灰度转换和简......
  • Heavy Duty Truck Diagnostic Scanner and Software
     Intheworldofheavy-dutytrucks,ensuringoptimalperformanceandquicktroubleshootingisofutmostimportance.Astechnologyadvances,thetoolsavailablefordiagnosticsandmaintenancehavebecomeincreasinglysophisticated.Thisarticlewilldelv......
  • 使用 Racket 进行基础图像识别
    Racket是一门多范式编程语言,基于Lisp的方言,具有强大的元编程能力。尽管Racket主要应用于教育和研究领域,但其丰富的图形和数学库也使得它可以用于图像处理和简单的图像识别任务。本文将介绍如何使用Racket来进行基础图像处理和识别。Racket的优势Racket的语法简洁灵活,非......
  • SpringCloud入门(六)Nacos注册中心(下)
    一、Nacos环境隔离Nacos提供了namespace来实现环境隔离功能。  nacos中可以有多个namespace。namespace下可以有group、service等。不同namespace之间相互隔离,例如不同namespace的服务互相不可见。使用NacosNamespace环境隔离步骤:1.在Nacos控制台可以创建namesp......
  • spring入门(一)spring简介
    一、spring简介spring能够简化开发,降低企业级开发的复杂性。框架整合,高效整合其他技术,提高企业级应用开发与运行效率。主要学习,简化开发和框架整合简化开发:IOC(反转控制),AOP(面向切面编程),事务处理框架整合:整合MyBatis,整合MyBatis-plus,整合Strut......
  • RabbitMQ 入门(一)同步通讯和异步通讯
    一、同步通讯和异步通讯微服务间通讯有同步和异步两种方式:一)、同步通讯我们之前学习的Feign调用就属于同步方式,虽然调用可以实时得到结果,但存在下面的问题:同步调用的优点:-时效性较强,可以立即得到结果同步调用的问题:-耦合度高:每次加入新的需求,都要修改原来的代码;-性能......
  • RabbitMQ 入门(二)基本结构和消息模型
    一、RabbitMQ的基本结构、角色和消息模型MQ的基本结构:  RabbitMQ中的一些角色:-publisher:生产者-consumer:消费者-exchange个:交换机,负责消息路由-queue:队列,存储消息-virtualHost:虚拟主机,隔离不同租户的exchange、queue、消息的隔离RabbitMQ官方提供了5个不同的Demo示例,......
  • 工地安全帽识别闸机联动系统
    工地安全帽识别闸机联动系统基于人脸识别技术和安全帽反光衣穿戴识别技术,工地安全帽识别闸机联动系统通过对施工人员的人脸、安全帽和反光衣进行识别,判断是否符合安全要求。只有当人脸识别成功且安全帽、反光衣齐全时,闸机才会打开允许施工人员进入工地。工地安全帽识别闸机联动系......
  • HTML入门教程一口气讲完!(下)\^o^/
    HTML表单HTML 表单和输入HTML表单用于收集不同类型的用户输入。在线实例创建文本字段(Textfield)本例演示如何在HTML页面创建文本域。用户可以在文本域中写入文本。创建密码字段本例演示如何创建HTML的密码域。(在本页底端可以找到更多实例。)HTML表单......