2021SC@SDUSC
1.简介
Bert在自然语言处理(NLP)领域刷新了 11 个任务的记录,万众瞩目,成为异常火热的一个预训练语言模型。相信不少人入门学习Bert模型都倾向于提纲挈领,先明白它的输入输出形式以及预训练过程中的处理,本文结合代码和相应的数据集带大家一起解密Bert模型的输入输出。
2.输入输出处理

这是一个运用bert模型对句子进行分类的应用的原始数据集(训练集)形式,由上图不难看出该数据集由关键词、关键词位置、文本和标签四个属性组成。而最终经过处理得到的能够直接传入bert模型进行预测的数据形式如下图:

这其中有一些基本概念在我的上一篇博客中有所说明,大家可以参考:
(80条消息) 文本分类半监督学习_永远只有12划的博客-CSDN博客
下面引入相关的代码来进行分析:

?第一段代码定义了一个get_train_examples方法和train_examples数组分别对原始数据集进行预处理和结构化存储。
第二段代码首先对每一个字段进行了bert分词和编码工作,即将每一个词映射到词向量空间中进行编码,将所有词转换成向量。接着定义了len_padding变量,这是为了确保所有句子经过编码后的最终长度相同,一般在配置文件中会设置一个max_sequence_len作为所有句子编码后的最后长度,所以对于一些长度不够的句子就需要进行填充(padding)。根据代码最后解释一下[101],[102]。需要了解 BERT 分词器(tokenizer)将这些句子划分成词(token),然后,我们再加入句子分类所需的特殊词(在句子开始加入 [CLS],末端加入 [SEP])。因此不难想到[CLS]对应于词向量空间的[101],而[SEP]对应词向量空间的[102]。至此一个能够直接放入Bert模型进行训练或预测的数据集就完成了。
数据集和代码附上github网址如下:
https://github.com/XuelinLuu/NLPwithDisasterTweets https://github.com/XuelinLuu/NLPwithDisasterTweets?
?
|