5分钟NLP:快速实现NER的3个预训练库总结

在文本自动理解的NLP任务中,命名实体识别(NER)是首要的任务。NER模型的作用是识别文本语料库中的命名实体例如人名、组织、位置、语言等。

NER模型可以用来理解一个文本句子/短语的意思。它可以识别文本中可能代表who、what和whom的单词,以及文本数据所指的其他主要实体。

在本文中,我们将介绍对文本数据执行 NER 的 3 种技术。 这些技术将涉及预训练和定制训练的命名实体识别模型。

  • 基于 NLTK 的预训练 NER
  • 基于 Spacy 的预训练 NER
  • 基于 BERT 的自定义 NER

基于NLTK的预训练NER模型:

NLTK包提供了一个经过预先训练的NER模型的实现,它可以用几行Python代码实现NER功能。NLTK包提供了一个参数选项:要么识别所有命名实体,要么将命名实体识别为它们各自的类型,比如人、地点、位置等。

如果binary=True,那么模型只会在单词为命名实体(NE)或非命名实体(NE)时赋值,否则对于binary=False,所有单词都将被赋值一个标签。

entities = []
tags = []

sentence = nltk.sent_tokenize(text)
for sent in sentence:
    for chunk in nltk.ne_chunk(nltk.pos_tag(nltk.word_tokenize(sent)), binary=False):
        if hasattr(chunk,'label'):
            entities.append(' '.join(c[0] for c in chunk))
            tags.append(chunk.label())

entities_tags = list(set(zip(entities,tags)))

entities_df = pd.DataFrame(entities_tags)
entities_df.columns = ["Entities","Tags"]

输入示例文本:

5分钟NLP:快速实现NER的3个预训练库总结

结果如下:

5分钟NLP:快速实现NER的3个预训练库总结

基于 Spacy 的预训练 NER

Spacy 包提供预训练的深度学习 NER 模型,可用文本数据的 NER 任务。 Spacy 提供了 3 个经过训练的 NER 模型:en_core_web_sm、en_core_web_md、en_core_web_lg。

NER 模型可以使用 python -m spacy download en_core_web_sm 下载并使用 spacy.load(“en_core_web_sm”) 加载。

!python -m spacy download en_core_web_sm
import spacy
from spacy import displacy

nlp = spacy.load("en_core_web_sm")

doc = nlp(text)

entities, labels, position_start, position_end = [], [], [], []

for ent in doc.ents:
    entities.append(ent)
    labels.append(ent.label_)
    position_start.append(ent.start_char)
    position_end.append(ent.end_char)

df = pd.DataFrame({'Entities':entities,'Labels':labels,'Position_Start':position_start, 'Position_End':position_end})

还是上面的文字,结果如下:

5分钟NLP:快速实现NER的3个预训练库总结

基于 BERT 的 NER

使用 NLTK 和 spacy 的 NER 模型的前两个实现是预先训练的,并且这些包提供了 API 以使用 Python 函数执行 NER。

对于某些自定义域,预训练模型可能表现不佳或可能未分配相关标签。 这时可以使用transformer训练基于 BERT 的自定义 NER 模型。

Import necessary packages
import pandas as pd
from sklearn.preprocessing import LabelEncoder
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
from simpletransformers.ner import NERModel, NERArgs

Read sample training NER data
data = pd.read_csv("sample_ner_dataset.csv", encoding="latin1")
data = data.fillna(method ="ffill")

Label Encode
data["Sentence #"] = LabelEncoder().fit_transform(data["Sentence #"] )
data.rename(columns={"Sentence #":"sentence_id","Word":"words","Tag":"labels"}, inplace =True)
data["labels"] = data["labels"].str.upper()

Train test split
X = data[["sentence_id","words"]]
Y = data["labels"]
x_train, x_test, y_train, y_test = train_test_split(X, Y, test_size =0.2)

Building up train data and test data
train_data = pd.DataFrame({"sentence_id":x_train["sentence_id"],"words":x_train["words"],"labels":y_train})
test_data = pd.DataFrame({"sentence_id":x_test["sentence_id"],"words":x_test["words"],"labels":y_test})

Initializing NER model configurations
label = data["labels"].unique().tolist()
args = NERArgs()
args.num_train_epochs = 1
args.learning_rate = 1e-4
args.overwrite_output_dir =True
args.train_batch_size = 32
args.eval_batch_size = 32

Train BERT based NER model
model = NERModel('bert', 'bert-base-cased', labels=label, args=args)
model.train_model(train_data, eval_data=test_data, acc=accuracy_score)

Evaluate the performance of NER model
result, model_outputs, preds_list = model.eval_model(test_data)

Perform NER for inference text
inference_text = "What is the new name of Bangalore"
prediction, model_output = model.predict([inference_text])

结果如下:

5分钟NLP:快速实现NER的3个预训练库总结

总结

基于 Spacy 的预训练 NER 模型的性能似乎是最好的,其中预测的各种标签非常接近人类的实际理解。 Spacy NER 模型只需几行代码即可实现,并且易于使用。

基于 BERT 的自定义训练 NER 模型提供了类似的性能。 定制训练的 NER 模型也适用于特定领域的任务。

NER 模型还有其他各种实现,本文未讨论,例如斯坦福 NLP 的预训练的 NER 模型,有兴趣的可以看看。

