预训练语言模型及其在自然语言推理中的应用
立即解锁
发布时间: 2025-09-03 01:50:13 阅读量: 10 订阅数: 13 AIGC 


实战自然语言处理精要
### 预训练语言模型及其在自然语言推理中的应用
在自然语言处理(NLP)领域,预训练语言模型(PLM)发挥着至关重要的作用。下面将介绍几种常见的预训练语言模型,并通过一个自然语言推理的案例来展示如何使用这些模型。
#### 其他预训练语言模型
##### ELMo
ELMo(Embeddings from Language Models)能够为广泛的NLP任务提供上下文相关的词嵌入,这些任务包括情感分析、命名实体识别和问答系统等。尽管Hugging Face的Transformers库中未实现ELMo,但可以借助AllenNLP较为轻松地使用它。不过,如今ELMo在研究和实际应用中已不常被使用,因为它早于BERT(以及Transformer架构的出现),并且现在有其他性能更优且广泛可用的PLM,如BERT。
##### XLNet
XLNet于2019年被提出,是BERT的重要继任者,常被视为目前最强大的PLM之一。它主要解决了BERT训练过程中的两个问题:
1. **训练 - 测试偏差问题**:BERT在预训练时采用掩码语言模型(MLM)目标,训练时需准确预测掩码标记,而预测时输入句子中并无掩码,这导致训练和测试阶段模型接触的信息存在差异,产生了训练 - 测试偏差。
2. **掩码独立性问题**:当输入中有多个[MASK]标记时,BERT会并行预测这些标记。虽然在某些情况下这种方法可行,但在一些复杂例子中,如 “The Statue of [MASK] in [MASK] [MASK]”,并行预测无法让模型学习到一些不合理的组合,因为这些预测是相互独立的。这涉及到自然语言的多模态性,即独立做出的最佳决策组合不一定能得到全局最优决策,这也是自然语言生成中的一大挑战。
为解决这些问题,XLNet采用随机顺序生成缺失标记的方式。例如,先生成 “New”,这能为后续的 “York” 和 “Liberty” 提供线索。而且,预测仍然基于之前生成的所有标记。XLNet已在Transformers库中实现,只需对代码进行少量修改即可使用。
##### RoBERTa
RoBERTa(Robustly Optimized BERT)是另一个在研究和工业界常用的重要PLM。它重新审视并修改了BERT的许多训练决策,使其在下游NLP任务中的表现与甚至超越了一些后BERT时代的PLM,如XLNet。截至2020年年中,RoBERTa是仅次于BERT被引用最多的PLM,在许多英文下游NLP任务中表现出强大的鲁棒性。
RoBERTa对BERT进行了多项改进:
1. **增加训练数据量**:RoBERTa的开发者收集了五个不同规模和领域的英文语料库,总文本量超过160GB,而BERT训练仅使用了16GB的数据。更多的训练数据使RoBERTa在微调后的下游任务中表现优于一些其他强大的PLM。
2. **去除下一句预测(NSP)目标**:RoBERTa的开发者发现NSP目标基本无用,因此去除了该目标,仅使用MLM目标进行训练,结果显示下游任务的性能保持不变或略有提升。
3. **调整其他训练参数**:还重新审视了批量大小和MLM的掩码方式。综合这些改进,RoBERTa在问答和阅读理解等下游任务中取得了最先进的成果。由于RoBERTa与BERT架构相同且都在Transformers库中实现,若应用已使用BERT,切换到RoBERTa非常容易。
类似地,跨语言语言模型XLM有其 “鲁棒优化” 版本XLM - R,它在100种语言上进行预训练,在许多跨语言NLP任务中表现出色。
##### DistilBERT
虽然BERT和RoBERTa等预训练模型功能强大,但计算成本高昂,无论是预训练、微调还是预测阶段。例如,BERT - base有1.1亿个参数,BERT - large有3.4亿个参数,几乎每个输入都要经过庞大的网络进行预测。在一些计算资源有限的环境中,如移动设备上进行实时文本分析,BERT并非理想选择。
为降低现代大型神经网络的计算需求,常采用知识蒸馏技术。该技术以一个大的预训练模型(教师模型)为基础,训练一个较小的模型(学生模型)来模仿教师模型的行为。学生模型使用掩码语言模型(MLM)损失以及教师和学生之间的交叉熵损失进行训练,以使其对预测标记的概率分布尽可能接近教师模型。
Hugging Face的研究人员开发了BERT的蒸馏版本DistilBERT,它的参数比BERT小40%,速度快60%,同时保留了BERT 97%的任务性能。使用DistilBERT时,只需将传递给AutoModel.from_pretrained()的BERT模型名称(如 “bert - base - cased”)替换为蒸馏版本(如 “distilbert - base - cased”),其余代码保持不变。
##### ALBERT
ALBERT(A Lite BERT)是另一个解决BERT计算复杂度问题的预训练语言模型。它没有采用知识蒸馏,而是对模型和训练过程进行了一些改变:
1. **分解词嵌入查找**:在大多数深度NLP模型中,词嵌入通常存储在一个大的查找表中,每个词对应一个词嵌入向量。对于基于Transformer的模型如BERT,输入的维度通常与隐藏状态的维度相同,如768维,这使得查找表变得非常大,占用大量内存和计算资源。ALBERT将词嵌入查找分解为两个阶段,先将词嵌入向量的输出维度缩小(如128维),再通过线性层将其扩展到所需的输入维度(如768维)。这样,ALBERT只需存储两个较小的查找表(V × 128和128 × 768),而不是一个大的查找表(V × 768)。
2. **参数共享**:Transformer模型使用一系列自注意力层来转换输入向量,每层的转换方式通常不同,这意味着模型需要为每层保留所有必要的参数,成本较高。ALBERT的各层共享同一组参数,即对输入重复应用相同的转换。这些参数经过调整,使得即使转换相同,也能有效地预测目标。
3. **采用句子顺序预测(SOP)目标**:ALBERT在预训练时采用句子顺序预测(SOP)目标,而非BERT采用的下一句预测(NSP)目标。一些研究发现NSP目标基本无用,而SOP任务要求模型预测两个连续文本片段的顺序,这有助于模型学习到语篇级别的连贯性。通过这些改进,ALBERT能够扩大训练规模,以更少的参数超越了BERT - large的性能。与DistilBERT类似,ALBERT的模型架构与BERT几乎相同,只需在调用AutoModel.from_pretrained()时提供模型名称(如 “albert - base - v1”)即可使用。
#### 自然语言推理案例研究
##### 什么是自然语言推理?
自然语言推理(NLI)是指确定一对句子之间逻辑关系的任务。给定一个前提句子和一个假设句子,需要判断假设是否能从前提中逻辑推导出来。以下是一些示例:
| 前提 | 假设 | 标签 |
| --- | --- | --
0
0
复制全文
相关推荐









