【第十三周】李宏毅机器学习笔记11:自监督学习

摘要

这周主要学习了自监督学习的概念,了解了 BERT 是如何实现自监督学习以及 BERT 为什么能够有效地完成任务。除此之外,还通过 BERT 的四个例子来理解怎样使用 BERT 。最后了解了 Multi-lingual BERT 以及 GPT 的基本知识。

Abstract

This week, I mainly learned about the concept of self-supervised learning and how BERT achieves self-supervised learning, as well as why BERT work. In addition, I also understood how to use BERT by four examples. Finally,I learned about basics of Multi-lingual BERT and GPT.

1.Self-supervised Learning

在这里插入图片描述
对于监督式学习,我们需要一组带有 label 的训练资料,当我们把 x 输入模型之后将输出的 y 和对应的 label 作对比来训练模型。而自监督学习属于非监督式学习的一种,我们把训练资料 x 分为两部分,把其中一部分输入到模型中,再把另一部分作为 label 来训练这个模型。

1.1.Masking Input

在这里插入图片描述
BERT 的结构和 Transformer Encoder 很类似。当序列输入 BERT 时回随机盖住一个 token 的位置,然后将这个位置用一个特殊的 token 替换或者随机替换为另一个文字。经过如上处理之后,将盖住的位置经过一次线性的变化再通过一个 softmax 函数得到一个维度和所有文字数量相等的向量,再把这个向量和真实值代表的向量作交叉熵,并求最小交叉熵来训练模型。

1.2.Next Sentence Precdition

在这里插入图片描述

该任务旨在让模型预测两个句子是否连续。BERT会接受一对句子作为输入,并试图判断第二个句子是否是第一个句子的后续部分。不过,在后来的一些版本中,这个任务被其他任务所取代,因为发现它对某些任务的帮助不大。

在这里插入图片描述
产生 BERT 的过程称为 Pre-train(预训练), BERT 虽然只会做简单的“填空题”,但是经过 Fine-tune 之后可以应用于不同的任务。

在这里插入图片描述

GLUE(General Language Understanding Evaluation)是一个用于评估自然语言理解系统的基准测试集合。GLUE基准测试集合包含多个不同的自然语言处理任务,旨在全面评估模型在不同语言理解任务上的表现。这个基准测试集合的目的是为了推动自然语言处理(NLP)领域的发展,尤其是那些需要深刻理解语言的任务,如情感分析、语义相似度判断、问答系统等。

GLUE 基准测试集合包括以下九种语言理解任务:

  1. CoLA (Corpus of Linguistic Acceptability):判断句子是否符合语法规则。
  2. SST-2 (Stanford Sentiment Treebank):二分类的情感分析任务。
  3. MRPC (Microsoft Research Paraphrase Corpus):判断两个句子是否为同义句。
  4. QQP (Quora Question Pairs):类似于MRPC,判断两个问题是否在语义上相同。
  5. STS-B (Semantic Textual Similarity Benchmark):评估两个句子的语义相似度。
  6. MNLI (Multi-Genre Natural Language Inference Corpus):多体裁自然语言推理任务。
  7. QNLI (Question Answering NLI):基于SQUAD数据集的单句分类版本。
  8. RTE (Recognizing Textual Entailment):判断两个句子之间是否存在蕴含关系。
  9. WNLI (Winograd Schema NLI):处理需要常识推理的代词消解问题。

1.3.How to use BERT

1.3.1.Case 1

在这里插入图片描述
在情感分析问题中,输入一个序列输出一个类别,其中 BERT 需要先经过预训练来初始化参数,而 Linear部分仅需随机初始化。BERT 的部分输入非监督式学习,而在下游任务的环节需要一部分标注的资料,这属于监督式学习。因此,整个环节应该属于半监督式学习。

1.3.2.Case 2

在这里插入图片描述
对于词性标注问题也一样,BERT 参数不是随机初始化,而是在Pre-train 阶段就找到一组比较好的初始化参数了。

