真·浅随笔·学习记录
一、为什么一开始选用Bert模型作为最后意图分类项目模型
Attention is all you need. Bert能很好的学习带有上下文语境的词向量和句子的前后顺序,但也有不足就是不能用来生成句子/词,毕竟其不是一个预测模型。
- 网络结构:完全双向,层数深,可表征的函数空间足够大,self-attention 克服了长距离依赖问题
- 预训练任务设计好:除了LM任务之外, 加了句子级别的任务,有利于句子语义的表示和学习
- 训练语料大,训练充分
二、于是关注到了Transformer、BERT、GPT、ELMo的架构对比、优缺点对比、功能目的对比。
(Transformer是我建模整个过程的基础,之前对其的了解不深,接下来首先是对其的统筹学习;GPT眼熟主要是最近热门的Chat GPT以及GPT4.0着实令人震撼;ELMo不是很了解,将作为其与其他的对比学习)
- 架构对比
Model Architecture Difference Transformer Encoder + Decoder BERT Transformer's Encoder GPT Transformer's Decoder ELMo Concatenate left-to-right LSTM and right-to-left LSTM - 优缺点对比
Model Good Bad BERT Great representation can't generate text GPT can generate text OK representation ELMo NA OK representation - 作用
Model Function Transformer 翻译(e.g. French - English) BERT 学习词向量,
Question & Answering,Sentiment classification,get word featuresGPT predict & generate (文章生成器) ELMo 学习词向量, get word features - 能否自回归
Model Auto regressive? Transformer NA BERT No GPT Yes ELMo Yes(forward and backwad)
三、NNLM → Word2Vec → Seq2Seq → Seq2Seq with Attention → Transformer → Elmo → GPT → BERT (爬楼梯进行系统学习)
学习 Transformer通俗笔记:从Word2Vec、Seq2Seq逐步理解到GPT、BERT-CSDN博客
一、一系列预训练模型原因:
- 很多机器学习模型都需要运用带标签的数据集进行训练
- 但是目前已有的存在大量没有标注的数据
-
训练数据少则很难很好地训练这么复杂的网络,但如果 1 先把好用的这些大模型的大量参数通过大的训练集合初始化大模型的大部分参数 ,2 再通过手头上少的数据去Fine-tuning(即微调参数),更适合解决当前的任务
二、Word Embedding后,很容易找出语义相近的其它词汇
三、N-gram模型→NNLM → Word2Vec
- N-gram模型:(语言模型都)是为了使得条件概率最大化,不过当前词只与距离它比较近的个词更加相关(一般不超过5,所以局限性很大)
- NNLM(神经网络语言模型):核心是一个多层感知机(MLP),它将词向量序列映射到一个固定长度的向量表示,然后将这个向量输入到一个softmax层中,计算出下一个词的概率分布。该模型不会只推荐一个单词,实际上,它对所有它知道的单词(模型的词库,可能有几千到几百万个单词)均按可能性打分,最终输入法程序选出其中分数最高的推荐给用户,模型的输出就是模型所知单词的概率评分,就像我实现文章评分优先推荐功能的思想。
-
Word2Vec的两种架构:CBOW(连续词袋,以上下文词汇预测当前词)->Skipgram(以当前词预测上下文词汇)模型
传统的one-hot 编码仅仅只是将词符号化,不包含任何语义信息。而且词的独热表示(one-hot representation)是高维的,且在高维向量(词典有多大就有多少维,一般至少上万的维度)中只有一个维度描述了词的语义。所以我们需要解决两个问题:1 需要赋予词语义信息,2 降低维度。Word2vec 最有价值的是让不带语义信息的词带上了语义信息,其次把词语从 one-hot encoder 形式的表示降维到 Word2vec 形式的表示。
四、Seq2Seq(从一个序列到另一个序列)→Encoder-Dencoder(RNN/LSTM与GRU)模型
Seq2Seq with Attention(解决信息过长导致信息丢失):计算相似性得出权重最后加权求和
五、Transformer 大规模预训练时代
- 编码:自注意力机制,1 通过生成查询向量、键向量和值向量后计算得分用softmax后加权求和 2 通过矩阵运算计算查询矩阵、键矩阵和值矩阵用softmax矩阵运算形式后实现;多头注意力机制,每个注意力头,只关注最终输出序列中的一个子空间,互相独立,有助于网络捕捉到更丰富的特征信息。
- CNN:提取的是局部特征,对于文本数据,忽略了长距离的依赖,CNN在文本中的编码能力低于RNN;RNN:1 对于每个输出的隐向量,包含信息最多的是当前的输入,随着距离的增加,信息衰减的越多 2 RNN是一个顺序的结构,隐向量无法同时并行计算,导致RNN的计算效率不高;But Transformer:1 包含其他词的信息不取决于当前词与其的距离,而是取决于两者的相关性 2 在对当前词进行计算的时候,不仅可以用到前面的词,也可以用到后面的词,而RNN只能用到前面的词(但也可以通过双向RNN来解决) 3 隐向量可并行计算。
- RNN的结构包含了序列的时序信息,而Transformer却完全把时序信息给丢掉了-->位置编码,即将每个位置编号,从而每个编号对应一个向量,最终通过结合位置向量和词向量,作为输入embedding,就给每个词都引入了一定的位置信息,这样Attention就可以分辨出不同位置的词。
- 解码:求和与归一化,解码器中自注意力层。
- 线性层、softmax层,Decoder输出的向量变成一个词。
- 训练过程:1 预处理阶段,创建词汇表 2 训练,随机初始化one-hot编码、损失函数、反向传播。
- 影响力:OpenAI基于它发展出了GPT,并不断迭代出GPT2、GPT3、GPT3.5及火爆全球的 ChatGPT、GPT4.0;Google则基于它发展出了在ChatGPT出现之前统治NLP各大任务的BERT。
六、BERT集大成
- Word Embedding(无法区分多义词的不同语义)-->ELMO(“Embedding from Language Models”,根据上下文动态调整,双层双向LSTM预训练+特征融合(将预训练的参数与特定任务的参数进行融合),虽然采用的双向结构,但两个方向是彼此独立训练的(伪双向),1 LSTM提取特征能力弱于Transformer 2 采用双向拼接特征融合能力弱于一体化的Bert) / GPT(“Generative Pre-Training”,生成式预训练,单向Transformer预训练+Fine-tuning,1 特征抽取器用的Transformer,解码器Decoder模块,GPT使用的Transformer结构就是将Encoder中的Self-Attention替换成了Masked Self-Attention,从而每个位置的词看不到后面的词,抛弃下文只通过上文预测单词 2 GPT的预训练虽然仍然是以语言模型作为目标任务,但是采用的是单向的语言模型)-->BERT(双向Transformer预训练+Fine-tuning,解码器Encoder模块)。
- 优势:1 特征抽取器用的Transformer 2 预训练采用双向语言模型(综合ELMO的双向优势和GPT的Transformer特征提取优势)
- 创新点:1 Masked语言模型(完形填空) 2 Next Sentence Prediction(判断句子B是否是句子A的下文) 3 多任务或多目标的训练过程
- BERT的输入部分是个线性序列,两个句子之间通过分隔符「SEP」分割,最前面是起始标识「CLS」,每个单词有三个embedding叠加: 1 单词embedding 2 句子embedding,用于区分两个句子,例如B是否是A的下文(对话场景,问答场景等)3 位置信息embedding,句子有前后顺序,组成句子的单词也有前后顺序,单词顺序是很重要的特征,要对位置信息进行编码。
- BERT的输出部分:0 第一个字符位置CLS对应Transformer输出分类结果 1 获得Masked word 位置信息,掩码取出,不定长 2 套上隐层 3 结果和词典对应单词矩阵乘法,即算e[masked]*e[dictionary word i]的内积,相似性 4 套上softmax预测最可能的单词 5 累加loss