突破大模型极限!GLM-4-long百万长文本模型上线bigmodel.cn

news2024/9/20 0:57:36

最近业务上多了长文本的需求,因为要在prompt里面塞进比较多的rag内容,以供决策,且这些召回的内容,都有可能用到。这非常考验大模型的长文本能力,技术选型上都要着重考察这部分。

正巧,上次清影试用后,约了跟智谱的哥们吃饭聊天,吐槽说:“超长文本,有可能还要微调,这可咋办啊?”

“你还别说,我还真搞过。”

说完,甩给我一个链接。

“链接对应的地址是bigmodel模型中心的GLM-4-long。支持支持高达1M (约150-200万字) 的上下文长度,大约相当于2本红楼梦或者125篇论文。”

然后跟我说,你先试试,我再跟你讲讲其中的几个技术关键点,说不定能用到你的场景呢。

“你先别吹牛,我用我的究极大模型长文测试方法看看”。

我准备的这个测试要比大海捞针更难。

大海捞针,比较出名了,也是一个被大家已经刷爆了的指标。就是在长文本里按设定的策略,分散插入一些语言片段来推理,考察大模型的能力。

但大海捞针有两个问题:

一、很多测试题目只需要聚焦在一句话上就能得到答案,不需要考虑全部的插入文本。

二、很多题目在训练阶段都见过了,不管你说多长的文本,什么内容,其实也都能答出来。

这也是为啥现在的大海捞针测试,长文本大模型基本都是满分了,这个测试已经没有区分度了。

图片

大家看到也都是上面这张全绿的图,其实我们只要稍微改下。

一、推理需要考虑到每个地方插入的地方,不能遗漏任何一个。

二、是大模型没有学过的信息。

那这个中国队拿了几枚金牌的测试太合适了。

我用红楼梦的原文,把中国队伦敦奥运会拿金牌的信息分散插入,让模型把这些信息找出来,并整理给我。

这就算是个进阶版本的大海捞针测试了。

我试了下市面上的大模型,别说答对了,到1M上下文的都屈指可数。

测试脚本如下:

def read_txt(file_path):
    with open(file_path, 'r', encoding='utf-8') as file:
        content = file.read()
    return content

def write_txt(file_path, content):
    with open(file_path, 'w', encoding='utf-8') as file:
        file.write(content)

def generate_insert_positions(content_length, num_inserts):
    """
    生成插入位置,使得句子均匀分布在文本中。
    """
    step = content_length // (num_inserts + 1)
    positions = [(i + 1) * step for i in range(num_inserts)]
    return positions

def main(file_path, gold_list, silver_list, bronze_list):
    # Read the content of the original file
    original_content = read_txt(file_path)[:1024*(1024-2)]
    
    # Generate the sentence list
    sentences = []
    max_length = max(len(gold_list), len(silver_list), len(bronze_list))
    
    for i in range(max_length):
        if i < len(gold_list):
            sentences.append(f"中国队获得了 金牌 {gold_list[i]} 枚。")
        if i < len(silver_list):
            sentences.append(f"中国队获得了 银牌 {silver_list[i]} 枚。")
        if i < len(bronze_list):
            sentences.append(f"中国队获得了 铜牌 {bronze_list[i]} 枚。")
    
    # Calculate the insert positions
    num_inserts = len(sentences)
    positions = generate_insert_positions(len(original_content), num_inserts)
    
    # Insert sentences into the original content at calculated positions
    updated_content_parts = []
    last_position = 0
    
    for i, pos in enumerate(positions):
        updated_content_parts.append(original_content[last_position:pos])
        updated_content_parts.append("\n" + sentences[i] + "\n")
        last_position = pos
    
    updated_content_parts.append(original_content[last_position:])
    updated_content = "".join(updated_content_parts)
    
    # Write the combined content back to the file
    return updated_content

