# 使用 Hugging Face Transformers 和 PyTorch 实现信息抽取

使用 Hugging Face Transformers 和 PyTorch 实现信息抽取

在自然语言处理(NLP)领域,信息抽取是一种常见的任务,其目标是从文本中提取特定类型的结构化信息。本文将介绍如何使用 Hugging Face Transformers 和 PyTorch 实现基于大语言模型的信息抽取。我们将通过一个具体的例子,展示如何从文本中抽取商品的详细信息,包括产品名称、品牌、特点、价格和销量等。

1. 任务背景

信息抽取在许多应用场景中都非常有用,例如从新闻文章中提取关键信息、从产品描述中提取商品信息等。传统的信息抽取方法通常依赖于规则匹配或基于机器学习的分类器,但这些方法往往需要大量的标注数据,并且在面对复杂的文本结构时效果有限。近年来,随着大语言模型(如 GPT、Bert 等)的发展,基于这些模型的信息抽取方法逐渐成为研究热点。

2. 技术栈介绍

2.1 Hugging Face Transformers

Hugging Face Transformers 是一个开源的 Python 库,提供了大量预训练的语言模型,以及用于微调和部署这些模型的工具。它支持多种模型架构(如 Bert、GPT、T5 等),并且提供了丰富的 API,方便开发者快速实现各种 NLP 任务。
在这里插入图片描述
在这里插入图片描述

2.2 PyTorch

PyTorch 是一个流行的深度学习框架,以其动态计算图和易用性而闻名。它提供了强大的 GPU 支持,能够加速模型的训练和推理过程。在本文中,我们将使用 PyTorch 来加载和运行预训练的语言模型。

3. 实现步骤

3.1 定义任务和数据

我们的目标是从给定的文本中抽取商品的相关信息。具体来说,我们需要提取以下属性:

  • 产品名称
  • 品牌
  • 特点
  • 原价
  • 促销价
  • 销量

为了实现这一目标,我们定义了一个简单的数据结构来描述这些属性,并提供了一些示例数据供模型学习。

3.2 初始化模型和分词器

我们使用 Hugging Face Transformers 提供的 AutoTokenizerAutoModelForCausalLM 来加载预训练的语言模型。在这个例子中,我们使用了 Qwen2.5-1.5B-Instruct 模型,这是一个经过指令微调的模型,能够更好地理解自然语言指令。

