NLP
文章平均质量分 83
Bernard_Yang
致力将晦涩难懂的东西讲明白
展开
-
GPT2代码拆解+生成实例
通常我们的logits是(B,T,C)形式,其实B为batch,T为length,C为channel也就是embd维度,为768,N=BxT,而数据input和target为(B,T)形式,所以target的维度要与shift_logits.view(-1, shift_logits.size(-1))的第一维N一致。在ffd中首先进行emb->emb x 4的转换然后再进行emb x 4->emb的转换。在Attention中首先将输入的embedding经过conv1D将维度变成3。原创 2023-02-14 01:36:45 · 1708 阅读 · 1 评论 -
Transformer中使用的position embedding为什么是加法而不是concat
transformer中使用的position embedding为什么是加法给每一个位置 xi∈R(d,1)x^{i} \in R^{(d, 1)}xi∈R(d,1) concat 上一个代表位置信息的 one-hot 向量 pi∈R(N,1)p^{i} \in R^{(N, 1)} \quadpi∈R(N,1) (N代表共有 N\mathrm{N}N 个位置)形成 xpi∈R(d+N,1)x_{p}^{i} \in R^{(d+N, 1)}xpi∈R(d+N,1), 它也可以表示为 [[xi]T,[原创 2022-05-15 23:34:49 · 1741 阅读 · 2 评论 -
Pytorch CHATBOT TUTORIAL attention decoder (Luong) 维度变化讲解
在上一篇中介绍了seq2seq for translation中decoder with attention的维度变化,这篇将介绍另一个pytorch教程chatbot中 attention decoder的部分模型架构为传统的seq2seq模型encoder负责将变长的句子转变为固定长度的vector,包括了句子的语义decoder将input word和encoder输出的向量作为输入,每次输出一个output预测这个时间步的输出word,以及一个hidden作为下一次时间步的输入。关于en原创 2022-03-22 00:38:25 · 722 阅读 · 0 评论 -
Pytorch 教程TRANSLATION WITH A SEQUENCE TO SEQUENCE NETWORK AND ATTENTION (Bahdanau)维度变化讲解
原链接来自pytorch官方教程Attention allows the decoder network to “focus” on a different part of the encoder’s outputs for every step of the decoder’s own outputs.attention可以 让decoder在每个step关注encoder输出vector的不同部分First we calculate a set of attention weights. The原创 2022-03-21 06:14:35 · 1913 阅读 · 1 评论 -
GPT2模型源码阅读系列(四)一Attention
终于到了重头戏Attention类,主要关注点为cross_attention, self_attention, split_head, layer_pastAttention类中的merge_heads()函数用来将多头注意力聚合操作结果张量a的注意力头维度进行合并,令多头注意力聚合操作结果张量a的形状由(batch_size, num_head, 1, head_features)变为(batch_size, 1, all_head_size)split_heads()函数用来对query张量、k原创 2022-03-16 06:47:23 · 1717 阅读 · 3 评论 -
GPT2模型源码阅读系列(三)一Block
在上一篇GPT2模型源码阅读系列(二)一GPT2Model中,调用Block的部分为 outputs = block( hidden_states, layer_past=layer_past, attention_mask=attention_mask, head_mask=head_mask[i],原创 2022-03-16 06:31:07 · 2110 阅读 · 1 评论 -
GPT2模型源码阅读系列(二)一GPT2Model
在GPT2Model类中,模型的主体包含了词嵌入层self.wte位置嵌入层self.wpeDropout层self.drop包含12个Block模块的ModuleList层self.h以及最后的LayerNormalization层self.ln_fGPT2Model类中,会对输入的input_ids张量、token_type_ids张量、position_ids张量、attention_mask张量等进行方面的预处理第一次迭代时,input_ids张量、token_type_i..原创 2022-03-16 06:05:49 · 4091 阅读 · 1 评论 -
GPT2模型源码阅读系列一GPT2LMHeadModel
GPT2论文 Language models are unsupervised multitask learnersGPT2模型结构transformers库中的GPT2模型源码几部分分别为 GPT2LMHeadModel类、GPT2Model类、Block类、MLP类与Attention类其中,一个Transformer的Block类中包含了Attention类与MLP类,而在GPT2Model类中又以Block类为基础构建了12层Block的模型主体结构GPT2LMHeadModel主体为调用原创 2022-03-15 05:20:33 · 10705 阅读 · 1 评论 -
变分自编码器VAE
本文图片和公式统一和原始paper保持一致Auto-Encoding Variational Bayes问题描述考虑数据集 X={x(i)}i=1N\mathbf{X}=\left\{\mathbf{x}^{(i)}\right\}_{i=1}^{N}X={x(i)}i=1N包括 NNN 个 独立的来自连续或离散变量x\mathrm{x}x的样本. 该变量由 z\mathbf{z}z生成,有以下两个步骤z(i)\mathbf{z}^{(i)}z(i) 由先验概率pθ∗(z)p_{\boldsy原创 2021-11-10 22:17:53 · 776 阅读 · 0 评论 -
Transformer中MultiheadAttention代码实现
值得注意的几个点:词输出维度必须整除head个数以便计算forward中进行转置操作为了后续点乘方便mask只在decoder-enccoder中使用class MultiheadAttention(nn.Module): # n_heads:多头注意力的数量 # hid_dim:每个词输出的向量维度 def __init__(self, hid_dim, n_heads, dropout): super(MultiheadAttention, self)原创 2021-09-14 18:10:31 · 1114 阅读 · 0 评论 -
自然语言生成评测方法 BLEU, Distinct, F1 代码实现
#!/usr/bin/env python# -*- coding: utf-8 -*- import sysimport mathfrom collections import Counterif len(sys.argv) < 2: print("Usage: " + sys.argv[0] + " eval_file") print("eval file format: pred_response \t gold_response") exit()de原创 2021-09-08 18:09:01 · 2179 阅读 · 0 评论 -
LDA主题模型系列(二)求解之Gibbs采样
本系列分为三部分:LDA基本概念LDA求解之Gibbs采样LDA求解之变分推断EM算法该篇为LDA求解之Gibbs采样对于Gibbs采样不了解的可以参考这里回顾LDA模型原创 2021-05-05 21:48:56 · 846 阅读 · 0 评论 -
LDA主题模型系列(一)基本概念
本系列分为三部分:LDA基本概念LDA求解之Gibbs采样LDA求解之变分推断EM算法将参考刘建平老师的系列博客模型概念图:第一次看到这张图可能会有些懵,逐步拆解:一左一右分别代表两个狄利克雷分布的参数左边第一步:根据proportions parameter α\alphaα (分布的超参数,是一个 KKK 维向量)生成D个代表文档主题分布的狄利克雷分布θd=Dirichlet(α⃗)\theta_{d}=\operatorname{Dirichlet}(\vec{\alph原创 2021-05-03 03:12:32 · 424 阅读 · 0 评论 -
维特比算法在HMM和CRF中的应用
背景维特比算法是一个通用的解码算法,是基于动态规划的求序列最短路径的方法。一般应用场景为HMM(隐马尔可夫模型)中的解码(decoding)问题,在HMM模型的解码问题中,给定模型 λ=(A,B,Π)\lambda=(A, B, \Pi)λ=(A,B,Π) 和观测序列 O={o1,o2,…oT}O=\left\{o_{1}, o_{2}, \ldots o_{T}\right\}O={o1,o2,…oT}, 求给定观测序列OOO的条件下, 最可能出现的对应的状态序列 I∗={i1∗,i2∗,…iT原创 2021-04-30 07:01:32 · 393 阅读 · 0 评论 -
RNN 图示+问题(梯度爆炸or消失)+变形(LSTM+GRU)
W,U,V参数在整个过程共享training原创 2021-04-19 06:16:52 · 322 阅读 · 0 评论 -
语言模型 Language model
将条件概率中given的字的embedding作为input,NN输出的向量的第i维度为预测词在输入词典中的index原创 2021-04-19 06:13:24 · 91 阅读 · 0 评论 -
BERT
原文链接:The Illustrated BERT, ELMo, and co. (How NLP Cracked Transfer Learning) 作者:Jay Alammar BERT论文地址:BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding 前言 2018年可谓是自然语言处理(NLP)的元年,在我们如何.转载 2021-04-16 00:24:52 · 120 阅读 · 0 评论 -
ELMo基本原理和常见问题附带公示和图解
基本原理两阶段过程:利用语言模型进行预训练做downstream任务时从预训练网络中提取对应单词的来自网络各层的word embedding 作为新的补充特征第一阶段:利用语言模型进行预训练模型概览预训练网络使用双层双向LSTM,其中E1表示单词特征的embedding的来源根据论文原文可以是:via token embeddings or a CNN over characters语言模型训练的任务目标是根据单词的上下文预测WiW_iWi,WiW_iWi之前的单词序列为上文,之后的原创 2021-04-15 22:03:38 · 868 阅读 · 0 评论 -
Transformer概览总结
模型总览模型结构Transformer是个典型的encoder-decoder模型Encoder端由N个相同的模块堆叠而成,每个模块包含多头注意力模块和前馈神经网络模块。Encoder 端每个大模块接收的输入是不一样的,第一个大模块 (最底下的那个)接收的输入是输入序列的embedding(embedding 可以通过 word2vec 预训练得来),其余大模块接收的是其前一个大模块的输出,最后一个 模块的输出作为整个 Encoder 端的输出List item...原创 2021-04-12 07:31:12 · 1233 阅读 · 0 评论 -
注意力机制——Attention 原理和使用场景
背景seq2seq learning in machine translation:both input and output are sequences with different lengths一般的机器翻译模型可以用由encoder 和 decoder组成的RNN,encoder将原语言的词编码成向量,decoder把encoder编好的context向量解码成目标语言。随着decoder长度增加,信息衰减的严重程度也会增加。为了避免信息衰减,可以把context作为decoder的每个h原创 2021-04-01 07:26:08 · 987 阅读 · 0 评论 -
word2vec skip gram 直观理解、训练过程和负采样
word2vec skip gram 直观理解目标根据给定的单词预测与该单词同处一个窗口内其他每个单词出现的概率目标损失函数:针对每个窗口内非target word 的context word,构建C(θ)=−∑wi∑c=1Clogp(wO,c∣wI)C(\theta) = - \sum_{w_i}\sum_{c=1}^Clogp(w_O,c | w_I)C(θ)=−wi∑c=1∑Clogp(wO,c∣wI)损失函数并利用最大似然估计进行求解。网络结构第一层为输入的单词one-hot原创 2021-03-02 07:08:45 · 759 阅读 · 0 评论