if __name__ == "__main__":
    file_path = "The_Story_of_the_Stone.txt"  # 文件路径
    gold_list =   [3, 2, 1]        # 金牌数
    silver_list = [2, 8, 9]         # 银牌数
    bronze_list = [7, 10, 13]         # 铜牌数
    prompt = "请你根据如下文本,整理中国队获得的金银铜牌数。格式: {\"金牌数\":[x,x,x,...],\"银牌数\":[x,x,x,...],\"铜牌数\":[x,x,x,...]}[x,x,x,...]中对应的奖牌数,仅以JSON格式输出结果,不需要输出任何解释。下面是文本:\n"
    
    counting = main(file_path, gold_list, silver_list, bronze_list)
    print(len(counting))

    from zhipuai import ZhipuAI

    client = ZhipuAI(api_key="XXX") # 请填写您自己的APIKey
    response = client.chat.completions.create(
        model="glm-4-long",  # 填写需要调用的模型名称
        messages=[
            {
                "role": "user",
                "content": prompt + counting
            }
        ],
    )
      print(response.choices[0].message.content)

红楼梦整本长度为887276个字符,88万汉字,对应的token其实还不够1M,不得不说,GLM-4-long的1M有点恐怖了,吃两本半红楼梦的书,可谓是「一目十K行」了。

那我们用这个脚本就测一下这个GLM4-long,输出结果为:

{"金牌数":[3,2,1],"银牌数":[2,8,9],"铜牌数":[7,10,13]}

完全答对了。

感兴趣的同学可以试试,并且可以拓展下测试的插入颗粒度,长度和对应的效果,画一个对应类似大海捞针的二维可视化效果图。

另外,我准备了一稍微复杂的长文本推理场景,具体任务是输入苹果公司的Q3的财报进行问答。具体的方法为把苹果公司财报pdf使用mathpix转为大模型处理的文本格式,然后设计QA对进行问答。

图片

以这页的信息为例,使用的prompt和得到的答案分别为:

prompt:你是一个专业的财报分析助手,请根据以下财报内容 {finance_content} ,回答问题{question}。请直接说出答案,不需要解释。

问题一:苹果公司2024年Q3的研发成本有多少?

content:xxx
question:苹果公司2024年Q3的研发成本有多少?
answer:80亿美元。

问题二:苹果公司2024年Q3的销售额比2023年Q3的销售额增长多少美元?

content:xxx
question:苹果公司2024年Q3的销售额比2023年Q3的销售额增长多少?
answer:39.8亿美元。

问题三:苹果公司2024年Q3的销售额比2023年Q3的销售额增长多少美元?

content:xxx
question:苹果公司2024年Q3的销售额比2023年Q3的毛利增长百分之多少?
answer:8.97%。

我也就好奇了,效果不错的长文本模型,到底是咋弄出来的呢?

哥们跟我说了四个字,「拾级而上」。

“你在这谜语人呢。”

“我们都知道,rope中的base参数能调整大模型上下文感知的分辨率,很多技术报告里都提到了这个。但具体怎么训练好调整后分辨率的模型,闭口不谈。”

其实只要让大模型一步一步适应不同的上下文长度就可以了,比如先训4096,再训8k,逐步扩展到128k,1M。

图片

当然这个过程里面还有一些细节的技巧,比如长文本要是packing的话,太浪费资源了,怎么提高训练的吞吐量。特别长的指令数据怎么弄。

“怎么弄?”

“第一个,就是你之前bert时候打比赛中常用的,batch sort方法,让一个batch中的样本尽量对齐,这样需要packing的空间就很少了,提高资源利用率。

第二个,用一个小模型,针对不同的片断,做一些指令合成数据合成。然后用来训大模型。

另外,还需要很强的infra大佬做基建的保障,不过你们微调的话,可能这方面也还好。

对了,我刚刚给你说的那些,之前开源的技术报告里都有。你回去对着使劲儿琢磨琢磨吧,就算是垂直模型自己训练的话,问题应该问题不大

我们有个9b版本的权重开源了。”

https://huggingface.co/THUDM/glm-4-9b-chat-1m

智谱果然是国产大模型开源事业的排头兵,如果把国产化大模型看成一个整体的话,开源确实会继续整个群体的智力水平和互相交流不断进步,把整个行业的蛋糕越做越大,最终使整个群体收益。

降低入行的门槛,吸引更多潜在的人才加入这个游戏。

从而提高整个社会的运转效率。这个过程往往没有制造内卷,反而制造了大量全新的工作岗位。

不说了,赶紧去试试哥们传授的大模型长文本实践。

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

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

相关文章

游戏开放式新手引导框架设计

