自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 通过代码,一步步解析ChatGLM的Lora微调实现细节

都说Lora是在原model上增加旁路,并且在训练时冻结原model、只训练旁路的一种高效参数微调方案。那么具体Lora是怎么将两个矩阵A、B引入模型、在哪些层增加Lora旁路、训练得到Lora参数后又是怎么合并参数的呢?让我们从代码入手,一步步探个究竟我直接用的是刘聪大佬的ChatGLM微调代码。

2024-03-12 23:24:54 1398

原创 LangChain+LLM大模型问答能力搭建与思考

利用LLMs超大语言模型能力,以及LangChain向量检索库,开发一个支持知识库问答(垂直领域问答)的系统,以及实战所思所想

2023-07-20 14:57:16 2236

原创 对各大预训练语言模型的简单总结和评述(BERT/RoBERTa/ALBERT/ELECTRA/ERNIE/structBERT/SpanBERT...)

前言本文系对BERT及其各种优化的简单总结。如RoBERTa、ALBERT、ERNIE、SBERT、MacBERT等。随积累,即时更新。总结BERT初始预训练任务简介:MLM,即完形填空。我们对一个sequence/句子中15%的token进行随机地mask,然后对这些被mask的token进行预测;NSP。判断两句话是否有上下文的关系。两句话可能来自不同的文章。在组成预训练数据时,有10%的可能随机将最大长度512的样本限制为小于512长度(BERT是128),一方面降低预训练时长,另一

2021-02-19 22:06:08 3340

原创 DPR-Dense Passage Retrieval for Open-Domain Question Answering 论文阅读

开放域的问答依赖于准确地文档召回。传统做法,通常依赖于TF-IDF或BM25这类方法。在本篇论文中,作者提出一种仅使用深度语义向量的方法进行召回,而这个文档的语义向量,即来自于简单的对偶encoder框架(说的这么玄乎,其实就是俩一样的BERT-encoder,分别处理query和doc),本文提出的模型框架,面对top20文档召回的准确率问题,相较于强大的Lucene-BM25,有至多9%~19%的效果提升,这帮助我们得到了一个全新的、端到端的sota QA系统。论文链接:https://arxiv.

2021-01-31 12:25:53 1346

原创 对抗训练的理解,以及FGM、PGD和FreeLB的详细介绍

对抗训练基本思想——Min-Max公式如图所示。中括号里的含义为,我们要找到一组在样本空间内、使Loss最大的的对抗样本(该对抗样本由原样本x和经过某种手段得到的扰动项r_adv共同组合得到)。这样一组样本组成的对抗样本集,它们所体现出的数据分布,就是该中括号中所体现的。外层min()函数指的则是,我们面对这种数据分布的样本集,要通过对模型参数的更新,使模型在该对抗样本集上的期望loss最小我们知道如何在已有数据上进行模型更新,但如何找到最佳扰动r_adv呢?很简单——梯度上升。所以说,对抗

2020-12-08 18:07:13 20648 11

原创 置顶-常用资源直接跳转

Pytorch:pytorch保存、载入模型,与state_dict()有关的操作NLP杂七杂八正则表达式语句速查 正则表达式小括号的使用

2020-12-02 10:43:35 262

原创 RMSProp/Momentum/Adam/AdamW,多种优化器详解及伪代码实现

多种梯度更新方法——都是对Gradient Descent的优化传统GDx = x - lr * grad_xAdaGrad——不同方向的梯度应该是可以不一样的为了解决不同方向上梯度涨落速度不一致的情况,所以相当于给每个方向不同的learning_rate。具体每个方向的lr大小要怎么拟定?——之前该方向上grad大的,就给小lr——即梯度变化幅度缓慢,那么就拉开步子大胆走。如上图的公式,历史grad总量和lr大小成反比,即该方向的总grad越小,则lr就越大。但该方法解决不了,在该方向上

2020-07-09 16:12:12 5025

原创 浅谈sigmoid函数和softmax函数

问题提出最近在找文本分类问题的trick,偶尔看到夕小瑶大佬的一个回答:在文本分类任务中,有哪些论文中很少提及却对性能有重要影响的tricks? - 夕小瑶的回答 - 知乎https://www.zhihu.com/question/265357659/answer/578944550里面有句话引起了我的注意:关于二分类二分类问题一定要用sigmoid作为输出层的激活函数?当然不是,尝试一下包含俩类别的softmax吧。可能多一条分支就多一点信息叭,虽然后者在数学形式上更丑一点,但是实践中

2020-06-02 17:53:42 5168 1

原创 ELECTRA论文阅读笔记

