大语言模型 (LLM) 背景
🍹大语言模型 (Large Language Model) 是一种人工智能模型, 它们通常包含数千亿甚至更多的参数,并在大规模数据集上进行训练。大语言模型可以处理多种自然语言任务,如文本分类、问答、翻译、对话等等。
- 自然语言模型的发展经历了从概率模型到神经网络模型,再到大型语言模型的过程。在这个过程中,关键技术的发展推动了模型的演进和性能的提升。
- LLM通常建立在Transformer架构之上,这种架构使用了多头注意力机制,能够处理长距离的依赖关系。这些模型通过堆叠多个注意力层来提高其处理复杂语言任务的能力。
- 随着模型参数数量的增加,LLM展现出了小模型所不具备的特殊能力,如上下文学习能力和逐步推理能力。这些能力的涌现使得LLM在多项任务中取得了显著的效果提升。
- LLM的训练过程通常包括预训练和微调两个阶段。在预训练阶段,模型在大量无标签数据上学习语言的一般性规律;在微调阶段,模型通过有标签数据进行调优,以适应特定的下游任务。
- LLM的应用产生了深远的影响,例如ChatGPT等模型展现出了强大的人机对话能力和任务求解能力,这对整个AI研究社区产生了重大影响。
- 尽管LLM在多方面展现出了强大的能力,但同时也带来了一些风险和挑战,如生成不当内容、偏见放大等问题,这些都需要研究者在模型设计和训练过程中予以重视和解决。
🍹语言模型发展的三个阶段 :
- 第一阶段 :设计一系列的自监督训练目标(MLM、NSP等),设计新颖的模型架构(Transformer),遵循Pre-training和Fine-tuning范式。典型代表是BERT、GPT、XLNet等;
- 第二阶段 :逐步扩大模型参数和训练语料规模,探索不同类型的架构。典型代表是BART、T5、GPT-3等;
- 第三阶段 :走向AIGC(Artificial Intelligent Generated Content)时代,模型参数规模步入千万亿,模型架构为自回归架构,大模型走向对话式、生成式、多模态时代,更加注重与人类交互进行对齐,实现可靠、安全、无毒的模型。典型代表是InstructionGPT、ChatGPT、Bard、GPT-4等。
语言模型通俗理解:用来计算一个句子的概率的模型,也就是判断一句话是否是人话的概率 。
标准定义:对于某个句子序列, 如S = {W1, W2, W3, …, Wn}, 语言模型就是计算该序列发生的概率,如果给定的词序列符合语用习惯, 则给出高概率, 否则给出低概率。
🥂让我们通过一些具体的例子来理解语言模型如何计算句子的概率,并判断一句话是否符合自然语言的语用习惯。
假设有一个非常简单的语言模型,它基于词频来计算句子的概率。这个模型会统计每个单词在大量文本中出现的次数,然后用这些频率来估计概率。例如,如果单词 "the" 在训练集中出现了非常多次,那么 P(the) 就会很高。对于句子 "The quick brown fox jumps over the lazy dog," 模型会计算每个单词的概率,并将它们相乘得到整个句子的概率 P(S)。
P(S)=P(The)×P(quick)×P(brown)×…timesP(dog)
更复杂的语言模型,如n-gram模型,不仅考虑单个单词的频率,还考虑单词序列的频率。例如,一个bi-gram模型会考虑像 "quick brown" 这样的词对在文本中共同出现的频率。这样,它可以捕捉到一些单词之间的概率依赖关系,比如 "quick" 后面很可能会跟着 "brown"。
P(S)=P(The)×P(quick∣The)×P(brown∣quick)×…×P(dog)
现代语言模型,如基于Transformer的模型,使用深度学习来捕捉更加复杂的语言结构。这些模型可以处理长距离的依赖关系,并且能够根据上下文来预测下一个单词。例如,如果你输入了 "The cat is on the", 模型可能会预测下一个单词是 "mat",因为它学会了 "on the mat" 是一个常见的短语。
基于语言模型技术的发展,可以将语言模型分为四种类型:
- 基于规则和统计的语言模型
- 神经语言模型
- 预训练语言模型
- 大语言模型
- 基于规则和统计的语言模型:早期的语音识别系统多采用这种语言模型,它通过计算词序列出现的概率来评估句子的合理性。N-gram模型就是一种典型的基于统计的语言模型,它利用大量文本数据来计算单词序列出现的频率。
- 神经语言模型:随着深度学习的发展,神经语言模型(Neural Language Model, NLM)开始兴起。这类模型通常使用神经网络结构,如前馈神经网络(FeedForward Neural Network LM)、循环神经网络(RNN LM)等,能够捕捉到更为复杂的语言模式和上下文信息。
- 预训练语言模型:预训练语言模型(Pre-trained Language Model, PLM)是在大规模数据集上进行无监督预训练的模型,然后再针对特定任务进行微调。BERT(Bidirectional Encoder Representations from Transformers)就是一个著名的预训练语言模型,它通过预训练获得丰富的语义表示,适用于多种自然语言处理任务。
- 大语言模型:大规模语言模型(Large Language Model, LLM)通常拥有数十亿到数万亿个参数,能够处理各种自然语言处理任务,如自然语言生成、文本分类、文本摘要、机器翻译、语音识别等。这些模型基于深度学习技术,使用互联网上的海量文本数据进行训练,具有强大的语言理解和生成能力。
N-gram
N-gram是一种基于统计的语言模型算法,用于预测下一个词或字符出现的概率💡。
N-gram模型的核心思想是将文本分割成连续的n个词(或字符)的序列,这些序列被称为grams。然后,模型统计这些n-grams在文本中出现的频率,以此作为预测下一个词或字符出现概率的依据。这里的n是一个正整数,表示词组中词的个数。例如,在句子“我喜欢学习自然语言处理”中,1-gram(unigram)是单个词,如“我”、“喜欢”、“学习”等;2-gram(bigram)是两个连续的词,如“我喜欢”、“喜欢学习”等;而3-gram(trigram)则是三个连续的词,如“我喜欢学习”、“喜欢学习自然”等。为了解决参数空间过大问题,引入马尔科夫假设:随意一个词出现的概率只与它前面出现的有限的一个或者几个词有关。
- 如果一个词的出现与它周围的词是独立的,那么我们就称之为unigram也就是一元语言模型:P(S) = P(W_1)*P(W_2)*....*P(W_n)
- 如果一个词的出现仅依赖于它前面出现的一个词,那么我们就称之为bigram:P(S) = P(W_1)*P(W_2|W_1)*P(W_3|W_2)*...*P(W_n|W_{n-1})
- 如果一个词的出现仅依赖于它前面出现的两个词,那么我们就称之为trigram:P(S) = P(W_1)*P(W_2|W_1)*P(W_3|W_2,W_1)*...*P(W_n|W_{n-1},W_{n-2})
在实践中用的最多的就是bigram和trigram,接下来以bigram语言模型为例,理解其工作原理:
首先我们准备一个语料库(数据集),为了计算对应的二元模型的参数,即$P(W_i|W{i-1})$,我们要先计数即$C(W{i-1},W_i)$,然后计数 $C(W_{i-1})$ , 再用除法可得到概率。
根据给定的计数结果,我们可以计算bigram语言模型的参数。首先,我们需要将计数结果转换为概率形式,计算一个句子的概率 :
N-gram语言模型的特点:
- 优点:采用极大似然估计, 参数易训练; 完全包含了前n-1个词的全部信息; 可解释性强, 直观易理解。
- 缺点:缺乏长期以来,只能建模到前n-1个词; 随着n的增大,参数空间呈指数增长。数据稀疏,难免会出现OOV问题; 单纯的基于统计频次,泛化能力差。
神经网络语言模型
伴随着神经网络技术的发展,人们开始尝试使用神经网络来建立语言模型进而解决N-gram语言模型存在的问题。
- 模型的输入:$w{t-n+1}, …, w{t-2}, w_{t-1}$就是前n-1个词。现在需要根据这已知的n-1个词预测下一个词$w_t$。$C(w)$表示$w$所对应的词向量。
- 网络的第一层(输入层)是将$C(w{t-n+1}),…,C(w{t-2}), C(w_{t-1})$这n-1个向量首尾拼接起来形成一个$(n-1)*m$大小的向量,记作$x$。
- 网络的第二层(隐藏层)就如同普通的神经网络,直接使用一个全连接层, 通过全连接层后再使用$tanh$这个激活函数进行处理。
- 网络的第三层(输出层)一共有$V$个节点 ($V$ 代表语料的词汇),本质上这个输出层也是一个全连接层。每个输出节点$y_i$表示下一个词语为 $i$ 的未归一化log 概率。最后使用 softmax 激活函数将输出值$y$进行归一化。得到最大概率值,就是我们需要预测的结果。
基于Transformer的预训练语言模型
基于Transformer的预训练语言模型(T-PTLM)是自然语言处理领域的一大创新,它们通过在大量无标注文本数据上进行预训练来学习通用的语言表征,并能够将这些知识迁移到各种下游任务中,以下是一些重要的T-PTLM及其特点:
- GPT(Generative Pre-training Transformer):GPT是一种生成型预训练语言模型,它使用Transformer架构从大规模语料库中学习语言的内在结构和语义信息。GPT的核心思想是自回归建模,即通过逐词预测下一个词的方式来生成整个句子或文本。
- BERT(Bidirectional Encoder Representations from Transformers):BERT是一个双向的Transformer编码器,它通过预训练任务(如遮蔽语言模型和下一句预测)来捕捉文本中的上下文信息。BERT模型在多种NLP任务中取得了显著的性能提升。
- XLNet:XLNet是一种改进的自回归模型,它在GPT的基础上引入了Transformer-XL中的相对位置编码和段级重复机制,旨在克服GPT在长距离依赖学习和复制机制上的不足。
大语言模型
随着对预训练语言模型研究的开展,人们逐渐发现可能存在一种标度定律,随着预训练模型参数的指数级提升,其语言模型性能也会线性上升。2020年,OpenAI发布了参数量高达1750亿的GPT-3,首次展示了大语言模型的性能。
大语言模型的特点💡:
- 优点:具备了能与人类沟通聊天的能力,甚至具备了使用插件进行自动信息检索的能力。
- 缺点:参数量大,算力(进行模型训练和推理所需的计算能力)要求高、生成部分有害的、有偏见的内容等等。
语言模型的评估指标
BLEU
BLEU (Bilingual Evaluation Understudy) 是一种广泛使用的评估机器翻译系统输出质量的指标。它通过比较机器翻译的结果和一组参考翻译(通常由人工翻译或被认为是准确的翻译)来计算翻译的准确性。BLEU算法实际上就是在判断两个句子的相似程度.,BLEU 的分数取值范围是 0~1,分数越接近1,说明翻译的质量越高。
在实际应用中,通常会计算BLEU-1到BLEU-4的值,并对它们进行加权平均以得到一个综合的BLEU分数。这样做的原因是不同的n-gram级别能够捕捉翻译质量的不同方面:BLEU-1更侧重于词汇的准确性,而BLEU-2、BLEU-3和BLEU-4则能够更好地衡量句子的流畅性和结构一致性。
candidate: {it, is, a, nice, day, today}
reference: {today, is, a, nice, day}
☕️
其中{today, is, a, nice, day}匹配,所以匹配度为5/6
candidate: {it is, is a, a nice, nice day, day today}
reference: {today is, is a, a nice, nice day}
☕️
其中{is a, a nice, nice day}匹配,所以匹配度为3/5
candidate: {it is a, is a nice, a nice day, nice day today}
reference: {today is a, is a nice, a nice day}
☕️
其中{is a nice, a nice day}匹配,所以匹配度为2/4
candidate: the the the the
reference: The cat is standing on the ground
如果按照1-gram的方法进行匹配,则匹配度为1,显然是不合理的,所以计算某个词的出现次数进行改进。
ROUGE
ROUGE(Recall-Oriented Understudy for Gisting Evaluation)是一种评估自动文本摘要或机器翻译输出质量的指标,它通过比较生成的摘要与一组参考摘要(通常由人工创建)之间的相似度来衡量。与BLEU类似,ROUGE也使用n-gram的概念,但它们的计算方式和侧重点有所不同。
ROUGE指标通常报告为召回率,因为它更关注生成摘要中包含多少参考摘要的信息,而BLEU则更注重精确率,即生成摘要的准确性。
ROUGE分为四种方法:ROUGE-N, ROUGE-L, ROUGE-W, ROUGE-S。
- ROUGE-N (ROUGE-n): 计算生成摘要中n-gram(连续的n个单词)在参考摘要中出现的频率。ROUGE-N通常用于计算Unigram(N=1),Bigram(N=2)和Trigram(N=3)。
- ROUGE-L (ROUGE-L): 基于最长公共子序列(Longest Common Subsequence, LCS)的方法,计算生成摘要与参考摘要之间的LCS长度与参考摘要长度的比例。
- ROUGE-W (ROUGE-W): 基于最长公共子串(Longest Common Substring, LCS)的方法,计算生成摘要与参考摘要之间的LCS数量与参考摘要中的单词总数之比。
- ROUGE-S (ROUGE-S): 基于序列的匹配,允许间隔性的词匹配,而不是连续的n-gram匹配。
困惑度PPL
困惑度(Perplexity)是衡量概率模型预测样本的好坏程度的一种指标。在自然语言处理中,它常用于评估语言模型的性能。困惑度越低,表示模型的预测能力越好。
PPL=exp(−fraclog(P(X))N),其中,P(X) 是模型对整个数据集的概率分布的连乘积,N 是数据集中的总词数。困惑度能够衡量语言模型对文本的生成能力,即模型预测单词序列的概率分布的准确性~