使用 OpenAI 进行结构化标签提取的 Python 实现

使用 OpenAI 进行结构化标签提取的 Python 实现

    • 1. 环境准备
    • 2. 加载环境变量
    • 3. 初始化 OpenAI 客户端
    • 4. 定义系统消息
    • 5. 实现标签提取函数
    • 6. 示例应用
      • 示例1:人事文档
      • 示例2:技术文档
    • 7. 运行结果
    • 8. 总结

在现代的信息处理中,从文本中提取结构化信息是一个常见的需求。无论是从人事文档中提取人名、部门名称,还是从技术文档中提取技术领域和产品名称,这些任务都可以通过自然语言处理(NLP)技术来实现。本文将介绍如何使用 OpenAI 的 GPT-4 模型来实现这一功能,并通过 Python 代码展示具体的实现步骤。

1. 环境准备

首先,我们需要准备 Python 环境,并安装必要的依赖库。我们将使用 openai 库来调用 GPT-4 模型,并使用 dotenv 库来管理环境变量。

pip install openai python-dotenv

2. 加载环境变量

为了安全地管理 API 密钥和其他敏感信息,我们可以将这些信息存储在 .env 文件中,并使用 dotenv 库来加载它们。

import logging
import os

from dotenv import find_dotenv, load_dotenv
from openai import OpenAI

# 读取本地 .env 文件
load_dotenv(find_dotenv())

# 设置日志级别为 ERROR,避免 WARNING 信息干扰
logging.basicConfig(level=logging.ERROR)

3. 初始化 OpenAI 客户端

接下来,我们需要初始化 OpenAI 客户端。这里我们从环境变量中读取 OPENAI_BASE_URLOPENAI_API_KEY

# 初始化 OpenAI 模型
llm_client = OpenAI(
    base_url=os.environ["OPENAI_BASE_URL"],
    api_key=os.environ["OPENAI_API_KEY"],
)

4. 定义系统消息

为了指导 GPT-4 模型进行标签提取,我们需要定义一个系统消息。这个消息将告诉模型我们期望的输出格式和标签类型。

system_message = """你是一个标签提取专家。请从文本中提取结构化信息,并按要求输出标签。
---
【支持的标签类型】
- 人名
- 部门名称
- 职位名称
- 技术领域
- 产品名称
---
【输出要求】
1. 请用 JSON 格式输出,如:[{"key": "部门名称", "value": "教研部"}]
2. 如果某类标签未识别到,则不输出该类
---
待分析文本如下:
"""

5. 实现标签提取函数

我们定义一个 extract_tags 函数,该函数将接收待分析的文本,并调用 GPT-4 模型来提取标签。

def extract_tags(text):
    completion = llm_client.chat.completions.create(
        model="gpt-4",
        messages=[
            {'role': 'system', 'content': system_message},
            {'role': 'user', 'content': text}
        ],
        response_format={"type": "json_object"},
        seed=42,
    )
    return completion.choices[0].message.content

6. 示例应用

我们通过两个示例来展示如何使用 extract_tags 函数。

示例1:人事文档

# 示例1:人事文档
hr_text = """张明是我们AI研发部的技术主管,他带领团队开发了新一代智能对话平台 ChatMax,在自然语言处理领域有着丰富经验。如果您需要了解项目细节,可以直接联系他。"""
print("人事文档标签提取结果:")
print(extract_tags(hr_text))

示例2:技术文档

# 示例2:技术文档
tech_text = """本论文提出了一种基于深度学习的图像识别算法,在医疗影像分析中取得了突破性进展。该算法已在北京协和医院的CT诊断系统中得到应用。"""
print("\n技术文档标签提取结果:")
print(extract_tags(tech_text))

7. 运行结果

运行上述代码后,我们将得到类似以下的输出:

人事文档标签提取结果:
[
    {"key": "人名", "value": "张明"},
    {"key": "部门名称", "value": "AI研发部"},
    {"key": "职位名称", "value": "技术主管"},
    {"key": "技术领域", "value": "自然语言处理"},
    {"key": "产品名称", "value": "ChatMax"}
]

