这篇文章也将以问答的形式介绍Bert模型的相关技术,欢迎读者提出问题、意见和建议。
问题1:Bert模型的全称是什么,用来做什么?
回答:Bert模型的全称是“Bidirectional Encoder Representations from Transformers”, 从名称上来看,其作用是编码器,将语言进行编码表示,bidirectional的意思是双向的,即考虑了语言的上下文的更加全面细微的信息。可以看成是NLP中一种普适的语言特征提取的工具,供下游的NLP任务去对语言进行feature engineering。Bert作为语言的一种通用的作用模型,利用了互联网上的大量的未标记的数据进行的无监督学习,用户可以下载已经训练好的参数的bert模型去构建更加细分的NLP任务,如知识问答(question answering),情感分析(sentiment analysis)等。
问答2:既然Bert用来构建语言的特征用来更加细分的下游任务,其和word2vec等词嵌入模型有哪些区别?
回答:Bert和word2vec等都是语言特征模型,其作用有相似的地方,但也不同。具体表现为:1、词嵌入算法如word2vec等是基于浅层的神经网络,其特征的构建和表达能力相对就会弱一些,如word2vec中一个词只对应一个向量,在模型训练完成后成为静态的表示,没有充分考虑其多义性,而且无法捕捉长距离上下文依赖;2、Bert是对一整个句子的特征表示(是整个句子序列的上下文敏感嵌入,而不是基于一个个词),而且基于双向的表示特性,能够捕获单词在上下文较长距离的敏感信息,对同一个词在不同的上下文序列的不同含义能够进行有区分的编码。虽然通过拼接word2vec等word embedding也可以表示语言序列,但是在处理复杂的NLP任务中Bert具有明显的优势。
问题3:Bert的模型结构,输入输出是什么?其和Transformer的自编码器中的编码器部分的模型结构上有什么不同,双向性在模型结构上如何体现?
回答:首先Transformer的结构能够对序列的所有位置关系进行建模,自然包含双向性,这和双向LSTM的概念不一样(LSTM本身只单向的构建顺序关系,可以堆叠逆向的LSTM去构建双向LSTM,也有称为no causal)。Bert使用的就是Transformer自编码器中的编码器的部分。Bert的输入为:1、词嵌入,BERT使用WordPiece分词,每个词或子词都有一个词嵌入,2、位置嵌入,positional embedding,和Transformers自编码器或seq2seq模型中的位置嵌入一样;3、分段嵌入,对于句对的任务,如问答,下一句预测任务,前一句的分段嵌入为A,下一句的分段嵌入为B;特殊标记,[CLS]开头表示整体对句子进行“分类”,[SEP]分隔符表示句子结束。Bert的输出为每个输入词汇的新的嵌入(新的表示,同一个词在不同的句子中的输出的词嵌入可能不同)。这些词嵌入的汇合可以作为下游细分NLP任务的输入。
问题4:上面问题中的WordPiece是什么,和一般的word2vec等的token分词有什么区别?
回答:wordpiece可以通过算法基于词汇表进行构建,具体可以参考引文2中的说中的说明,wordpiece将单词分成subwords后,这些piece怎么转换成token的呢,Example: Original Text: “ChatGPT is fascinating.” WordPiece Tokens: [“Chat”, “##G”, “##PT”, “is”, “fascinating”, “.”],其中以##开头的即为subword(word piece).加上格式化后,整个句子的token将变为:Example: Original Text: “ChatGPT is fascinating.” Formatted Tokens: [“[CLS]”, “Chat”, “##G”, “##PT”, “is”, “fascinating”, “.”, “[SEP]”]。WordPiece是一种分词(Tokenizer)算法,和Byte Pair Encoding(BPE)分词算法有较大相似性,分词方法还有普通的用正则文法表示的分词,以及更高级的做了词根处理词源等复杂处理的分词,也有基于中文的特殊分词器,如jieba。WordPiece从单个字符开始,通过统计现有vocabulary中的词对的联合概率,将最大的进行合并,一直进行到达到词汇表容量停止。WordPiece和BPE算法类似,都支持未登录词OOV(out of vocabulary)词的处理。
问题5:Bert模型如何从头开始训练,如果利用已经训练好的模型在下游的细分任务和细分数据集上进行迁移学习微调参数?
从头训练Bert模型需要:1、准备大量的语料库,可以从互联网上搜集大量的未标记的语料库;2、通过wordpiece去构建输入的token;3、Bert的训练有两个任务,一个为MLM。Masked Language Model (MLM),即在样本中随机屏蔽一些词汇,然后在输出时的标签中被屏蔽的部分的label为token id,而其他未屏蔽的部分为-100,负值的label不参与loss的计算;第二个任务为NSP(下一个句子预测),通过构建正负样本(从语料库中选择前后句子对作为正样本,随机选择下一个句子作为负样本,并且为了第一个任务的输出,也以相应的概率构建屏蔽词汇),第二个任务通过一个全连接层输出分类的结果。这两个任务分别对应着两个loss,通过loss求和实现两个任务同时进行训练。
问题6:Bert训练过程中有两个输出,在提供的预训练模型用于推理时,其输出是什么?
回答:Bert用于特征提取的时候的特征层时的每一个token对应的特征维度为768(base模型时),在训练时,不同任务会接不同的分类输出层,如MLM接词汇量大小的分类(在BERT的Masked Language Model (MLM) 任务中,MLM输出层的输入是对应被屏蔽词(token)位置的特征值。这些特征值是从Transformer编码器层输出的。在MLM任务中,可以只对被屏蔽标记进行预测,减少不必要的计算。),而NSP会接二分类等等(在BERT模型中,用于Next Sentence Prediction (NSP) 任务的输出层的输入是 [CLS] 标记对应的向量。该向量可以被视为整个输入序列(包括句子对)的特征表示。)。输入序列的最大长度(max length)是一个重要的超参数,通常使用的最大长度是512,也可以根据任务来进行调整,如情感分析,文本分类等简单些的任务可以为128或256。在进行下游任务时,即可以提取特征层的结果作为下游任务的输入,也可以fine-tune整个模型,从而根据具体任务更新Bert模型的参数。这是传统的词嵌入向量,将每个标记(token)的ID映射到一个固定维度的向量空间。例如,使用预训练的词嵌入矩阵将每个token ID转换为一个向量。这样保证了词嵌入embedding的长度。词嵌入矩阵可以通过word2vec等算法事先进行学习后有一个好的初始化,也可以一开始进行随机初始化,词嵌入矩阵将作为网络参数的一部分在整个过程中参与参数更新进行学习后得到。
References
Leave a Reply