强制性引导&#xff1a;只能点某个按钮 优&#xff1a;程序简单 缺&#xff1a; 玩家体验差 开放式引导&#xff1a;不强制点 优&#xff1a;玩家体验好 缺&#xff1a; 程序复杂 需求分析&#xff1a; 1.开放式引导&#xff0c;引导是到达某个条件后进行一系列行为&#xff08…

水星Mercury X1轮式人形机器人结合openc算法&STag标记码视觉系统实现精确抓取!

本案例展示了如何利用视觉系统提升机械臂的抓取精度&#xff0c;成功实现了人形机器人的双臂抓取不在局限于单臂抓取。 引言 如今市面上已经有了许多不同类型的人形机器人&#xff0c;涵盖了服务行业和医疗行业等各个领域。这些机器人以其智能化和自动化的特性逐渐融入我们的日…

比例PQ阀信号放大器的选择

比例PQ阀信号放大器的选择时&#xff0c;需要考虑一系列的因素以确保放大器能精确匹配比例阀的需求&#xff0c;保障液压系统的高效和稳定运行。根据所控制的比例阀类型&#xff0c;选择与之兼容的放大器型号。如各厂商不带反馈比例方向阀、比例溢流阀、比例减压阀等均可用BEUE…

RabbitMQ 集群部署方案

RabbitMQ 一、安装 RabbitMQ二、更改配置文件三、配置集群四、测试 环境准备&#xff1a;三台服务器&#xff0c;系统是 CentOS7IP地址分别是&#xff1a; rabbitmq1&#xff1a;192.168.152.71rabbitmq2&#xff1a;192.168.152.72rabbitmq3&#xff1a;192.168.152.73 一、…

【一键操作】【包运行及安装教程】2024数学建模国赛(高教社杯)Latex论文模板

数学建模国赛创办于1992年&#xff0c;每年一届&#xff0c;是首批列入“高校学科竞赛排行榜”的19项竞赛之一。 作为一个重量级的赛事&#xff0c;一次参赛将众生受益&#xff0c;所以相信很多同学都在为了国奖而努力&#xff0c;所以针对大家的参赛论文&#xff0c;我们之前分…

LVS集群的NAT模式和DR模式

LVS简介 LVS&#xff08;Linux Virtual Server&#xff09;是一个用于负载均衡的开源软件项目&#xff0c;旨在通过集群技术实现高性能、高可用的服务器系统。它运行在Linux操作系统上&#xff0c;并且可以利用内核级的资源来提高性能和稳定性。 LVS 体系结构 LVS架构 主要…

Redis远程字典服务器(7)—— set类型详解

目录 一&#xff0c;基本情况 二&#xff0c;常用命令 2.1 sadd 2.2 smembers&#xff0c;sismember 2.3 spop&#xff0c;srandmember 2.3 smove&#xff0c;srem 2.4 sinter&#xff0c;sinterstore求交集 2.5 sunion&#xff0c;sunionstore求并集 2.6 sdiff&#…

Mysql视图整理

理论 初级语法及操作 操作基于navicat视图化&#xff0c;其他管理工具基本类似 参考即可 这里附上官网免费版下载链接&#xff1a;Navicat Premium Lite | 简单的数据库管理和开发工具 首先&#xff1a;选择选中数据库--》最上面的视图--》新建视图--》 我们可以看到这里&a…

three.js 几何体、材质和网格模型

场景Scene、相机Camera、渲染器Renderer初始化完成之后&#xff0c;可以向场景中添加一个简单的模型进行展示。在此之前需要了解三个概念&#xff1a;几何体、材质、网格模型。 几何体&#xff1a;表示物体的几何形状。材质&#xff1a;表示物体的外观效果。网格模型&#xff…

springboot的学习(一):springboot的基础

简介 springboot的基础的知识点的学习总结 springboot 设计目的是为了简化spring应用的初始搭建和开发过程。 简单例子 new project&#xff0c;一般用这个阿里的地址&#xff1a;https://start.aliyun.com/ 点击next&#xff0c;选择jdk版本 点击next&#xff0c;选择模…

88.SAPUI5 Model Binding的问题-在view更改数据,model却不变

