文章目录
一、预训练模型简介
预训练模型的思路是通过预先使用大量数据对语料进行训练而得到词向量,用于下游任务的方法。常见的预训练模型有基于lstm的和基于transformers-encoder的。前者的代表是Elmo,后者又分为auto-encoder的Bert和auto-agressive的GPT。其中auto-agreesive的预训练语言模型由于天然的性质适用于生成类任务。
1. Transformers简介
由于生成类任务难度比较大,所以一般需要更加复杂框架transformers。Transformers使用了更加复杂的attention机制-multi-head Self-attention。 其复杂度是O(n^2)(n为序列长度)如果和RNN一样无法并行,那么计算量将非常庞大。所以TF引入了mask机制,在decoder部分可以并行,进而提升了效率。
TF的结构大致如下:6个ENCODER + 6个 DECODER. 其中 encoder由 Multi-head self-attention part 和 Feed-Forward Layer两个部分组成,两个部分后面又分别跟了一层 残差链接+Layer Normalization。 Decoder 部分和 Encoder很相似,最大的不同是前面增加了一部分 Masked Multi-head Self-attention 这部分是Decoder可以并行的关键。
2. Bert 简介
Bert 是基于 Transformers - encoder 的双向预训练语言模型。Bert有两个任务,一个是完形填空(MLM),另一个是(NSP)。
Bert的输入有三个部分 词向量,句子向量,位置向量。其中,位置向量是训练得来的,这点和transformer使用sin、cos的相对位置编码不同。
二、预训练模型如何运用在生成类中
预训练语言模型的使用有三种方式:
- 直接使用预训练语言模型得到的权重(词向量);
- 使用预训练语言模型的权重,但是增加微调;
- 修改预训练语言模型本身的训练过程。
第一种方式无需详细介绍,我们来看后两种方式
1. 使用预训练语言模型的权重,微调
将预训练语言模型得到的词向量与下游任务使用的模型得到的词向量concat,然后再使用self attention.
2. 修改预训练的方式
一种方式是使用MASS语言模型。该模型就是通过Masked输入文本中的k个连续词来预测。当mask一个词的适合MASS退化成bert的MLM,当mask所有词的时候,MASS又退化成 GPT。
另一种方式是UNILM,该模型的做法是将文本和摘要(原文和译文)通过[SEP]token连接在一起,通过mask方法将摘要不应该看到的位置mask掉,预训练的过程就变成了auto-encoder和auto-agressive相结合的方式,超级优雅。
1.引入库
代码如下(示例):
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import warnings
warnings.filterwarnings('ignore')
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
2.读入数据
代码如下(示例):
data = pd.read_csv(
'https://labfile.oss.aliyuncs.com/courses/1283/adult.data.csv')
print(data.head())
该处使用的url网络请求的数据。
总结
提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。