技术文档标签提取结果:
[
    {"key": "技术领域", "value": "深度学习"},
    {"key": "产品名称", "value": "CT诊断系统"},
    {"key": "部门名称", "value": "北京协和医院"}
]

8. 总结

通过本文的介绍,我们学习了如何使用 OpenAI 的 GPT-4 模型来从文本中提取结构化标签。这种方法可以广泛应用于各种信息提取任务中,如人事管理、技术文档分析等。希望本文对你有所帮助,欢迎在评论区分享你的使用体验和问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/948757.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

探秘Kafka源码:关键内容解析

文章目录 一、以kafka-3.0.0为例1.1安装 gradle 二、生产者源码2.1源码主流程图2.2 初始化2.3生产者sender线程初始化2.4 程序入口2.5生产者 main 线程初始化2.6 跳转到 KafkaProducer构造方法 一、以kafka-3.0.0为例 打开 IDEA,点击 File->Open…->源码包解…

动态库dll与静态库lib编程4:MFC规则DLL讲解

文章目录 前言一、说明二、具体实现2.1新建项目2.2 模块切换的演示 总结 前言 动态库dll与静态库lib编程4:MFC规则DLL讲解。 一、说明 1.前面介绍的均为Win32DLL,即不使用MFC的DLL。 2.MFC规则DLL的特点:DLL内部可以使用MFC类库、可以被其他…

对比学习损失函数 - InfoNCE

InfoNCE Loss :构建高效对比学习模型 引言 对比学习中的InfoNCE损失函数是自监督学习领域的重要进展,它通过最大化正样本对之间的相似度并最小化负样本对的相似度,有效地引导模型学习到数据的本质特征。InfoNCE不仅提高了表示学习的质量&am…

家用万兆网络实践:紧凑型家用服务器静音化改造(二)

大家好,这篇文章我们继续分享家里网络设备的万兆升级和静音改造经验,希望对有类似需求的朋友有所帮助。 写在前面 在上一篇《家用网络升级实践:低成本实现局部万兆(一)》中,我们留下了一些待解决的问题。…

【STC库函数】Compare比较器的使用

如果我们需要比较两个点的电压,当A点高于B点的时候我们做一个操作,当B点高于A点的时候做另一个操作。 我们除了加一个运放或者比较器,还可以直接使用STC内部的一个比较器。 正极输入端可以是P37、P50、P51,或者从ADC的十六个通道…

东京大学联合Adobe提出基于指令的图像编辑模型InstructMove,可通过观察视频中的动作来实现基于指令的图像编辑。

东京大学联合Adobe提出的InstructMove是一种基于指令的图像编辑模型,使用多模态 LLM 生成的指令对视频中的帧对进行训练。该模型擅长非刚性编辑,例如调整主体姿势、表情和改变视点,同时保持内容一致性。此外,该方法通过集成蒙版、…

海思Linux(一)-Hi3516CV610的开发-ubuntu22_04环境创建

目 录 前 言 一、芯片介绍 二、环境搭建 2.1 前提准备 2.2 虚拟机创建 2.3 ubuntu环境安装 2.4 基础ubuntu环境搭建 2.5 使用MobaXterm登陆ubuntu 前 言 芯片选型:HI3516CV610 选择的开发板是:酷电科技馆的Hi3516CV610-MINI开发板 上一篇文章&#xf…

vue elementUI Plus实现拖拽流程图,不引入插件,纯手写实现。

vue elementUI Plus实现拖拽流程图,不引入插件,纯手写实现。 1.设计思路:2.设计细节3.详细代码实现 1.设计思路: 左侧button列表是要拖拽的组件。中间是拖拽后的流程图。右侧是拖拽后的数据列表。 我们拖动左侧组件放入中间的流…

Spring boot 项目 Spring 注入 代理 并支持 代理对象使用 @Autowired 去调用其他服务

文章目录 类定义与依赖注入方法解析createCglibProxy注意事项setApplicationContext 方法createCglibProxy 方法 类定义与依赖注入 Service: 标识这是一个 Spring 管理的服务类。ApplicationContextAware: 实现该接口允许你在类中获取 ApplicationContext 对象,从而…