tokenizer = AutoTokenizer.from_pretrained(r"C:\Users\妄生\Qwen2.5-1.5B-Instruct", trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained(r"C:\Users\妄生\Qwen2.5-1.5B-Instruct", trust_remote_code=True)

3.3 构建提示模板

为了帮助模型更好地理解任务,我们设计了一个提示模板,明确告诉模型需要抽取哪些信息。模板中包含了需要抽取的实体类型和属性,以及如何格式化输出结果。

IE_PATTERN = "{}\n\n提取上述句子中{}的实体,并按照JSON格式输出,上述句子中不存在的信息用['原文中未提及']来表示,多个值之间用','分隔。"

3.4 准备示例数据

为了让模型更好地理解任务,我们提供了一些示例数据。这些示例数据展示了如何从文本中抽取信息,并以 JSON 格式输出。

ie_examples = {'商品': [{'content': '2024 年新款时尚运动鞋,品牌 JKL,舒适透气,多种颜色可选。原价 599 元,现在促销价 499 元。月销量 2000 双。','answers': {'产品': ['时尚运动鞋'],'品牌': ['JKL'],'特点': ['舒适透气、多种颜色可选'],'原价': ['599元'],'促销价': ['499元'],'月销量': ['2000双'],}}]
}

3.5 实现信息抽取函数

我们定义了一个 inference 函数,用于对输入的文本进行信息抽取。这个函数首先将输入文本和提示模板组合起来,然后使用模型生成输出结果。最后,我们将生成的结果解码并打印出来。

def inference(sentences: list, custom_settings: dict):for sentence in sentences:cls_res = "商品"if cls_res not in schema:print(f'The type model inferenced {cls_res} which is not in schema dict, exited.')exit()properties_str = ', '.join(schema[cls_res])schema_str_list = f'"{cls_res}"({properties_str})'sentence_with_ie_prompt = IE_PATTERN.format(sentence, schema_str_list)full_input_text = build_prompt(sentence_with_ie_prompt, custom_settings["ie_pre_history"])inputs = tokenizer(full_input_text, return_tensors="pt")inputs = inputs.to('cpu')output_sequences = model.generate(inputs["input_ids"], max_length=2000, attention_mask=inputs.attention_mask)generated_reply = tokenizer.decode(output_sequences[0], skip_special_tokens=True)print(generated_reply[len(full_input_text):])

3.6 测试模型

最后,我们使用一些测试数据来验证模型的效果。

sentences = ['“2024 年潮流双肩包,品牌 PQR,材质耐磨,内部空间大。定价399元,优惠后价格349元。周销量800个。”','2024 年智能手表,品牌为华为,功能强大,续航持久。售价1299元,便宜价999元,目前有黑色和银色可选。月销量3000只。'
]
custom_settings = init_prompts()
inference(sentences, custom_settings)

4. 结果展示

运行上述代码后,模型将输出从测试数据中抽取的信息。例如,对于第一句测试数据,模型可能会输出类似以下的结果:

在这里插入图片描述

5. 总结

本文介绍了一个基于 Hugging Face Transformers 和 PyTorch 的信息抽取实现。通过使用预训练的语言模型和提示模板,我们能够从文本中抽取特定的结构化信息。这种方法的优点是不需要大量的标注数据,并且能够处理复杂的文本结构。然而,它也有一些局限性,例如对模型的依赖较大,且生成的结果可能需要进一步验证和修正。

未来,我们可以探索更多优化方法,例如微调模型以提高其在特定任务上的性能,或者结合其他技术(如规则匹配)来提高抽取的准确性。此外,我们还可以尝试将这种方法应用于其他类型的信息抽取任务,以验证其通用性。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Firecrawl MCP Server 深度使用指南

无论是市场分析师洞察行业动态、研究者收集学术资料,还是开发者为智能应用采集数据,都对网络数据采集工具提出了极高的要求。Firecrawl MCP Server 应运而生,它宛如一把犀利的 “数字手术刀”,能够精准地剖析网页,为用…

OceanBase数据库全面指南(基础入门篇)

文章目录 一、OceanBase 简介与安装配置指南1.1 OceanBase 核心特点1.2 架构解析1.3 安装部署实战1.3.1 硬件要求1.3.2 安装步骤详解1.3.3 配置验证二、OceanBase 基础 SQL 语法入门2.1 数据查询(SELECT)2.1.1 基础查询语法2.1.2 实际案例演示2.2 数据操作(INSERT/UPDATE/DE…

几种环境下的Postgres数据库安装

1. Postgres 数据库介绍 PostgreSQL(又称 Postgres)是一种强大、开源的关系型数据库管理系统(RDBMS),它具备高度的可靠性、稳定性和可扩展性,主要特点如下: 开源:PostgreSQL 是基于开…

函数[x]和{x}在数论中的应用

函数[x]和{x}在数论中的应用 函数[x]和{x}的定义与基本性质(定义1,命题1)定义1例1命题1 函数[x]和{x}的应用(定理1,推论1-推论3)例2定理1注解5推论1例3例4推论2推论3命题2 函数[x]和{x}的定义与基本性质&am…

Python爬虫(32)Python爬虫高阶:动态页面处理与Scrapy+Selenium+BeautifulSoup分布式架构深度解析实战

目录 引言一、动态页面爬取的技术背景1.1 动态页面的核心特征1.2 传统爬虫的局限性 二、技术选型与架构设计2.1 核心组件分析2.2 架构设计思路1. 分层处理2. 数据流 三、代码实现与关键技术3.1 Selenium与Scrapy的中间件集成3.2 BeautifulSoup与Scrapy Item的整合3.3 分布式爬取…

FreeSWITCH rtcp-mux 测试

rtcp 跟 rtp 占用同一个端口,这就是 rtcp 复用 Fs 呼出是这样的: originate [rtcp_muxtrue][rtcp_audio_interval_msec5000]user/1001 &echo 需要同时指定 rtcp_audio_interval_msec,否则 rtcp_mux 不能生效 Fs 呼入不需要配置&#xf…

day019-特殊符号、正则表达式与三剑客

文章目录 1. 磁盘空间不足-排查流程2. 李导推荐书籍2.1 大话存储2.2 性能之巅 3. 特殊符号3.1 引号系列(面试题)3.2 重定向符号3.2.1 cat与重定向3.2.2 tr命令:替换字符3.2.3 xargs:参数转换3.2.4 标准全量追加重定向 4. 正则表达…

Vue3 watch 使用与注意事项

watch 的第一个参数可以是不同形式的“数据源”&#xff1a;它可以是一个 ref (包括计算属性)、一个响应式对象、一个 getter 函数、或多个数据源组成的数组&#xff1a; 1&#xff1a;reactive监听对象 <template><div><h1>情况二&#xff1a;watchEffect…

医学写作供应商管理全流程优化

1. 供应商筛选与评估 1.1 资质审核 1.1.1 行业认证核查 核查供应商的行业认证,如AMWA医学写作认证、EMWA会员资格、ISO 9001等,确保其专业资质。 1.1.2 团队背景评估 评估团队成员专业背景,包括医学/药学学位、临床试验经验、发表记录,保障专业能力。 1.1.3 国际规范熟悉…

固态硬盘颗粒类型、选型与应用场景深度解析

一、固态硬盘颗粒类型的技术演进与特性 固态硬盘&#xff08;SSD&#xff09;的性能核心在于存储单元结构的设计&#xff0c;这种设计直接决定了数据的存储密度、读写速度、耐久度及成本效益。当前主流的闪存颗粒类型呈现从单层到多层架构的梯度演进&#xff0c;其技术特征与应…

CAPL自动化-诊断Demo工程

文章目录 前言一、诊断控制面板二、诊断定义三、发送诊断通过类.方法的方式req.SetParameterdiagSetParameter四、SendRequestAndWaitForResponse前言 本文将介绍CANoe的诊断自动化测试,工程可以从CANoe的 Sample Configruration 界面打开,也可以参考下面的路径中打开(以实…

嵌入式预处理链接脚本lds和map文件

在嵌入式开发中&#xff0c;.lds.S 文件是一个 预处理后的链接脚本&#xff08;Linker Script&#xff09;&#xff0c;它结合了 C 预处理器&#xff08;Preprocessor&#xff09; 的功能和链接脚本的语法。它的核心作用仍然是 定义内存布局和链接规则&#xff0c;但通过预处理…

PT5F2307触摸A/D型8-Bit MCU

1. 产品概述 ● PT5F2307是一款51内核的触控A/D型8位MCU&#xff0c;内置16K*8bit FLASH、内部256*8bit SRAM、外部512*8bit SRAM、触控检测、12位高精度ADC、RTC、PWM等功能&#xff0c;抗干扰能力强&#xff0c;适用于滑条遥控器、智能门锁、消费类电子产品等电子应用领域。 …

RabbitMQ——消息确认

一、消息确认机制 生产者发送的消息&#xff0c;可能有以下两种情况&#xff1a; 1> 消息消费成功 2> 消息消费失败 为了保证消息可靠的到达消费者&#xff08;&#xff01;&#xff01;&#xff01;注意&#xff1a;消息确认机制和前面的工作模式中的publisher confi…

C++异步(1)

什么是异步? 异步就是多个线程是同时执行的&#xff0c;与之相对的就是线程同步&#xff0c;二者都应用在并发的场景上。 异步的特点 异步执行的任务无需等待其他任务完成&#xff0c;其本身是通过非阻塞的方式执行的&#xff0c;不依赖前驱任务&#xff0c;通常用于IO密集…

向量数据库Milvus03-高级功能与性能调优

Milvus高级功能与性能调优 目录 高级特性详解性能调优技巧生产环境部署最佳实践总结与展望 1. 高级特性详解 1.1 多索引兼容 Milvus 支持多种索引类型&#xff08;如 HNSW、IVF_PQ、IVF_FLAT&#xff09;的混合使用&#xff0c;以适应不同场景的需求。 HNSW&#xff08;Hier…

5月24日day35打卡

模型可视化与推理 知识点回顾&#xff1a; 三种不同的模型可视化方法&#xff1a;推荐torchinfo打印summary权重分布可视化进度条功能&#xff1a;手动和自动写法&#xff0c;让打印结果更加美观推理的写法&#xff1a;评估模式 作业&#xff1a;调整模型定义时的超参数&#x…

野火鲁班猫(arrch64架构debian)从零实现用MobileFaceNet算法进行实时人脸识别(三)用yolov5-face算法实现人脸检测

环境直接使用第一篇中安装好的环境即可 先clone yolov5-face项目 git clone https://github.com/deepcam-cn/yolov5-face.git 并下载预训练权重文件yolov5n-face.pt 网盘链接: https://pan.baidu.com/s/1xsYns6cyB84aPDgXB7sNDQ 提取码: lw9j &#xff08;野火官方提供&am…

R语言科研编程-柱状图

R语言简介 R语言是一种开源的统计计算和图形绘制编程语言&#xff0c;广泛应用于数据分析、机器学习、数据可视化等领域。它由Ross Ihaka和Robert Gentleman于1993年开发&#xff0c;具有丰富的统计函数库和图形功能&#xff0c;尤其适合数据科学研究和可视化任务。 使用R语言…

Android-Handler学习总结

​​面试官​&#xff1a;你好&#xff01;我看你简历里提到熟悉 Android 的 Handler 机制&#xff0c;能简单说一下它的作用吗&#xff1f; ​候选人​&#xff1a; Handler 是 Android 中用来做线程间通信的工具。比如Android 应用的 UI 线程&#xff08;也叫主线程…