当前位置: 首页 > news >正文

大语言模型信息抽取系统解析

这段代码实现了一个基于大语言模型的信息抽取系统,能够从金融和新闻类文本中提取结构化信息。下面我将详细解析整个代码的结构和功能。

1. 代码整体结构

代码主要分为以下几个部分:

  1. 模式定义:定义不同领域(金融、新闻)需要抽取的实体类型

  2. 示例数据:提供每个领域的示例文本和标准答案

  3. 初始化函数:构建模型对话的上下文提示

  4. 推理函数:实际执行信息抽取

  5. 后处理函数:清洗模型输出

  6. 主程序:执行整个流程

2. 核心组件详解

2.1 模式定义 (schema)

schema = {"金融": ["日期", "股票名称", "开盘价", "收盘价", "成交量"],"新闻": ["日期", "新闻标题", "新闻内容"],
}
  • 定义了两种文本类型(金融、新闻)及其需要抽取的实体字段

  • 金融类关注股票市场数据,新闻类关注事件信息

2.2 提示模板 (IE_PATTERN)

IE_PATTERN = "{}\n\n提取上述句子中{}的实体,并按照JSON格式输出..."
  • 定义了信息抽取的提示词模板

  • 包含占位符{},运行时会被实际句子和实体类型替换

2.3 示例数据 (ie_examples)

ie_examples = {"金融": [{"content": "...", "answers": {...}}],"新闻": [{"content": "...", "answers": {...}}]
}
  • 为每个领域提供one-shot示例

  • 包含原始文本(content)和标准抽取结果(answers)

2.4 初始化函数 (init_prompts)

def init_prompts():ie_pre_history = [{"role": "system", "content": "你是一个信息抽取助手。"}]# 构建示例对话历史return {"ie_pre_history": ie_pre_history}
  1. 设置系统角色为"信息抽取助手"

  2. 遍历所有示例,构建模型学习用的对话历史

  3. 返回包含完整对话历史的字典

2.5 推理函数 (inference)

def inference(custom_settings: dict, sentences: List[Dict[str, str]]):for item in sentences:# 构造提示词messages = [*custom_settings["ie_pre_history"], {"role": "user", "content": ...}]# 调用模型response = ollama.chat(model="qwen2.5:7b", messages=messages)# 后处理ie_res = clean_response(response["message"]["content"])
  1. 接收待处理句子和初始化设置

  2. 为每个句子构造完整的提示词

  3. 调用本地Qwen模型进行推理

  4. 对输出进行清洗和格式化

2.6 后处理函数 (clean_response)

def clean_response(response: str):if "```json" in response:res = re.findall(r"```json(.*?)```", response, re.DOTALL)return json.loads(response)
  • 处理模型返回的可能包含Markdown代码块的响应

  • 提取纯JSON部分并转换为Python字典

3. 工作流程示例

假设输入句子为金融类文本:

"2023-02-15,股票佰笃[BD]美股开盘价10美元..."

处理过程:

  1. 根据"金融"类型确定需要抽取的字段(日期、股票名称等)

  2. 构造提示词:

    2023-02-15,股票佰笃[BD]美股开盘价10美元...提取上述句子中"金融"(日期, 股票名称, 开盘价...)的实体...
  3. 模型返回JSON格式的抽取结果

  4. 后处理后得到结构化数据:

    {"日期": ["2023-02-15"],"股票名称": ["佰笃[BD]美股"],"开盘价": ["10美元"],...
    }

4. 技术亮点

  1. 上下文学习(In-context Learning):通过示例让模型学习抽取模式

  2. 结构化提示工程:精心设计的提示模板提高抽取准确性

  3. 多领域支持:可扩展的schema设计支持不同领域

  4. 鲁棒的后处理:处理模型输出的各种格式情况

5. 扩展性建议

  1. 可以增加自动文本分类功能,而非手动指定"cls"

  2. 添加更多领域和实体类型

  3. 实现批量处理优化性能

  4. 增加错误处理和日志记录

这个系统展示了如何有效利用大语言模型进行专业领域的信息抽取,核心思想是通过精心设计的提示和示例引导模型完成特定任务。

http://www.lryc.cn/news/606186.html

相关文章:

  • Tomcat,WebLogic等中间件漏洞实战解析
  • C++异常处理的成本:理解与优化
  • MySQL转PostgreSQL迁移实战:从语法错误到完美兼容
  • AI学习笔记三十三:基于Opencv的单目标跟踪
  • vue3 v-html绑定数据,点击sub实现popover效果
  • STM32 USB 设备中间件 tinyusb
  • 超宽带测距+测角+无线通信一体化模组:智能门锁、智能遥控器、AR头戴、智能穿戴
  • 融媒体中心网络安全应急预案(通用技术框架)
  • Vmvare虚拟机的网络不可达问题
  • Spring Boot 异常处理:从全局捕获到优化用户体验!
  • 爱心烟花浪漫立方体轮播图 - 用代码表达爱意
  • 为Github Copilot创建自定义指令/说明/注意事项
  • 决策树实现回归任务
  • 基于Spring Boot实现中医医学处方管理实践
  • 【Agent,智能,workflow】
  • 【RH134 问答题】第 13 章 运行容器
  • uvicorn 启动重复加载 多次加载
  • [12月考试] B
  • Python 数据科学与可视化工具箱 (一) - 数组属性:`shape`, `dtype`, `ndim`, `size`
  • day28_2025-07-31
  • Valgrind终极指南:深入内存安全与性能瓶颈检测
  • 进程控制:从创建到终结的完整指南
  • 解决音视频开发中 因mp4中断 无法播放的问题
  • [特殊字符] 数据可视化结合 three.js:让 3D 呈现更精准,3 个优化经验谈
  • 前端框架Vue3(三)——路由和pinia
  • RabbitMQ安装与介绍
  • Disruptor高性能基石:Sequence并发优化解析
  • 去重、top_n()、pull()、格式化
  • 数据结构第4问:什么是栈?
  • BR/EDR PHY帧结构及其具体内容