目录 1.背景 2.sap.ui.model.BindingMode sap.ui.model.BindingMode.OneWay sap.ui.model.BindingMode.TwoWay 3.oModel.setDefaultBindingMode 方法说明 execOneWay方法 execTwoWay方法 1.背景 在做一个UI5项目&#xff0c;后台读取sap.ui.model.Model后&#xff0c;把…

Vuex 深度解析 | 面试常问问题案例

Vuex 深度解析 | 面试常问问题案例 Vuex 是 Vue.js 应用程序的状态管理模式和库。它为 Vue.js 应用程序提供了一个集中存储所有组件的共享状态&#xff0c;并以相应的规则保证状态以一种可预测的方式发生变化。接下来&#xff0c;我们将深入探讨 Vuex 的核心概念、使用方式、AP…

项目管理高效秘诀:优选软件大公开

国内外主流的 10 款项目管理系统对比&#xff1a;PingCode、Worktile、Asana、Trello、ClickUp、Zoho Projects、Hive、Teambition、飞书、Tapd。 在寻找完美的项目管理工具时&#xff0c;许多团队都面临一个共同的问题&#xff1a;除了已知的Worktile之外&#xff0c;还有哪些…

“从创建到管理,Linux进程编程是你掌握系统资源的金钥匙!“#Linux系统编程之进程【下】

"从创建到管理&#xff0c;Linux进程编程是你掌握系统资源的金钥匙&#xff01;"#Linux系统编程之进程【下】 前言预备知识一、 父进程等待子进程退出&#xff08;一&#xff09;1.1 为啥要等待子进程退出1.2 父进程等待子进程退出并收集退出状态1.3 编程验证僵尸进程…

【47 Pandas+Pyecharts | 杭州二手房数据分析可视化】

文章目录 &#x1f3f3;️‍&#x1f308; 1. 导入模块&#x1f3f3;️‍&#x1f308; 2. Pandas数据处理2.1 读取数据2.2 过滤数据2.3 行政区处理2.4 地址处理2.5 房屋信息处理2.6 面积处理2.7 楼层处理2.8 年份处理2.9 房价处理2.10 删除不用的列2.11 数据类型转换2.12 查看…

【数学建模】Matlab 编程

MATLAB是美国MathWorks公司自20世纪80年代中期推出的数学软件&#xff0c;具有优秀的数值计算能力和卓越的数据可视化。由于Maltab编程方便&#xff0c;有大量内部函数和工具箱可以使用&#xff0c;作图也 十分方便&#xff0c;因此在数学实验和数学建模竞赛中&#xff0c;我们…

揭秘紧固件分销网络:如何成为结构安全和社会进步的关键支点?

全球产品分销的历史源远流长&#xff0c;早在国际贸易初期就已形成。在紧固件行业中&#xff0c;随着各行业对紧固件需求的不断增长&#xff0c;市场呈现出积极的发展趋势。紧固件在结构、机械、设备及其他众多组件中扮演着至关重要的角色&#xff0c;确保了整个系统的高效运行…

电子家谱族谱在线制作小程序开发

电子家谱族谱在线制作小程序开发 电子家谱在线制作小程序通常会提供一系列的功能来帮助用户创建和维护家谱。这里是一个基于市场上常见的家谱制作小程序的功能列表示例&#xff1a; 基本信息录入&#xff1a; 用户注册与登录个人信息录入&#xff08;姓名、性别、出生日期、照…

隐藏你的环境文件!否则你的云存储数据可能会被盗并被勒索

网络犯罪分子正在侵入组织的云存储容器&#xff0c;窃取其敏感数据&#xff0c;并且在一些情况下&#xff0c;受害组织还会向他们支付费用&#xff0c;以确保他们不泄露或出售被盗数据。 研究人员表示&#xff1a;“此次活动背后的攻击者可能利用了广泛的自动化技术来成功且快…

车载网络测试实操源码_使用CAPL脚本对CAN总线上的错误帧进行实时监控

系列文章目录 车载网络测试实操源码_使用CAPL脚本解析hex、S19、vbf文件 车载网络测试实操源码_使用CAPL脚本对CAN报文的Counter、CRC、周期、错误帧进行实时监控 车载网络测试实操源码_使用CAPL脚本模拟发送符合协议要求(Counter和CRC)的CAN报文 车载网络测试实操源码_使用CA…