【NLP】大模型长文本处理技术与GLM-4-Plus评测

本文将介绍Transformer模型在处理长文本数据时所采用的关键技术,特别是旋转位置编码(RoPE)和Flash Attention机制。

此外,本文介绍GLM系列模型,特别是最新发布的GLM-4-Plus模型。我们将通过实际的评测方法和结果,展示GLM-4-Plus模型在处理长文本任务时的卓越性能。

unsetunsetTransformer模型unsetunset

Transformer模型的核心是自注意力机制(Self-Attention),它允许模型在处理序列数据时,能够同时考虑序列中的所有位置,这一点与传统的循环神经网络(RNN)或卷积神经网络(CNN)不同,后者通常需要逐步处理序列数据。

位置编码

Transformer模型由编码器(Encoder)和解码器(Decoder)组成,每个部分都包含多个相同的层,这些层由自注意力机制和全连接网络组成。此外,Transformer 还引入了位置编码来保留序列中的顺序信息,因为自注意力机制本身并不包含序列的顺序信息。

826ac13fd122b38116d84c15f61d1146.png

位置编码通常是通过正弦和余弦函数的固定函数形式来生成的,每个位置的编码是唯一的,并且编码的维度与模型的维度相匹配。

对于位置 pos 和维度 i,位置编码的第 i 维度的值由下面的公式给出:

  • 对于偶数维度(2i):

  • 对于奇数维度(2i+1):

其中 pos 是单词在句子中的位置,i 是维度索引, 是模型的维度。

并行能力

由于自注意力机制不依赖于序列中前一个状态的输出,这使得模型的所有层可以并行处理,从而大大提高了训练效率。Transformer还采用了残差连接和层归一化技术,这些技术有助于改善深层网络的训练稳定性,并减少梯度消失或爆炸的问题。

9c25a6e861dddec221937b593834100e.png

残差连接(Residual Connection)

对于Transformer中的每个子层(自注意力层或前馈全连接层)的输出,残差连接可以表示为:

自注意力机制

自注意力机制(Self-Attention)的核心思想是计算序列中每个元素(如单词或字)与其他所有元素的关系,以便捕捉序列内的长距离依赖关系。

14d19255b5fd2037d6e4d3747f94aca1.png

计算查询(Query)、键(Key)和值(Value):对于输入序列中的每个元素,我们分别计算其查询、键和值的表示。这通常是通过与权重矩阵的矩阵乘法来实现的:

计算注意力得分:使用查询和键的点积来计算注意力得分,然后通常通过一个缩放因子(通常是键向量维度的平方根)来防止点积结果过大,接着应用softmax函数来获取注意力权重:

unsetunset大模型长文本处理技术unsetunset

如果把 LLM 比作新时代的操作系统,上下文窗口便是它的「内存」。一个优秀的 LLM 也需要足够长的上下文长度来完成各种复杂的任务。

RoPE

Transformer模型依赖于位置编码来理解单词顺序,但标准的编码方式通常只适用于固定长度的上下文。为了处理超出训练时见过的长度,旋转位置编码(RoPE)允许模型处理比训练时更长的输入,但这样可能会以性能损失。

ba8c6ae8274733dcf1fd91cbf3eb5c0f.png

RoPE的核心思想是对词嵌入向量应用旋转变换,以注入位置信息。对于序列中的每个位置,RoPE通过旋转矩阵来调整词向量,旋转的角度与位置索引相关。这种旋转操作不仅保留了向量的模长(即词向量的大小不变),而且还能够引入相对位置信息。

在二维情况下,RoPE可以通过以下公式表达:

https://huggingface.co/THUDM/glm-4-9b/blob/main/modeling_chatglm.py

