NLP
文章平均质量分 81
*Lisen
这个作者很懒,什么都没留下…
展开
-
矩阵混乱度(熵值)代码计算
极端混乱度,熵值最大。最大值为log_2(dim),实例的dim为4,索引log_2(4) = 2。极端混乱度,熵值最小,最小值跟矩阵的维度无关,基本都为0。增加混乱度,熵值减小。原创 2024-04-19 14:13:59 · 767 阅读 · 0 评论 -
Facebook的ZeRO算法原理及简单代码实验(小显卡训大模型)
ZeRO算法将显存优化到底原创 2022-08-09 15:20:06 · 3484 阅读 · 2 评论 -
apex和pytorch autocast混合精度训练速度和时间对比
众所周知,自从pytorch更新1.6版本之后,就引入了自家的混合精度训练模式(下面统称autocast),这种方法简单,只需要添加几行代码即可实现,可以说是pytorch爱好者的福音。autocast在面对主流的apex时,是完爆还是被吊打呢,请看下面分析:模型架构:Transformer-xl环境:python3.6.9 、torch1.7.1、cuda==10.11、即不用apex,也不用autocastbatch size = 1占用内存:7561M,每个batch的时间为285原创 2021-06-23 19:04:12 · 1748 阅读 · 8 评论 -
论文笔记 -《All NLP Tasks Are Generation Tasks: A General Pre-training Framework》
1、摘要 随着NLP技术的发展,越来越多的新的预训练架构不断刷榜,包括自回归模型(例如GPT)、自动编码模型(例如 BERT)和编码器-解码器模型(例如 T5)。自然语言处理任务在本质可以分为分类、无条件生成和条件生成。但是,目前没有一个预训练框架能够很好地完成所有任务。而在本文中,提出了一种通用语言模型(General Language Model,GLM)来解决这个问题。GLM模型结构有三个主要优点: (1)用一个模型就能在它分类、无条件生成和条件生成任务上表现良好; (2)改进了预训练-微调一致性原创 2021-04-18 16:57:02 · 1004 阅读 · 0 评论 -
论文笔记 -《Self-Attention Attribution: Interpreting Information Interactions Inside Transformer》
1、摘要 基于 transformer 的模型的巨大成功得益于强大的多头自我注意机制,该机制从输入中学习token依赖并编码语境信息。先前的工作主要致力于针对具有不同显著性度量的单个输入特性的贡献模型决策,但是他们没有解释这些输入特性如何相互作用以达到预测。这篇论文就提出了一种用于解释Transformer内部信息交互的自注意属性算法ATTATTR。文章以 BERT 模型为例进行了以下实验: (1)提取各层最显著的依赖关系,构造属性图,揭示Transformer内部的层次交互; (2)用自我注意原创 2020-08-27 16:07:19 · 2108 阅读 · 3 评论 -
论文笔记 -《Dense Passage Retrieval for Open-Domain Question Answering》
1、摘要 开放域问题回答依赖于高效的文本检索来选择候选段落,传统的稀疏向量空间模型用的较多的有TF-IDF 或 BM25算法,但这些算法仅仅是在词的匹配上进行检索,并未考虑语义的相关性,有很大的局限性。因此,论文提出了一种新的算法来检索候选段落,称之为:DPR算法。DPR算法在 top-20段落文本检索准确率方面比 Lucene-BM25系统高出9%-19% ,这非常有利于后续的QA任务的性能表现。2、解决问题 提高QA领域中问题段落检索准确性3、Dense Passage Retriever原创 2020-07-19 19:44:05 · 8036 阅读 · 0 评论 -
pytorch 模型训练时多卡负载不均衡(GPU的0卡显存过高)解决办法(简单有效)
本文主要解决pytorch在进行模型训练时出现GPU的0卡占用显存比其他卡要多的问题。如下图所示:本机GPU卡为TITAN RTX,显存24220M,batch_size = 9,用了三张卡。第0卡显存占用24207M,这时仅仅是刚开始运行,数据只是少量的移到显卡上,如果数据在多点,0卡的显存肯定撑爆。出现0卡显存更高的原因:网络在反向传播的时候,计算loss的梯度默认都在0卡上计算。因此会比其他显卡多用一些显存,具体多用多少,主要还要看网络的结构。因此,为了防止训练由于 out of memory原创 2020-05-14 13:29:42 · 23124 阅读 · 49 评论 -
宏平均(Macro-averaging)、微平均(Micro-averaging)和权重平均(weight-averaging)的理解
很多博客关于宏平均,微平均,权重平均介绍了一大堆的公式,让人看了一头雾水,本文主要重点介绍怎么计算,从实例出发,相信大家在跟着算完一遍之后就知道这三个平均的意思了。相关定义:真正例(True Positive,TP):真实类别为正例,预测类别为正例。假正例(False Positive,FP):真实类别为负例,预测类别为正例。假负例(False Negative,FN):真实类别为正例,预测类别为负例。真负例(True Negative,TN):真实类别为负例,预测类别为负例。以正例为例计算:原创 2020-05-13 16:08:27 · 9798 阅读 · 2 评论 -
语义相似度、句向量生成超强模型之SBERT《Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks》
1 前言随着18年底Bert的面世,NLP进入了预训练模型的时代。各大预训练模型如GPT-2,Robert,XLNet,Transformer-XL,Albert,T5等等层数不穷。但是几乎大部分的这些模型均不适合语义相似度搜索,也不适合非监督任务,比如聚类。而解决聚类和语义搜索的一种常见方法是将每个句子映射到一个向量空间,使得语义相似的句子很接近。说到这,可能有的人会尝试将整个句子输入预训练模型中,得到该句的句向量,然后作为句子的句向量表示。但是这样得到的句向量真的好吗?在论文《Sentence-BER原创 2020-05-09 14:20:23 · 27239 阅读 · 17 评论 -
解决RuntimeError: reduce failed to synchronize: device-side assert triggered问题
首先,上一波报错信息:/pytorch/aten/src/THC/THCTensorIndex.cu:362: void indexSelectLargeIndex(TensorInfo<T, IndexType>, TensorInfo<T, IndexType>, TensorInfo<long, IndexType>, int, int, IndexTy...原创 2020-04-07 11:04:23 · 4305 阅读 · 4 评论 -
bert在预训练时的两个下游任务详解
一直很困惑bert在经过transformer的encoder之后的两个任务是怎么做的。比如:这两个任务的loss函数是什么?拿到encoder输出做了什么?很多人都是这么回答的:bert的loss就是下一句预测的分类loss和mask词的预测loss拿encoder输出直接算loss啊如果你继续问:那他们的loss都分别怎么算的?相信很多人都讲不出来。下面就详细在这阐...原创 2020-03-11 18:28:05 · 13804 阅读 · 28 评论 -
手把手教你使用谷歌cloud tpu(从创建虚拟机到进行pytorch训练)
当然,要想用谷歌的东西,首先必须有一个谷歌的账号。如何创建谷歌账号不是本文的重点。本文是基于你有谷歌账号,并申请了免费的谷歌TPU的情况下进行的。如果申请了免费的TPU或者打算付费使用,请继续阅读。谷歌vm和tpu简单介绍vm其实就是虚拟机,相当于一个电脑,需要使用谷歌的电脑才能连接他们家的tpu节点。创建谷歌vm第一种方法:google cloud platform创建:地址:http...原创 2019-12-06 16:34:21 · 5844 阅读 · 0 评论 -
语言模型评价指标 bpc(bits-per-character)和困惑度ppl(perplexity)
困惑度ppl(perplexity)ppl是用在自然语言处理领域(NLP)中,衡量语言模型好坏的指标。它主要是根据每个词来估计一句话出现的概率,并用句子长度作normalize,公式为:S – 当前句子;N – 句子长度;p(wi) – 第i个词的概率p(wi|w1w2w3…wi-1) – 这个表示基于前i-1个词,计算得出第i个词的概率,但有的语言模型是可以利用双向的,不知道是不是会...原创 2019-11-23 21:00:12 · 18100 阅读 · 0 评论 -
NLP自然语言处理中oov的词的解释
oov英文全称:out of vocabulary,即超出词表外的词。原创 2019-11-11 10:18:39 · 7659 阅读 · 0 评论 -
pytorch,numpy根据权重取值 -- np.random.multinomial,np.random.choice和torch.multinomial函数
np.random.multinomial(n, pvals, size=None) -> 取到的次数分布数组该函数表示根据一个概率数组,取若干次,得到一个次数分布数组参数说明:–n : 从矩阵中取值次数;–pvals:根据概率取值,这是一个数组,并且所有数据之和为1;–size:输出的维度,默认为1,即1 x pvals例子:a = np.random.rand(6)p...原创 2019-11-07 20:45:56 · 4615 阅读 · 0 评论 -
pytorch, numpy利用另一个数组的索引进行重排序,如torch.gather.......
import torchtorch.manual_seed(1)logits = torch.rand(3, 10)label_ids = torch.rand(3, 10)print(logits)print(label_ids)sorted_logits, indices = logits.sort(dim=1)new_label_ids = label_ids.gather(...原创 2019-11-05 17:08:01 · 6675 阅读 · 1 评论 -
pytorch的expand_as和expand
expand(*sizes) → Tensor参数:sizes的数组,可以是list,tuple,或者直接输入n, m例子:expand_as(other) → Tensor参数:tensorb = torch.arange(0, 6).view(6, 1, 1)print(b.shape) # torch.Size([6, 1, 1])c = torch.Tensor(6, 2...原创 2019-10-16 19:25:44 · 860 阅读 · 0 评论 -
pytorch中的scatter_add_函数解析
关于这个函数,很少博客详细的介绍。下面就我个人理解简单介绍下。函数:scatter_add_(dim, index_tensor, other_tensor) → 输出tensor参数:dim:表示需要改变的维度,但是注意,假如dim=1,并不是说self_tensor在dim=0上的数据不会改变,这个dim只是在取矩阵数据时固定了dim=1维的索引,不使用index_tensor矩阵中...原创 2019-10-16 17:13:52 · 12459 阅读 · 6 评论 -
numpy和pytorch实现简单的线性神经网络
numpy实现说明:一个全连接ReLU神经网络,一个隐藏层,没有bias。用来从x预测y,使用L2 Loss。h=W1Xh = W_1Xh=W1Xa=max(0,h)a = max(0, h)a=max(0,h)yhat=W2ay_{hat} = W_2ayhat=W2a这一实现完全使用numpy来计算前向神经网络,loss,和反向传播。forward passloss...原创 2019-10-15 13:34:02 · 568 阅读 · 0 评论 -
Bert/Transformer模型的参数大小计算
前段时间仔细研究了下Bert论文:《BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding》。发现bert其实用的网络结构就是Transformer,因此,又去仔细看了下《All attention is all you need》。对Bert和Transformer有了一个大概的理解。但是其...原创 2019-10-17 12:07:02 · 44226 阅读 · 26 评论