1.3.3.Case 3

在这里插入图片描述

NLI(Natural Language Inference,自然语言推理)是一项重要的自然语言处理(NLP)任务,它涉及到判断两个句子之间的逻辑关系。NLI任务的核心在于理解两个句子之间的逻辑联系,并根据这种联系做出合理的推断。具体来说,NLI任务通常包含两个句子:前提句(premise)和假设句(hypothesis),任务是确定假设句相对于前提句的逻辑关系。

在这里插入图片描述
将两个句子输入 BERT 产生一组新的向量,将 CLS 产生的向量丢到 Linear transform 就可以得到相应的类别了。其中,BERT 的参数也是预先训练好的。

1.3.4.Case 4

在这里插入图片描述
QA 任务中将文章和问题一起输入 QA Model 中,然后会吐出两个正整数,这两个正整数就代表了正确答案的范围。

1.4.Why does BERT work?

在这里插入图片描述
将文字序列通过 BERT 之后产生的向量蕴含着文字本身的含义。例如“果”和“草”、“鸟”和“鱼”由于意思比较相近,所以在向量空间中的分布相近。但是 BERT 会考虑上下文的因素,比如“吃苹果”中的“果”和“苹果手机”的“果”距离较远。

在这里插入图片描述
我们可以验证一下对于一个同样的字在两句不同的语句的向量相似度。

在这里插入图片描述
图中颜色越鲜艳代表相似度越高,可以看到前五句话互相之间相似度较高,而前五句话和后五句话相似度就比较低了。

那么究竟为什么 BERT 可以产生代表语义的向量呢?

从语言学的观点来看,一个词语的意思和它的上下文有关。

在这里插入图片描述
BERT 正是从它的上下文抽取资讯来预测缺失的向量。

1.5.Multi-lingual BERT

在这里插入图片描述
Multi-lingual BERT(mBERT)是BERT的一个多语言版本,旨在支持多种语言的自然语言处理任务。mBERT 在设计上与单语言的BERT非常相似,但其预训练数据集包含了104种不同语言的文本,这使得 mBERT 能够理解和生成多种语言的文本表示。
在这里插入图片描述
用英文的 QA 资料集训练,然后在中文上测试,正确率居然表现也还不错。将中文和英文一起训练后正确率甚至快接近人类的正确率了。

为什么在英文的训练集里训练 BERT 之后在中文测试里依旧有效呢?

在这里插入图片描述
原因就是不同语言描述同一事物或者相似事物的 embedding 很接近。

在这里插入图片描述
对于这个解释还有一个古怪的地方:在英文资料上 BERT 可以做英文的填空题,而在中文资料上 BERT 可以做中文的填空题。如果说两种不同的语言本质上没有区别,那 BERT 怎么会知道它应该要做中文还是英文的填空题?

事实上,BERT 自身是清楚不同语言本质上的差异的。

在这里插入图片描述
我们将所有英文的平均 embedding 求出来,再将所有中文的平均 embedding 求出来,最后将两者相减得到图上这个蓝色向量。这个向量就代表了中文和英文之间的差距。我们将 “there is a cat” 输入 BERT 后得到的向量加上这个蓝色向量,最后很神奇的就可以得到“那有一猫”。

在这里插入图片描述
我们把上图的英文句子输入 BERT 之后,再加上蓝色的那个向量,机器就可以实现在英文里做中文的填空题。由此可知,不同语言的资讯也会隐藏在 BERT 的 embedding 里。

1.6.GPT

在这里插入图片描述
如果说 BERT 是在做填空题,那么 GPT 其实就是在做词语接龙。