ELECTRA模型是对BERT的一次改进,该改进主要体现在对样本的使用效率上。具体实现方式,是引入了比较像GAN的一种架构——首先,使用一个较小的generator(生成器)将随机mask掉的token再预测出来,然后再将重新修复后的句子交给discriminator(判别器)进行判断,判断input中每个单词是否有被generator替换过。相比之下,BERT是先对一部分token进行随机ma...

2020-04-13 10:06:18 2222

原创 代码书写在if __name__ == ‘__main__‘前后的区别

首先,还是介绍下我为什么又想起这个“python初学者”的问题了。背景是这样的:我有个python脚本,在其中起了一个Flask服务,同时在里面还定义了处理中断信号(SIGINTfrom b import signal_handler # 导入b.py中定义的signal_handler函数。至于signal_handler里干了啥,其实就是close了一个数据库连接对象# Flask路由和其他逻辑...# 注册信号处理函数。

2024-03-14 14:33:58 430

转载 Git通过Tag标签回退版本以修复bug

本系列之所以取名”Git高级教程”,主要是教大家解决实际工作中遇到的问题,要求读者会基本的Git用法和命令,请不要使用SourceTree这样的工具,因为它让你啥都不会、啥也不懂,git本身与Linux一脉相承,都是Linustorvalds写的嘛,所以命令行才是精髓。廖雪峰的Git教程博主也是从这儿入门的,既然有这么好的教程,为什么还要写这个系列的博客呢?很简单嘛,这个教程只是入门教程,解决实际工作中遇到的问题还是不够的,所以博主专门写Git高级教程,记录如何解决实际工作中的问题。

2023-07-13 14:16:48 423

原创 用Python进行生成器generator的转发,以实现流式接口转发

最简单的Python流式接口——请求端和服务端的实现方法

2023-06-29 10:47:45 1104 1

原创 docker常见命令合集,速查手册

查看本地镜像:docker images一个容器:docker run [OPTIONS] IMAGE [COMMAND]启动已停止的容器:docker start [OPTIONS] CONTAINER停止一个容器:docker stop [OPTIONS] CONTAINER进入容器内部:docker exec [OPTIONS] CONTAINER [COMMAND]删除一个容器:docker rm [OPTIONS] CONTAINER。

2023-06-06 11:37:31 421

原创 【解决】 Could not get lock /var/lib/dpkg/lock-frontend - open (11: Resource temporarily unavailable)

bug解决

2023-05-15 11:30:08 5040 1

原创 使用pymupdf获取pdf文档中的文本下划线信息(全网唯一解决方案)

pdf文档中下划线的提取方式

2023-01-31 21:17:50 1358 3

原创 python googletrans翻译超长文本(长度大于15k)

解决googletrans的翻译长度限制

2023-01-30 11:44:03 1075 2

原创 python+selenium爬虫之解决51job滑块验证失败

window.navigator.webdriver和chromedriver的特征字符串修改

2022-11-02 14:06:01 8290 36

原创 selenium爬虫翻页、刷新+循环的深坑

selenium+Python StaleElementReferenceException

2022-10-25 16:58:26 3976 7

原创 neo4j图创建和图查询语句实战——一阶二阶查询、复合查询、增删改查...

neo4j的图查询语句实例。节点创建、关系创建、属性创建、图查询、多条件复合查询等

2022-10-09 15:00:15 1335

原创 tensorflow查看服务器可用的GPU

tensorflow查看服务器可用的GPU

2022-09-27 11:42:04 660

原创 pytorch从hdfs载入模型、从二进制字符串载入模型

pytorch从hdfs载入模型

2022-07-07 17:07:34 1626 2

原创 【解决】spark-sql在unix_timestamp上的深坑

spark-sql和hive-sql在unix_timestamp函数处理日期上的差异

2022-06-14 16:06:46 1992 1

原创 pyspark文档API速查

pyspark系列--pandas与pyspark对比 (强烈推荐!!) pyspark官方文档(最新版)(权威!) Pandas和PySpark中的DataFrame比较,(表格,一目了然) pyspark使用Python和pandas的UDF pyspark处理数据基本语法 单机用python写spark处理20G的数据​ ...

2022-04-27 17:37:46 1629

原创 pandas使用小记

最近,发现了个pandas十分有用的技巧,尤其是在你内存不足、数据量太大、耗时过长的情况下:假设df_groupby是我们按照df某个字段进行分组后的结果,我们现在要统计其中某个字段“name”的个数df_groupby.apply(lambda x: len(x['name']))df_groupby['name'].count()如上所示,这俩计数语句都很简单,看起来没差,但在你数据量足够大的情况下,这两句可能就是爆不爆内存的天壤之别了。第一句是常规写法,占内存更大、速度更慢;因而建议第

2021-09-29 15:08:29 132

原创 为何skip-gram相比于CBOW,对低频词更敏感?

CBOW是用window大小的滑动窗口内的词来表征中心词,skip-gram是用中心词来表征window大小的滑动窗口内的所有词; 训练效率而言,CBOW远胜skip-gram,随着语料或window_size的增加越发明显,因为CBOW对每个中心词只需做一次表征(embedding)学习,但skip-gram需要(window_size - 1)次; 性能上,对于常见词/高频词,CBOW占优;对于低频词,skip-gram更敏感。 非常浅显地解释: 对于这样一..

2021-09-07 16:23:24 1477

原创 linux查看某进程的开始时间、执行时长

ps -eo lstart 启动时间ps -eo etime 运行多长时间.ps -eo pid,lstart,etime | grep 66510这行命令含义:查看pid=66510的进程,其启动时间和运行时间是什么用linux ps查询进程的开始时间ps命令常用用法(方便查看系统进程)1)ps a 显示现行终端机下的所有程序,包括其他用户的程序。2)ps -A 显示所有进程。3)ps c 列出程序时,显示每个程序真正的指令名称,而不包含路径,参数或常驻服务的标示。4)p