@torch.jit.script
def apply_rotary_pos_emb(x: torch.Tensor, rope_cache: torch.Tensor) -> torch.Tensor:
    # 获取输入张量 x 的各个维度大小
    b, np, sq, hn = x.size(0), x.size(1), x.size(2), x.size(3)
    # 计算旋转维度 rot_dim,它是 rope_cache 的倒数第二个维度的两倍
    rot_dim = rope_cache.shape[-2] * 2
    
    # 将 x 分为两部分:需要应用 RoPE 的维度和不需要变化的维度
    x, x_pass = x[..., :rot_dim], x[..., rot_dim:]
    
    # 根据序列长度 sq 截断 rope_cache,以确保它与当前处理的序列长度相匹配
    rope_cache = rope_cache[:, :sq]
    
    # 重塑 x 为 xshaped,以便将其与 rope_cache 进行运算
    xshaped = x.reshape(b, np, sq, rot_dim // 2, 2)
    
    # 重塑 rope_cache 以匹配 xshaped 的维度,并准备进行旋转运算
    rope_cache = rope_cache.view(-1, 1, sq, xshaped.size(3), 2)
    
    # 对 xshaped 中的每个元素应用旋转,使用复数的旋转公式
    x_out2 = torch.stack(
        [
            xshaped[..., 0] * rope_cache[..., 0] - xshaped[..., 1] * rope_cache[..., 1],  # 实部旋转
            xshaped[..., 1] * rope_cache[..., 0] + xshaped[..., 0] * rope_cache[..., 1],  # 虚部旋转
        ],
        -1,
    )
    
    # 将旋转后的张量 x_out2 重塑回原来的维度
    x_out2 = x_out2.flatten(3)
    
    # 将旋转后的张量 x_out2 与不需要变化的维度 x_pass 拼接起来,形成最终的输出
    return torch.cat((x_out2, x_pass), dim=-1)

FlashAttention

与传统的自注意力机制相比,Flash Attention将内存复杂度从O(N²)降低到O(N),这对于处理大规模数据集和大型模型尤为重要。

d5656cd4a2869aef40cdb1c6e5f59595.png

Flash Attention的算法包括两个主要思想:平铺和重新计算。在平铺过程中,注意力矩阵被划分为更小的块,以优化内存使用和计算效率。在重新计算过程中,利用存储的输出和softmax归一化统计数据来重新计算注意力矩阵,而无需存储大型中间矩阵。

https://huggingface.co/THUDM/glm-4-9b/blob/main/modeling_chatglm.py

unset

为了全面评估GLM系列模型在处理新闻文本分类任务上的能力,我们的评测方法采用了THUCNews数据集。

在评测过程中,我们将特别关注模型在处理不同长度文本时的表现。文本长度是影响模型性能的一个重要因素,因为它直接关系到模型处理信息的能力和复杂度。

unsetGLM 模型性能评测unset unset

模型介绍

模型描述上下文
GLM-4-Plus高智能旗舰128K
GLM-4-0520高智能模型128K
GLM-4-Long Beta超长输入1M
GLM-4-AirX极速推理8K
GLM-4-Air高性价比128K
GLM-4-Flash免费调用128K

评测方法

通过THUCNews数据集,设置不同的文本长度,并通过大模型完成新闻分类:

def news_classify(news_path, texlen, model):
    text = ''.join(open(news_path).readlines())[:texlen]
    data = {
        "model": model,
        "messages": [{"role": "user", "content":  f'''请对下面的新闻进行分类,待选类别有: {class_names}\n {text}''' }]
    }

    try:
        response = requests.post(url, headers=headers, json=data, timeout=200)
        if news_path.split('/')[-2] in response.json()['choices'][0]['message']['content']:
            return True
        else:
            return False
    except:
        return None

评测结果

aa4310f1f06a112c974a1901befd85ce.png

GLM-4-Plus整体表现非常稳定,精度始终保持在0.88以上,是所有模型中最高的。模型如GLM-4-Plus和GLM-4-Long在处理长文本时表现较好。

unsetunsetGLM-4-Plus介绍unsetunset

在 KDD 国际数据挖掘与知识发现大会上,智谱 GLM 团队发布了新一代基座大模型——GLM-4-Plus。作为智谱全自研 GLM 大模型的最新版本,GLM-4-Plus 标志着智谱AI在通用人工智能领域的持续深耕,推进大模型技术的独立自主创新。

GLM-4-Plus 在长文本处理能力上比肩国际先进水平。通过更精准的长短文本数据混合策略,显著增强了长文本的推理效果。

模型LongBench-ChatInfiniteBench/EN.MCRuler
Mistral-123B8.238.980.5
Llama 405B8.683.491.5
Claude Sonnet 3.58.679.5-
Gemini 1.5 Pro8.680.995.8
GPT-4o982.5-
GLM-4-Plus8.885.193
GLM-4-Plus/GPT-4o98%103%-
GLM-4-Plus/Claude 3.5 Sonnet102%107%-

调用示例

同步调用方法
from zhipuai import ZhipuAI
client = ZhipuAI(api_key="") # 填写您自己的APIKey
response = client.chat.completions.create(
    model="glm-4-plus",  # 填写需要调用的模型编码
    messages=[
        {"role": "user", "content": "作为一名营销专家,请为智谱开放平台创作一个吸引人的slogan"},
        {"role": "assistant", "content": "当然,为了创作一个吸引人的slogan,请告诉我一些关于您产品的信息"},
        {"role": "user", "content": "智谱AI开放平台"},
        {"role": "assistant", "content": "智启未来,谱绘无限一智谱AI,让创新触手可及!"},
        {"role": "user", "content": "创造一个更精准、吸引人的slogan"}
    ],
)
print(response.choices[0].message)
流式调用方法
from zhipuai import ZhipuAI
client = ZhipuAI(api_key="") # 请填写您自己的APIKey
response = client.chat.completions.create(
    model="glm-4-plus",  # 填写需要调用的模型编码
    messages=[
        {"role": "system", "content": "你是一个乐于解答各种问题的助手,你的任务是为用户提供专业、准确、有见地的建议。"},
        {"role": "user", "content": "我对太阳系的行星非常感兴趣,特别是土星。请提供关于土星的基本信息,包括其大小、组成、环系统和任何独特的天文现象。"},
    ],
    stream=True,
)
for chunk in response:
    print(chunk.choices[0].delta)
  • System Message 格式

参数名称参数说明
role消息的角色信息,此时应为system
content消息内容
  • User Message 格式

参数名称参数说明
role消息的角色信息,此时应为user
content消息内容

GLM-4-Plus 能力介绍

  • 语言理解能力:GLM-4-Plus 使用了大量模型辅助构造高质量合成数据以提升模型性能;有效提升了模型推理(数学、代码算法题等)表现,更好反映人类偏好。

90b98be33966f1056a479f499414b29a.png

  • 长文本推理能力:GLM-4-Plus通过精准的长短文本数据混合策略、先进的预训练与微调技术,以及创新性的技术手段,成功地在长文本推理能力上达到了国际先进水平。

5bc695fe16b7b8726dcdaecf62b99502.png

 
 

065619cffbae424b1d7d02ef7d79243f.jpeg

 
 
 
 
 
 
 
 
 
 
 
 
往期精彩回顾




适合初学者入门人工智能的路线及资料下载(图文+视频)机器学习入门系列下载机器学习及深度学习笔记等资料打印《统计学习方法》的代码复现专辑
  • 交流群

欢迎加入机器学习爱好者微信群一起和同行交流,目前有机器学习交流群、博士群、博士申报交流、CV、NLP等微信群,请扫描下面的微信号加群,备注:”昵称-学校/公司-研究方向“,例如:”张小明-浙大-CV“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~(也可以加入机器学习交流qq群772479961)

9fd5846f5a34173bbd402c14e624c5db.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值