随着自然语言处理(NLP)任务的日益复杂,大模型对长文本的处理能力成为了衡量其性能的重要指标之一。近期, 智谱AI BigModel开放平台 推出的glm-4-long** ,支持 1M(约150-200万字)上下文处理。** 本文旨在通过实战,带大家了解glm-4-long在长文本处理方面的性能,并探讨其背后的技术亮点。
****一、
glm-4 -long****
glm-4 -long 是什么? glm-4-long** 是** 智谱AI BigModel开放平台 推出的200万字长文本模型, 现已在智谱AI BigModel开放平台上开放API调用。glm-4 -long 支持 超长输入专为处理超长文本和记忆型任务设计,上下文长度最最高为1M,约150-200万字,相当于2本红楼梦或者125篇论文。
智谱AI BigModel开放平台:https://bigmodel.cn/dev/api#language
注册登录账号免费领取2500万Tokens资源包。
glm-4 -long 的主要功能是什么?glm-4-long** 支持处理百万级文本,具备长文本推理能力,通过逐步扩展训练和优化技术实现高效训练,处理百万字文本响应时间可控,是处理大规模文本数据的强大工具。**
- 超长文本处理能力:支持处理高达1M(约150-200万字)的文本,相当于两本《红楼梦》或125篇论文的容量。
- 推理能力:具备在复杂长文本中进行有效推理和决策的能力,例如在长文本中分散插入一些语言片段,根据这些片段进行推理和决策。
- 技术关键点:通过逐步扩展上下文长度,从4096逐步训练到1M;使用优化训练方法(如batchsort和指令合成数据),实现了高效的模型训练。
- 性能指标:输入50万字时首次响应时间约为50秒,输入100万字时首次响应时间约为140秒,输入150万字时首次响应时间约为280秒。
二、glm-4 -long 开发环境
glm-4 -long型 开发流程 : 在智谱AI平台注册获取API密钥后,编写代码准备数据并通过API调用glm-4-long,处理返回的输出数据。
- 访问并注册:访问智谱AI开放平台(bigmodel.cn),注册并登录账号。
- 获取API密钥:在平台上获取你的API密钥,用于验证模型调用请求。
- 了解模型参数:了解glm-4-long支持的最大上下文长度(1M)和输出长度(4K),以及其他必要参数。
- 编写代码:使用Python等编程语言编写代码,包含API密钥和模型调用接口。
- 准备数据:根据需求准备长文本作为输入数据。
- 调用模型:通过API接口发送输入数据到glm-4-long模型。
- 处理输出:解析模型返回的输出数据,并根据需要进行进一步处理或展示。
# pip install zhipuai 请先在终端进行安装
from zhipuai import ZhipuAI
client = ZhipuAI(api_key="your api key")
response = client.chat.completions.create(
model="glm-4-long",
messages=[
{
"role": "system",
"content": "你是一个乐于解答AI问题的专业助手,你的任务是为用户提供专业、准确、有见地的建议。"
},
{
"role": "user",
"content": "你好"
}
],
top_p= 0.7,
temperature= 0.95,
max_tokens=1024,
tools = [{"type":"web_search","web_search":{"search_result":True}}],
stream=True
)
for trunk in response:
print(trunk)
glm-4 -long 开发 环境:
- 硬件配置:中等配置服务器或工作站,配备消费级显卡(如NVIDIA RTX 40系列),满足日常深度学习训练需求。
- 软件环境:Python 3.x 作为开发环境,Hugging Face Transformers库,结合ZhipuAI库,实现自然语言处理等相关任务的开发与部署。
- 开发环境:Python 3.x,作为核心编程语言,提供丰富的库支持和强大的编程功能。
- NLP库:
- Hugging Face Transformers库:用于加载预训练模型、进行模型微调、评估及推理等NLP任务。
- ZhipuAI库:glm-4-long模型加载与调用,与Hugging Face Transformers互补。
- GPU加速:CUDA工具包,由NVIDIA提供,用于在NVIDIA GPU上加速Python代码的执行。
三、glm-4 -long 开发实战
进阶版大海捞针测试 : 使用《红楼梦》原文作为基础文本,在其中均匀插入关于伦敦奥运会奖牌榜信息,要求模型识别并整理这些信息。
测试目的:验证glm-4-long在超长文本中准确提取并整理特定信息的能力。
测试步骤:
- 使用提供的脚本将奖牌榜信息插入《红楼梦》原文中。
- 将插入后的文本作为prompt输入glm-4-long模型。
- 评估模型输出的奖牌榜信息是否与预期一致。
def main(file_path, first_list, second_list, third_list):
# Read the content of the original file
original_content = read_txt(file_path)[:1024 * (1024 - 2)] # Limit to 1MB minus 2 bytes
# Generate sentences
sentences = []
max_length = max(len(first_list), len(second_list), len(third_list))
for i in range(max_length):
if i < len(first_list):
sentences.append(f"奖牌榜第一名{first_list[i]} \n")
if i < len(second_list):
sentences.append(f"奖牌榜第二名 {second_list[i]} \n")
if i < len(third_list):
sentences.append(f"奖牌榜第三名 {third_list[i]} \n")
# Calculate and insert sentences
updated_content = insert_sentences_into_content(original_content, sentences)
# Write the updated content back to the file
write_txt(file_path, updated_content)
# Return the updated content for further processing (e.g., AI service)
return updated_content
def insert_sentences_into_content_simple_uniform(original_content, sentences):
"""
均匀插入关于伦敦奥运会奖牌榜信息
:param original_content: 原始内容字符串。
:param sentences: 要插入的句子列表。
:return: 插入句子后的内容字符串。
"""
if not sentences:
return original_content
# 计算每个句子之间的平均间隔(基于字符数)
interval = len(original_content) // (len(sentences) + 1)
result = original_content
# 遍历句子并插入
for i, sentence in enumerate(sentences):
# 计算插入位置(注意:这里可能会超出原始内容长度)
insert_pos = (i + 1) * interval
# 如果插入位置超出原始内容长度,则直接追加到末尾
if insert_pos < len(result):
result = result[:insert_pos] + ' ' + sentence + ' ' + result[insert_pos:]
else:
result += ' ' + sentence
return result
if __name__ == "__main__":
file_path = "The_Story_of_the_Stone.txt"
first_list = [40, 44, 42, 126]
second_list = [40, 27, 24, 91]
third_list = [20, 12, 13, 45]
updated_content = main(file_path, first_list, silver_list, third_list)
# Assuming you have the ZhipuAI client setup correctly
from zhipuai import ZhipuAI
client = ZhipuAI(api_key="XXX") # Replace 'XXX' with your actual API key
prompt = "请你根据如下文本,整理伦敦奥运会奖牌榜信息。格式:{\"奖牌榜第一名:美国\":[x,x,x,...],\"奖牌榜第二名:中国\":[x,x,x,...],\"奖牌榜第三名:日本\":[x,x,x,...]}\n"
response = client.chat.completions.create(
model="glm-4-long",
messages=[
{
"role": "user",
"content": prompt + updated_content
}
],
)
# Assuming the response format is as expected, print the AI's response
print(response.choices[0].message.content)
测试结果:
glm-4-long成功地从长达近百万字符的文本中准确提取并整理了伦敦奖牌榜信息,输出了正确的JSON格式结果。这表明该模型在处理超长文本和提取分散信息方面表现出色。
{"奖牌榜第一名:美国":[40, 44, 42, 126],"奖牌榜第二名:中国":[40, 27, 24, 91],"奖牌榜第三名:日本":[20, 12, 13, 45]}
财报问答测试 : 将腾讯控股的2024Q1财报转换为文本格式,设计多个财务相关的问题,评估模型在复杂长文本问答中的表现。
测试目的:评估glm-4-long在复杂长文本问答任务中的性能。
测试步骤:
- 将腾讯控股的Q1财报转换为文本格式。
- 设计多个与财报内容相关的财务问题。
- 将财报文本和问题作为prompt输入glm-4-long。
- 评估模型给出的答案是否准确。
测试结果:
glm-4-long在 财报问答测试中同样表现出色,准确回答了所有设计的问题,包括研发投入、 营收 、净利润 等复杂财务指标。 这表明该模型不仅具备强大的长文本处理能力,还能在复杂的财务文本中准确捕捉关键信息并给出正确答案。
问题一:腾讯控股2024年Q1的研发成本有多少?
content:腾讯在本季度的研发开支达到了156亿元人民币,自2018年至今六年研发投入超过2853亿元,显示出腾讯对技术创新的重视和投入。
question:腾讯控股2024年Q1的研发成本有多少?
answer:156亿元人民币。
问题二:腾讯控股2024年Q1的营收是多少?
content:腾讯当季实现营收1595.01亿元人民币,同比增长6.34%。这一增长表明腾讯在复杂的市场环境中仍保持了稳健的营收增长态势。
question:腾讯控股2024年Q1的营收是多少?
answer:1595.01亿元人民币。
问题三:腾讯控股2024年Q1的净利润是多少?
content:非国际财务报告准则(Non-IFRS)下的净利润为502.65亿元人民币,同比增长显著,显示出腾讯盈利质量的提升。
question:腾讯控股2024年Q1的净利润是多少?
answer:502.65亿元人民币。
glm-4-long 以其惊人的长文本处理能力和高效的训练策略,在NLP领域树立了新的标杆。**** 无论是进阶版的大海捞针测试还是复杂的财报问答测试,该模型都展现出了卓越的性能。 对于需要处理长文本的自然语言处理任务而言,glm-4-long 是一个值得考虑的强大工具。****