自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(149)
  • 收藏
  • 关注

原创 llama3.1数据集处理方法

数据混合的缩放定律。这些分类器包括训练识别给定文本是否会被维基百科引用的快速分类器(如fasttext,Joulin等,2017,Touvron等,2023a),以及更为计算密集的基于Roberta的分类器(Liu等,2019a),这些分类器训练自Llama 2的预测结果。例如,为了缓解过度道歉的语调问题,我们识别了过度使用的短语(如“对不起”或“我道歉”),并在数据集中仔细平衡此类样本的比例。我们的最终数据混合大约包含50%的通用知识标记,25%的数学和推理标记,17%的代码标记,以及8%的多语言标记。

2024-07-24 17:40:21 551

原创 LLM:Rope旋转位置编码个人理解和总结

绝对位置编码就是和词向量层一样大小的位置嵌入,著名的三角函数编码,bert虽然也是用的tranformers,但是其位置编码是可学习的,没有用三角函数编码。我们的目标是让输入有位置相关性,所以假定m和n位置上的token的语义向量是xm,xn,那么我们要证明的就是m和n是可以用一个函数变换的。然后q的某一个token地与k的每个token计算注意力分数,并且累加,得到q的该token与整个k的注意力分数,可以记作q。以上的位置信息是在词向量阶段添加的,但是rope是在注意力计算时添加的。

2024-07-16 01:05:29 332

原创 LLM:学习清单 ing

归一化:层归一化,RNSnorm,批归一化,Pre-LN和Post-LN的区别。注意力机制:自注意力,多头注意力,分组查询注意力,多查询注意力(前两个要手写)BGE,BCE,BERT。长度外推:滑动窗口,rope,位置插值,yarn的原理。激活函数:tanh,relu,gelu,silu。位置编码:绝对位置编码,三角函数编码,ROPE。分布式:数据并行,模型并行,流水线并行。模态数据处理:多图,多视频,图文交错。agent:作用,实现方法,优化经验。RAG:作用,流程,性能调优经验。

2024-07-13 00:24:37 194

原创 LLM:tokenizer分词器概念

在做nlp时,首先要对文本进行分词,也就是给定一个句子,将其归到词表中的一系列token上,token有对应的数字(token_id)。上图是bert的分词器的json内容,可以看到词表是一个字典,key为token,value为对应的id。像 “[unused6]”:6 这样的条目。这些条目称为“未使用”(unused)标记,它们在模型的原始训练过程中没有特定的用途,但被包括在词汇表中为了可能的未来使用。

2024-07-12 22:28:26 833

原创 MM-LLM:使用Llava类构建图文多模态大模型实践

多模态大模型的结构如上,llava是用两层MLP作为连接器。该模式也是后续很多工作的基础。本文主要参考了的工作,最初是在b站看到的,讲解的很细致。

2024-07-02 22:42:05 771

原创 图像数据不同的表示形式

将图像数据转换为不同的表现形式,可以根据具体的需求和应用场景选择适合的方式。

2024-06-28 10:27:35 253

原创 大模型推理知识总结

定义: 键值缓存(KV缓存)是一种优化自回归模型生成速度的方法。它存储先前词元的计算结果,以便在后续生成中重用,避免冗余计算。原理自回归模型生成自回归模型逐个生成词元,每个新预测依赖于先前生成的词元。例如,生成“Apples are a boring fruit”时,预测“fruit”时需要前面所有词元的信息。使用KV缓存存储先前词元的键(Key)和值(Value)对。新的查询(Query)只需与缓存的键值对进行计算,无需重新计算整个序列。提高生成速度和效率。形象例子。

2024-06-27 23:55:14 1385

原创 01背包问题求解

dp是个二维数组,第一维代表物品索引,第二维代表背包空间状态。dp[i][j]是指物品i 在背包空间j 的情况下所能放的最大价值。

2024-06-27 00:33:55 394 1

原创 openai类模型的超参数含义