2021-09-02 10:23:31 7606

原创 pandas to_excel如何突破65535的长度限制?

问题描述有时候,我们对数据表做了groupby、set_index设置多级目录后,就会想把DataFrame的格式导出成Excel格式,而非csv格式。因为导出成csv格式,可能多级index的格式就会消失,当你要输出个漂亮的格式给人看的时候,csv显然是不如excel好看的。不过,excel格式还有个蛋疼的缺点,那就是单个excel文件输出长度65535的限制。假如你的excel文件超长了,你大概会得到以下报错:~/anaconda3/lib/python3.6/site-packages/

2021-08-27 11:33:00 3937 4

原创 SQL各种join方法一目了然

JOIN、LEFT JOIN、RIGHT JOIN、OUTER JOIN、UNION (ALL)傻傻搞不清楚?见下:JOIN和UNION区别join 是两张表做交连后里面条件相同的部分记录产生一个记录集,union是产生的两个记录集(字段要一样的)并在一起,成为一个新的记录集 。换言之,JOIN是通过ON的字段,对两表所需字段进行合并,即合并其他有用字段(列/col合并);而UNION,是要求两表字段一样,对不同的记录进行合并(行/row合并)...

2021-07-19 10:21:47 808

原创 Hive中GROUP BY的坑

最近在学习一些hive SQL的东西。之前本以为自己有还算可以的SQL底子,用起来HQL是很轻松的,但真正上手才发现,坑真的很多。首先,就得说说hive中GROUP BY这个坑:坑1 Hive的GROUP BY是不能识别别名的select search_words, sum(order_cnt) over(PARTITION BY search_words ORDER BY price) AS whole_order_cnt,sum(is_drawback)FROM xxx.table

2021-04-25 20:31:44 4429 2

原创 Python堆排序,以及堆的应用(LeetCode-295、215)

