首页 > 编程语言 >python的tril,pad,block_diag在LLM上的使用

python的tril,pad,block_diag在LLM上的使用

时间:2023-07-29 17:04:28浏览次数:60  
标签:tril inputs python diag attention mask ids np encoded


最近需要对position_ids和attention_mask进行重构,所以需要掌握numpy的一些操作,以下是一些示例,

多个下三角矩阵拼接:

import numpy as np
from scipy.linalg import block_diag

A = np.ones((2,2))
B = np.ones((3,3)) 

b = [A,B]
print(np.tril(block_diag(*b)))
[[1. 0. 0. 0. 0.]
 [1. 1. 0. 0. 0.]
 [0. 0. 1. 0. 0.]
 [0. 0. 1. 1. 0.]
 [0. 0. 1. 1. 1.]]

二维的position_ids的padding:

encoded_inputs ={}
encoded_inputs["position_ids"] =np.array([[1,2,3,4],[4,5,6,7]])
difference = 4
encoded_inputs["position_ids"] = np.pad(
                    encoded_inputs["position_ids"], pad_width=[(0, 0), (difference, 0)]
                )

print(encoded_inputs)
{'position_ids': array([[0, 0, 0, 0, 1, 2, 3, 4],
       [0, 0, 0, 0, 4, 5, 6, 7]])}

attention_mask的拼接:

encoded_inputs["attention_mask"] = np.zeros((1,3,3))
encoded_inputs["attention_mask"] = np.pad(
                    encoded_inputs["attention_mask"],
                    pad_width=[(0, 0), (difference, 0), (difference, 0)],
                    mode="constant",
                    constant_values=1,
                )
print(encoded_inputs)
{'position_ids': array([[0, 0, 0, 0, 1, 2, 3, 4],
       [0, 0, 0, 0, 4, 5, 6, 7]]), 'attention_mask': array([[[1., 1., 1., 1., 1., 1., 1.],
        [1., 1., 1., 1., 1., 1., 1.],
        [1., 1., 1., 1., 1., 1., 1.],
        [1., 1., 1., 1., 1., 1., 1.],
        [1., 1., 1., 1., 0., 0., 0.],
        [1., 1., 1., 1., 0., 0., 0.],
        [1., 1., 1., 1., 0., 0., 0.]]])}

list里面多个list进行拼接:

inputs =[[1,2],[0,1]]
# inputs =[[[1,2],[0,1]],[[1,2,3,4],[4,5,6,7]]]

# out = sum(inputs,[[]])
out = np.concatenate(inputs, axis=-1)
print(out)
[1 2 0 1]

chatglm里面的attention_mask的创建:

seq_length = 4
context_length=2
attention_mask = np.ones((seq_length, seq_length))
attention_mask = np.tril(attention_mask)
attention_mask[:, :context_length] = 1
attention_mask = (attention_mask < 0.5).astype("int64")
print(attention_mask)
[[0 0 1 1]
 [0 0 1 1]
 [0 0 0 1]
 [0 0 0 0]]

我发现LLM的输入里面attention_mask,position_ids的构造会不一样,其他的都还好,所以这里分享出来,与大家共同进步。


标签:tril,inputs,python,diag,attention,mask,ids,np,encoded
From: https://blog.51cto.com/u_9453611/6893734

相关文章

  • Python面向对象编程-学习笔记(二)
    5.类的继承classEmployee:raise_amount=1.04def__init__(self,first,last,pay):self.first=firstself.last=lastself.pay=payself.email=first+'.'+last+'@company.com'cla......
  • Python全局变量和局部变量
    目录1.python的全局变量和局部变量第一种:global定义全局变量在自定义函数内部第二种:全局定义全局变量,并给其赋值2.python类中public,protected,private定义方式3.python中类的实例化1.python的全局变量和局部变量全局变量定义:在函数外部定义的变量。所有函数内部都可以使用......
  • 相对路径以及python引用
    /当前工作目录所在的最顶级目录,即根目录,根目录是相对于其他子目录来说的./当前工作目录('./img/demo.jpg')../当前工作目录上一级目录(当前目录的父级目录)此时的img文件在myblog文件夹内python文件的引用问题fromPStope_Class.WorKFace.TYl_BeamUnitimportTYl_Beam......
  • python requests.session() 不使用session的cookie 自定义cookie
      req=requests.Request('GET',"https://xxxx.gif",headers=headers)#清空cookiesreq.cookies={}#发送请求session.send(req.prepare(),timeout=30,verify=Fa......
  • python的netmiko库备份华为交换机配置
    环境背景可管理华为交换机若干,python3运维安全需求,定期备份网络设备配置步骤安装netmikopip3isntallnetmiko注意netmiko默认的连接超时时间只有10秒钟,需要改conn_timeout大于等于60s。2.编写python脚本fromnetmikoimportConnectHandlerimporttimeimportos#......
  • python数组
    目录1.Delphi定义数组2.Python定义数组(1)列表的3种1)一维列表:2)多维列表:(2)array.array(3)np.zeros(4)数组清理(5)总结3.Django框架定义数组(1)ArrayField(依赖于PostgreSQL数据库)(2)JSONField(支持PostgreSQL、MySQL、SQLite)(3)TextField(4)CharField+validators(5)列表,不定长​ 在编程中,数组是相......
  • Python下载-2023最新版-编程软件 软件推荐
    《Python电脑版》为你提供便捷的编程服务操作,通过软件中的功能来进行快速的编程操作,Python电脑版带来更好的代码编写操作,并且可以体验到快速的代码运行服务,可以根据自己的需求来进行代码的编写操作。软件地址:看置顶贴python电脑版免费版亮点1、文档Python还带有完整的文档,既集成到......
  • Python编辑器(PyCharm) mac/win 电脑 中文汉化版 软件推荐
    MiniCondapython是一款python环境管理软件,在这款软件中主要帮助用户在电脑中对python环境进行管理和编辑;软件能自由切换自己需要的python环境;并且有着十分稳定的操作环境;软件支持在各种操作系统中使用,性能十分的稳定,能确保开放人员能正常进行编程;软件界面简洁,操作简单,无需任何复杂......
  • Python 装饰器
    当我们谈到Python中的装饰器时,我们实际上是在谈论一种特殊的语法构造,它允许我们在不修改原始函数代码的情况下,向函数添加额外的功能或行为。装饰器本质上是一个函数,它接受一个函数作为参数,并返回一个新的函数。装饰器的语法使用@符号,将装饰器函数放置在要装饰的函数的上方。当我们......
  • python学习难点及举例
    在Python的高级学习中,可能会遇到以下几个难点:迭代器和生成器:迭代器和生成器是Python中强大的概念,但在理解和使用它们时可能会有一些困难。迭代器是一种可以遍历数据集合的对象,而生成器是一种特殊的迭代器,可以按需生成值,而不是一次性生成所有值。#迭代器示例my_list=[1,2,3]m......