重要提示:使用JSON模式时,你必须通过系统或用户消息指示模型生成JSON,否则模型可能会生成无限的空白,直到达到token限制,导致请求长时间运行且看似“卡住”。设置后,会像ChatGPT那样发送部分消息delta,生成的token以数据服务器发送事件形式发送,终止时发送data: [DONE]消息。一个在0到20之间的整数,指定在每个token位置返回最有可能的token数量,每个token都附带其log概率。正值会对新token进行惩罚,基于其在当前文本中的出现频率,从而减少模型重复相同行的可能性。

2024-06-26 19:33:32 521

原创 源码解读:InternVL 1.5

对查询和键进行归一化可以稳定数值计算,提高模型的性能和收敛速度,并避免极端权重情况的发生。这种归一化处理在实际应用中已经证明是有效的,可以帮助模型在复杂的任务中表现得更好。from_pretrained函数接受cls和pretrained_model_name_or_path参数,用于从预训练模型的路径或名称加载配置。cls 是一个用于类方法中的通用参数名,指代调用该方法的类本身。

2024-06-25 19:55:26 792

原创 MM-LLM:Internvl_chat.v1.5论文解读

直接说提出了一个拉近开源和商业多模态模型的开源模型。优化点:1.更强的Vision Encoder——InternViT-6B;2.动态高分辨率——动态高分辨率;3.高质量的中英双语数据集——显著增强OCR和中文相关的任务。

2024-06-24 20:22:40 1189

原创 CPsyCoun:心理咨询多轮对话自动构建及评估方法

在大模型应用于心理咨询领域,目前开源的项目有:https://github.com/SmartFlowAI/EmoLLM (集合,生态完善)https://github.com/CAS-SIAT-XinHai/CPsyCoun (该论文)https://github.com/X-D-Lab/MindChat (数据集没开源)训练一个大模型不难,难的是怎么得到领域内的数据集。该论文就提出了一个Memo2Demo的方法,使用LLM从公开的心理咨询报告中还原真实的心理咨询多轮对话。

2024-06-24 18:25:36 909

原创 MM-LLM:CogVLM解读

在图文多模态模型中,范式是图像的编码器、文本编码器、模态融合器。也就是不同模态特征抽取加模态对齐。这部分可以看在大模型里的范式在也是如此,目前的工作大部分都专注于怎么拉齐不同模态。

2024-06-24 00:55:54 1355

原创 多模态大模型通用模式

MM-LLMs(多模态大模型)是目前比较新的和实用价值越发显著的方向。其指的是基于LLM的模型,具有接收、推理和输出多模态信息的能力。这里主要指图文的多模态。

2024-06-18 18:52:24 802

原创 RAG技术综述

RAG的基本架构。,生成器和检索器。参考paper:https://arxiv.org/html/2402.19473v4文中将rag的内容从文本扩展至多模态,打开了思路。:transformer,LSTM,扩散模型,gan:稀疏检索(tf-idf,bm25),密集检索(余弦相似度,内积,l2距离),混合检索基于查询的 RAG、基于潜在表征的RAG、基于Logit的RAG,推测型RAG。

2024-05-25 18:52:25 1154

原创 agent简述

Agent = 大语言模型(LLM) + 观察 + 思考 + 行动 + 记忆。

2024-05-12 20:34:21 215

原创 向量模型微调评估指标

余弦相似度和点积得分都是用来衡量两个向量之间相似度的常见指标,但它们在计算方式和适用场景上有一些关键的区别:

2024-05-10 23:57:53 651

原创 稀疏检索和密集检索概念

在数据处理和搜索领域,“稀疏检索”(Sparse Retrieval)和"密集检索"(Dense Retrieval)是两种常见的信息检索技术,特别是在处理大规模数据集时,如文本、图像等。这两种技术各有特点,适用于不同的场景和需求。

2024-05-10 19:09:23 919

原创 RAG查询改写方法概述

在RAG系统中,用户的查询是丰富多样的,可能存在措辞不准确和缺乏语义信息的问题。这导致使用原始的查询可能无法有效检索到目标文档。因此,将用户查询的语义空间与文档的语义空间对齐至关重要,目前主要有查询改写和嵌入转换两种方法。查询改写的方法包括Query2Doc,Doc2Query,HyDE,Step-Back Prompting,Rewrite-Retrieve-Read,ITER-RETGEN,Multi-query。

