一种使得大模型输出结构化数据的简易方法

这篇具有很好参考价值的文章主要介绍了一种使得大模型输出结构化数据的简易方法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

最近在用大模型跑一些数据,于是就不可避免的遇到了如何让大模型输出的格式便于处理这个问题。经过一些研究发现了一套比较有用的方法,在这里总结一下。

背景

任务是这样的,我需要用大模型(比如ChatGPT,ChatGLM等等)对文本进行名词提取。输入一段文本,我需要大模型理解这段文本,然后输出这段文本中的所有代表事件的动词。

理论上讲这是一件很简单的事情,大模型也能比较精准的识别出其中的动词。但是问题就在于大模型的输出上。我该如何将大模型的非格式化的输出转化为格式化的结构化数据呢?

研究过程

某些机缘巧合读到了下面的文献[1]。文献中提出一种叫做PICa的方法:

We present PICa, a simple yet effective method to use GPT-3 for knowledge-based VQA, demonstrating the first use of GPT-3 for multimodal tasks.

虽然是用于VQA领域的问题,但是也不妨细看一下。

进一步研究PICa发现,对于一次VQA预测,它使用如下两种策略:

  • In-context example selection(上下文示例选择)
  • Multi-query ensemble(多查询集成)

其中,上下文示例选择就是在问题之外给模型提供n个样例,这样模型的输出就和样例一致。多查询集成本质上就是多问几次,然后根据问的结果通过某种指标进行排序,得到排序最靠前的一个作为答案。

不难发现,上下文示例选择这个方法对于我的任务很有帮助。

方法

经过上述研究,发现可以尝试使用上下文示例选择的方法使得模型输出固定格式的数据,然后使用Python的正则表达式库进行匹配。

鉴于常用的数据存储格式为json,我们让模型输出的格式也是json。这样一方面便于处理,另一方面,模型的语料库里面json的出现频率肯定比自定义的奇奇怪怪的格式会高,模型对json的格式的理解肯定也更好。

最后实现的效果:

import json
import re
from load_model import chatglm

model = chatglm()

background = """
我希望你能够以一名语言学家的身份帮我完成如下的任务。
首先我会给你一段文本,然后你需要尽可能多的提取出这段文本中发生过的动作事件,比如建立,标记,攻击,渗透,销毁等。
最好一段文本至少能够生成4个以上的词语,词语的长度不能大于6个字。
你的输出需要严格按照python列表的格式输出,我接下来会给你几个例子。
你需要结合下列例子理解我的上述要求,并且按照要求完成任务。
"""

example1 = """
样例1:
================
输入:CNC组织最早于2019年被发现,其命名来源于所使用的远控木马的PDB路径信息中包含的cnc_client,且该组织主要针对教育行业进行攻击。
输出:['发现','攻击','包含']
================
"""

example2 = """
样例2:
================
输入:攻击者以木尔坦的罗德兰区基于情报的反恐行动(intelligence-based operation,IBO)报告为诱饵,尝试投递一种变种木马程序MessPrint以控制受害者设备。
输出:['使用诱饵','投递','控制']
================
"""

question = """
问题1:
================
输入:{}
输出:
================
"""

prompt_base=background + example1 + example2

pattern = r"\[.*?\]"  # 匹配以 "[" 开始,以 "]" 结束的子串
cnt = -1
result = []
for i in tqdm.tqdm(res):
    prompt = prompt_base + question.format(i)
    response = model.response(prompt)[0]
    matches = re.findall(pattern, response)
    for match in matches:
        try:
            lst = eval(match)  # 使用eval将字符串转化为列表,安全性请自行考虑
            result+=lst
        except:
            pass

        print(f"========>>>>>>>\nA:{response}")
    if cnt != -1:
        if cnt > 1:
            break
        cnt += 1

最后输出的效果(部分):

一种使得大模型输出结构化数据的简易方法,语言模型,gpt-3,chatgpt,人工智能

reference
[1] Zhengyuan Yang, Zhe Gan, Jianfeng Wang, Xiaowei Hu, Yumao Lu, Zicheng Liu, and Lijuan Wang. An empirical study of gpt-3 for few-shot knowledge-based vqa. In AAAI, pages 3081–3089, 2022.文章来源地址https://www.toymoban.com/news/detail-561302.html

