利用 GlobalPointer 进行中文命名实体识别

news/2024/11/17 5:43:10/

利用 GlobalPointer 进行中文命名实体识别

自然语言处理领域,命名实体识别(NER)是一个重要任务,它旨在识别文本中的特定信息单元,如人名、地名和组织名等。本文将详细分析使用 GlobalPointer 进行中文命名实体识别的实现代码。

1. 环境准备

在代码开头,我们导入了必要的库,包括 TensorFlow、BERT4Keras 等。这些库为模型构建、训练和评估提供了基础。

import os
import json
import glob
import numpy as np
import random
import tensorflow as tf
from bert4keras.backend import keras, K
from bert4keras.layers import GlobalPointer
from bert4keras.models import build_transformer_model
from bert4keras.optimizers import Adam
2. 定义损失函数与评估指标

我们首先定义了 global_pointer_crossentropyglobal_pointer_f1_score 两个函数,以实现针对 GlobalPointer 的交叉熵损失和 F1 分数评估。

  • 交叉熵损失:将真实标签和预测标签重塑为二维张量,并计算多标签分类的交叉熵。
def global_pointer_crossentropy(y_true, y_pred):bh = K.prod(K.shape(y_pred)[:2])y_true = K.reshape(y_true, (bh, -1))y_pred = K.reshape(y_pred, (bh, -1))return K.mean(multilabel_categorical_crossentropy(y_true, y_pred))
  • F1 分数:通过计算精确率和召回率,返回 F1 分数以评估模型性能。
def global_pointer_f1_score(y_true, y_pred):y_pred = K.cast(K.greater(y_pred, 0.), K.floatx())p = K.sum(y_true * y_pred) / K.sum(y_pred)r = K.sum(y_true * y_pred) / K.sum(y_true)return 2*p*r/(p+r)
3. 模型构建

我们提供了两个模型构建函数:build_modelbuild_multi_cls_model

  • build_model:构建一个基础的 GlobalPointer 模型。它首先通过 build_transformer_model 构建基础模型,然后添加 GlobalPointer 层。
def build_model(config_path, checkpoint_path, categories_num, learning_rate):model = build_transformer_model(config_path, checkpoint_path)output = GlobalPointer(categories_num, 64, RoPE=True)(model.output)model = keras.models.Model(model.input, output)model.compile(loss=global_pointer_crossentropy,optimizer=Adam(learning_rate),metrics=[global_pointer_f1_score])return model
  • build_multi_cls_model:构建一个多分类模型。它从 transformer 的多个输出层中提取信息,通过平均层结合不同层的特征,最终得到 GlobalPointer 的输出。
def build_multi_cls_model(config_path, checkpoint_path, categories_num, learning_rate):model = build_transformer_model(config_path, checkpoint_path, return_keras_model=True)cls1 = model.get_layer(output_layer % 10).outputcls2 = model.get_layer(output_layer % 11).outputmean_cls = keras.layers.Average()([cls1, cls2])output = GlobalPointer(categories_num, 64, RoPE=True)(mean_cls)model = keras.models.Model(model.input, output)optimizer = AdamW(learning_rate=learning_rate, weight_decay_rate=0.01)model.compile(loss=global_pointer_crossentropy,optimizer=optimizer,metrics=[global_pointer_f1_score])return model
4. 总结

通过上述分析,我们可以看到,利用 GlobalPointer 进行中文命名实体识别的实现不仅高效,还能够处理多标签的复杂场景。我们定义了适合该模型的损失函数和评估指标,并提供了两种不同的模型构建方法,以适应不同的任务需求。希望本文能帮助读者更好地理解并实现中文命名实体识别。


http://www.ppmy.cn/news/1530845.html

相关文章

甘肃非遗文化网站:Spring Boot开发实战

3 系统分析 当用户确定开发一款程序时,是需要遵循下面的顺序进行工作,概括为:系统分析–>系统设计–>系统开发–>系统测试,无论这个过程是否有变更或者迭代,都是按照这样的顺序开展工作的。系统分析就是分析系…

Linux-L14-Linux中把用户加入到管理者root中

目的 将用户添加到root用户组(通常是管理员组) 步骤 这可以通过usermod命令来完成 1打开终端 如果你需要为新用户添加到root组,首先使用以下命令创建一个新用户(如果用户已经存在,可以跳过这一步)&…

如何安装和注册 GitLab Runner

如何安装和注册 GitLab Runner GitLab Runner 是一个用于运行 GitLab CI/CD (Continuous Integration/Continuous Deployment) 作业。它是一个与 GitLab 配合使用的应用程序,可以在本地或云中运行。Runner 可以执行不同类型的作业,例如编译代码、运行测…

计算机毕业设计 物业智慧系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ 🍅文末获取源码联系🍅 👇🏻 精…

签署《AI安全国际对话威尼斯共识》 智源持续推动人工智能安全发展

近日,由AI安全国际论坛(Safe AI Forum)和博古睿研究院(Berggruen Institute) 共同举办的第三届国际AI安全对话(International Dialogues on AI Safety)在威尼斯举办。图灵奖得主Yoshua Bengio、姚期智教授&…

Qt C++设计模式->装饰器模式

装饰器模式(Decorator Pattern)是一种结构型设计模式,允许你在不改变对象接口的情况下,动态地为对象添加额外的功能。它通过将对象包装在装饰器类中来实现这一点,从而提供了比继承更灵活的扩展方式。 装饰器模式的应用…

代码随想录算法训练营第29天 | 第九章动态规划 part02

第九章 动态规划 Part 02 文章目录 第九章 动态规划 Part 02详细布置62. 不同路径63. 不同路径 II343. 整数拆分(可跳过)96. 不同的二叉搜索树(可跳过) 今天开始逐渐有了动态规划的感觉了。前两题 不同路径非常适合进阶&#xff…

Gnu Radio抓取WiFi信号,流程图中模块功能

模块流程如图所示: GNURadio中抓取WiFi信号的流程图中各个模块的功能: UHD: USRP Source: 使用此模块配置USRP硬件进行信号采集。设置频率、增益、采样率等参数。Complex to Mag^2: 将复数IQ数据转换为幅度的平方。Delay&#xf…