2024-05-09 15:35:35 1130 2

原创 langchain+qwen1.5-7b-chat搭建本地RAG系统

由于语言模型的底层运作基于数学概率,其输出本质上是一系列数值运算结果,因此在模型知识匮乏或不擅长的领域,可能会出现幻觉问题,即生成与现实脱节或错误的内容。RAG通过将检索到的准确且相关的信息作为输入的一部分,降低了幻觉问题的发生几率,使模型生成的内容与现实更为一致。: RAG 通过从知识库、数据库、企业内部数据等外部数据源中检索相关信息,将其注入到模型提示词中,使模型能够利用这些信息进行推理和生成。将召回转为字符串,输入到prompt中,使用模型推理。索引阶段,包含数据读取,切片,向量化,入库。

2024-05-03 17:22:49 2103 1

原创 llama-factory/peft微调千问1.5-7b-chat

本文实现了llama-factory和自己基于peft进行qwen1.5-7b-chat的sft微调,评测。llama-factory兼容了很多加速方法,非常方便;自己写虽然慢,但是对底层的数据组织,处理认识更深。值得一提的是,LLM本质上还是一个分类预测任务,因此也采用CrossEntropyLoss,指数化后就是困惑度参考:1.2.3.4.5.6.7.8.9.

2024-05-02 21:56:15 2410 1

原创 BGE向量模型架构和训练细节

官方提供了挖掘难负样本的脚本,是从query召回的top2-100中随机抽取,正样本是top1。构造好数据集后,就可以继续做特定任务上的微调了。也可以使用llama_index微调,可以参考我的。

2024-05-01 16:23:28 2894

原创 llama_index微调BGE模型

千问7b的模型差不多在性能和效果达到了一个中间值;使用llama_index微调向量模型是比较好操作,效果增长比较明显的;可以使用多种格式的数据进行微调;在文档切分中可以采用多种方法,调整块大小,还有重叠大小;在文档切分后可以进行去重,清洗等提高文档质量;可以优化大模型提示词,增加示例等;在构造完qa数据集后增加后处理环节,清洗质量不佳的问题。此次花了几个小时跑通了整个流程,对于微调的数据集结构、代码框架等有了更深的认识,后续将用更好、更多的数据进行微调。

2024-05-01 01:01:34 1916 3

原创 力扣练习4.29-30

2.遍历变量,如果是小于x,就将第一个链表的指针节点指向该节点,并更新第一个链表的指针节点;最后也要更新原始链表的指针节点。4.为了防止第二个链表的尾节点指向不明确,导致可能的陷入环形结构,将其指向为空。:设置两个链表,分别装小于x和>=x的节点,最后将两个链表拼接。1.初始化两个新链表的头结点和指针节点,初始化链表的指针节点。3.拼接两个链表,将第一个的尾节点指向第二个链表的头节点。5.返回第一个链表的头节点。

2024-04-29 20:27:16 245

原创 大模型评测概述-以司南为例

本文以司南评估工具为例,介绍了大模型评测这一内容。大模型评测和以往的nlp模型评测的不同在于要考虑非常多的维度,根源在于大模型的多维能力。传统nlp模型只需要针对文本分类、ner等某个具体任务,但是大模型具有文本对话、角色扮演、文本分类等传统nlp有和没有的能力。因此,司南将其分为通用能力和特色能力两个部分,再分层划分各个子维度的能力。再回顾下开发大模型的生命周期:模型基座(base),增量预训练,sft,奖励学习,人类偏好学习。目前大多还是只走到了sft。

2024-04-28 21:14:37 972

原创 力扣练习4.26