GPT(Generative Pre-trained Transformer)是一系列由OpenAI开发的大型语言模型,旨在生成自然语言文本。GPT模型基于Transformer架构,通过大规模的无监督预训练和有监督微调,能够在多种自然语言处理任务中表现出色。以下是GPT的几个关键特点:

  1. Transformer架构: GPT模型使用了Transformer架构,这是一种基于自注意力机制(self-attention mechanism)的神经网络模型。Transformer架构允许模型在处理长序列时并行化操作,提高了训练效率和模型性能。
  2. 大规模预训练: GPT模型在大量未标注的文本数据上进行预训练,学习通用的语言表示。预训练的目标通常是预测文本中的下一个单词(语言建模任务)。
  3. 有监督微调: 在预训练之后,GPT模型可以通过在特定任务的小数据集上进行微调,以适应具体的自然语言处理任务,如文本分类、情感分析、问答系统等。
  4. 生成能力: GPT模型具有强大的生成能力,可以生成连贯、自然的文本,包括文章、故事、诗歌等。这种生成能力使得GPT在创意写作、对话系统等领域有广泛的应用。

2.PyTorch复习

2.1.线性模型回顾

import numpy as np
import matplotlib.pyplot as plt

x_data = [1.0, 2.0, 3.0]
y_data = [2.0, 4.0, 6.0]


def forward(x):        # 前馈阶段
    return x * w


def loss(x, y):        # 定义损失函数
    y_pred = forward(x)
    return (y_pred - y) * (y_pred - y)


w_list = []            # 存放每次调整参数的列表
mse_list = []          # 每次参数对应的方差列表
for w in np.arange(0.0, 4.1, 0.1):
    print('w=', w)
    l_sum = 0
    for x_val, y_val in zip(x_data, y_data):
        y_pred = forward(x_val)
        loss_val = loss(x_val, y_val)
        l_sum += loss_val
        print('\t',x_val, y_val, y_pred, loss_val)
    print('MSE=', l_sum / 3)
    w_list.append(w)
    mse_list.append(l_sum / 3)


plt.plot(w_list, mse_list)
plt.ylabel('Loss')
plt.xlabel('w')
plt.show()

在这里插入图片描述

2.2.梯度下降法回顾

import numpy as np
import matplotlib.pyplot as plt

x_data = [1.0, 2.0, 3.0]
y_data = [2.0, 4.0, 6.0]
w = 1.0
lcost = []
lepoch =[]


def forward(x):
    return x * w


def cost(xs, ys):
    cost = 0
    for x, y in zip(xs, ys):
        y_pred = forward(x)
        cost += (y_pred - y) ** 2
    return cost / len(xs)


def gradient(xs, ys):
    grad = 0
    for x, y in zip(xs, ys):
        grad += 2 * x * (x * w - y)
    return grad/len(xs)


for epoch in range(100):
    cost_val = cost(x_data, y_data)
    grad_val = gradient(x_data, y_data)
    w -= 0.01 * grad_val
    lepoch.append(epoch)
    lcost.append(cost_val)


plt.plot(lepoch, lcost)
plt.ylabel('cost')
plt.xlabel('epoch')

plt.show()

在这里插入图片描述

总结

BERT(Bidirectional Encoder Representations from Transformers)是一种由Google在2018年提出的自然语言处理预训练技术。它使用了Transformer架构,这是一种基于自注意力机制的神经网络模型,能够并行处理数据,相比传统的循环神经网络(RNN)等序列模型大大提高了效率。与传统的单向语言模型不同,BERT是双向的,这意味着它在处理文本时可以同时考虑一个词前后的上下文信息。这使得BERT能够更好地理解词语在句子中的含义。BERT采用了两阶段的方法来处理自然语言任务。首先是在大量未标注的数据上进行预训练,学习通用的语言表示;然后在特定的任务上进行微调,通过少量标注数据进一步优化模型,以适应具体的任务需求,如情感分析、问答系统、命名实体识别等。由于其强大的语言理解和生成能力,BERT及其变体已经被广泛应用于各种自然语言处理任务,并取得了显著的效果。自BERT发布以来,许多研究机构和公司都提出了自己的改进版本,如RoBERTa、ALBERT、Electra等,这些模型在不同的应用场景中表现出色。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值