https://www.overfit.cn/post/b7a368f1282149338a1afc20a5a6afcc

Original: https://blog.csdn.net/m0_46510245/article/details/123040066
Author: deephub
Title: 5分钟NLP:快速实现NER的3个预训练库总结

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/544850/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 图像修复(Image Inpainting)任务中常用的掩码数据集

    文章目录 前言 mask数据集分类及介绍 总结 前言 在 Image Inpainting(图像修复) 任务中,需要使用掩码数据集在图像上人为添加缺陷区域,以便在设计的深度学习上进…

    人工智能 2023年7月28日
    064
  • 【OpenCv】图像的轮廓查找

    1 原理 边界或者轮廓可以简单认为成将连续的点(连着边界)连在一起的曲线,具有相同的颜色或者灰度。轮廓在形状分析和物体的检测和识别中很有用。在机器视觉领域最常用的轮廓查找的算法之一…

    人工智能 2023年6月18日
    082
  • CD-Hit 生信 碱基序列去除冗余的方法

    1.CD-Hit介绍 官方介绍: CD-HIT是一个非常广泛使用的程序,用于蛋白质或核苷酸序列的聚类和比较。最初由李伟忠博士在伯纳姆研究所(现为桑福德伯纳姆医学研究所)亚当·戈兹克…

    人工智能 2023年6月2日
    0122
  • 使用Protege进行本体构建(实践)

    Protege Protégé软件是斯坦福大学医学院生物信息研究中心基于Java语言开发的本体编辑和知识获取软件,或者说是本体开发工具,也是基于知识的编辑器,属于开放源代码软件。 …

    人工智能 2023年6月1日
    0173
  • 生成扩散模型漫谈:DDPM = 自回归式VAE

    ©PaperWeekly 原创 · 作者 |苏剑林 单位 | 追一科技 研究方向 | NLP、神经网络 在文章中,我们为生成扩散模型 DDPM 构建了”拆楼-建楼&#8…

    人工智能 2023年5月28日
    0110
  • 神经网络电子书,神经网络入门书

    神经网络优缺点, 优点:(1)具有自学习功能。例如实现图像识别时,只在先把许多不同的图像样板和对应的应识别的结果输入人工神经网络,网络就会通过自学习功能,慢慢学会识别类似的图像。自…

    人工智能 2023年7月14日
    077
  • CloudCompare&PCL 点云分割之区域生长

    文章目录 一、简介 二、算法实现 * 2.1算法步骤 2.2代码实现 三、实现效果 四、小结 一、简介 点云分割作为许多应用的前提,其直接会关乎到后续利用点云数据进行曲面重建、特征…

    人工智能 2023年5月31日
    064
  • Scipy-kmeans聚类色彩提取

    K-means聚类分析属于非层次聚类法的一种。首先选择某些记录作为凝聚点(可人为指定),按就近原则将其余记录向凝聚点凝集,计算出各个处室分类的中心位置(均值),用计算出的中心位置重…

    人工智能 2023年5月31日
    091
  • spark dataFrame withColumn

    说明:withColumn用于在原有DF新增一列 初始化sqlContext val sqlContext = new org.apache.spark.sql.SQLContex…

    人工智能 2023年6月2日
    080
  • 卷积神经网络CNN原理+代码(pytorch实现MNIST集手写数字分类任务)

    目录 * – 卷积神经网络 – + * 前言 * 卷积运算: * 卷积运算中几个常用的参数 * – 1.padding – 2.st…

    人工智能 2023年7月20日
    067
  • 优化算法SGD与Adam

    说来惭愧,一直在用的两个经典的优化器,几行代码就完成了参数更新,但是却一直没有深入的了解其中的原理。 improt torch … optimizer = torch.opti…

    人工智能 2023年6月15日
    077
  • 用Python实现简单的人脸识别,10分钟搞定!(附源码)

    前言 让我的电脑认识我,我的电脑只有认识我,才配称之为我的电脑! 今天,我们用Python实现简单的人脸识别技术! Python里,简单的人脸识别有很多种方法可以实现,依赖于pyt…

    人工智能 2023年7月3日
    078
  • 【OpenCv】图像分割——分水岭算法

    文章目录 1 原理 2 算法改进 3 API 4 实例 1 原理 分水岭分割方法,是一种基于拓扑理论的数学形态学的分割方法,其基本思想是把图像看作是测地学上的拓扑地貌,图像中每一点…

    人工智能 2023年5月28日
    0113
  • OpenVINO 的安装及配置

    目录 1.安装外部软件依赖 2.安装OpenVINO工具套件 3.临时环境变量的配置 4.安装MovidiusDriver与验证 6.配置环境变量 7.编译inference en…

    人工智能 2023年6月25日
    0162
  • 关于跳跃连接 卷积网络

    在训练深度神经网络时,模型的性能随着架构深度的增加而下降。这被称为退化问题。 网络深度的增加,模型的性能下降的原因可能是什么? a,过度拟合。随着深度的增加,模型往往会过度拟合 b…

    人工智能 2023年6月15日
    0119
  • 图神经网络(三):节点分类

    节点分类问题 数据集:Cora包含七类学术论文,论文与论文之间存在引用和被引用的关系 数据集导入 from torch_geometric.datasets import Plan…

    人工智能 2023年7月2日
    0104
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球