3.如果字符为运算符,说明当前数字已经确定了,根据当前数字的前面的运算符计算入栈的结果:加减简单,乘的话是要先弹出栈顶元素,当前数字和栈顶元素相乘,乘积入栈;除法,因为 Python 的 // 运算符在被除数为负数时会向下取整到更小的整数,而通常的数学操作是向零取整,所以要考虑栈顶元素的正负,是负数时需要用最原始的解法。假设我们有’{([])}‘,那么遍历字符串,对开放括号入栈,得到[’{', ‘(’, ‘[’ ],如果说下一个字符不是[所对应的],那么就说明位置错乱,直接返回false;

2024-04-27 17:53:59 961

原创 LLM长度外推——位置插值(llama/baichuan)

位置插值(position Interpolation, PI)通过将超出训练长度的位置索引等比例缩小,映射到模型已经学习的位置范围内,实现长度外推。好处是不用重新训练,直接在推理时加入。

2024-04-26 12:50:10 706

原创 力扣练习4.25

因为左子链表在奇数时会多一个中点,所以在同时合并两个子链表的前面位数的节点后,还需要加上左边剩余的节点。1.设置快慢指针,都从头节点开始,快指针一次移动两个单位,慢指针一个单位,当快指针移动到链表末尾时,慢指针位置就是中点。将整个链表拆成三部分,第一部分是头节点到left的前一个节点,第二部分是left到right的待反转区间,第三部分是right的下一个节点为头结点到尾部。链表的分割也是找中点,前面的题有过,与前面不同的是,这道题的中点是要包含在前面部分的,所以初始化fast不同;

2024-04-25 21:03:09 1031 3

原创 力扣练习4.23

如果重复,就将相邻的前一个元素另存为临时变量,并且循环判断相邻的后一个元素和其后的元素是否重复,重复则移动临时变量到下一个节点;将滑动窗口实现为双向队列,队列中存储索引,维护队列的第一个元素为窗口内最大值的索引,在每个窗口内取出第一个元素,在数组中访问即可得到每个滑动窗口内的最大值。3.状态转移方程:如果nums1[i-1] == nums2[j-1],则dp[i][j]=dp[i-1][j-1]+1;临时变量退出循环后,其下一个元素是与前面的任意元素都不重复的,因此将指针指向临时变量的下一个元素。

2024-04-23 21:43:07 973

原创 力扣刷题4.22

解题思路1:时间复杂度O(n),纯粹遍历start = iif start!end = i。

2024-04-22 22:47:13 878

原创 排序算法集合

不过,由于在实际的排序过程中,堆排序的常数项较大,且缓存局部性较差,通常它的表现不如快速排序和归并排序。桶排序(Bucket Sort)是一种分布式的排序算法,通过将数据分散到多个有序的桶中,对每个桶内的数据进行排序,最后将各个桶的数据顺序合并,从而实现整个数组的排序。每次循环从待排序的数据中取出第一个元素,将它插入到已经排序的序列中的适当位置,从而得到一个新的、元素个数增加1的有序序列。它的工作原理是每次从未排序的部分找出最小(或最大,根据排序顺序)的元素,将它与未排序部分的起始位置元素交换。

2024-04-20 23:13:09 903

原创 215. 数组中的第K个最大元素

3.检查k是否大于big+equal的长度,如果是,说明在small数组中;并且由于已经不在big+equal中了,所以要排除掉前big+equal长度的k,因此要更新k。1.初始化一个哨兵元素,遍历所有元素,分为大于该元素,等于该元素,小于该元素的,放在三个数组中。2.检查k是小于等于big的长度,如果是,说明在big数组中,继续递归。一般来说,直接sort排序,取对应位置元素即可。但是解题思路是一样的:排序+取值。但是做算法题不能这样取巧。4.最终返回哨兵元素。

2024-04-19 11:14:40 175

原创 力扣练习4.15

并且我们需要一个映射(哈希表)来快速定位数组中每个数的索引,以便能够快速检查任何两个元素之和是否也在数组中。外层循环整个数组,内层循环外层循环到的,这样每次就能检查X_i = X_{i+2} - X_{i+1}具体的动态规划设计思路是使用一个二维的dp数组,其中。根据公式,如果是菲薄,那当前元素是 X_i + X_{i+1} = X_{i+2}作为最后两个元素的斐波那契式子序列的最大长度。这种不要求连续的,就是中间有干扰元素也可以。当满足时,就更新此时的状态。同时数组长度至少为3。