应用程序越权漏洞安全测试总结体会

应用程序越权漏洞安全测试总结体会 一、 越权漏洞简介 越权漏洞顾名思议超越了自身的权限去访问一些资源,在OWASP TOP10 2021中归类为A01:Broken Access Control,其本质原因为对访问用户的权限未进行校验或者校验不严谨。在一个特定的系统或…

JAVA:Spring Boot 集成 Quartz 实现分布式任务的技术指南

1、简述 Quartz 是一个强大的任务调度框架,允许开发者在应用程序中定义和执行定时任务。在 Spring Boot 中集成 Quartz,可以轻松实现任务的调度、管理、暂停和恢复等功能。在分布式系统中,Quartz 也支持集群化的任务调度,确保任务…

改善 Kibana 中的 ES|QL 编辑器体验

作者:来自 Elastic Marco Liberati 随着新的 ES|QL 语言正式发布,Kibana 中开发了一种新的编辑器体验,以帮助用户编写更快、更好的查询。实时验证、改进的自动完成和快速修复等功能将简化 ES|QL 体验。 我们将介绍改进 Kibana 中 ES|QL 编辑器…

【深度学习入门_基础篇】线性代数本质

开坑本部分主要为基础知识复习,新开坑中,学习记录自用。 学习目标: 熟悉向量、线性组合、线性变换、基变换、矩阵运算、逆函数、秩、列空间、零空间、范式、特征指、特征向量等含义与应用。 强烈推荐此视频: 【官方双语/合集】…

【SpringBoot】当 @PathVariable 遇到 /,如何处理

1. 问题复现 在解析一个 URL 时,我们经常会使用 PathVariable 这个注解。例如我们会经常见到如下风格的代码: RestController Slf4j public class HelloWorldController {RequestMapping(path "/hi1/{name}", method RequestMethod.GET)publ…

VBA(Visual Basic for Applications)编程|excel|一系列网址或文件路径快速转换为可点击的超链接

很多时候,我们需要把导入的数据某一列转换成超链接,比如URL形式的列。 那么,大批量的情况下,无疑一个个手动点击是非常愚蠢的办法,这个时候我们就需要VBA编程来编写宏,通过编写宏来简化这些手动操作并不现…

小程序开发全解析 快速构建高效应用的核心指南

内容概要 小程序开发是当前数字世界中炙手可热的领域,吸引了无数开发者和企业的关注。随着技术的进步,小程序成为了提升用户体验、增强品牌曝光以及增加客户互动的重要工具。了解小程序的基本概念,就像是打开了一扇通往新世界的大门。 在这…

SQL—Group_Concat函数用法详解

SQL—Group_Concat函数用法详解 在LC遇见的一道很有趣的SQL题,有用到这个函数,就借这道题抛砖引玉,在此讲解一下group_concat函数的用法。🤣 GROUP_CONCAT([DISTINCT] expression [ORDER BY expression] [SEPARATOR separator])…

Edge Scdn的应用场景有哪些?

酷盾安全Edge Scdn 具备强大的安全防护能力,通过多层防御机制,如防火墙、DDoS 攻击防护、入侵检测和防御、数据加密等,有效抵御各种网络攻击,包括 DDoS 攻击、CC 攻击、SQL 注入攻击、XSS 跨站脚本攻击等,保障网站和应…

流光效果

1、流光效果是什么 在 Unity Shader 中的流光效果是一种动态的视觉效果,通常用于给材质增加一种闪光或光线移动的效果,使物体表面看起来像是有光在流动。这种效果常用于武器光效、能量护盾、传送门等等,可以让物体看起来更加生动富有科技感 …

滑动窗口——串联所有单词的子串

一.题目描述 30. 串联所有单词的子串 - 力扣(LeetCode) 二.题目解析 题目前提:s是一个字符串,words是一个字符串数组,里面所有的字符串的长度都是相等的。 题目要求:找到s中的一段连续的子串&#xff0…