【人工智能之大模型】大语言模型LLM中的因果语言建模和掩码语言建模有什么区别?

【人工智能之大模型】大语言模型LLM中的因果语言建模和掩码语言建模有什么区别?



欢迎宝子们点赞、关注、收藏!欢迎宝子们批评指正!
祝所有的硕博生都能遇到好的导师!好的审稿人!好的同门!顺利毕业!

大多数高校硕博生毕业要求需要参加学术会议,发表EI或者SCI检索的学术论文会议论文。详细信息可关注VX “学术会议小灵通”或参考学术信息专栏:https://blog.csdn.net/gaoxiaoxiao1209/article/details/146181864


前言

在大型语言模型(LLM)的训练中,主要采用两种语言建模方法:因果语言建模(Causal Language Modeling,CLM)和掩码语言建模(Masked Language Modeling,MLM)。这两种方法在训练目标和模型架构上存在显著差异。

因果语言建模(CLM):

CLM的目标是根据已知的上下文预测下一个词语,即最大化序列中每个词在其前序词条件下的概率。这种方法通常用于自回归模型,如GPT系列。模型从左到右依次生成词语,每一步仅依赖于之前生成的词语

以下是一个简单的CLM示例,使用PyTorch实现:

import torch
import torch.nn as nn

# 定义一个简单的自回归模型
class CLMModel(nn.Module):
    def __init__(self, vocab_size, embed_size, hidden_size):
        super(CLMModel, self).__init__()
        self.embedding = nn.Embedding(vocab_size, embed_size)
        self.rnn = nn.RNN(embed_size, hidden_size, batch_first=True)
        self.fc = nn.Linear(hidden_size, vocab_size)
    
    def forward(self, x, hidden):
        x = self.embedding(x)
        output, hidden = self.rnn(x, hidden)
        logits = self.fc(output)
        return logits, hidden

# 假设vocab_size=100,embed_size=50,hidden_size=50
model = CLMModel(100, 50, 50)
input_seq = torch.randint(0, 100, (1, 10))  # 随机生成一个长度为10的序列
hidden = torch.zeros(1, 1, 50)  # 初始化隐藏状态
logits, hidden = model(input_seq, hidden)

  • 在上述代码中,模型根据输入序列的前n个词预测第n+1个词的概率分布。在训练过程中,为防止模型看到未来的信息,通常会使用一个上三角的掩码矩阵来屏蔽未来的词语

掩码语言建模(MLM):

MLM的目标是预测序列中被随机掩码的词语,即模型需要根据上下文恢复被掩码的词语。这种方法通常用于双向编码器模型,如BERT。模型可以同时利用词语的前后文信息来进行预测

以下是一个简单的MLM示例,使用PyTorch实现:

import torch
import torch.nn as nn

# 定义一个简单的双向编码器模型
class MLMModel(nn.Module):
    def __init__(self, vocab_size, embed_size, hidden_size):
        super(MLMModel, self).__init__()
        self.embedding = nn.Embedding(vocab_size, embed_size)
        self.rnn = nn.RNN(embed_size, hidden_size, batch_first=True, bidirectional=True)
        self.fc = nn.Linear(hidden_size * 2, vocab_size)
    
    def forward(self, x):
        x = self.embedding(x)
        output, _ = self.rnn(x)
        logits = self.fc(output)
        return logits

# 假设vocab_size=100,embed_size=50,hidden_size=50
model = MLMModel(100, 50, 50)
input_seq = torch.randint(0, 100, (1, 10))  # 随机生成一个长度为10的序列
logits = model(input_seq)

  • 在上述代码中,模型接收完整的输入序列,并尝试预测每个位置的词语。在训练过程中,输入序列中的部分词语会被随机替换为特殊的掩码标记(如[MASK]),模型需要根据上下文预测这些被掩码的词语

总结:

  • CLM:模型从左到右生成词语,每个词仅依赖于之前的词语,适用于自回归生成任务。
  • MLM:模型利用序列的全局上下文信息预测被掩码的词语,适用于需要理解全局语义的任务。

这两种语言建模方法各有优势,选择使用哪种方法取决于具体的应用场景和任务需求。


欢迎宝子们点赞、关注、收藏!欢迎宝子们批评指正!
祝所有的硕博生都能遇到好的导师!好的审稿人!好的同门!顺利毕业!

大多数高校硕博生毕业要求需要参加学术会议,发表EI或者SCI检索的学术论文会议论文。详细信息可关注VX “学术会议小灵通”或参考学术信息专栏:https://blog.csdn.net/gaoxiaoxiao1209/article/details/146181864

Logo

一站式 AI 云服务平台

更多推荐