Bert 原理与源码下载

()一 Bert原理介绍:

Bert是transformer的一种变体,所以这里先介绍一下transformer。tramsformer是一种基于多头注意力机制的模型,是NLP中非常重要的模型,本质上是一种Encode-Decoder结构。

上图就是transformer模型的主要结构,下面分别介绍模型结构的Encoder和Decoder部分。

(1)Encoder部分主要包括三个部分组成(a)输入部分;(b)注意力机制部分;(c)前馈神经网络部分。(a)输入部分,对于NLP中存在一个词汇表,词汇表中记录了我们常用的单词,对于词汇表以外的单词用<UNK>表示。我们可以使用one-hot编码,对输入的单词进行编码成序列长度,单词对应的位置为1,其余部分为0,这种方式会使得向量长度很长,并且存在大量的0占据内存,而且并不能表示两个词之间的联系。为了克服上述的缺点,提出 Word Embeding方式进行编码,设计权重矩阵W,将词向量与这个矩阵点成,将结果用于表示单词。相当于查找表。input Embeding主要包括(batch-size,length of sentense,word vector),Positional encoding主要采用正余弦的方式表示位置信息。pos表示单词的位置,i表示纬度。偶数维度用sin函数,奇数纬度用cos函数。这种方式可以表示位置信息主要原因在于sin(a+b)=sin(a)cos(b)+cos(a)sin(b)。

 

(b)主要是多头注意力机制。本质就是对于不同的单词具有不同的权重,对于单词的注意力的多少不同,计算公式如下图所示。Q,K,V三个矩阵,通过单词向量与向量Queries,Keys.Value值相乘。

注意力机制中的残差可以加深网络深度而避免梯度消失将原始数据X与注意力机制得到的结果相加。相加后经过Layer Normalization层(BN效果比较差,所以不太用),LN可以对一个样本所有单词做缩放。

 (c)就是前馈神经网络

 (2)Decoder部分,与Ecoder类似。mask主要是随机抹除掉某个单词,然后进行预测,不同于RNN预测是根据前面预测结果得到后面预测结果,mask主要通过上下文对空格进行预测。Multi-Head Attention 中的K,V矩阵,Q来自本身。

 Bert 主要是transformer中的Encoder堆叠在一起,他的输入与transformer的输入有所不同,而且BERT的Decoder也是使用transformer中的Encoder。下面介绍一下Bert的输入表示;其中input中[CLS]和[SEP]特殊字符主要用于NSP任务,NSP是一个二分类任务,判断两个句子之间的关系,即通过[CLS]接一个而分类器。[SEP]表示句子的标点。Token Embeddings就是对上面所有单词做初始化等。Segment Embedding主要是用于确定前后句子之间的关系,前句为0,后句为1.Position Embedding 主要是通过随机初始化使得模型自己学习出来单词的位置信息。其中mask主要是选择15%单词进行,这15%中的80%替换成mask;10%原封不动;10%替换成其他。

 二 Bert源码下载:

在pycharm的终端输入git clone +github上复制的url(GitHub模型地址GitHub - google-research/bert: TensorFlow code and pre-trained models for BERT

 Readme上面提供了许多预训练好的模型,如上图所示,可以直接下载。同时也有数据集的下载,完成后建立下图所示的文件夹目录

入口文件就是run_classifier.py文件,在对该文件进行运行之前要add configuration操作,步骤如下图run -> add configuration,然后如下。

 

 图中步骤二就是run_classifier.py文件的位置,步骤三复制下面所示即可:

--task_name=MRPC --do_train=true --do_eval=true --data_dir=../GLUE/glue_data/MRPC --vocab_file=../GLUE/BERT_BASE_DIR/uncased_L-12_H-768_A-12/vocab.txt --bert_config_file=../GLUE/BERT_BASE_DIR/uncased_L-12_H-768_A-12/bert_config.json --init_checkpoint=../GLUE/BERT_BASE_DIR/uncased_L-12_H-768_A-12/bert_model.ckpt --max_seq_length=128 --train_batch_size=2 --learning_rate=2e-5 --num_train_epochs=3.0 --output_dir=../GLUE/output/

最后运行该文件就行。

注意:我一开始运行出现很多错误后分析主要原因是我是同python3.8加tensorflow2.7.0版本不对应,在requirement.txt文件中知道tensorflow需要大于1.11.0版本而且只能是tensorflow1.0系列,最后我在Anaconda中重新建立虚拟环境,并且使用python3.6加tensorflow1.12.0版本后运行畅通无阻:建立虚拟环境步骤如下:

(1)打开 Anaconda Prompt

conda create --name ftvn1 python=3.6 anaconda

(2)激活虚拟环境

activate tfvn1

 (3)安装fensorflow

pip install tensorflow==1.12.0

(4)最后将项目的解释器改成新建的虚拟环境即可

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
<项目介绍> 基于Transformer模型构建的聊天机器人python实现源码+项目说明.zip基于Transformer模型构建的聊天机器人python实现源码+项目说明.zip 该资源内项目源码是个人的毕设,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到94.5分,放心下载使用! 该资源适合计算机相关专业(如人工智能、通信工程、自动化、软件工程等)的在校学生、老师或者企业员工下载,适合小白学习或者实际项目借鉴参考! 当然也可作为毕业设计、课程设计、课程作业、项目初期立项演示等。如果基础还行,可以在此代码基础之上做改动以实现更多功能。 一、简介 基于Transformer模型构建的聊天机器人,可实现日常聊天。 二、系统说明 2.1 功能介绍 使用者输入文本后,系统可根据文本做出相应的回答。 2.2 数据介绍 * 百度中文问答 WebQA数据集 * 青云数据集 * 豆瓣数据集 * chatterbot数据集 由于数据集过大,因此不会上传,如有需要可以在issue中提出。 2.3. 模型介绍(v1.0版本) 基于Transformer模型,使用Python中的keras-transformer包。 训练的参数文件没有上传,如有需要可在issue中提出。 三、注意事项 * keras-transformer包需要自行安装:`pip install keras-transformer`。 * 如果需要实际运行,参数文件放在`ModelTrainedParameters`文件下;`ListData`文件下包含了已经处理好的字典等数据,不需要修改,直接运行Main.py即可。 * 如果需要自行训练,将数据集文件放在`DataSet`文件下。 * `HyperParameters.py`文件中包含了系统所需要的超参数,包括文件路径等,可根据需要自行修改;其中包含了训练模型、重新训练模型、测试模型(实际运行)的控制参数,可自行修改使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值