目录

预训练核心技术:掩码语言建模(MLM)与因果语言建模(CLM)

1. 什么是语言建模?

语言建模的分类:

2. 掩码语言建模(MLM)

2.1 原理

2.2 代码示例(BERT)

3. 因果语言建模(CLM)

3.1 原理

3.2 代码示例(GPT)

4. MLM与CLM的对比

5. 选择哪种模型?

6. 总结


近年来,基于Transformer的语言模型,如BERT和GPT,在自然语言处理(NLP)领域取得了令人瞩目的成果。这些模型的核心技术便是语言建模(Language Modeling),它们通过不同的训练目标来学习语言的规律。掩码语言建模(MLM)和因果语言建模(CLM)是其中两种重要的预训练目标。本文将深入讲解这两种技术的原理,并通过代码实践对比它们的区别。

1. 什么是语言建模?

语言建模的目标是通过给定文本的部分内容,预测缺失的部分或生成下一个词。它是自然语言处理任务中的基础,许多高级任务(如机器翻译、问答系统等)都可以从一个良好的语言模型开始。

语言建模的分类:

  • 自回归语言建模(Causal Language Modeling, CLM):该方法生成每个词时,只依赖于该词之前的内容,模型是顺序的。
  • 掩码语言建模(Masked Language Modeling, MLM):该方法通过随机掩码(遮蔽)输入句子中的一些词,训练模型去预测这些被掩码的词。

接下来,我们将深入对比这两种建模方法的原理,并通过代码实践来展示它们的实现。


2. 掩码语言建模(MLM)

掩码语言建模(MLM)首先通过掩盖输入句子中的一些词(即将词替换成[MASK]符号),然后要求模型预测这些被掩码的词。这一目标的核心在于通过上下文信息推断被掩码的词。

2.1 原理

  • 在训练时,输入句子中的一部分词会被随机掩码,模型的任务是根据上下文预测这些被掩码的词。
  • 掩码语言建模并不要求预测词的顺序,它可以在任意位置进行掩码。

公式:对于输入句子S = w_1, w_2, ..., w_n,其中一部分词被掩码,目标是训练模型预测掩码部分的词w_i,即:

2.2 代码示例(BERT)

在BERT模型中,输入文本的部分词会被随机替换为[MASK],模型的任务是基于上下文预测这些词。以下是一个简化的BERT模型掩码语言建模代码示例:

import torch
from transformers import BertTokenizer, BertForMaskedLM

# 初始化BERT模型和tokenizer
tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')
model = BertForMaskedLM.from_pretrained('bert-base-uncased')

# 输入文本
text = "The quick brown fox jumps over the lazy dog."

# 将文本转为token
inputs = tokenizer(text, return_tensors="pt")
input_ids = inputs["input_ids"]

# 掩码一些token
masked_index = 4  # 假设我们将“brown”替换为[MASK]
input_ids[0, masked_index] = tokenizer.mask_token_id

# 输入到BERT模型中,进行预测
outputs = model(input_ids)
logits = outputs.logits

# 获取[MASK]位置的预测词
mask_token_logits = logits[0, masked_index]
predicted_token_id = torch.argmax(mask_token_logits)
predicted_token = tokenizer.decode(predicted_token_id)

print(f"原文: {text}")
print(f"预测词: {predicted_token}")

在这个示例中,我们将文本中的“brown”词替换为[MASK],然后使用BERT模型来预测被掩码的词。


3. 因果语言建模(CLM)

因果语言建模(CLM),也叫自回归语言建模,是指在生成文本时,模型基于前文的上下文来预测当前词的概率。它不同于MLM,CLM模型通过当前和之前的词生成下一个词,这使得生成过程是有顺序的。

3.1 原理

  • 在训练时,模型通过左到右的顺序来生成文本。对于每个位置,模型只考虑该位置之前的词来预测下一个词。
  • 因为是顺序生成,所以CLM模型是自回归的。

公式:对于输入句子S = w_1, w_2, ..., w_n,模型的任务是逐步生成下一个词,目标是训练模型根据前文生成当前词:

P(wi+1∣w1,w2,...,wi)P(wi+1​∣w1​,w2​,...,wi​)

3.2 代码示例(GPT)

GPT模型是典型的因果语言模型,它的输入是一个序列,模型根据该序列逐步预测下一个词。以下是一个简化的GPT模型因果语言建模代码示例:

import torch
from transformers import GPT2Tokenizer, GPT2LMHeadModel

# 初始化GPT模型和tokenizer
tokenizer = GPT2Tokenizer.from_pretrained('gpt2')
model = GPT2LMHeadModel.from_pretrained('gpt2')

# 输入文本
text = "The quick brown fox"

# 将文本转为token
inputs = tokenizer(text, return_tensors="pt")

# 输入到GPT模型中,进行预测
outputs = model(**inputs, labels=inputs["input_ids"])

# 获取下一个词的预测
logits = outputs.logits
predicted_token_id = torch.argmax(logits[0, -1, :])  # 预测最后一个词
predicted_token = tokenizer.decode(predicted_token_id)

print(f"原文: {text}")
print(f"预测下一个词: {predicted_token}")

在这个示例中,GPT模型会基于“quick brown fox”生成下一个词。


4. MLM与CLM的对比

为了帮助大家更好地理解掩码语言建模(MLM)与因果语言建模(CLM)的异同,我们可以通过以下表格进行对比。

特性 掩码语言建模(MLM) 因果语言建模(CLM)
训练目标 预测掩码位置的词 预测下一个词
上下文依赖 使用全局上下文(左右上下文) 仅使用左侧上下文(前文)
模型结构 BERT(双向编码) GPT(单向编码)
输入数据 输入中随机掩码一些词 输入为一个完整的句子或片段
适用任务 主要用于文本分类、填空等任务 主要用于文本生成、对话生成等任务
训练方式 随机掩码词并进行预测 自回归预测下一个词
模型训练顺序 无顺序约束,可以同时考虑前后文 有顺序约束,只能考虑前面的词

5. 选择哪种模型?

  • BERT(MLM):适用于需要理解上下文关系、做分类、填空的任务,如情感分析、问答等。BERT模型由于其双向训练的特性,能够更好地捕捉上下文信息。
  • GPT(CLM):适用于文本生成任务,如对话生成、文章写作等。GPT模型的自回归特性使其能生成流畅的文本内容,广泛应用于生成式任务。

6. 总结

掩码语言建模(MLM)和因果语言建模(CLM)是两种不同的预训练目标,它们在训练方式和应用场景上有所不同。MLM注重上下文的双向理解,主要应用于理解性任务,而CLM通过顺序预测来生成文本,广泛应用于生成任务。在选择模型时,需要根据任务的需求选择合适的训练目标。

希望本文能帮助您更好地理解这两种预训练技术,并能够根据实际需求在应用中做出合理的选择。如果有任何问题,欢迎留言讨论!


推荐阅读:

手把手搭建你的第一个大模型:基于HuggingFace的模型微调-CSDN博客

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