2024-04-18 17:47:08 205

原创 pyarrow.lib.ArrowInvalid: JSON parse error: Column() changed from object to array in row 0解决方法

我们自己的数据一般都是从csv里面转为json的,但是一旦字段还有空值,就会引起这个问题,所以需要删除含有空值的记录。今天在使用自己的数据微调千问大模型,使用的是LLaMA-Factory库。同时构造数据时也要注意加history,可以为空list,但不能不加。遇到这个问题,是因为json里的值存在空值。

2024-04-14 18:03:45 892

原创 力扣练习4.11

题目“576.出界的路径数”要求计算一个点从网格中的特定位置开始,最多移动N步后,有多少种路径可以使它移出网格的边界。每一步,这个点可以向上、下、左、右四个方向之一移动。

2024-04-11 17:54:00 669

原创 力扣练习 4.10

这个问题的复杂之处在于,单次从左到右或从右到左的扫描可能无法正确处理所有情况,因为对于任意位置的孩子,他们的糖果数取决于左右两边相邻孩子的评分。所以就先拿最小的饼干,尝试匹配最小的胃口,如果匹配上了,那就结果+1,跳过这对,继续;通过这个例子,我们可以看到,即使数组的第一个元素允许我们跳得很远,但由于在索引3的位置(值为0),我们无法前进到更远的位置,导致我们无法到达数组的末尾。这个算法的精髓在于贪心地在每个可能的跳跃区间内选择能跳得最远的位置作为下一次的跳跃目标,从而用最少的跳跃次数到达数组的末尾。

2024-04-10 20:12:03 702

原创 力扣练习4.9

这种隐式回溯的做法不仅适用于字符串操作,在处理数组或列表时,如果采用类似的不修改原数组(或列表)而是通过传递新的数组(或列表)副本的方式,也可以达到隐式回溯的效果。总之,这个条件确保我们只在同一层递归中遇到连续重复元素时跳过它们,从而避免在结果集中出现重复的组合,而不是阻止在递归的不同层次中重新选择先前已经考虑过的元素。这个条件的目的是为了确保,在这种同一层的遍历中,如果当前元素和前一个元素相同(即出现重复),我们将跳过当前元素,从而避免产生重复的组合。用于避免在递归过程中生成重复的排列。

2024-04-09 19:17:36 869

原创 力扣记录 4.8

遍历表达式:对于表达式中的每个字符,如果它是一个运算符(),则对该运算符执行以下步骤。分割表达式:将表达式在当前运算符处分割为两个部分,左半部分和右半部分。递归计算:递归地计算左半部分和右半部分可能产生的所有结果。合并结果:根据当前运算符,将左右两部分的结果组合起来。处理基本情况:如果表达式中没有运算符(即只有数字),则直接返回该数字作为结果。

2024-04-08 23:17:46 699

原创 779. 第K个语法符号

位置判断:通过比较k和2 ** (n - 2),我们可以确定k是在前半部分还是后半部分。注意,2 ** (n - 2)是前半部分的长度。翻转逻辑:当k在后半部分时,我们需要找到它对应的前半部分的位置,并翻转结果。因为后半部分的每个元素都是前半部分对应元素的逆。递归调用:通过递归,我们逐渐减小问题的规模,直到达到基本情况(n == 1)。递归主体:检查k是否在当前行的前半部分,如果在,那么其值与上一行的位置相同;同时可以观察当前层是由上一层组成了前半部分,由前半部分的反转组成后半部分。可以先逐层求字符内容。

2024-04-08 14:07:56 136

原创 反转链表 II力扣刷题

给你单链表的头指针 head 和两个整数 left 和 right ,其中 left <= right。请你反转从位置 left 到位置 right 的链表节点,返回 反转后的链表。思路应该清晰:找到左右边界,切断形成子链表,反转该区间的子链表,与原始链表进行链接。

2024-04-08 00:18:58 279

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除