python堆排序堆排思路建立大根堆:将数组中所有数入堆,即对所有数进行一遍 heap_insert() 操作;将该大根堆堆顶元素与堆中最后一个元素交换,然后 heap_size - 1 ;对当前堆顶变化的元素,进行一次 heapify() 操作,使heap重新变为大根堆;重复2~3步骤,直至 heap_size = 1 .堆排序代码实际上主要是写清楚heap_insert()和heapify()的操作class Solution(): def heap_sort(self, n

2021-01-21 17:56:36 396 1

原创 LeetCode-315,这可能是你能找到的注释最丰富的Python解答——分治+索引数组

题目及链接315. 计算右侧小于当前元素的个数给定一个整数数组 nums,按要求返回一个新数组 counts。数组 counts 有该性质: counts[i] 的值是 nums[i] 右侧小于 nums[i] 的元素的数量。示例:输入:nums = [5,2,6,1]输出:[2,1,1,0] 解释:5 的右侧有 2 个更小的元素 (2 和 1)2 的右侧仅有 1 个更小的元素 (1)6 的右侧有 1 个更小的元素 (1)1 的右侧有 0 个更小的元素 提示:0 <=

2020-12-18 21:07:56 428 1

转载 pytorch冻结模型中某几层的参数

本文系转载,写得很详细,故记录于此,方便查阅(实际上只看方法1就够了)链接:https://www.zhihu.com/question/311095447/answer/589307812先列出4种可行参考方法,最后列出一种方法的代码实现。首先假设如下的模型:class Char3SeqModel(nn.Module): def __init__(self, char_sz, n_fac, n_h): super().__init__() .

2020-12-16 17:28:16 9397

原创 Ubuntu一句话安装LibreOffice,解决“Error: source file could not be loaded“错误

最便捷的LibreOffice安装方法:sudo apt-get install libreoffice-common但如果我们按照上面这句话安装完后,执行 libreoffice --headless --convert-to txt xxx.doc 的时候,会报错:Error: source file could not be loaded原因是少装了LibreOffice的writer,直接执行:sudo apt-get install libreoffice-writer错误完美解决.

2020-12-02 17:52:17 7897 2

原创 pytorch中state_dict()和named_parameters()的差别,以及model.buffer/model.parameter

在使用pytorch过程中,我发现了torch中存在3个功能极其类似的方法,它们分别是model.parameters()、model.named_parameters()和model.state_dict(),下面就具体来说说这三个函数的差异首先,说说比较接近的model.parameters()和model.named_parameters()。这两者唯一的差别在于,named_parameters()返回的list中,每个元祖打包了2个内容,分别是layer-name和layer-param,而pa

2020-11-27 12:42:02 5561 10

原创 LeetCode-51.N皇后,Python的回溯法实现及详细讲解

51. N皇后题目:1. 思路关于N皇后问题。它也是一个回溯问题。为何?因为它也符合类似”深度优先搜索“的树形思路。例如,以4皇后为例,4*4的棋盘,假设我们从第一行开始算起,我们会发现,如果你选择第一行第一列(0, 0),那么一次为出发点,你可以去尝试接下来第二行的所有位置(1, 0) ~ (1, 3);假设你第二行选择了合适的放置位置(1, 2),那么你可以接着以[(0,0), (1,2)]为出发点考虑第三行所有位置是否放置皇后合适。显然,每个合适的皇后放置点,都是一个树形节点的开始,如

2020-11-14 16:17:49 1048

原创 如何在tensorboard中指定展示的曲线,并为其命名?

tensorboard --version : 2.3.0闲话少叙,直接上命令:tensorboard --logdir_spec name1:your/path/to/name1/event/dir,name2:your/path/to/name2/event/dir --port=11111如上所示,该命令有这么几个需要注意的地方:是--logdir_spec,而不是--logdir给出的tensorboard-events路径,是到其上层文件夹的,所以是它的文件夹路径路径不需要被多余的

2020-11-06 15:19:02 1666

原创 有关torch.nn.embedding的bug解决记录

废话少叙,直接上Traceback File "/home/shenfei1/anaconda3/envs/bert/lib/python3.6/site-packages/torch/nn/functional.py", line 1484, in embedding return torch.embedding(weight, input, padding_idx, scale_grad_by_freq, sparse)RuntimeError: Expected tensor fo

2020-10-13 17:38:11 13551 6

原创 torch.view()、transpose()和permute()的联系与区别

最近被pytorch的几种Tensor维度转换方式搞得头大,故钻研了一下,将钻研历程和结果简述如下注意:torch.__version__ == '1.2.0’torch.transpose()和torch.permute()两者作用相似,都是用于交换不同维度的内容。但其中torch.transpose()是交换指定的两个维度的内容,permute()则可以一次性交换多个维度。具体情况如code所示:transpose(): 两个维度的交换 >>> a = torch.Tenso

2020-09-23 16:09:11 4185 3

原创 使用flask发送文件,或服务器端解析发来送来的文件

问题提出最近遇到个需求,需要将doc/docx/pdf/xls等格式的文件发送到服务器,交给程序去解析。所以很自然地想到了使用flask。但之前我没有用flask传输过文件,所以这里经过了一些调研和尝试后,找到了一种很方便的方法,在这里分享一下由于我们一方需要发送文件,另一方需要接收文件,所以这个解决方案中需要包括两部分——请求端POST文件到服务器; 服务器端接收并解析收到的文件。问题解决请求端发送文件请求端发送文件,是使用requests执行的。发送的文件,实际上发送的应该是该文

2020-09-08 10:50:59 3269

原创 git多人协作时的分支管理

1. 为什么要多人协作一个项目可能有多个人同时开发,每个人负责自己的模块。比如开发一个问答系统,A开发分词和NER模块,B开发ElasticSearch数据库模块,C开发数据清洗模块,D开发精排模块,E开发问答模块。这种情况下,若大家都在master分支上开发,那么随时都会有人修改master分支、造成master分支混乱。此时正确的做法,就是让A~E每个人从master分支新建一个自己的开发分支,例如A_devel,然后自行开发,在开发时将自己的改动更新到自己的A_devel分支,在确保代码无误的情况

2020-07-30 17:13:29 7509 2

空空如也

空空如也

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

TA关注的人

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