到了这里,关于一种使得大模型输出结构化数据的简易方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【跟小嘉学 Rust 编程】五、使用结构体关联结构化数据

    【跟小嘉学 Rust 编程】一、Rust 编程基础 【跟小嘉学 Rust 编程】二、Rust 包管理工具使用 【跟小嘉学 Rust 编程】三、Rust 的基本程序概念 【跟小嘉学 Rust 编程】四、理解 Rust 的所有权概念 【跟小嘉学 Rust 编程】五、使用结构体关联结构化数据 本章节讲解一种自定义数据类型

    2024年02月10日
    浏览(48)
  • python序列化和结构化数据详解

    序列化和结构化数据是计算机程序中非常重要的概念,它们的原理和应用在许多应用程序中都是必不可少的。Python作为一种高级编程语言,在序列化和结构化数据方面提供了很多优秀的解决方案。在本文中,我们将详细介绍Python中序列化和结构化数据的相关概念和应用。 1.

    2024年02月08日
    浏览(60)
  • StarRocks 生成列:百倍提速半结构化数据分析

    半结构化分析主要是指对 MAP,STRUCT,JSON,ARRAY 等复杂数据类型的查询分析。这些数据类型表达能力强,因此被广泛应用到 OLAP 分析的各种场景中,但由于其实现的复杂性,对这些复杂类型分析将会比一般简单类型要更困难和耗时,例如: 需要对 MAP,STRUCT,JSON 等数据类型中

    2024年01月22日
    浏览(59)
  • 13.JavaWeb & XML:构建结构化数据的重要工具

    目录 导语: 一、XML概念 (1)可拓展 (2)功能-存储数据 (3)xml与html的区别 二、XML内容 三、XML用途 四、案例:使用XML构建在线书店的书籍数据库 结语:     在当今的信息时代,数据结构化和管理成为了一个重要课题。XML(eXtensible Markup Language,可扩展标记语言)作为一

    2024年04月09日
    浏览(48)
  • 结构化数据处理与分析:Spark SQL 教程

    作者:禅与计算机程序设计艺术 Apache Spark 是由 Apache 基金会开发的开源分布式计算框架,最初用于对大规模数据进行快速的处理,在大数据计算领域占据重要地位。其独特的高性能处理能力及丰富的数据处理功能使得 Spark 在各个行业应用广泛。Spark SQL 是 Spark 提供的用于结构

    2024年02月06日
    浏览(45)
  • 用ChatGPT解读非结构化数据【ChatGPT + SQL】

    许多现代数据系统都依赖于结构化数据,例如 Postgres DB 或 Snowflake 数据仓库。 LlamaIndex 提供了许多由 LLM 提供支持的高级功能,既可以从非结构化数据创建结构化数据,也可以通过增强的文本到 SQL 功能分析这些结构化数据。 本指南有助于逐步了解这些功能中的每一项。 具体

    2023年04月21日
    浏览(34)
  • Verilog的三种描述方式(结构化描述、数据流描述、行为级描述对电路功能的描述有三种方式:结构化描述、数据流描述、行为级描述

    Verilog的三种描述方式(结构化描述、数据流描述、行为级描述对电路功能的描述有三种方式:结构化描述、数据流描述、行为级描述。三种描述方式抽象级别不同,各有优缺点,相辅相成,需要配合使用。 目录 一、结构化描述 1、概念 2、特点 3、示例 真值表: 电路抽象:

    2024年02月04日
    浏览(64)
  • 通过Siri打造智能爬虫助手:捕获与解析结构化数据

    在信息时代,我们经常需要从互联网上获取大量的结构化数据。然而,传统的网络爬虫往往需要编写复杂代码和规则来实现数据采集和解析。如今,在苹果公司提供的语音助手Siri中有一个强大功能可以帮助我们轻松完成这项任务——通过使用自定义指令、意图扩展以及快捷方

    2024年02月09日
    浏览(50)
  • ModaHub魔搭社区:非结构化数据范式转变和示例

    目录 范式转变——非结构化数据 非结构化数据示例 既然我们对结构化数据和半结构化数据有了清晰的理解,现在让我们开始谈谈非结构化数据。与结构化数据和半结构化数据不同,非结构化数据可以采取任何形式,可以有任意大小或尺寸,并需要大量的运行时间来转换和索

    2024年02月13日
    浏览(37)
  • 自然语言处理 Paddle NLP - 结构化数据问答-理论

    基础 自然语言处理(NLP) 自然语言处理PaddleNLP-词向量应用展示 自然语言处理(NLP)-前预训练时代的自监督学习 自然语言处理PaddleNLP-预训练语言模型及应用 自然语言处理PaddleNLP-文本语义相似度计算(ERNIE-Gram) 自然语言处理PaddleNLP-词法分析技术及其应用 自然语言处理Pa

    2024年02月11日
    浏览(60)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包